github.com/crossplane/upjet@v1.3.0/pkg/terraform/finalizer_test.go (about) 1 // SPDX-FileCopyrightText: 2023 The Crossplane Authors <https://crossplane.io> 2 // 3 // SPDX-License-Identifier: Apache-2.0 4 5 package terraform 6 7 import ( 8 "context" 9 "testing" 10 11 "github.com/crossplane/crossplane-runtime/pkg/logging" 12 xpresource "github.com/crossplane/crossplane-runtime/pkg/resource" 13 "github.com/crossplane/crossplane-runtime/pkg/test" 14 "github.com/google/go-cmp/cmp" 15 "github.com/pkg/errors" 16 17 "github.com/crossplane/upjet/pkg/resource" 18 ) 19 20 var ( 21 errBoom = errors.New("errboom") 22 ) 23 24 type StoreFns struct { 25 WorkspaceFn func(ctx context.Context, tr resource.Terraformed, ts Setup, l logging.Logger) (*Workspace, error) 26 RemoveFn func(obj xpresource.Object) error 27 } 28 29 func (sf *StoreFns) Workspace(ctx context.Context, tr resource.Terraformed, ts Setup, l logging.Logger) (*Workspace, error) { 30 return sf.WorkspaceFn(ctx, tr, ts, l) 31 } 32 33 func (sf *StoreFns) Remove(obj xpresource.Object) error { 34 return sf.RemoveFn(obj) 35 } 36 37 func TestAddFinalizer(t *testing.T) { 38 type args struct { 39 finalizer xpresource.Finalizer 40 store StoreCleaner 41 obj xpresource.Object 42 } 43 type want struct { 44 err error 45 } 46 cases := map[string]struct { 47 reason string 48 args 49 want 50 }{ 51 "Success": { 52 args: args{ 53 finalizer: xpresource.FinalizerFns{ 54 AddFinalizerFn: func(_ context.Context, _ xpresource.Object) error { 55 return nil 56 }, 57 }, 58 }, 59 }, 60 "Failure": { 61 args: args{ 62 finalizer: xpresource.FinalizerFns{ 63 AddFinalizerFn: func(_ context.Context, _ xpresource.Object) error { 64 return errBoom 65 }, 66 }, 67 }, 68 want: want{ 69 err: errBoom, 70 }, 71 }, 72 } 73 for name, tc := range cases { 74 t.Run(name, func(t *testing.T) { 75 f := NewWorkspaceFinalizer(tc.args.store, tc.args.finalizer) 76 err := f.AddFinalizer(context.TODO(), tc.args.obj) 77 if diff := cmp.Diff(tc.want.err, err, test.EquateErrors()); diff != "" { 78 t.Errorf("\n%s\nAddFinalizer(...): -want error, +got error:\n%s", tc.reason, diff) 79 } 80 }) 81 } 82 } 83 84 func TestRemoveFinalizer(t *testing.T) { 85 type args struct { 86 finalizer xpresource.Finalizer 87 store StoreCleaner 88 obj xpresource.Object 89 } 90 type want struct { 91 err error 92 } 93 cases := map[string]struct { 94 reason string 95 args 96 want 97 }{ 98 "Success": { 99 args: args{ 100 store: &StoreFns{ 101 RemoveFn: func(_ xpresource.Object) error { 102 return nil 103 }, 104 }, 105 finalizer: xpresource.FinalizerFns{ 106 RemoveFinalizerFn: func(_ context.Context, _ xpresource.Object) error { 107 return nil 108 }, 109 }, 110 }, 111 }, 112 "StoreRemovalFails": { 113 args: args{ 114 store: &StoreFns{ 115 RemoveFn: func(_ xpresource.Object) error { 116 return errBoom 117 }, 118 }, 119 }, 120 want: want{ 121 err: errors.Wrap(errBoom, errRemoveWorkspace), 122 }, 123 }, 124 "FinalizerFails": { 125 args: args{ 126 store: &StoreFns{ 127 RemoveFn: func(_ xpresource.Object) error { 128 return nil 129 }, 130 }, 131 finalizer: xpresource.FinalizerFns{ 132 RemoveFinalizerFn: func(_ context.Context, _ xpresource.Object) error { 133 return errBoom 134 }, 135 }, 136 }, 137 want: want{ 138 err: errBoom, 139 }, 140 }, 141 } 142 for name, tc := range cases { 143 t.Run(name, func(t *testing.T) { 144 f := NewWorkspaceFinalizer(tc.args.store, tc.args.finalizer) 145 err := f.RemoveFinalizer(context.TODO(), tc.args.obj) 146 if diff := cmp.Diff(tc.want.err, err, test.EquateErrors()); diff != "" { 147 t.Errorf("\n%s\nRemoveFinalizer(...): -want error, +got error:\n%s", tc.reason, diff) 148 } 149 }) 150 } 151 }