Skip to content

Commit 48cdca6

Browse files
authored
rework additional volume test (zalando#1502)
1 parent af5378e commit 48cdca6

File tree

1 file changed

+92
-139
lines changed

1 file changed

+92
-139
lines changed

pkg/cluster/k8sres_test.go

Lines changed: 92 additions & 139 deletions
Original file line numberDiff line numberDiff line change
@@ -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

10561058
func 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

Comments
 (0)