@@ -35,7 +35,11 @@ import (
3535 "github.com/crossplane/crossplane-runtime/pkg/test"
3636)
3737
38- var _ Initializer = & NameAsExternalName {}
38+ var (
39+ _ Initializer = & NameAsExternalName {}
40+ _ ConnectionPublisher = & APISecretPublisher {}
41+ _ LocalConnectionPublisher = & APILocalSecretPublisher {}
42+ )
3943
4044func TestNameAsExternalName (t * testing.T ) {
4145 type args struct {
@@ -61,11 +65,11 @@ func TestNameAsExternalName(t *testing.T) {
6165 client : & test.MockClient {MockUpdate : test .NewMockUpdateFn (errBoom )},
6266 args : args {
6367 ctx : context .Background (),
64- mg : & fake.Managed {ObjectMeta : metav1.ObjectMeta {Name : testExternalName }},
68+ mg : & fake.LegacyManaged {ObjectMeta : metav1.ObjectMeta {Name : testExternalName }},
6569 },
6670 want : want {
6771 err : errors .Wrap (errBoom , errUpdateManaged ),
68- mg : & fake.Managed {ObjectMeta : metav1.ObjectMeta {
72+ mg : & fake.LegacyManaged {ObjectMeta : metav1.ObjectMeta {
6973 Name : testExternalName ,
7074 Annotations : map [string ]string {meta .AnnotationKeyExternalName : testExternalName },
7175 }},
@@ -75,11 +79,11 @@ func TestNameAsExternalName(t *testing.T) {
7579 client : & test.MockClient {MockUpdate : test .NewMockUpdateFn (nil )},
7680 args : args {
7781 ctx : context .Background (),
78- mg : & fake.Managed {ObjectMeta : metav1.ObjectMeta {Name : testExternalName }},
82+ mg : & fake.LegacyManaged {ObjectMeta : metav1.ObjectMeta {Name : testExternalName }},
7983 },
8084 want : want {
8185 err : nil ,
82- mg : & fake.Managed {ObjectMeta : metav1.ObjectMeta {
86+ mg : & fake.LegacyManaged {ObjectMeta : metav1.ObjectMeta {
8387 Name : testExternalName ,
8488 Annotations : map [string ]string {meta .AnnotationKeyExternalName : testExternalName },
8589 }},
@@ -88,14 +92,14 @@ func TestNameAsExternalName(t *testing.T) {
8892 "UpdateNotNeeded" : {
8993 args : args {
9094 ctx : context .Background (),
91- mg : & fake.Managed {ObjectMeta : metav1.ObjectMeta {
95+ mg : & fake.LegacyManaged {ObjectMeta : metav1.ObjectMeta {
9296 Name : testExternalName ,
9397 Annotations : map [string ]string {meta .AnnotationKeyExternalName : "some-name" },
9498 }},
9599 },
96100 want : want {
97101 err : nil ,
98- mg : & fake.Managed {ObjectMeta : metav1.ObjectMeta {
102+ mg : & fake.LegacyManaged {ObjectMeta : metav1.ObjectMeta {
99103 Name : testExternalName ,
100104 Annotations : map [string ]string {meta .AnnotationKeyExternalName : "some-name" },
101105 }},
@@ -122,7 +126,7 @@ func TestNameAsExternalName(t *testing.T) {
122126func TestAPISecretPublisher (t * testing.T ) {
123127 errBoom := errors .New ("boom" )
124128
125- mg := & fake.Managed {
129+ mg := & fake.LegacyManaged {
126130 ConnectionSecretWriterTo : fake.ConnectionSecretWriterTo {Ref : & xpv1.SecretReference {
127131 Namespace : "coolnamespace" ,
128132 Name : "coolsecret" ,
@@ -138,7 +142,7 @@ func TestAPISecretPublisher(t *testing.T) {
138142
139143 type args struct {
140144 ctx context.Context
141- mg resource.Managed
145+ mg resource.LegacyManaged
142146 c ConnectionDetails
143147 }
144148
@@ -157,14 +161,14 @@ func TestAPISecretPublisher(t *testing.T) {
157161 reason : "A managed resource with a nil GetWriteConnectionSecretToReference should not publish a secret" ,
158162 args : args {
159163 ctx : context .Background (),
160- mg : & fake.Managed {},
164+ mg : & fake.LegacyManaged {},
161165 },
162166 },
163167 "ApplyError" : {
164168 reason : "An error applying the connection secret should be returned" ,
165169 fields : fields {
166170 secret : resource .ApplyFn (func (_ context.Context , _ client.Object , _ ... resource.ApplyOption ) error { return errBoom }),
167- typer : fake .SchemeWith (& fake.Managed {}),
171+ typer : fake .SchemeWith (& fake.LegacyManaged {}),
168172 },
169173 args : args {
170174 ctx : context .Background (),
@@ -187,7 +191,7 @@ func TestAPISecretPublisher(t *testing.T) {
187191 }
188192 return nil
189193 }),
190- typer : fake .SchemeWith (& fake.Managed {}),
194+ typer : fake .SchemeWith (& fake.LegacyManaged {}),
191195 },
192196 args : args {
193197 ctx : context .Background (),
@@ -210,7 +214,7 @@ func TestAPISecretPublisher(t *testing.T) {
210214 }
211215 return nil
212216 }),
213- typer : fake .SchemeWith (& fake.Managed {}),
217+ typer : fake .SchemeWith (& fake.LegacyManaged {}),
214218 },
215219 args : args {
216220 ctx : context .Background (),
@@ -239,6 +243,125 @@ func TestAPISecretPublisher(t *testing.T) {
239243 }
240244}
241245
246+ func TestAPILocalSecretPublisher (t * testing.T ) {
247+ errBoom := errors .New ("boom" )
248+
249+ mg := & fake.ModernManaged {
250+ LocalConnectionSecretWriterTo : fake.LocalConnectionSecretWriterTo {Ref : & xpv1.LocalSecretReference {
251+ Name : "coolsecret" ,
252+ }},
253+ }
254+
255+ cd := ConnectionDetails {"cool" : {42 }}
256+
257+ type fields struct {
258+ secret resource.Applicator
259+ typer runtime.ObjectTyper
260+ }
261+
262+ type args struct {
263+ ctx context.Context
264+ mg resource.ModernManaged
265+ c ConnectionDetails
266+ }
267+
268+ type want struct {
269+ err error
270+ published bool
271+ }
272+
273+ cases := map [string ]struct {
274+ reason string
275+ fields fields
276+ args args
277+ want want
278+ }{
279+ "ResourceDoesNotPublishSecret" : {
280+ reason : "A managed resource with a nil GetWriteConnectionSecretToReference should not publish a secret" ,
281+ args : args {
282+ ctx : context .Background (),
283+ mg : & fake.ModernManaged {},
284+ },
285+ },
286+ "ApplyError" : {
287+ reason : "An error applying the connection secret should be returned" ,
288+ fields : fields {
289+ secret : resource .ApplyFn (func (_ context.Context , _ client.Object , _ ... resource.ApplyOption ) error { return errBoom }),
290+ typer : fake .SchemeWith (& fake.ModernManaged {}),
291+ },
292+ args : args {
293+ ctx : context .Background (),
294+ mg : mg ,
295+ },
296+ want : want {
297+ err : errors .Wrap (errBoom , errCreateOrUpdateSecret ),
298+ },
299+ },
300+ "AlreadyPublished" : {
301+ reason : "An up to date connection secret should result in no error and not being published" ,
302+ fields : fields {
303+ secret : resource .ApplyFn (func (ctx context.Context , o client.Object , ao ... resource.ApplyOption ) error {
304+ want := resource .LocalConnectionSecretFor (mg , fake .GVK (mg ))
305+ want .Data = cd
306+ for _ , fn := range ao {
307+ if err := fn (ctx , o , want ); err != nil {
308+ return err
309+ }
310+ }
311+ return nil
312+ }),
313+ typer : fake .SchemeWith (& fake.ModernManaged {}),
314+ },
315+ args : args {
316+ ctx : context .Background (),
317+ mg : mg ,
318+ c : cd ,
319+ },
320+ want : want {
321+ published : false ,
322+ err : nil ,
323+ },
324+ },
325+ "Success" : {
326+ reason : "A successful application of the connection secret should result in no error" ,
327+ fields : fields {
328+ secret : resource .ApplyFn (func (_ context.Context , o client.Object , _ ... resource.ApplyOption ) error {
329+ want := resource .LocalConnectionSecretFor (mg , fake .GVK (mg ))
330+ want .Data = cd
331+ if diff := cmp .Diff (want , o ); diff != "" {
332+ t .Errorf ("-want, +got:\n %s" , diff )
333+ }
334+ return nil
335+ }),
336+ typer : fake .SchemeWith (& fake.ModernManaged {}),
337+ },
338+ args : args {
339+ ctx : context .Background (),
340+ mg : mg ,
341+ c : cd ,
342+ },
343+ want : want {
344+ published : true ,
345+ },
346+ },
347+ }
348+
349+ for name , tc := range cases {
350+ t .Run (name , func (t * testing.T ) {
351+ a := & APILocalSecretPublisher {tc .fields .secret , tc .fields .typer }
352+
353+ got , gotErr := a .PublishConnection (tc .args .ctx , tc .args .mg , tc .args .c )
354+ if diff := cmp .Diff (tc .want .err , gotErr , test .EquateErrors ()); diff != "" {
355+ t .Errorf ("\n %s\n Publish(...): -wantErr, +gotErr:\n %s" , tc .reason , diff )
356+ }
357+
358+ if diff := cmp .Diff (tc .want .published , got ); diff != "" {
359+ t .Errorf ("\n %s\n Publish(...): -wantPublished, +gotPublished:\n %s" , tc .reason , diff )
360+ }
361+ })
362+ }
363+ }
364+
242365type mockSimpleReferencer struct {
243366 resource.Managed
244367
@@ -260,7 +383,7 @@ func (r *mockSimpleReferencer) Equal(s *mockSimpleReferencer) bool {
260383func TestResolveReferences (t * testing.T ) {
261384 errBoom := errors .New ("boom" )
262385
263- different := & fake.Managed {}
386+ different := & fake.LegacyManaged {}
264387
265388 type args struct {
266389 ctx context.Context
@@ -277,7 +400,7 @@ func TestResolveReferences(t *testing.T) {
277400 reason : "Should return early without error when the managed resource has no references." ,
278401 args : args {
279402 ctx : context .Background (),
280- mg : & fake.Managed {},
403+ mg : & fake.LegacyManaged {},
281404 },
282405 want : nil ,
283406 },
@@ -289,7 +412,7 @@ func TestResolveReferences(t *testing.T) {
289412 args : args {
290413 ctx : context .Background (),
291414 mg : & mockSimpleReferencer {
292- Managed : & fake.Managed {},
415+ Managed : & fake.LegacyManaged {},
293416 MockResolveReferences : func (context.Context , client.Reader ) error {
294417 return errBoom
295418 },
@@ -305,7 +428,7 @@ func TestResolveReferences(t *testing.T) {
305428 args : args {
306429 ctx : context .Background (),
307430 mg : & mockSimpleReferencer {
308- Managed : & fake.Managed {},
431+ Managed : & fake.LegacyManaged {},
309432 MockResolveReferences : func (context.Context , client.Reader ) error {
310433 return nil
311434 },
@@ -380,8 +503,8 @@ func TestPrepareJSONMerge(t *testing.T) {
380503 "SuccessfulPatch" : {
381504 reason : "Should successfully compute the JSON merge patch document." ,
382505 args : args {
383- existing : & fake.Managed {},
384- resolved : & fake.Managed {
506+ existing : & fake.LegacyManaged {},
507+ resolved : & fake.LegacyManaged {
385508 ObjectMeta : metav1.ObjectMeta {
386509 Name : "resolved" ,
387510 },
@@ -424,7 +547,7 @@ func TestRetryingCriticalAnnotationUpdater(t *testing.T) {
424547 obj .SetLabels (map [string ]string {"getcalled" : "true" })
425548 return nil
426549 }
427- objectReturnedByGet := & fake.Managed {}
550+ objectReturnedByGet := & fake.LegacyManaged {}
428551 setLabels (objectReturnedByGet )
429552
430553 cases := map [string ]struct {
@@ -443,7 +566,7 @@ func TestRetryingCriticalAnnotationUpdater(t *testing.T) {
443566 }, "abc" , errBoom )),
444567 },
445568 args : args {
446- o : & fake.Managed {},
569+ o : & fake.LegacyManaged {},
447570 },
448571 want : want {
449572 err : errors .Wrap (errBoom , errUpdateCriticalAnnotations ),
@@ -457,11 +580,11 @@ func TestRetryingCriticalAnnotationUpdater(t *testing.T) {
457580 MockUpdate : test .NewMockUpdateFn (errBoom ),
458581 },
459582 args : args {
460- o : & fake.Managed {},
583+ o : & fake.LegacyManaged {},
461584 },
462585 want : want {
463586 err : errors .Wrap (errBoom , errUpdateCriticalAnnotations ),
464- o : & fake.Managed {},
587+ o : & fake.LegacyManaged {},
465588 },
466589 },
467590 "SuccessfulGetAfterAConflict" : {
@@ -474,7 +597,7 @@ func TestRetryingCriticalAnnotationUpdater(t *testing.T) {
474597 }, "abc" , errBoom )),
475598 },
476599 args : args {
477- o : & fake.Managed {},
600+ o : & fake.LegacyManaged {},
478601 },
479602 want : want {
480603 err : errors .Wrap (kerrors .NewConflict (schema.GroupResource {
@@ -491,11 +614,11 @@ func TestRetryingCriticalAnnotationUpdater(t *testing.T) {
491614 MockUpdate : test .NewMockUpdateFn (errBoom ),
492615 },
493616 args : args {
494- o : & fake.Managed {},
617+ o : & fake.LegacyManaged {},
495618 },
496619 want : want {
497620 err : errors .Wrap (errBoom , errUpdateCriticalAnnotations ),
498- o : & fake.Managed {},
621+ o : & fake.LegacyManaged {},
499622 },
500623 },
501624 }
0 commit comments