diff --git a/assets/auto-deploy-app/test/template_test.go b/assets/auto-deploy-app/test/template_test.go index 321b864586e3b033de23c02006fb317b41b3794b..a51038a3c6cd9261de340c98f5f9f64c351db80b 100644 --- a/assets/auto-deploy-app/test/template_test.go +++ b/assets/auto-deploy-app/test/template_test.go @@ -13,6 +13,7 @@ import ( extensions "k8s.io/api/extensions/v1beta1" netV1 "k8s.io/api/networking/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/intstr" ) const ( @@ -178,6 +179,46 @@ func TestDeploymentTemplate(t *testing.T) { }) } + // deployment livenessProbe, and readinessProbe tests + for _, tc := range []struct { + CaseName string + Release string + Values map[string]string + + ExpectedLivenessProbe *coreV1.Probe + ExpectedReadinessProbe *coreV1.Probe + }{ + { + CaseName: "defaults", + ExpectedLivenessProbe: defaultLivenessProbe(), + ExpectedReadinessProbe: defaultReadinessProbe(), + }, + } { + 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.ExpectedLivenessProbe, deployment.Spec.Template.Spec.Containers[0].LivenessProbe) + require.Equal(t, tc.ExpectedReadinessProbe, deployment.Spec.Template.Spec.Containers[0].ReadinessProbe) + }) + } + for _, tc := range []struct { CaseName string Release string @@ -533,6 +574,72 @@ func TestWorkerDeploymentTemplate(t *testing.T) { } }) } + + // worker livenessProbe, and readinessProbe tests + for _, tc := range []struct { + CaseName string + Values map[string]string + Release string + + ExpectedDeployments []workerDeploymentTestCase + }{ + { + CaseName: "default liveness and readiness values", + Release: "production", + Values: map[string]string{ + "workers.worker1.command[0]": "echo", + "workers.worker1.command[1]": "worker1", + "workers.worker2.command[0]": "echo", + "workers.worker2.command[1]": "worker2", + }, + ExpectedDeployments: []workerDeploymentTestCase{ + { + ExpectedName: "production-worker1", + ExpectedCmd: []string{"echo", "worker1"}, + ExpectedLivenessProbe: defaultLivenessProbe(), + ExpectedReadinessProbe: defaultReadinessProbe(), + }, + { + ExpectedName: "production-worker2", + ExpectedCmd: []string{"echo", "worker2"}, + ExpectedLivenessProbe: defaultLivenessProbe(), + ExpectedReadinessProbe: defaultReadinessProbe(), + }, + }, + }, + } { + 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/worker-deployment.yaml"}) + + var deployments deploymentAppsV1List + helm.UnmarshalK8SYaml(t, output, &deployments) + + require.Len(t, deployments.Items, len(tc.ExpectedDeployments)) + + for i, expectedDeployment := range tc.ExpectedDeployments { + deployment := deployments.Items[i] + require.Equal(t, expectedDeployment.ExpectedName, deployment.Name) + require.Len(t, deployment.Spec.Template.Spec.Containers, 1) + require.Equal(t, expectedDeployment.ExpectedCmd, deployment.Spec.Template.Spec.Containers[0].Command) + require.Equal(t, expectedDeployment.ExpectedLivenessProbe, deployment.Spec.Template.Spec.Containers[0].LivenessProbe) + require.Equal(t, expectedDeployment.ExpectedReadinessProbe, deployment.Spec.Template.Spec.Containers[0].ReadinessProbe) + } + }) + } } func TestNetworkPolicyDeployment(t *testing.T) { @@ -813,10 +920,12 @@ func TestServiceTemplate_Disable(t *testing.T) { } type workerDeploymentTestCase struct { - ExpectedName string - ExpectedCmd []string - ExpectedStrategyType extensions.DeploymentStrategyType - ExpectedSelector *metav1.LabelSelector + ExpectedName string + ExpectedCmd []string + ExpectedStrategyType extensions.DeploymentStrategyType + ExpectedSelector *metav1.LabelSelector + ExpectedLivenessProbe *coreV1.Probe + ExpectedReadinessProbe *coreV1.Probe } type workerDeploymentAppsV1TestCase struct { @@ -843,3 +952,31 @@ func mergeStringMap(dst, src map[string]string) { dst[k] = v } } + +func defaultLivenessProbe() *coreV1.Probe { + return &coreV1.Probe{ + Handler: coreV1.Handler{ + HTTPGet: &coreV1.HTTPGetAction{ + Path: "/", + Port: intstr.FromInt(5000), + Scheme: coreV1.URISchemeHTTP, + }, + }, + InitialDelaySeconds: 15, + TimeoutSeconds: 15, + } +} + +func defaultReadinessProbe() *coreV1.Probe { + return &coreV1.Probe{ + Handler: coreV1.Handler{ + HTTPGet: &coreV1.HTTPGetAction{ + Path: "/", + Port: intstr.FromInt(5000), + Scheme: coreV1.URISchemeHTTP, + }, + }, + InitialDelaySeconds: 5, + TimeoutSeconds: 3, + } +}