rework additional volume test (#1502)
This commit is contained in:
		
							parent
							
								
									af5378eea5
								
							
						
					
					
						commit
						48cdca645d
					
				|  | @ -413,6 +413,7 @@ func TestShmVolume(t *testing.T) { | ||||||
| 				Volumes: []v1.Volume{}, | 				Volumes: []v1.Volume{}, | ||||||
| 				Containers: []v1.Container{ | 				Containers: []v1.Container{ | ||||||
| 					{ | 					{ | ||||||
|  | 						Name:         "postgres", | ||||||
| 						VolumeMounts: []v1.VolumeMount{}, | 						VolumeMounts: []v1.VolumeMount{}, | ||||||
| 					}, | 					}, | ||||||
| 				}, | 				}, | ||||||
|  | @ -425,6 +426,7 @@ func TestShmVolume(t *testing.T) { | ||||||
| 				Volumes: []v1.Volume{{}}, | 				Volumes: []v1.Volume{{}}, | ||||||
| 				Containers: []v1.Container{ | 				Containers: []v1.Container{ | ||||||
| 					{ | 					{ | ||||||
|  | 						Name: "postgres", | ||||||
| 						VolumeMounts: []v1.VolumeMount{ | 						VolumeMounts: []v1.VolumeMount{ | ||||||
| 							{}, | 							{}, | ||||||
| 						}, | 						}, | ||||||
|  | @ -1055,168 +1057,119 @@ func TestTLS(t *testing.T) { | ||||||
| 
 | 
 | ||||||
| func TestAdditionalVolume(t *testing.T) { | func TestAdditionalVolume(t *testing.T) { | ||||||
| 	testName := "TestAdditionalVolume" | 	testName := "TestAdditionalVolume" | ||||||
| 	tests := []struct { | 
 | ||||||
| 		subTest   string | 	client, _ := newFakeK8sTestClient() | ||||||
| 		podSpec   *v1.PodSpec | 	clusterName := "acid-test-cluster" | ||||||
| 		volumePos int | 	namespace := "default" | ||||||
| 	}{ | 	sidecarName := "sidecar" | ||||||
|  | 	additionalVolumes := []acidv1.AdditionalVolume{ | ||||||
| 		{ | 		{ | ||||||
| 			subTest: "empty PodSpec", | 			Name:             "test1", | ||||||
| 			podSpec: &v1.PodSpec{ | 			MountPath:        "/test1", | ||||||
| 				Volumes: []v1.Volume{}, | 			TargetContainers: []string{"all"}, | ||||||
| 				Containers: []v1.Container{ | 			VolumeSource: v1.VolumeSource{ | ||||||
| 					{ | 				EmptyDir: &v1.EmptyDirVolumeSource{}, | ||||||
| 						VolumeMounts: []v1.VolumeMount{}, |  | ||||||
| 					}, |  | ||||||
| 				}, |  | ||||||
| 			}, |  | ||||||
| 			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", |  | ||||||
| 							}, |  | ||||||
| 						}, |  | ||||||
| 					}, |  | ||||||
| 				}, |  | ||||||
| 			}, |  | ||||||
| 			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", | 			Name:             "test2", | ||||||
| 						VolumeMounts: []v1.VolumeMount{ | 			MountPath:        "/test2", | ||||||
|  | 			TargetContainers: []string{sidecarName}, | ||||||
|  | 			VolumeSource: v1.VolumeSource{ | ||||||
|  | 				EmptyDir: &v1.EmptyDirVolumeSource{}, | ||||||
|  | 			}, | ||||||
|  | 		}, | ||||||
| 		{ | 		{ | ||||||
| 								Name:      "data", | 			Name:             "test3", | ||||||
| 								ReadOnly:  false, | 			MountPath:        "/test3", | ||||||
| 								MountPath: "/data", | 			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( | 	var cluster = New( | ||||||
| 		Config{ | 		Config{ | ||||||
| 			OpConfig: config.Config{ | 			OpConfig: config.Config{ | ||||||
| 				ProtectedRoles: []string{"admin"}, | 				PodManagementPolicy: "ordered_ready", | ||||||
| 				Auth: config.Auth{ | 				Resources: config.Resources{ | ||||||
| 					SuperUsername:       superUserName, | 					ClusterLabels:        map[string]string{"application": "spilo"}, | ||||||
| 					ReplicationUsername: replicationUserName, | 					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 { | 	// create a statefulset
 | ||||||
| 		// Test with additional volume mounted in all containers
 | 	sts, err := cluster.createStatefulSet() | ||||||
| 		additionalVolumeMount := []acidv1.AdditionalVolume{ | 	assert.NoError(t, err) | ||||||
|  | 
 | ||||||
|  | 	tests := []struct { | ||||||
|  | 		subTest        string | ||||||
|  | 		container      string | ||||||
|  | 		expectedMounts []string | ||||||
|  | 	}{ | ||||||
| 		{ | 		{ | ||||||
| 				Name:             "test", | 			subTest:        "checking volume mounts of postgres container", | ||||||
| 				MountPath:        "/test", | 			container:      cluster.containerName(), | ||||||
| 				TargetContainers: []string{"all"}, | 			expectedMounts: []string{"pgdata", "test1", "test3", "test4"}, | ||||||
| 				VolumeSource: v1.VolumeSource{ |  | ||||||
| 					EmptyDir: &v1.EmptyDirVolumeSource{}, |  | ||||||
| 		}, | 		}, | ||||||
|  | 		{ | ||||||
|  | 			subTest:        "checking volume mounts of sidecar container", | ||||||
|  | 			container:      "sidecar", | ||||||
|  | 			expectedMounts: []string{"pgdata", "test1", "test2"}, | ||||||
| 		}, | 		}, | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 		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) |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	for _, tt := range tests { | 	for _, tt := range tests { | ||||||
| 		// Test with additional volume mounted only in first container
 | 		for _, container := range sts.Spec.Template.Spec.Containers { | ||||||
| 		additionalVolumeMount := []acidv1.AdditionalVolume{ | 			if container.Name != tt.container { | ||||||
| 			{ | 				continue | ||||||
| 				Name:             "test", | 			} | ||||||
| 				MountPath:        "/test", | 			mounts := []string{} | ||||||
| 				TargetContainers: []string{"postgres"}, | 			for _, volumeMounts := range container.VolumeMounts { | ||||||
| 				VolumeSource: v1.VolumeSource{ | 				mounts = append(mounts, volumeMounts.Name) | ||||||
| 					EmptyDir: &v1.EmptyDirVolumeSource{}, |  | ||||||
| 				}, |  | ||||||
| 			}, |  | ||||||
| 			} | 			} | ||||||
| 
 | 
 | ||||||
| 		numMounts := len(tt.podSpec.Containers[0].VolumeMounts) | 			if !util.IsEqualIgnoreOrder(mounts, tt.expectedMounts) { | ||||||
| 
 | 				t.Errorf("%s %s: different volume mounts: got %v, epxected %v", | ||||||
| 		cluster.addAdditionalVolumes(tt.podSpec, additionalVolumeMount) | 					testName, tt.subTest, mounts, tt.expectedMounts) | ||||||
| 		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) |  | ||||||
| 				} |  | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue