@@ -413,6 +413,7 @@ func TestShmVolume(t *testing.T) {
413413 Volumes : []v1.Volume {},
414414 Containers : []v1.Container {
415415 {
416+ Name : "postgres" ,
416417 VolumeMounts : []v1.VolumeMount {},
417418 },
418419 },
@@ -425,6 +426,7 @@ func TestShmVolume(t *testing.T) {
425426 Volumes : []v1.Volume {{}},
426427 Containers : []v1.Container {
427428 {
429+ Name : "postgres" ,
428430 VolumeMounts : []v1.VolumeMount {
429431 {},
430432 },
@@ -1055,168 +1057,119 @@ func TestTLS(t *testing.T) {
10551057
10561058func TestAdditionalVolume (t * testing.T ) {
10571059 testName := "TestAdditionalVolume"
1058- tests := []struct {
1059- subTest string
1060- podSpec * v1.PodSpec
1061- volumePos int
1062- }{
1060+
1061+ client , _ := newFakeK8sTestClient ()
1062+ clusterName := "acid-test-cluster"
1063+ namespace := "default"
1064+ sidecarName := "sidecar"
1065+ additionalVolumes := []acidv1.AdditionalVolume {
10631066 {
1064- subTest : "empty PodSpec" ,
1065- podSpec : & v1.PodSpec {
1066- Volumes : []v1.Volume {},
1067- Containers : []v1.Container {
1068- {
1069- VolumeMounts : []v1.VolumeMount {},
1070- },
1071- },
1067+ Name : "test1" ,
1068+ MountPath : "/test1" ,
1069+ TargetContainers : []string {"all" },
1070+ VolumeSource : v1.VolumeSource {
1071+ EmptyDir : & v1.EmptyDirVolumeSource {},
10721072 },
1073- volumePos : 0 ,
10741073 },
10751074 {
1076- subTest : "non empty PodSpec" ,
1077- podSpec : & v1.PodSpec {
1078- Volumes : []v1.Volume {{}},
1079- Containers : []v1.Container {
1080- {
1081- Name : "postgres" ,
1082- VolumeMounts : []v1.VolumeMount {
1083- {
1084- Name : "data" ,
1085- ReadOnly : false ,
1086- MountPath : "/data" ,
1087- },
1088- },
1089- },
1090- },
1075+ Name : "test2" ,
1076+ MountPath : "/test2" ,
1077+ TargetContainers : []string {sidecarName },
1078+ VolumeSource : v1.VolumeSource {
1079+ EmptyDir : & v1.EmptyDirVolumeSource {},
10911080 },
1092- volumePos : 1 ,
10931081 },
10941082 {
1095- subTest : "non empty PodSpec with sidecar" ,
1096- podSpec : & v1.PodSpec {
1097- Volumes : []v1.Volume {{}},
1098- Containers : []v1.Container {
1099- {
1100- Name : "postgres" ,
1101- VolumeMounts : []v1.VolumeMount {
1102- {
1103- Name : "data" ,
1104- ReadOnly : false ,
1105- MountPath : "/data" ,
1106- },
1107- },
1108- },
1109- {
1110- Name : "sidecar" ,
1111- VolumeMounts : []v1.VolumeMount {
1112- {
1113- Name : "data" ,
1114- ReadOnly : false ,
1115- MountPath : "/data" ,
1116- },
1117- },
1118- },
1083+ Name : "test3" ,
1084+ MountPath : "/test3" ,
1085+ TargetContainers : []string {}, // should mount only to postgres
1086+ VolumeSource : v1.VolumeSource {
1087+ EmptyDir : & v1.EmptyDirVolumeSource {},
1088+ },
1089+ },
1090+ {
1091+ Name : "test4" ,
1092+ MountPath : "/test4" ,
1093+ TargetContainers : nil , // should mount only to postgres
1094+ VolumeSource : v1.VolumeSource {
1095+ EmptyDir : & v1.EmptyDirVolumeSource {},
1096+ },
1097+ },
1098+ }
1099+
1100+ pg := acidv1.Postgresql {
1101+ ObjectMeta : metav1.ObjectMeta {
1102+ Name : clusterName ,
1103+ Namespace : namespace ,
1104+ },
1105+ Spec : acidv1.PostgresSpec {
1106+ TeamID : "myapp" , NumberOfInstances : 1 ,
1107+ Resources : acidv1.Resources {
1108+ ResourceRequests : acidv1.ResourceDescription {CPU : "1" , Memory : "10" },
1109+ ResourceLimits : acidv1.ResourceDescription {CPU : "1" , Memory : "10" },
1110+ },
1111+ Volume : acidv1.Volume {
1112+ Size : "1G" ,
1113+ },
1114+ AdditionalVolumes : additionalVolumes ,
1115+ Sidecars : []acidv1.Sidecar {
1116+ {
1117+ Name : sidecarName ,
11191118 },
11201119 },
1121- volumePos : 1 ,
11221120 },
11231121 }
11241122
11251123 var cluster = New (
11261124 Config {
11271125 OpConfig : config.Config {
1128- ProtectedRoles : []string {"admin" },
1129- Auth : config.Auth {
1130- SuperUsername : superUserName ,
1131- ReplicationUsername : replicationUserName ,
1132- },
1133- },
1134- }, k8sutil.KubernetesClient {}, acidv1.Postgresql {}, logger , eventRecorder )
1135-
1136- for _ , tt := range tests {
1137- // Test with additional volume mounted in all containers
1138- additionalVolumeMount := []acidv1.AdditionalVolume {
1139- {
1140- Name : "test" ,
1141- MountPath : "/test" ,
1142- TargetContainers : []string {"all" },
1143- VolumeSource : v1.VolumeSource {
1144- EmptyDir : & v1.EmptyDirVolumeSource {},
1126+ PodManagementPolicy : "ordered_ready" ,
1127+ Resources : config.Resources {
1128+ ClusterLabels : map [string ]string {"application" : "spilo" },
1129+ ClusterNameLabel : "cluster-name" ,
1130+ DefaultCPURequest : "300m" ,
1131+ DefaultCPULimit : "300m" ,
1132+ DefaultMemoryRequest : "300Mi" ,
1133+ DefaultMemoryLimit : "300Mi" ,
1134+ PodRoleLabel : "spilo-role" ,
11451135 },
11461136 },
1147- }
1148-
1149- numMounts := len (tt .podSpec .Containers [0 ].VolumeMounts )
1150-
1151- cluster .addAdditionalVolumes (tt .podSpec , additionalVolumeMount )
1152- volumeName := tt .podSpec .Volumes [tt .volumePos ].Name
1153-
1154- if volumeName != additionalVolumeMount [0 ].Name {
1155- t .Errorf ("%s %s: Expected volume %v was not created, have %s instead" ,
1156- testName , tt .subTest , additionalVolumeMount , volumeName )
1157- }
1158-
1159- for i := range tt .podSpec .Containers {
1160- volumeMountName := tt .podSpec .Containers [i ].VolumeMounts [tt .volumePos ].Name
1161-
1162- if volumeMountName != additionalVolumeMount [0 ].Name {
1163- t .Errorf ("%s %s: Expected mount %v was not created, have %s instead" ,
1164- testName , tt .subTest , additionalVolumeMount , volumeMountName )
1165- }
1166-
1167- }
1137+ }, client , pg , logger , eventRecorder )
11681138
1169- numMountsCheck := len (tt .podSpec .Containers [0 ].VolumeMounts )
1139+ // create a statefulset
1140+ sts , err := cluster .createStatefulSet ()
1141+ assert .NoError (t , err )
11701142
1171- if numMountsCheck != numMounts + 1 {
1172- t .Errorf ("Unexpected number of VolumeMounts: got %v instead of %v" ,
1173- numMountsCheck , numMounts + 1 )
1174- }
1143+ tests := []struct {
1144+ subTest string
1145+ container string
1146+ expectedMounts []string
1147+ }{
1148+ {
1149+ subTest : "checking volume mounts of postgres container" ,
1150+ container : cluster .containerName (),
1151+ expectedMounts : []string {"pgdata" , "test1" , "test3" , "test4" },
1152+ },
1153+ {
1154+ subTest : "checking volume mounts of sidecar container" ,
1155+ container : "sidecar" ,
1156+ expectedMounts : []string {"pgdata" , "test1" , "test2" },
1157+ },
11751158 }
11761159
11771160 for _ , tt := range tests {
1178- // Test with additional volume mounted only in first container
1179- additionalVolumeMount := []acidv1.AdditionalVolume {
1180- {
1181- Name : "test" ,
1182- MountPath : "/test" ,
1183- TargetContainers : []string {"postgres" },
1184- VolumeSource : v1.VolumeSource {
1185- EmptyDir : & v1.EmptyDirVolumeSource {},
1186- },
1187- },
1188- }
1189-
1190- numMounts := len (tt .podSpec .Containers [0 ].VolumeMounts )
1191-
1192- cluster .addAdditionalVolumes (tt .podSpec , additionalVolumeMount )
1193- volumeName := tt .podSpec .Volumes [tt .volumePos ].Name
1194-
1195- if volumeName != additionalVolumeMount [0 ].Name {
1196- t .Errorf ("%s %s: Expected volume %v was not created, have %s instead" ,
1197- testName , tt .subTest , additionalVolumeMount , volumeName )
1198- }
1161+ for _ , container := range sts .Spec .Template .Spec .Containers {
1162+ if container .Name != tt .container {
1163+ continue
1164+ }
1165+ mounts := []string {}
1166+ for _ , volumeMounts := range container .VolumeMounts {
1167+ mounts = append (mounts , volumeMounts .Name )
1168+ }
11991169
1200- for _ , container := range tt .podSpec .Containers {
1201- if container .Name == "postgres" {
1202- volumeMountName := container .VolumeMounts [tt .volumePos ].Name
1203-
1204- if volumeMountName != additionalVolumeMount [0 ].Name {
1205- t .Errorf ("%s %s: Expected mount %v was not created, have %s instead" ,
1206- testName , tt .subTest , additionalVolumeMount , volumeMountName )
1207- }
1208-
1209- numMountsCheck := len (container .VolumeMounts )
1210- if numMountsCheck != numMounts + 1 {
1211- t .Errorf ("Unexpected number of VolumeMounts: got %v instead of %v" ,
1212- numMountsCheck , numMounts + 1 )
1213- }
1214- } else {
1215- numMountsCheck := len (container .VolumeMounts )
1216- if numMountsCheck == numMounts + 1 {
1217- t .Errorf ("Unexpected number of VolumeMounts: got %v instead of %v" ,
1218- numMountsCheck , numMounts )
1219- }
1170+ if ! util .IsEqualIgnoreOrder (mounts , tt .expectedMounts ) {
1171+ t .Errorf ("%s %s: different volume mounts: got %v, epxected %v" ,
1172+ testName , tt .subTest , mounts , tt .expectedMounts )
12201173 }
12211174 }
12221175 }
0 commit comments