diff --git a/assets/auto-deploy-app/test/templates/cronjob_test.go b/assets/auto-deploy-app/test/templates/cronjob_test.go index 389bba2e70e34ebce6e1e151f4064afac3f9f6f4..a9517a6e95726278f5cd0f2fda996bc2aaca75ea 100644 --- a/assets/auto-deploy-app/test/templates/cronjob_test.go +++ b/assets/auto-deploy-app/test/templates/cronjob_test.go @@ -11,6 +11,7 @@ import ( "github.com/stretchr/testify/require" batchV1beta1 "k8s.io/api/batch/v1beta1" coreV1 "k8s.io/api/core/v1" + "k8s.io/apimachinery/pkg/api/resource" ) func TestCronjobMeta(t *testing.T) { @@ -519,6 +520,84 @@ func TestCronjobTolerations(t *testing.T) { } } +func TestCronjobResources(t *testing.T) { + for _, tc := range []struct { + CaseName string + Values map[string]string + Release string + + EoxpectedNodeSelector map[string]string + ExpectedResources coreV1.ResourceRequirements + }{ + { + CaseName: "default", + Release: "production", + Values: map[string]string{ + "cronjobs.job1.command[0]": "echo", + "cronjobs.job1.args[0]": "hello", + }, + + ExpectedResources: coreV1.ResourceRequirements{ + Limits: coreV1.ResourceList(nil), + Requests: coreV1.ResourceList{}, + }, + }, + { + CaseName: "added resources", + Release: "production", + Values: map[string]string{ + "cronjobs.job1.command[0]": "echo", + "cronjobs.job1.args[0]": "hello", + "resources.limits.cpu": "500m", + "resources.limits.memory": "4Gi", + "resources.requests.cpu": "200m", + "resources.requests.memory": "2Gi", + }, + + ExpectedResources: coreV1.ResourceRequirements{ + Limits: coreV1.ResourceList{ + "cpu": resource.MustParse("500m"), + "memory": resource.MustParse("4Gi"),}, + Requests: coreV1.ResourceList{ + "cpu": resource.MustParse("200m"), + "memory": resource.MustParse("2Gi"), + }, + }, + }, + } { + t.Run(tc.CaseName, func(t *testing.T) { + namespaceName := "minimal-ruby-app-" + strings.ToLower(random.UniqueId()) + + values := map[string]string{ + "gitlab.app": "auto-devops-examples/minimal-ruby-app", + "gitlab.env": "prod", + } + + mergeStringMap(values, tc.Values) + + options := &helm.Options{ + ValuesFiles: []string{}, + SetValues: values, + KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName), + } + + output, err := helm.RenderTemplateE(t, options, helmChartPath, tc.Release, []string{"templates/cronjob.yaml"}) + + if err != nil { + t.Error(err) + return + } + + var cronjobs batchV1beta1.CronJobList + helm.UnmarshalK8SYaml(t, output, &cronjobs) + + for _, cronjob := range cronjobs.Items { + require.Equal(t, tc.ExpectedResources, cronjob.Spec.JobTemplate.Spec.Template.Spec.Containers[0].Resources ) + } + }) + } +} + func TestCronjobTemplateWithVolumeMounts(t *testing.T) { releaseName := "cronjob-with-volume-mounts-test" templates := []string{"templates/cronjob.yaml"} diff --git a/assets/auto-deploy-app/test/templates/deployment_test.go b/assets/auto-deploy-app/test/templates/deployment_test.go index d807ce00e8ad9ba803f377887fb7bcb2a7538b04..1ccdf2a9c1c0332f572e4b4348f58aae89bbc06b 100644 --- a/assets/auto-deploy-app/test/templates/deployment_test.go +++ b/assets/auto-deploy-app/test/templates/deployment_test.go @@ -13,6 +13,7 @@ import ( coreV1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/util/intstr" + "k8s.io/apimachinery/pkg/api/resource" ) func TestDeploymentTemplate(t *testing.T) { @@ -892,6 +893,70 @@ func TestDeploymentTemplate(t *testing.T) { }) } + // resources + for _, tc := range []struct { + CaseName string + Values map[string]string + Release string + + EoxpectedNodeSelector map[string]string + ExpectedResources coreV1.ResourceRequirements + }{ + { + CaseName: "default", + Release: "production", + Values: map[string]string{}, + + ExpectedResources: coreV1.ResourceRequirements{ + Limits: coreV1.ResourceList(nil), + Requests: coreV1.ResourceList{}, + }, + }, + { + CaseName: "added resources", + Release: "production", + Values: map[string]string{ + "resources.limits.cpu": "500m", + "resources.limits.memory": "4Gi", + "resources.requests.cpu": "200m", + "resources.requests.memory": "2Gi", + }, + + ExpectedResources: coreV1.ResourceRequirements{ + Limits: coreV1.ResourceList{ + "cpu": resource.MustParse("500m"), + "memory": resource.MustParse("4Gi"),}, + Requests: coreV1.ResourceList{ + "cpu": resource.MustParse("200m"), + "memory": resource.MustParse("2Gi"), + }, + }, + }, + } { + t.Run(tc.CaseName, func(t *testing.T) { + namespaceName := "minimal-ruby-app-" + strings.ToLower(random.UniqueId()) + + values := map[string]string{ + "gitlab.app": "auto-devops-examples/minimal-ruby-app", + "gitlab.env": "prod", + } + + mergeStringMap(values, tc.Values) + + options := &helm.Options{ + SetValues: values, + KubectlOptions: k8s.NewKubectlOptions("", "", namespaceName), + } + + output := helm.RenderTemplate(t, options, helmChartPath, tc.Release, []string{"templates/deployment.yaml"}) + + var deployment appsV1.Deployment + helm.UnmarshalK8SYaml(t, output, &deployment) + + require.Equal(t, tc.ExpectedResources, deployment.Spec.Template.Spec.Containers[0].Resources ) + }) + } + // Test Deployment selector for _, tc := range []struct { CaseName string