kompose/client/convert_test.go
2023-09-21 22:03:51 +02:00

172 lines
4.5 KiB
Go

package client
import (
"fmt"
v1 "k8s.io/api/core/v1"
"sort"
"testing"
"gotest.tools/v3/assert"
is "gotest.tools/v3/assert/cmp"
appsv1 "k8s.io/api/apps/v1"
)
func TestConvertError(t *testing.T) {
randomBuildValue := "random-build"
randomVolumeTypeValue := "random-volume-type"
randomKubernetesControllerValue := "random-controller"
randomKubernetesServiceGroupModeValue := "random-group-mode"
buildConfigValue := string(BUILD_CONFIG)
testCases := []struct {
options ConvertOptions
errorMessage string
}{
{
options: ConvertOptions{
Build: &randomBuildValue,
},
errorMessage: fmt.Sprintf("unexpected Value for Build field. Possible values are: %v, %v, and %v", string(LOCAL), string(BUILD_CONFIG), string(NONE)),
},
{
options: ConvertOptions{
VolumeType: &randomVolumeTypeValue,
},
errorMessage: fmt.Sprintf("unexpected Value for VolumeType field. Possible values are: %v, %v, %v, %v", string(PVC), string(EMPTYDIR), string(HOSTPATH), string(CONFIGMAP)),
},
{
options: ConvertOptions{
Provider: Kubernetes{
Controller: &randomKubernetesControllerValue,
},
},
errorMessage: fmt.Sprintf("unexpected Value for Kubernetes Controller field. Possible values are: %v, %v, and %v", string(DEPLOYMENT), string(DAEMONSET), string(REPLICATION_CONTROLLER)),
},
{
options: ConvertOptions{
Provider: Kubernetes{
ServiceGroupMode: &randomKubernetesServiceGroupModeValue,
},
},
errorMessage: fmt.Sprintf("unexpected Value for Kubernetes Service Groupe Mode field. Possible values are: %v, %v, ''", string(LABEL), string(VOLUME)),
},
{
options: ConvertOptions{
Provider: Kubernetes{},
Build: &buildConfigValue,
},
errorMessage: fmt.Sprintf("the build value %v is only supported for Openshift provider", string(BUILD_CONFIG)),
},
}
client, err := NewClient()
assert.Check(t, is.Equal(err, nil))
for _, tc := range testCases {
_, err := client.Convert(tc.options)
assert.Check(t, is.Equal(err.Error(), tc.errorMessage))
}
}
func TestConvertWithDefaultOptions(t *testing.T) {
client, err := NewClient(WithErrorOnWarning())
assert.Check(t, is.Equal(err, nil))
objects, err := client.Convert(ConvertOptions{
ToStdout: true,
InputFiles: []string{
"./testdata/docker-compose.yaml",
},
})
assert.Check(t, is.Equal(err, nil))
for _, object := range objects {
if deployment, ok := object.(*appsv1.Deployment); ok {
assert.Check(t, is.Equal(int(*deployment.Spec.Replicas), 1))
}
}
}
func TestConvertWithProfiles(t *testing.T) {
client, err := NewClient(WithErrorOnWarning())
assert.Check(t, is.Equal(err, nil))
type Want struct {
deploymentsNames []string
servicesNames []string
}
tests := []struct {
name string
options ConvertOptions
want Want
}{
{
name: "No profiles provided",
options: ConvertOptions{
ToStdout: true,
InputFiles: []string{
"./testdata/docker-compose-profiles.yaml",
},
},
want: Want{
deploymentsNames: nil,
servicesNames: nil,
},
},
{
name: "All profiles provided",
options: ConvertOptions{
ToStdout: true,
InputFiles: []string{
"./testdata/docker-compose-profiles.yaml",
},
Profiles: []string{"hello", "world"},
},
want: Want{
deploymentsNames: []string{"backend", "frontend", "database"},
servicesNames: []string{"backend", "frontend", "database"},
},
},
{
name: "All profiles provided",
options: ConvertOptions{
ToStdout: true,
InputFiles: []string{
"./testdata/docker-compose-profiles.yaml",
},
Profiles: []string{"hello"},
},
want: Want{
deploymentsNames: []string{"backend", "frontend"},
servicesNames: []string{"backend", "frontend"},
},
},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
objects, err := client.Convert(tt.options)
assert.Check(t, is.Equal(err, nil))
sort.Strings(tt.want.deploymentsNames)
sort.Strings(tt.want.servicesNames)
var deploymentsNames []string
var servicesNames []string
for _, object := range objects {
if deployment, ok := object.(*appsv1.Deployment); ok {
deploymentsNames = append(deploymentsNames, deployment.Name)
}
if service, ok := object.(*v1.Service); ok {
servicesNames = append(servicesNames, service.Name)
}
}
sort.Strings(deploymentsNames)
sort.Strings(servicesNames)
assert.Check(t, is.DeepEqual(deploymentsNames, tt.want.deploymentsNames))
assert.Check(t, is.DeepEqual(servicesNames, tt.want.servicesNames))
})
}
}