88
99 mdbv1 "github.com/mongodb/mongodb-kubernetes-operator/api/v1"
1010 "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"
1212 mdbClient "github.com/mongodb/mongodb-kubernetes-operator/pkg/kube/client"
1313 "github.com/mongodb/mongodb-kubernetes-operator/pkg/kube/configmap"
1414 "github.com/mongodb/mongodb-kubernetes-operator/pkg/kube/secret"
@@ -21,7 +21,7 @@ import (
2121
2222func TestStatefulSet_IsCorrectlyConfiguredWithTLS (t * testing.T ) {
2323 mdb := newTestReplicaSetWithTLS ()
24- mgr := client .NewManager (& mdb )
24+ mgr := kubeClient .NewManager (& mdb )
2525
2626 client := mdbClient .NewClient (mgr .GetClient ())
2727 err := createTLSSecret (client , mdb , "CERT" , "KEY" , "" )
@@ -37,14 +37,17 @@ func TestStatefulSet_IsCorrectlyConfiguredWithTLS(t *testing.T) {
3737 err = mgr .GetClient ().Get (context .TODO (), types.NamespacedName {Name : mdb .Name , Namespace : mdb .Namespace }, & sts )
3838 assert .NoError (t , err )
3939
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 ) {
4144 assert .Len (t , sts .Spec .Template .Spec .Volumes , 7 )
4245 permission := int32 (416 )
4346 assert .Contains (t , sts .Spec .Template .Spec .Volumes , corev1.Volume {
4447 Name : "tls-ca" ,
4548 VolumeSource : corev1.VolumeSource {
4649 Secret : & corev1.SecretVolumeSource {
47- SecretName : mdb . TLSOperatorCASecretNamespacedName (). Name ,
50+ SecretName : expectedTLSCASecretName ,
4851 DefaultMode : & permission ,
4952 },
5053 },
@@ -53,7 +56,7 @@ func TestStatefulSet_IsCorrectlyConfiguredWithTLS(t *testing.T) {
5356 Name : "tls-secret" ,
5457 VolumeSource : corev1.VolumeSource {
5558 Secret : & corev1.SecretVolumeSource {
56- SecretName : mdb . TLSOperatorSecretNamespacedName (). Name ,
59+ SecretName : expectedTLSOperatorSecretName ,
5760 DefaultMode : & permission ,
5861 },
5962 },
@@ -81,9 +84,57 @@ func TestStatefulSet_IsCorrectlyConfiguredWithTLS(t *testing.T) {
8184 assert .Contains (t , mongodbContainer .VolumeMounts , tlsCAVolumeMount )
8285}
8386
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+
84135func TestAutomationConfig_IsCorrectlyConfiguredWithTLS (t * testing.T ) {
85136 createAC := func (mdb mdbv1.MongoDBCommunity ) automationconfig.AutomationConfig {
86- client := mdbClient .NewClient (client .NewManager (& mdb ).GetClient ())
137+ client := mdbClient .NewClient (kubeClient .NewManager (& mdb ).GetClient ())
87138 err := createTLSSecret (client , mdb , "CERT" , "KEY" , "" )
88139 assert .NoError (t , err )
89140 err = createTLSConfigMap (client , mdb )
@@ -154,13 +205,13 @@ func TestAutomationConfig_IsCorrectlyConfiguredWithTLS(t *testing.T) {
154205func TestTLSOperatorSecret (t * testing.T ) {
155206 t .Run ("Secret is created if it doesn't exist" , func (t * testing.T ) {
156207 mdb := newTestReplicaSetWithTLS ()
157- c := mdbClient .NewClient (client .NewManager (& mdb ).GetClient ())
208+ c := mdbClient .NewClient (kubeClient .NewManager (& mdb ).GetClient ())
158209 err := createTLSSecret (c , mdb , "CERT" , "KEY" , "" )
159210 assert .NoError (t , err )
160211 err = createTLSConfigMap (c , mdb )
161212 assert .NoError (t , err )
162213
163- r := NewReconciler (client .NewManagerWithClient (c ))
214+ r := NewReconciler (kubeClient .NewManagerWithClient (c ))
164215
165216 err = r .ensureTLSResources (mdb )
166217 assert .NoError (t , err )
@@ -175,7 +226,7 @@ func TestTLSOperatorSecret(t *testing.T) {
175226
176227 t .Run ("Secret is updated if it already exists" , func (t * testing.T ) {
177228 mdb := newTestReplicaSetWithTLS ()
178- k8sclient := mdbClient .NewClient (client .NewManager (& mdb ).GetClient ())
229+ k8sclient := mdbClient .NewClient (kubeClient .NewManager (& mdb ).GetClient ())
179230 err := createTLSSecret (k8sclient , mdb , "CERT" , "KEY" , "" )
180231 assert .NoError (t , err )
181232 err = createTLSConfigMap (k8sclient , mdb )
@@ -190,7 +241,7 @@ func TestTLSOperatorSecret(t *testing.T) {
190241 err = k8sclient .CreateSecret (s )
191242 assert .NoError (t , err )
192243
193- r := NewReconciler (client .NewManagerWithClient (k8sclient ))
244+ r := NewReconciler (kubeClient .NewManagerWithClient (k8sclient ))
194245
195246 err = r .ensureTLSResources (mdb )
196247 assert .NoError (t , err )
@@ -226,13 +277,13 @@ func TestCombineCertificateAndKey(t *testing.T) {
226277func TestPemSupport (t * testing.T ) {
227278 t .Run ("Success if only pem is provided" , func (t * testing.T ) {
228279 mdb := newTestReplicaSetWithTLS ()
229- c := mdbClient .NewClient (client .NewManager (& mdb ).GetClient ())
280+ c := mdbClient .NewClient (kubeClient .NewManager (& mdb ).GetClient ())
230281 err := createTLSSecret (c , mdb , "" , "" , "CERT\n KEY" )
231282 assert .NoError (t , err )
232283 err = createTLSConfigMap (c , mdb )
233284 assert .NoError (t , err )
234285
235- r := NewReconciler (client .NewManagerWithClient (c ))
286+ r := NewReconciler (kubeClient .NewManagerWithClient (c ))
236287
237288 err = r .ensureTLSResources (mdb )
238289 assert .NoError (t , err )
@@ -246,13 +297,13 @@ func TestPemSupport(t *testing.T) {
246297 })
247298 t .Run ("Success if pem is equal to cert+key" , func (t * testing.T ) {
248299 mdb := newTestReplicaSetWithTLS ()
249- c := mdbClient .NewClient (client .NewManager (& mdb ).GetClient ())
300+ c := mdbClient .NewClient (kubeClient .NewManager (& mdb ).GetClient ())
250301 err := createTLSSecret (c , mdb , "CERT" , "KEY" , "CERT\n KEY" )
251302 assert .NoError (t , err )
252303 err = createTLSConfigMap (c , mdb )
253304 assert .NoError (t , err )
254305
255- r := NewReconciler (client .NewManagerWithClient (c ))
306+ r := NewReconciler (kubeClient .NewManagerWithClient (c ))
256307
257308 err = r .ensureTLSResources (mdb )
258309 assert .NoError (t , err )
@@ -266,13 +317,13 @@ func TestPemSupport(t *testing.T) {
266317 })
267318 t .Run ("Failure if pem is different from cert+key" , func (t * testing.T ) {
268319 mdb := newTestReplicaSetWithTLS ()
269- c := mdbClient .NewClient (client .NewManager (& mdb ).GetClient ())
320+ c := mdbClient .NewClient (kubeClient .NewManager (& mdb ).GetClient ())
270321 err := createTLSSecret (c , mdb , "CERT1" , "KEY1" , "CERT\n KEY" )
271322 assert .NoError (t , err )
272323 err = createTLSConfigMap (c , mdb )
273324 assert .NoError (t , err )
274325
275- r := NewReconciler (client .NewManagerWithClient (c ))
326+ r := NewReconciler (kubeClient .NewManagerWithClient (c ))
276327
277328 err = r .ensureTLSResources (mdb )
278329 assert .Error (t , err )
@@ -295,10 +346,10 @@ func createTLSConfigMap(c k8sClient.Client, mdb mdbv1.MongoDBCommunity) error {
295346 return c .Create (context .TODO (), & configMap )
296347}
297348
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 {
299350 sBuilder := secret .Builder ().
300- SetName (mdb . Spec . Security . TLS . CertificateKeySecret . Name ).
301- SetNamespace (mdb . Namespace )
351+ SetName (name ).
352+ SetNamespace (namespace )
302353
303354 if crt != "" {
304355 sBuilder .SetField (tlsSecretCertName , crt )
@@ -314,6 +365,10 @@ func createTLSSecret(c k8sClient.Client, mdb mdbv1.MongoDBCommunity, crt string,
314365 return c .Create (context .TODO (), & s )
315366}
316367
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+
317372func createUserPasswordSecret (c k8sClient.Client , mdb mdbv1.MongoDBCommunity , userPasswordSecretName string , password string ) error {
318373 sBuilder := secret .Builder ().
319374 SetName (userPasswordSecretName ).
0 commit comments