rework additional volume test
This commit is contained in:
		
							parent
							
								
									af5378eea5
								
							
						
					
					
						commit
						d10e14b4a9
					
				| 
						 | 
				
			
			@ -413,6 +413,7 @@ func TestShmVolume(t *testing.T) {
 | 
			
		|||
				Volumes: []v1.Volume{},
 | 
			
		||||
				Containers: []v1.Container{
 | 
			
		||||
					{
 | 
			
		||||
						Name:         "postgres",
 | 
			
		||||
						VolumeMounts: []v1.VolumeMount{},
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
| 
						 | 
				
			
			@ -425,6 +426,7 @@ func TestShmVolume(t *testing.T) {
 | 
			
		|||
				Volumes: []v1.Volume{{}},
 | 
			
		||||
				Containers: []v1.Container{
 | 
			
		||||
					{
 | 
			
		||||
						Name: "postgres",
 | 
			
		||||
						VolumeMounts: []v1.VolumeMount{
 | 
			
		||||
							{},
 | 
			
		||||
						},
 | 
			
		||||
| 
						 | 
				
			
			@ -1055,168 +1057,119 @@ func TestTLS(t *testing.T) {
 | 
			
		|||
 | 
			
		||||
func TestAdditionalVolume(t *testing.T) {
 | 
			
		||||
	testName := "TestAdditionalVolume"
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		subTest   string
 | 
			
		||||
		podSpec   *v1.PodSpec
 | 
			
		||||
		volumePos int
 | 
			
		||||
	}{
 | 
			
		||||
 | 
			
		||||
	client, _ := newFakeK8sTestClient()
 | 
			
		||||
	clusterName := "acid-test-cluster"
 | 
			
		||||
	namespace := "default"
 | 
			
		||||
	sidecarName := "sidecar"
 | 
			
		||||
	additionalVolumes := []acidv1.AdditionalVolume{
 | 
			
		||||
		{
 | 
			
		||||
			subTest: "empty PodSpec",
 | 
			
		||||
			podSpec: &v1.PodSpec{
 | 
			
		||||
				Volumes: []v1.Volume{},
 | 
			
		||||
				Containers: []v1.Container{
 | 
			
		||||
					{
 | 
			
		||||
						VolumeMounts: []v1.VolumeMount{},
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
			Name:             "test1",
 | 
			
		||||
			MountPath:        "/test1",
 | 
			
		||||
			TargetContainers: []string{"all"},
 | 
			
		||||
			VolumeSource: v1.VolumeSource{
 | 
			
		||||
				EmptyDir: &v1.EmptyDirVolumeSource{},
 | 
			
		||||
			},
 | 
			
		||||
			volumePos: 0,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			subTest: "non empty PodSpec",
 | 
			
		||||
			podSpec: &v1.PodSpec{
 | 
			
		||||
				Volumes: []v1.Volume{{}},
 | 
			
		||||
				Containers: []v1.Container{
 | 
			
		||||
					{
 | 
			
		||||
						Name: "postgres",
 | 
			
		||||
						VolumeMounts: []v1.VolumeMount{
 | 
			
		||||
							{
 | 
			
		||||
								Name:      "data",
 | 
			
		||||
								ReadOnly:  false,
 | 
			
		||||
								MountPath: "/data",
 | 
			
		||||
							},
 | 
			
		||||
						},
 | 
			
		||||
					},
 | 
			
		||||
				},
 | 
			
		||||
			Name:             "test2",
 | 
			
		||||
			MountPath:        "/test2",
 | 
			
		||||
			TargetContainers: []string{sidecarName},
 | 
			
		||||
			VolumeSource: v1.VolumeSource{
 | 
			
		||||
				EmptyDir: &v1.EmptyDirVolumeSource{},
 | 
			
		||||
			},
 | 
			
		||||
			volumePos: 1,
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			subTest: "non empty PodSpec with sidecar",
 | 
			
		||||
			podSpec: &v1.PodSpec{
 | 
			
		||||
				Volumes: []v1.Volume{{}},
 | 
			
		||||
				Containers: []v1.Container{
 | 
			
		||||
					{
 | 
			
		||||
						Name: "postgres",
 | 
			
		||||
						VolumeMounts: []v1.VolumeMount{
 | 
			
		||||
							{
 | 
			
		||||
								Name:      "data",
 | 
			
		||||
								ReadOnly:  false,
 | 
			
		||||
								MountPath: "/data",
 | 
			
		||||
							},
 | 
			
		||||
						},
 | 
			
		||||
					},
 | 
			
		||||
					{
 | 
			
		||||
						Name: "sidecar",
 | 
			
		||||
						VolumeMounts: []v1.VolumeMount{
 | 
			
		||||
							{
 | 
			
		||||
								Name:      "data",
 | 
			
		||||
								ReadOnly:  false,
 | 
			
		||||
								MountPath: "/data",
 | 
			
		||||
							},
 | 
			
		||||
						},
 | 
			
		||||
					},
 | 
			
		||||
			Name:             "test3",
 | 
			
		||||
			MountPath:        "/test3",
 | 
			
		||||
			TargetContainers: []string{}, // should mount only to postgres
 | 
			
		||||
			VolumeSource: v1.VolumeSource{
 | 
			
		||||
				EmptyDir: &v1.EmptyDirVolumeSource{},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			Name:             "test4",
 | 
			
		||||
			MountPath:        "/test4",
 | 
			
		||||
			TargetContainers: nil, // should mount only to postgres
 | 
			
		||||
			VolumeSource: v1.VolumeSource{
 | 
			
		||||
				EmptyDir: &v1.EmptyDirVolumeSource{},
 | 
			
		||||
			},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	pg := acidv1.Postgresql{
 | 
			
		||||
		ObjectMeta: metav1.ObjectMeta{
 | 
			
		||||
			Name:      clusterName,
 | 
			
		||||
			Namespace: namespace,
 | 
			
		||||
		},
 | 
			
		||||
		Spec: acidv1.PostgresSpec{
 | 
			
		||||
			TeamID: "myapp", NumberOfInstances: 1,
 | 
			
		||||
			Resources: acidv1.Resources{
 | 
			
		||||
				ResourceRequests: acidv1.ResourceDescription{CPU: "1", Memory: "10"},
 | 
			
		||||
				ResourceLimits:   acidv1.ResourceDescription{CPU: "1", Memory: "10"},
 | 
			
		||||
			},
 | 
			
		||||
			Volume: acidv1.Volume{
 | 
			
		||||
				Size: "1G",
 | 
			
		||||
			},
 | 
			
		||||
			AdditionalVolumes: additionalVolumes,
 | 
			
		||||
			Sidecars: []acidv1.Sidecar{
 | 
			
		||||
				{
 | 
			
		||||
					Name: sidecarName,
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
			volumePos: 1,
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var cluster = New(
 | 
			
		||||
		Config{
 | 
			
		||||
			OpConfig: config.Config{
 | 
			
		||||
				ProtectedRoles: []string{"admin"},
 | 
			
		||||
				Auth: config.Auth{
 | 
			
		||||
					SuperUsername:       superUserName,
 | 
			
		||||
					ReplicationUsername: replicationUserName,
 | 
			
		||||
				PodManagementPolicy: "ordered_ready",
 | 
			
		||||
				Resources: config.Resources{
 | 
			
		||||
					ClusterLabels:        map[string]string{"application": "spilo"},
 | 
			
		||||
					ClusterNameLabel:     "cluster-name",
 | 
			
		||||
					DefaultCPURequest:    "300m",
 | 
			
		||||
					DefaultCPULimit:      "300m",
 | 
			
		||||
					DefaultMemoryRequest: "300Mi",
 | 
			
		||||
					DefaultMemoryLimit:   "300Mi",
 | 
			
		||||
					PodRoleLabel:         "spilo-role",
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		}, k8sutil.KubernetesClient{}, acidv1.Postgresql{}, logger, eventRecorder)
 | 
			
		||||
		}, client, pg, logger, eventRecorder)
 | 
			
		||||
 | 
			
		||||
	for _, tt := range tests {
 | 
			
		||||
		// Test with additional volume mounted in all containers
 | 
			
		||||
		additionalVolumeMount := []acidv1.AdditionalVolume{
 | 
			
		||||
			{
 | 
			
		||||
				Name:             "test",
 | 
			
		||||
				MountPath:        "/test",
 | 
			
		||||
				TargetContainers: []string{"all"},
 | 
			
		||||
				VolumeSource: v1.VolumeSource{
 | 
			
		||||
					EmptyDir: &v1.EmptyDirVolumeSource{},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
	// create a statefulset
 | 
			
		||||
	sts, err := cluster.createStatefulSet()
 | 
			
		||||
	assert.NoError(t, err)
 | 
			
		||||
 | 
			
		||||
		numMounts := len(tt.podSpec.Containers[0].VolumeMounts)
 | 
			
		||||
 | 
			
		||||
		cluster.addAdditionalVolumes(tt.podSpec, additionalVolumeMount)
 | 
			
		||||
		volumeName := tt.podSpec.Volumes[tt.volumePos].Name
 | 
			
		||||
 | 
			
		||||
		if volumeName != additionalVolumeMount[0].Name {
 | 
			
		||||
			t.Errorf("%s %s: Expected volume %v was not created, have %s instead",
 | 
			
		||||
				testName, tt.subTest, additionalVolumeMount, volumeName)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		for i := range tt.podSpec.Containers {
 | 
			
		||||
			volumeMountName := tt.podSpec.Containers[i].VolumeMounts[tt.volumePos].Name
 | 
			
		||||
 | 
			
		||||
			if volumeMountName != additionalVolumeMount[0].Name {
 | 
			
		||||
				t.Errorf("%s %s: Expected mount %v was not created, have %s instead",
 | 
			
		||||
					testName, tt.subTest, additionalVolumeMount, volumeMountName)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		numMountsCheck := len(tt.podSpec.Containers[0].VolumeMounts)
 | 
			
		||||
 | 
			
		||||
		if numMountsCheck != numMounts+1 {
 | 
			
		||||
			t.Errorf("Unexpected number of VolumeMounts: got %v instead of %v",
 | 
			
		||||
				numMountsCheck, numMounts+1)
 | 
			
		||||
		}
 | 
			
		||||
	tests := []struct {
 | 
			
		||||
		subTest        string
 | 
			
		||||
		container      string
 | 
			
		||||
		expectedMounts []string
 | 
			
		||||
	}{
 | 
			
		||||
		{
 | 
			
		||||
			subTest:        "checking volume mounts of postgres container",
 | 
			
		||||
			container:      cluster.containerName(),
 | 
			
		||||
			expectedMounts: []string{"pgdata", "test1", "test3", "test4"},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			subTest:        "checking volume mounts of sidecar container",
 | 
			
		||||
			container:      "sidecar",
 | 
			
		||||
			expectedMounts: []string{"pgdata", "test1", "test2"},
 | 
			
		||||
		},
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for _, tt := range tests {
 | 
			
		||||
		// Test with additional volume mounted only in first container
 | 
			
		||||
		additionalVolumeMount := []acidv1.AdditionalVolume{
 | 
			
		||||
			{
 | 
			
		||||
				Name:             "test",
 | 
			
		||||
				MountPath:        "/test",
 | 
			
		||||
				TargetContainers: []string{"postgres"},
 | 
			
		||||
				VolumeSource: v1.VolumeSource{
 | 
			
		||||
					EmptyDir: &v1.EmptyDirVolumeSource{},
 | 
			
		||||
				},
 | 
			
		||||
			},
 | 
			
		||||
		}
 | 
			
		||||
		for _, container := range sts.Spec.Template.Spec.Containers {
 | 
			
		||||
			if container.Name != tt.container {
 | 
			
		||||
				continue
 | 
			
		||||
			}
 | 
			
		||||
			mounts := []string{}
 | 
			
		||||
			for _, volumeMounts := range container.VolumeMounts {
 | 
			
		||||
				mounts = append(mounts, volumeMounts.Name)
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
		numMounts := len(tt.podSpec.Containers[0].VolumeMounts)
 | 
			
		||||
 | 
			
		||||
		cluster.addAdditionalVolumes(tt.podSpec, additionalVolumeMount)
 | 
			
		||||
		volumeName := tt.podSpec.Volumes[tt.volumePos].Name
 | 
			
		||||
 | 
			
		||||
		if volumeName != additionalVolumeMount[0].Name {
 | 
			
		||||
			t.Errorf("%s %s: Expected volume %v was not created, have %s instead",
 | 
			
		||||
				testName, tt.subTest, additionalVolumeMount, volumeName)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		for _, container := range tt.podSpec.Containers {
 | 
			
		||||
			if container.Name == "postgres" {
 | 
			
		||||
				volumeMountName := container.VolumeMounts[tt.volumePos].Name
 | 
			
		||||
 | 
			
		||||
				if volumeMountName != additionalVolumeMount[0].Name {
 | 
			
		||||
					t.Errorf("%s %s: Expected mount %v was not created, have %s instead",
 | 
			
		||||
						testName, tt.subTest, additionalVolumeMount, volumeMountName)
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				numMountsCheck := len(container.VolumeMounts)
 | 
			
		||||
				if numMountsCheck != numMounts+1 {
 | 
			
		||||
					t.Errorf("Unexpected number of VolumeMounts: got %v instead of %v",
 | 
			
		||||
						numMountsCheck, numMounts+1)
 | 
			
		||||
				}
 | 
			
		||||
			} else {
 | 
			
		||||
				numMountsCheck := len(container.VolumeMounts)
 | 
			
		||||
				if numMountsCheck == numMounts+1 {
 | 
			
		||||
					t.Errorf("Unexpected number of VolumeMounts: got %v instead of %v",
 | 
			
		||||
						numMountsCheck, numMounts)
 | 
			
		||||
				}
 | 
			
		||||
			if !util.IsEqualIgnoreOrder(mounts, tt.expectedMounts) {
 | 
			
		||||
				t.Errorf("%s %s: different volume mounts: got %v, epxected %v",
 | 
			
		||||
					testName, tt.subTest, mounts, tt.expectedMounts)
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue