Skip to content

Commit 54f050c

Browse files
committed
add unit tests for v2
Signed-off-by: Erhan Cagirici <[email protected]>
1 parent f09b0a3 commit 54f050c

File tree

10 files changed

+4292
-394
lines changed

10 files changed

+4292
-394
lines changed

pkg/reconciler/managed/api_test.go

Lines changed: 149 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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

4044
func 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) {
122126
func 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\nPublish(...): -wantErr, +gotErr:\n%s", tc.reason, diff)
356+
}
357+
358+
if diff := cmp.Diff(tc.want.published, got); diff != "" {
359+
t.Errorf("\n%s\nPublish(...): -wantPublished, +gotPublished:\n%s", tc.reason, diff)
360+
}
361+
})
362+
}
363+
}
364+
242365
type mockSimpleReferencer struct {
243366
resource.Managed
244367

@@ -260,7 +383,7 @@ func (r *mockSimpleReferencer) Equal(s *mockSimpleReferencer) bool {
260383
func 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

Comments
 (0)