Skip to content

Commit cc6c539

Browse files
authored
allow more control over configured versioned resources for more flexible test cases (#606)
1 parent f58a57c commit cc6c539

File tree

3 files changed

+110
-95
lines changed

3 files changed

+110
-95
lines changed

cmd/e2e/basic_test.go

Lines changed: 44 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package main
22

33
import (
4-
"context"
54
"fmt"
65
"slices"
76
"sort"
@@ -38,8 +37,6 @@ type TestStacksetSpecFactory struct {
3837
ingress bool
3938
routegroup bool
4039
externalIngress bool
41-
configMapRef bool
42-
secretRef bool
4340
limit int32
4441
scaleDownTTL int64
4542
replicas int32
@@ -51,13 +48,13 @@ type TestStacksetSpecFactory struct {
5148
maxUnavailable int
5249
metrics []zv1.AutoscalerMetrics
5350
subResourceAnnotations map[string]string
51+
configurationResources []zv1.ConfigurationResourcesSpec
52+
volumes []corev1.Volume
5453
}
5554

5655
func NewTestStacksetSpecFactory(stacksetName string) *TestStacksetSpecFactory {
5756
return &TestStacksetSpecFactory{
5857
stacksetName: stacksetName,
59-
configMapRef: false,
60-
secretRef: false,
6158
ingress: false,
6259
externalIngress: false,
6360
limit: 4,
@@ -66,16 +63,44 @@ func NewTestStacksetSpecFactory(stacksetName string) *TestStacksetSpecFactory {
6663
hpaMinReplicas: 1,
6764
hpaMaxReplicas: 3,
6865
subResourceAnnotations: map[string]string{},
66+
configurationResources: []zv1.ConfigurationResourcesSpec{},
67+
volumes: []corev1.Volume{},
6968
}
7069
}
7170

72-
func (f *TestStacksetSpecFactory) ConfigMapRef() *TestStacksetSpecFactory {
73-
f.configMapRef = true
71+
func (f *TestStacksetSpecFactory) AddReferencedConfigMap(configMapName string) *TestStacksetSpecFactory {
72+
f.configurationResources = append(f.configurationResources, zv1.ConfigurationResourcesSpec{
73+
ConfigMapRef: &corev1.LocalObjectReference{Name: configMapName},
74+
})
75+
76+
f.volumes = append(f.volumes, corev1.Volume{
77+
Name: configMapName,
78+
VolumeSource: corev1.VolumeSource{
79+
ConfigMap: &corev1.ConfigMapVolumeSource{
80+
LocalObjectReference: corev1.LocalObjectReference{
81+
Name: configMapName,
82+
},
83+
},
84+
},
85+
})
86+
7487
return f
7588
}
7689

77-
func (f *TestStacksetSpecFactory) SecretRef() *TestStacksetSpecFactory {
78-
f.secretRef = true
90+
func (f *TestStacksetSpecFactory) AddReferencedSecret(secretName string) *TestStacksetSpecFactory {
91+
f.configurationResources = append(f.configurationResources, zv1.ConfigurationResourcesSpec{
92+
SecretRef: &corev1.LocalObjectReference{Name: secretName},
93+
})
94+
95+
f.volumes = append(f.volumes, corev1.Volume{
96+
Name: secretName,
97+
VolumeSource: corev1.VolumeSource{
98+
Secret: &corev1.SecretVolumeSource{
99+
SecretName: secretName,
100+
},
101+
},
102+
})
103+
79104
return f
80105
}
81106

@@ -151,74 +176,12 @@ func (f *TestStacksetSpecFactory) Create(t *testing.T, stackVersion string) zv1.
151176
},
152177
}
153178

154-
if f.configMapRef {
155-
configMapName := fmt.Sprintf("%s-%s-configmap", f.stacksetName, stackVersion)
156-
configMap := &corev1.ConfigMap{
157-
ObjectMeta: metav1.ObjectMeta{
158-
Name: configMapName,
159-
},
160-
Data: map[string]string{
161-
"key": "value",
162-
},
163-
}
164-
165-
_, err := configMapInterface().Create(context.Background(), configMap, metav1.CreateOptions{})
166-
require.NoError(t, err)
167-
168-
result.StackTemplate.Spec.ConfigurationResources = []zv1.ConfigurationResourcesSpec{
169-
{
170-
ConfigMapRef: &corev1.LocalObjectReference{
171-
Name: configMapName,
172-
},
173-
},
174-
}
175-
176-
result.StackTemplate.Spec.PodTemplate.Spec.Volumes = []corev1.Volume{
177-
{
178-
Name: "config-volume",
179-
VolumeSource: corev1.VolumeSource{
180-
ConfigMap: &corev1.ConfigMapVolumeSource{
181-
LocalObjectReference: corev1.LocalObjectReference{
182-
Name: configMapName,
183-
},
184-
},
185-
},
186-
},
187-
}
179+
if len(f.configurationResources) > 0 {
180+
result.StackTemplate.Spec.ConfigurationResources = f.configurationResources
188181
}
189182

190-
if f.secretRef {
191-
secretName := fmt.Sprintf("%s-%s-secret", f.stacksetName, stackVersion)
192-
secret := &corev1.Secret{
193-
ObjectMeta: metav1.ObjectMeta{
194-
Name: secretName,
195-
},
196-
Data: map[string][]byte{
197-
"key": []byte("value"),
198-
},
199-
}
200-
201-
_, err := secretInterface().Create(context.Background(), secret, metav1.CreateOptions{})
202-
require.NoError(t, err)
203-
204-
result.StackTemplate.Spec.ConfigurationResources = []zv1.ConfigurationResourcesSpec{
205-
{
206-
SecretRef: &corev1.LocalObjectReference{
207-
Name: secretName,
208-
},
209-
},
210-
}
211-
212-
result.StackTemplate.Spec.PodTemplate.Spec.Volumes = []corev1.Volume{
213-
{
214-
Name: "secret-volume",
215-
VolumeSource: corev1.VolumeSource{
216-
Secret: &corev1.SecretVolumeSource{
217-
SecretName: secretName,
218-
},
219-
},
220-
},
221-
}
183+
if len(f.volumes) > 0 {
184+
result.StackTemplate.Spec.PodTemplate.Spec.Volumes = f.volumes
222185
}
223186

224187
if f.autoscaler {
@@ -727,10 +690,14 @@ func testStacksetCreate(
727690
stackVersion := "v1"
728691
stacksetSpecFactory := NewTestStacksetSpecFactory(stacksetName)
729692
if configmapRef {
730-
stacksetSpecFactory.ConfigMapRef()
693+
configMapName := fmt.Sprintf("%s-%s-configmap", stacksetName, stackVersion)
694+
createConfigMap(t, configMapName)
695+
stacksetSpecFactory.AddReferencedConfigMap(configMapName)
731696
}
732697
if secretRef {
733-
stacksetSpecFactory.SecretRef()
698+
secretName := fmt.Sprintf("%s-%s-secret", stacksetName, stackVersion)
699+
createSecret(t, secretName)
700+
stacksetSpecFactory.AddReferencedSecret(secretName)
734701
}
735702
if hpa {
736703
stacksetSpecFactory.Autoscaler(

cmd/e2e/broken_stack_test.go

Lines changed: 39 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package main
22

33
import (
4-
"context"
54
"fmt"
65
"testing"
76
"time"
87

98
"github.com/stretchr/testify/require"
109
corev1 "k8s.io/api/core/v1"
11-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1210
"k8s.io/apimachinery/pkg/util/intstr"
1311
)
1412

@@ -96,10 +94,14 @@ func TestBrokenStackWithConfigMaps(t *testing.T) {
9694
t.Parallel()
9795

9896
stacksetName := "stackset-broken-stacks-with-configmap"
99-
factory := NewTestStacksetSpecFactory(stacksetName).Ingress().ConfigMapRef().StackGC(1, 30)
100-
10197
firstVersion := "v1"
98+
10299
firstStack := fmt.Sprintf("%s-%s", stacksetName, firstVersion)
100+
101+
configMapName := fmt.Sprintf("%s-configmap", firstStack)
102+
createConfigMap(t, configMapName)
103+
104+
factory := NewTestStacksetSpecFactory(stacksetName).Ingress().AddReferencedConfigMap(configMapName).StackGC(1, 30)
103105
spec := factory.Create(t, firstVersion)
104106
err := createStackSet(stacksetName, 0, spec)
105107
require.NoError(t, err)
@@ -108,13 +110,11 @@ func TestBrokenStackWithConfigMaps(t *testing.T) {
108110

109111
unhealthyVersion := "v2"
110112
unhealthyStack := fmt.Sprintf("%s-%s", stacksetName, unhealthyVersion)
113+
114+
configMapName = fmt.Sprintf("%s-configmap", unhealthyStack)
115+
116+
factory = NewTestStacksetSpecFactory(stacksetName).Ingress().AddReferencedConfigMap(configMapName).StackGC(1, 30)
111117
spec = factory.Create(t, unhealthyVersion)
112-
for _, cr := range spec.StackTemplate.Spec.ConfigurationResources {
113-
if cr.IsConfigMapRef() {
114-
err := configMapInterface().Delete(context.Background(), cr.GetName(), metav1.DeleteOptions{})
115-
require.NoError(t, err)
116-
}
117-
}
118118
err = updateStackset(stacksetName, spec)
119119
require.NoError(t, err)
120120
_, err = waitForStack(t, stacksetName, unhealthyVersion)
@@ -137,6 +137,11 @@ func TestBrokenStackWithConfigMaps(t *testing.T) {
137137
// Create a healthy stack
138138
healthyVersion := "v3"
139139
healthyStack := fmt.Sprintf("%s-%s", stacksetName, healthyVersion)
140+
141+
configMapName = fmt.Sprintf("%s-configmap", healthyStack)
142+
createConfigMap(t, configMapName)
143+
144+
factory = NewTestStacksetSpecFactory(stacksetName).Ingress().AddReferencedConfigMap(configMapName).StackGC(1, 30)
140145
spec = factory.Create(t, healthyVersion)
141146
err = updateStackset(stacksetName, spec)
142147
require.NoError(t, err)
@@ -152,6 +157,11 @@ func TestBrokenStackWithConfigMaps(t *testing.T) {
152157
// Create another healthy stack so we can test GC
153158
finalVersion := "v4"
154159
finalStack := fmt.Sprintf("%s-%s", stacksetName, finalVersion)
160+
161+
configMapName = fmt.Sprintf("%s-configmap", finalStack)
162+
createConfigMap(t, configMapName)
163+
164+
factory = NewTestStacksetSpecFactory(stacksetName).Ingress().AddReferencedConfigMap(configMapName).StackGC(1, 30)
155165
spec = factory.Create(t, finalVersion)
156166
err = updateStackset(stacksetName, spec)
157167
require.NoError(t, err)
@@ -176,9 +186,12 @@ func TestBrokenStackWithSecrets(t *testing.T) {
176186
t.Parallel()
177187

178188
stacksetName := "stackset-broken-stacks-with-secret"
179-
factory := NewTestStacksetSpecFactory(stacksetName).Ingress().SecretRef().StackGC(1, 30)
180-
181189
firstVersion := "v1"
190+
191+
secretName := fmt.Sprintf("%s-%s-secret", stacksetName, firstVersion)
192+
createSecret(t, secretName)
193+
194+
factory := NewTestStacksetSpecFactory(stacksetName).Ingress().AddReferencedSecret(secretName).StackGC(1, 30)
182195
firstStack := fmt.Sprintf("%s-%s", stacksetName, firstVersion)
183196
spec := factory.Create(t, firstVersion)
184197
err := createStackSet(stacksetName, 0, spec)
@@ -187,14 +200,12 @@ func TestBrokenStackWithSecrets(t *testing.T) {
187200
require.NoError(t, err)
188201

189202
unhealthyVersion := "v2"
203+
204+
secretName = fmt.Sprintf("%s-%s-secret", stacksetName, unhealthyVersion)
205+
206+
factory = NewTestStacksetSpecFactory(stacksetName).Ingress().AddReferencedSecret(secretName).StackGC(1, 30)
190207
unhealthyStack := fmt.Sprintf("%s-%s", stacksetName, unhealthyVersion)
191208
spec = factory.Create(t, unhealthyVersion)
192-
for _, cr := range spec.StackTemplate.Spec.ConfigurationResources {
193-
if cr.IsSecretRef() {
194-
err := secretInterface().Delete(context.Background(), cr.GetName(), metav1.DeleteOptions{})
195-
require.NoError(t, err)
196-
}
197-
}
198209
err = updateStackset(stacksetName, spec)
199210
require.NoError(t, err)
200211
_, err = waitForStack(t, stacksetName, unhealthyVersion)
@@ -216,6 +227,11 @@ func TestBrokenStackWithSecrets(t *testing.T) {
216227

217228
// Create a healthy stack
218229
healthyVersion := "v3"
230+
231+
secretName = fmt.Sprintf("%s-%s-secret", stacksetName, healthyVersion)
232+
createSecret(t, secretName)
233+
234+
factory = NewTestStacksetSpecFactory(stacksetName).Ingress().AddReferencedSecret(secretName).StackGC(1, 30)
219235
healthyStack := fmt.Sprintf("%s-%s", stacksetName, healthyVersion)
220236
spec = factory.Create(t, healthyVersion)
221237
err = updateStackset(stacksetName, spec)
@@ -231,6 +247,11 @@ func TestBrokenStackWithSecrets(t *testing.T) {
231247

232248
// Create another healthy stack so we can test GC
233249
finalVersion := "v4"
250+
251+
secretName = fmt.Sprintf("%s-%s-secret", stacksetName, finalVersion)
252+
createSecret(t, secretName)
253+
254+
factory = NewTestStacksetSpecFactory(stacksetName).Ingress().AddReferencedSecret(secretName).StackGC(1, 30)
234255
finalStack := fmt.Sprintf("%s-%s", stacksetName, finalVersion)
235256
spec = factory.Create(t, finalVersion)
236257
err = updateStackset(stacksetName, spec)

cmd/e2e/test_utils.go

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import (
1010
"time"
1111

1212
"github.com/google/go-cmp/cmp"
13+
"github.com/stretchr/testify/require"
1314
rgv1 "github.com/szuecs/routegroup-client/apis/zalando.org/v1"
1415
"github.com/zalando-incubator/stackset-controller/controller"
1516
zv1 "github.com/zalando-incubator/stackset-controller/pkg/apis/zalando.org/v1"
@@ -591,6 +592,32 @@ func setDesiredTrafficWeightsStackset(stacksetName string, weights map[string]fl
591592
}
592593
}
593594

595+
func createConfigMap(t *testing.T, name string) {
596+
configMap := &corev1.ConfigMap{
597+
ObjectMeta: metav1.ObjectMeta{
598+
Name: name,
599+
},
600+
Data: map[string]string{
601+
"key": "value",
602+
},
603+
}
604+
_, err := configMapInterface().Create(context.Background(), configMap, metav1.CreateOptions{})
605+
require.NoError(t, err)
606+
}
607+
608+
func createSecret(t *testing.T, name string) {
609+
secret := &corev1.Secret{
610+
ObjectMeta: metav1.ObjectMeta{
611+
Name: name,
612+
},
613+
Data: map[string][]byte{
614+
"key": []byte("value"),
615+
},
616+
}
617+
_, err := secretInterface().Create(context.Background(), secret, metav1.CreateOptions{})
618+
require.NoError(t, err)
619+
}
620+
594621
func pint32(i int32) *int32 {
595622
return &i
596623
}

0 commit comments

Comments
 (0)