2020-06-18 16:13:24 +02:00
/ *
Copyright 2020 Docker , Inc .
Licensed under the Apache License , Version 2.0 ( the "License" ) ;
you may not use this file except in compliance with the License .
You may obtain a copy of the License at
http : //www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing , software
distributed under the License is distributed on an "AS IS" BASIS ,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
See the License for the specific language governing permissions and
limitations under the License .
* /
2020-07-29 15:12:45 +02:00
package aci
2020-05-06 17:14:53 +02:00
import (
2020-07-03 10:03:46 +02:00
"context"
2020-05-06 17:14:53 +02:00
"testing"
2020-08-10 16:38:59 +02:00
"github.com/stretchr/testify/mock"
2020-07-31 15:57:00 +02:00
"gotest.tools/v3/assert"
2020-08-10 16:38:59 +02:00
2020-08-21 17:24:53 +02:00
"github.com/docker/compose-cli/containers"
2020-05-06 17:14:53 +02:00
)
2020-07-31 15:57:00 +02:00
func TestGetContainerName ( t * testing . T ) {
2020-05-18 14:56:32 +02:00
group , container := getGroupAndContainerName ( "docker1234" )
2020-07-31 15:57:00 +02:00
assert . Equal ( t , group , "docker1234" )
assert . Equal ( t , container , "docker1234" )
2020-05-06 17:14:53 +02:00
2020-05-18 14:56:32 +02:00
group , container = getGroupAndContainerName ( "compose_service1" )
2020-07-31 15:57:00 +02:00
assert . Equal ( t , group , "compose" )
assert . Equal ( t , container , "service1" )
2020-05-06 17:14:53 +02:00
2020-05-18 14:56:32 +02:00
group , container = getGroupAndContainerName ( "compose_stack_service1" )
2020-07-31 15:57:00 +02:00
assert . Equal ( t , group , "compose_stack" )
assert . Equal ( t , container , "service1" )
2020-05-06 17:14:53 +02:00
}
2020-05-28 17:37:59 +02:00
2020-07-31 15:57:00 +02:00
func TestErrorMessageDeletingContainerFromComposeApplication ( t * testing . T ) {
2020-07-03 10:03:46 +02:00
service := aciContainerService { }
2020-08-11 15:46:29 +02:00
err := service . Delete ( context . TODO ( ) , "compose-app_service1" , containers . DeleteRequest { Force : false } )
2020-07-31 15:57:00 +02:00
assert . Error ( t , err , "cannot delete service \"service1\" from compose application \"compose-app\", you can delete the entire compose app with docker compose down --project-name compose-app" )
2020-07-03 10:03:46 +02:00
}
2020-07-31 15:57:00 +02:00
func TestErrorMessageRunSingleContainerNameWithComposeSeparator ( t * testing . T ) {
2020-07-03 10:53:50 +02:00
service := aciContainerService { }
err := service . Run ( context . TODO ( ) , containers . ContainerConfig { ID : "container_name" } )
2020-07-31 15:57:00 +02:00
assert . Error ( t , err , "invalid container name. ACI container name cannot include \"_\"" )
2020-07-03 10:53:50 +02:00
}
2020-07-31 15:57:00 +02:00
func TestVerifyCommand ( t * testing . T ) {
2020-07-06 03:29:48 +02:00
err := verifyExecCommand ( "command" ) // Command without an argument
2020-07-31 15:57:00 +02:00
assert . NilError ( t , err )
2020-07-06 03:29:48 +02:00
err = verifyExecCommand ( "command argument" ) // Command with argument
2020-07-31 15:57:00 +02:00
assert . Error ( t , err , "ACI exec command does not accept arguments to the command. " +
"Only the binary should be specified" )
2020-05-28 17:37:59 +02:00
}
2020-08-10 16:38:59 +02:00
func TestLoginParamsValidate ( t * testing . T ) {
err := LoginParams {
ClientID : "someID" ,
} . Validate ( )
assert . Error ( t , err , "for Service Principal login, 3 options must be specified: --client-id, --client-secret and --tenant-id" )
err = LoginParams {
ClientSecret : "someSecret" ,
} . Validate ( )
assert . Error ( t , err , "for Service Principal login, 3 options must be specified: --client-id, --client-secret and --tenant-id" )
err = LoginParams { } . Validate ( )
assert . NilError ( t , err )
err = LoginParams {
TenantID : "tenant" ,
} . Validate ( )
assert . NilError ( t , err )
}
func TestLoginServicePrincipal ( t * testing . T ) {
loginService := mockLoginService { }
loginService . On ( "LoginServicePrincipal" , "someID" , "secret" , "tenant" ) . Return ( nil )
loginBackend := aciCloudService {
loginService : & loginService ,
}
err := loginBackend . Login ( context . Background ( ) , LoginParams {
ClientID : "someID" ,
ClientSecret : "secret" ,
TenantID : "tenant" ,
} )
assert . NilError ( t , err )
}
func TestLoginWithTenant ( t * testing . T ) {
loginService := mockLoginService { }
ctx := context . Background ( )
loginService . On ( "Login" , ctx , "tenant" ) . Return ( nil )
loginBackend := aciCloudService {
loginService : & loginService ,
}
err := loginBackend . Login ( ctx , LoginParams {
TenantID : "tenant" ,
} )
assert . NilError ( t , err )
}
func TestLoginWithoutTenant ( t * testing . T ) {
loginService := mockLoginService { }
ctx := context . Background ( )
loginService . On ( "Login" , ctx , "" ) . Return ( nil )
loginBackend := aciCloudService {
loginService : & loginService ,
}
err := loginBackend . Login ( ctx , LoginParams { } )
assert . NilError ( t , err )
}
type mockLoginService struct {
mock . Mock
}
func ( s * mockLoginService ) Login ( ctx context . Context , requestedTenantID string ) error {
args := s . Called ( ctx , requestedTenantID )
return args . Error ( 0 )
}
func ( s * mockLoginService ) LoginServicePrincipal ( clientID string , clientSecret string , tenantID string ) error {
args := s . Called ( clientID , clientSecret , tenantID )
return args . Error ( 0 )
}
func ( s * mockLoginService ) Logout ( ctx context . Context ) error {
args := s . Called ( ctx )
return args . Error ( 0 )
}