Skip to content

Commit 2608dc6

Browse files
Add ExpectForceCleanedUp to package (#84)
1 parent 4db72ba commit 2608dc6

File tree

1 file changed

+37
-29
lines changed

1 file changed

+37
-29
lines changed

test/expectations/expectations.go

Lines changed: 37 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,22 @@ package test
22

33
import (
44
"context"
5-
"encoding/json"
65
"fmt"
7-
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
86
"sync"
97
"time"
108

9+
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
10+
"sigs.k8s.io/controller-runtime/pkg/client/apiutil"
11+
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
12+
1113
"github.com/awslabs/operatorpkg/object"
1214
"github.com/awslabs/operatorpkg/singleton"
1315
"github.com/awslabs/operatorpkg/status"
1416
. "github.com/onsi/ginkgo/v2"
1517
. "github.com/onsi/gomega"
1618
"github.com/onsi/gomega/types"
1719
"github.com/samber/lo"
18-
v1 "k8s.io/api/core/v1"
1920
"k8s.io/apimachinery/pkg/api/errors"
20-
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
21-
"k8s.io/apimachinery/pkg/runtime"
2221
"sigs.k8s.io/controller-runtime/pkg/client"
2322
"sigs.k8s.io/controller-runtime/pkg/reconcile"
2423
)
@@ -166,35 +165,44 @@ func ExpectDeleted(ctx context.Context, c client.Client, objects ...client.Objec
166165
}
167166
}
168167

168+
// ExpectCleanedUp waits to cleanup all items passed through objectLists
169169
func ExpectCleanedUp(ctx context.Context, c client.Client, objectLists ...client.ObjectList) {
170+
expectCleanedUp(ctx, c, false, objectLists...)
171+
}
172+
173+
// ExpectForceCleanedUp waits to cleanup all items passed through objectLists
174+
// It forcefully removes any finalizers from all of these objects to unblock delete
175+
func ExpectForceCleanedUp(ctx context.Context, c client.Client, objectLists ...client.ObjectList) {
176+
expectCleanedUp(ctx, c, true, objectLists...)
177+
}
178+
179+
func expectCleanedUp(ctx context.Context, c client.Client, force bool, objectLists ...client.ObjectList) {
170180
wg := sync.WaitGroup{}
171-
namespaces := &v1.NamespaceList{}
172-
Expect(c.List(ctx, namespaces)).To(Succeed())
173181
for _, objectList := range objectLists {
174-
for _, namespace := range namespaces.Items {
175-
wg.Add(1)
176-
go func(objectList client.ObjectList, namespace string) {
177-
defer GinkgoRecover()
178-
defer wg.Done()
179-
180-
unstructuredList := &unstructured.UnstructuredList{}
181-
unstructuredList.UnmarshalJSON(lo.Must(json.Marshal(objectList)))
182-
unstructuredList.SetAPIVersion(object.GVK(objectList).GroupVersion().String())
183-
unstructuredList.SetKind(object.GVK(objectList).Kind)
184-
185-
Expect(c.List(ctx, unstructuredList)).To(Succeed())
186-
unstructuredList.EachListItem(func(o runtime.Object) error {
187-
o.(client.Object).SetFinalizers([]string{})
188-
if err := c.Update(ctx, o.(client.Object)); err != nil {
189-
return err
182+
wg.Add(1)
183+
go func(objectList client.ObjectList) {
184+
defer GinkgoRecover()
185+
defer wg.Done()
186+
187+
Eventually(func(g Gomega) {
188+
metaList := &metav1.PartialObjectMetadataList{}
189+
metaList.SetGroupVersionKind(lo.Must(apiutil.GVKForObject(objectList, c.Scheme())))
190+
g.Expect(c.List(ctx, metaList)).To(Succeed())
191+
192+
for _, item := range metaList.Items {
193+
if force {
194+
stored := item.DeepCopy()
195+
item.SetFinalizers([]string{})
196+
g.Expect(c.Patch(ctx, &item, client.MergeFrom(stored))).To(Succeed())
190197
}
191-
if err := c.Delete(ctx, o.(client.Object)); err != nil {
192-
return err
198+
if item.GetDeletionTimestamp().IsZero() {
199+
g.Expect(client.IgnoreNotFound(c.Delete(ctx, &item, client.PropagationPolicy(metav1.DeletePropagationForeground), &client.DeleteOptions{GracePeriodSeconds: lo.ToPtr(int64(0))}))).To(Succeed())
193200
}
194-
return nil
195-
})
196-
}(objectList, namespace.Name)
197-
}
201+
}
202+
g.Expect(c.List(ctx, metaList, client.Limit(1))).To(Succeed())
203+
g.Expect(metaList.Items).To(HaveLen(0))
204+
}).Should(Succeed())
205+
}(objectList)
198206
}
199207
wg.Wait()
200208
}

0 commit comments

Comments
 (0)