8
8
9
9
mdbv1 "github.com/mongodb/mongodb-kubernetes-operator/api/v1"
10
10
"github.com/mongodb/mongodb-kubernetes-operator/pkg/automationconfig"
11
- "github.com/mongodb/mongodb-kubernetes-operator/pkg/kube/client"
11
+ kubeClient "github.com/mongodb/mongodb-kubernetes-operator/pkg/kube/client"
12
12
mdbClient "github.com/mongodb/mongodb-kubernetes-operator/pkg/kube/client"
13
13
"github.com/mongodb/mongodb-kubernetes-operator/pkg/kube/configmap"
14
14
"github.com/mongodb/mongodb-kubernetes-operator/pkg/kube/secret"
@@ -21,7 +21,7 @@ import (
21
21
22
22
func TestStatefulSet_IsCorrectlyConfiguredWithTLS (t * testing.T ) {
23
23
mdb := newTestReplicaSetWithTLS ()
24
- mgr := client .NewManager (& mdb )
24
+ mgr := kubeClient .NewManager (& mdb )
25
25
26
26
client := mdbClient .NewClient (mgr .GetClient ())
27
27
err := createTLSSecret (client , mdb , "CERT" , "KEY" , "" )
@@ -37,14 +37,17 @@ func TestStatefulSet_IsCorrectlyConfiguredWithTLS(t *testing.T) {
37
37
err = mgr .GetClient ().Get (context .TODO (), types.NamespacedName {Name : mdb .Name , Namespace : mdb .Namespace }, & sts )
38
38
assert .NoError (t , err )
39
39
40
- // Assert that all TLS volumes have been added.
40
+ assertStatefulsetVolumesAndVolumeMounts (t , sts , mdb .TLSOperatorCASecretNamespacedName ().Name , mdb .TLSOperatorSecretNamespacedName ().Name )
41
+ }
42
+
43
+ func assertStatefulsetVolumesAndVolumeMounts (t * testing.T , sts appsv1.StatefulSet , expectedTLSCASecretName string , expectedTLSOperatorSecretName string ) {
41
44
assert .Len (t , sts .Spec .Template .Spec .Volumes , 7 )
42
45
permission := int32 (416 )
43
46
assert .Contains (t , sts .Spec .Template .Spec .Volumes , corev1.Volume {
44
47
Name : "tls-ca" ,
45
48
VolumeSource : corev1.VolumeSource {
46
49
Secret : & corev1.SecretVolumeSource {
47
- SecretName : mdb . TLSOperatorCASecretNamespacedName (). Name ,
50
+ SecretName : expectedTLSCASecretName ,
48
51
DefaultMode : & permission ,
49
52
},
50
53
},
@@ -53,7 +56,7 @@ func TestStatefulSet_IsCorrectlyConfiguredWithTLS(t *testing.T) {
53
56
Name : "tls-secret" ,
54
57
VolumeSource : corev1.VolumeSource {
55
58
Secret : & corev1.SecretVolumeSource {
56
- SecretName : mdb . TLSOperatorSecretNamespacedName (). Name ,
59
+ SecretName : expectedTLSOperatorSecretName ,
57
60
DefaultMode : & permission ,
58
61
},
59
62
},
@@ -81,9 +84,57 @@ func TestStatefulSet_IsCorrectlyConfiguredWithTLS(t *testing.T) {
81
84
assert .Contains (t , mongodbContainer .VolumeMounts , tlsCAVolumeMount )
82
85
}
83
86
87
+ func TestStatefulSet_IsCorrectlyConfiguredWithTLSAfterChangingExistingVolumes (t * testing.T ) {
88
+ mdb := newTestReplicaSetWithTLS ()
89
+ mgr := kubeClient .NewManager (& mdb )
90
+
91
+ cli := mdbClient .NewClient (mgr .GetClient ())
92
+ err := createTLSSecret (cli , mdb , "CERT" , "KEY" , "" )
93
+ assert .NoError (t , err )
94
+
95
+ tlsCAVolumeSecretName := mdb .TLSOperatorCASecretNamespacedName ().Name
96
+ changedTLSCAVolumeSecretName := tlsCAVolumeSecretName + "-old"
97
+
98
+ err = createTLSSecretWithNamespaceAndName (cli , mdb .Namespace , changedTLSCAVolumeSecretName , "CERT" , "KEY" , "" )
99
+ assert .NoError (t , err )
100
+
101
+ err = createTLSConfigMap (cli , mdb )
102
+ assert .NoError (t , err )
103
+
104
+ r := NewReconciler (mgr )
105
+ res , err := r .Reconcile (context .TODO (), reconcile.Request {NamespacedName : types.NamespacedName {Namespace : mdb .Namespace , Name : mdb .Name }})
106
+ assertReconciliationSuccessful (t , res , err )
107
+
108
+ sts := appsv1.StatefulSet {}
109
+ err = mgr .GetClient ().Get (context .TODO (), types.NamespacedName {Name : mdb .Name , Namespace : mdb .Namespace }, & sts )
110
+ assert .NoError (t , err )
111
+
112
+ assertStatefulsetVolumesAndVolumeMounts (t , sts , tlsCAVolumeSecretName , mdb .TLSOperatorSecretNamespacedName ().Name )
113
+
114
+ // updating sts tls-ca volume directly to simulate changing of underlying volume's secret
115
+ for i := range sts .Spec .Template .Spec .Volumes {
116
+ if sts .Spec .Template .Spec .Volumes [i ].Name == "tls-ca" {
117
+ sts .Spec .Template .Spec .Volumes [i ].VolumeSource .Secret .SecretName = changedTLSCAVolumeSecretName
118
+ }
119
+ }
120
+
121
+ err = mgr .GetClient ().Update (context .TODO (), & sts )
122
+ assert .NoError (t , err )
123
+
124
+ assertStatefulsetVolumesAndVolumeMounts (t , sts , changedTLSCAVolumeSecretName , mdb .TLSOperatorSecretNamespacedName ().Name )
125
+
126
+ res , err = r .Reconcile (context .TODO (), reconcile.Request {NamespacedName : types.NamespacedName {Namespace : mdb .Namespace , Name : mdb .Name }})
127
+ assertReconciliationSuccessful (t , res , err )
128
+
129
+ sts = appsv1.StatefulSet {}
130
+ err = mgr .GetClient ().Get (context .TODO (), types.NamespacedName {Name : mdb .Name , Namespace : mdb .Namespace }, & sts )
131
+ assert .NoError (t , err )
132
+ assertStatefulsetVolumesAndVolumeMounts (t , sts , tlsCAVolumeSecretName , mdb .TLSOperatorSecretNamespacedName ().Name )
133
+ }
134
+
84
135
func TestAutomationConfig_IsCorrectlyConfiguredWithTLS (t * testing.T ) {
85
136
createAC := func (mdb mdbv1.MongoDBCommunity ) automationconfig.AutomationConfig {
86
- client := mdbClient .NewClient (client .NewManager (& mdb ).GetClient ())
137
+ client := mdbClient .NewClient (kubeClient .NewManager (& mdb ).GetClient ())
87
138
err := createTLSSecret (client , mdb , "CERT" , "KEY" , "" )
88
139
assert .NoError (t , err )
89
140
err = createTLSConfigMap (client , mdb )
@@ -154,13 +205,13 @@ func TestAutomationConfig_IsCorrectlyConfiguredWithTLS(t *testing.T) {
154
205
func TestTLSOperatorSecret (t * testing.T ) {
155
206
t .Run ("Secret is created if it doesn't exist" , func (t * testing.T ) {
156
207
mdb := newTestReplicaSetWithTLS ()
157
- c := mdbClient .NewClient (client .NewManager (& mdb ).GetClient ())
208
+ c := mdbClient .NewClient (kubeClient .NewManager (& mdb ).GetClient ())
158
209
err := createTLSSecret (c , mdb , "CERT" , "KEY" , "" )
159
210
assert .NoError (t , err )
160
211
err = createTLSConfigMap (c , mdb )
161
212
assert .NoError (t , err )
162
213
163
- r := NewReconciler (client .NewManagerWithClient (c ))
214
+ r := NewReconciler (kubeClient .NewManagerWithClient (c ))
164
215
165
216
err = r .ensureTLSResources (mdb )
166
217
assert .NoError (t , err )
@@ -175,7 +226,7 @@ func TestTLSOperatorSecret(t *testing.T) {
175
226
176
227
t .Run ("Secret is updated if it already exists" , func (t * testing.T ) {
177
228
mdb := newTestReplicaSetWithTLS ()
178
- k8sclient := mdbClient .NewClient (client .NewManager (& mdb ).GetClient ())
229
+ k8sclient := mdbClient .NewClient (kubeClient .NewManager (& mdb ).GetClient ())
179
230
err := createTLSSecret (k8sclient , mdb , "CERT" , "KEY" , "" )
180
231
assert .NoError (t , err )
181
232
err = createTLSConfigMap (k8sclient , mdb )
@@ -190,7 +241,7 @@ func TestTLSOperatorSecret(t *testing.T) {
190
241
err = k8sclient .CreateSecret (s )
191
242
assert .NoError (t , err )
192
243
193
- r := NewReconciler (client .NewManagerWithClient (k8sclient ))
244
+ r := NewReconciler (kubeClient .NewManagerWithClient (k8sclient ))
194
245
195
246
err = r .ensureTLSResources (mdb )
196
247
assert .NoError (t , err )
@@ -226,13 +277,13 @@ func TestCombineCertificateAndKey(t *testing.T) {
226
277
func TestPemSupport (t * testing.T ) {
227
278
t .Run ("Success if only pem is provided" , func (t * testing.T ) {
228
279
mdb := newTestReplicaSetWithTLS ()
229
- c := mdbClient .NewClient (client .NewManager (& mdb ).GetClient ())
280
+ c := mdbClient .NewClient (kubeClient .NewManager (& mdb ).GetClient ())
230
281
err := createTLSSecret (c , mdb , "" , "" , "CERT\n KEY" )
231
282
assert .NoError (t , err )
232
283
err = createTLSConfigMap (c , mdb )
233
284
assert .NoError (t , err )
234
285
235
- r := NewReconciler (client .NewManagerWithClient (c ))
286
+ r := NewReconciler (kubeClient .NewManagerWithClient (c ))
236
287
237
288
err = r .ensureTLSResources (mdb )
238
289
assert .NoError (t , err )
@@ -246,13 +297,13 @@ func TestPemSupport(t *testing.T) {
246
297
})
247
298
t .Run ("Success if pem is equal to cert+key" , func (t * testing.T ) {
248
299
mdb := newTestReplicaSetWithTLS ()
249
- c := mdbClient .NewClient (client .NewManager (& mdb ).GetClient ())
300
+ c := mdbClient .NewClient (kubeClient .NewManager (& mdb ).GetClient ())
250
301
err := createTLSSecret (c , mdb , "CERT" , "KEY" , "CERT\n KEY" )
251
302
assert .NoError (t , err )
252
303
err = createTLSConfigMap (c , mdb )
253
304
assert .NoError (t , err )
254
305
255
- r := NewReconciler (client .NewManagerWithClient (c ))
306
+ r := NewReconciler (kubeClient .NewManagerWithClient (c ))
256
307
257
308
err = r .ensureTLSResources (mdb )
258
309
assert .NoError (t , err )
@@ -266,13 +317,13 @@ func TestPemSupport(t *testing.T) {
266
317
})
267
318
t .Run ("Failure if pem is different from cert+key" , func (t * testing.T ) {
268
319
mdb := newTestReplicaSetWithTLS ()
269
- c := mdbClient .NewClient (client .NewManager (& mdb ).GetClient ())
320
+ c := mdbClient .NewClient (kubeClient .NewManager (& mdb ).GetClient ())
270
321
err := createTLSSecret (c , mdb , "CERT1" , "KEY1" , "CERT\n KEY" )
271
322
assert .NoError (t , err )
272
323
err = createTLSConfigMap (c , mdb )
273
324
assert .NoError (t , err )
274
325
275
- r := NewReconciler (client .NewManagerWithClient (c ))
326
+ r := NewReconciler (kubeClient .NewManagerWithClient (c ))
276
327
277
328
err = r .ensureTLSResources (mdb )
278
329
assert .Error (t , err )
@@ -295,10 +346,10 @@ func createTLSConfigMap(c k8sClient.Client, mdb mdbv1.MongoDBCommunity) error {
295
346
return c .Create (context .TODO (), & configMap )
296
347
}
297
348
298
- func createTLSSecret (c k8sClient.Client , mdb mdbv1. MongoDBCommunity , crt string , key string , pem string ) error {
349
+ func createTLSSecretWithNamespaceAndName (c k8sClient.Client , namespace string , name string , crt string , key string , pem string ) error {
299
350
sBuilder := secret .Builder ().
300
- SetName (mdb . Spec . Security . TLS . CertificateKeySecret . Name ).
301
- SetNamespace (mdb . Namespace )
351
+ SetName (name ).
352
+ SetNamespace (namespace )
302
353
303
354
if crt != "" {
304
355
sBuilder .SetField (tlsSecretCertName , crt )
@@ -314,6 +365,10 @@ func createTLSSecret(c k8sClient.Client, mdb mdbv1.MongoDBCommunity, crt string,
314
365
return c .Create (context .TODO (), & s )
315
366
}
316
367
368
+ func createTLSSecret (c k8sClient.Client , mdb mdbv1.MongoDBCommunity , crt string , key string , pem string ) error {
369
+ return createTLSSecretWithNamespaceAndName (c , mdb .Namespace , mdb .Spec .Security .TLS .CertificateKeySecret .Name , crt , key , pem )
370
+ }
371
+
317
372
func createUserPasswordSecret (c k8sClient.Client , mdb mdbv1.MongoDBCommunity , userPasswordSecretName string , password string ) error {
318
373
sBuilder := secret .Builder ().
319
374
SetName (userPasswordSecretName ).
0 commit comments