|
| 1 | +package k8s |
| 2 | + |
| 3 | +import ( |
| 4 | + "github.com/stretchr/testify/assert" |
| 5 | + corev1 "k8s.io/api/core/v1" |
| 6 | + "k8s.io/apimachinery/pkg/api/resource" |
| 7 | + "testing" |
| 8 | +) |
| 9 | + |
| 10 | +func TestInitContainer(t *testing.T) { |
| 11 | + componentName := "example-component" |
| 12 | + image := "example-image:latest" |
| 13 | + pullPolicy := corev1.PullAlways |
| 14 | + secCtx := &corev1.SecurityContext{} |
| 15 | + |
| 16 | + expectedVolumeMounts := []corev1.VolumeMount{ |
| 17 | + { |
| 18 | + Name: "bin", |
| 19 | + MountPath: "/opt/percona", |
| 20 | + }, |
| 21 | + } |
| 22 | + expectedCommand := []string{"/opt/percona-server-mysql-operator/ps-init-entrypoint.sh"} |
| 23 | + expectedTerminationMessagePath := "/dev/termination-log" |
| 24 | + expectedTerminationMessagePolicy := corev1.TerminationMessageReadFile |
| 25 | + |
| 26 | + expectedResources := corev1.ResourceRequirements{ |
| 27 | + Limits: corev1.ResourceList{ |
| 28 | + corev1.ResourceCPU: resource.MustParse("500m"), |
| 29 | + corev1.ResourceMemory: resource.MustParse("256Mi"), |
| 30 | + }, |
| 31 | + Requests: corev1.ResourceList{ |
| 32 | + corev1.ResourceCPU: resource.MustParse("250m"), |
| 33 | + corev1.ResourceMemory: resource.MustParse("128Mi"), |
| 34 | + }, |
| 35 | + } |
| 36 | + |
| 37 | + tests := map[string]struct { |
| 38 | + inputVolumes []corev1.VolumeMount |
| 39 | + expectedVolumes []corev1.VolumeMount |
| 40 | + }{ |
| 41 | + "default volumes": { |
| 42 | + expectedVolumes: expectedVolumeMounts, |
| 43 | + }, |
| 44 | + "additional volumes": { |
| 45 | + inputVolumes: []corev1.VolumeMount{ |
| 46 | + { |
| 47 | + Name: "dataVolumeName", |
| 48 | + MountPath: "dataMountPath", |
| 49 | + }, |
| 50 | + }, |
| 51 | + expectedVolumes: append(expectedVolumeMounts, |
| 52 | + corev1.VolumeMount{ |
| 53 | + Name: "dataVolumeName", |
| 54 | + MountPath: "dataMountPath"}), |
| 55 | + }, |
| 56 | + } |
| 57 | + for name, tt := range tests { |
| 58 | + t.Run(name, func(t *testing.T) { |
| 59 | + container := InitContainer(componentName, image, pullPolicy, secCtx, expectedResources, tt.inputVolumes) |
| 60 | + |
| 61 | + assert.Equal(t, componentName+"-init", container.Name) |
| 62 | + assert.Equal(t, image, container.Image) |
| 63 | + assert.Equal(t, pullPolicy, container.ImagePullPolicy) |
| 64 | + assert.Equal(t, tt.expectedVolumes, container.VolumeMounts) |
| 65 | + assert.Equal(t, expectedCommand, container.Command) |
| 66 | + assert.Equal(t, expectedTerminationMessagePath, container.TerminationMessagePath) |
| 67 | + assert.Equal(t, expectedTerminationMessagePolicy, container.TerminationMessagePolicy) |
| 68 | + assert.Equal(t, secCtx, container.SecurityContext) |
| 69 | + assert.Equal(t, expectedResources, container.Resources) |
| 70 | + }) |
| 71 | + } |
| 72 | +} |
0 commit comments