rework additional volume test (#1502)

This commit is contained in:
Felix Kunde 2021-05-27 18:37:30 +02:00 committed by GitHub
parent af5378eea5
commit 48cdca645d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 92 additions and 139 deletions

View File

@ -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", Name: "test2",
podSpec: &v1.PodSpec{ MountPath: "/test2",
Volumes: []v1.Volume{{}}, TargetContainers: []string{sidecarName},
Containers: []v1.Container{ VolumeSource: v1.VolumeSource{
{ EmptyDir: &v1.EmptyDirVolumeSource{},
Name: "postgres",
VolumeMounts: []v1.VolumeMount{
{
Name: "data",
ReadOnly: false,
MountPath: "/data",
},
},
},
},
}, },
volumePos: 1,
}, },
{ {
subTest: "non empty PodSpec with sidecar", Name: "test3",
podSpec: &v1.PodSpec{ MountPath: "/test3",
Volumes: []v1.Volume{{}}, TargetContainers: []string{}, // should mount only to postgres
Containers: []v1.Container{ VolumeSource: v1.VolumeSource{
{ EmptyDir: &v1.EmptyDirVolumeSource{},
Name: "postgres", },
VolumeMounts: []v1.VolumeMount{ },
{ {
Name: "data", Name: "test4",
ReadOnly: false, MountPath: "/test4",
MountPath: "/data", TargetContainers: nil, // should mount only to postgres
}, VolumeSource: v1.VolumeSource{
}, EmptyDir: &v1.EmptyDirVolumeSource{},
}, },
{ },
Name: "sidecar", }
VolumeMounts: []v1.VolumeMount{
{ pg := acidv1.Postgresql{
Name: "data", ObjectMeta: metav1.ObjectMeta{
ReadOnly: false, Name: clusterName,
MountPath: "/data", 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)
{
Name: "test",
MountPath: "/test",
TargetContainers: []string{"all"},
VolumeSource: v1.VolumeSource{
EmptyDir: &v1.EmptyDirVolumeSource{},
},
},
}
numMounts := len(tt.podSpec.Containers[0].VolumeMounts) tests := []struct {
subTest string
cluster.addAdditionalVolumes(tt.podSpec, additionalVolumeMount) container string
volumeName := tt.podSpec.Volumes[tt.volumePos].Name expectedMounts []string
}{
if volumeName != additionalVolumeMount[0].Name { {
t.Errorf("%s %s: Expected volume %v was not created, have %s instead", subTest: "checking volume mounts of postgres container",
testName, tt.subTest, additionalVolumeMount, volumeName) container: cluster.containerName(),
} expectedMounts: []string{"pgdata", "test1", "test3", "test4"},
},
for i := range tt.podSpec.Containers { {
volumeMountName := tt.podSpec.Containers[i].VolumeMounts[tt.volumePos].Name subTest: "checking volume mounts of sidecar container",
container: "sidecar",
if volumeMountName != additionalVolumeMount[0].Name { expectedMounts: []string{"pgdata", "test1", "test2"},
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)
}
} }
} }
} }