From 82686ca0f71a2ef1199b54bf61ad84b6e725a2ab Mon Sep 17 00:00:00 2001 From: Benjamin Jee Date: Fri, 23 May 2025 15:03:34 -0700 Subject: [PATCH 1/2] Add DeleteNamespaces function --- tests/framework/resourcemanager.go | 42 ++++++++++++++++++++++++++++++ tests/suite/reconfig_test.go | 12 +++------ 2 files changed, 46 insertions(+), 8 deletions(-) diff --git a/tests/framework/resourcemanager.go b/tests/framework/resourcemanager.go index f398e97375..077586b162 100644 --- a/tests/framework/resourcemanager.go +++ b/tests/framework/resourcemanager.go @@ -29,6 +29,7 @@ import ( "io" "net/http" "reflect" + "slices" "strings" "time" @@ -221,6 +222,47 @@ func (rm *ResourceManager) DeleteNamespace(name string) error { }) } +func (rm *ResourceManager) DeleteNamespaces(names []string) error { + ctx, cancel := context.WithTimeout(context.Background(), rm.TimeoutConfig.DeleteNamespaceTimeout*2) + defer cancel() + + var combinedErrors error + ns := &core.Namespace{} + for _, name := range names { + if err := rm.K8sClient.Get(ctx, types.NamespacedName{Name: name}, ns); err != nil { + if apierrors.IsNotFound(err) { + continue + } + combinedErrors = errors.Join(combinedErrors, fmt.Errorf("error getting namespace: %w", err)) + } + + if err := rm.K8sClient.Delete(ctx, ns); err != nil { + combinedErrors = errors.Join(combinedErrors, fmt.Errorf("error deleting namespace: %w", err)) + } + } + + err := wait.PollUntilContextCancel( + ctx, + 500*time.Millisecond, + true, /* poll immediately */ + func(ctx context.Context) (bool, error) { + nsList := &core.NamespaceList{} + if err := rm.K8sClient.List(ctx, nsList); err != nil { + return false, nil //nolint:nilerr // retry on error + } + + for _, namespace := range nsList.Items { + if slices.Contains(names, namespace.Name) { + return false, nil + } + } + + return true, nil + }) + + return errors.Join(combinedErrors, err) +} + // DeleteFromFiles deletes Kubernetes resources defined within the provided YAML files. func (rm *ResourceManager) DeleteFromFiles(files []string, namespace string) error { handlerFunc := func(obj unstructured.Unstructured) error { diff --git a/tests/suite/reconfig_test.go b/tests/suite/reconfig_test.go index a28596e5ad..d34efc2132 100644 --- a/tests/suite/reconfig_test.go +++ b/tests/suite/reconfig_test.go @@ -170,16 +170,12 @@ var _ = Describe("Reconfiguration Performance Testing", Ordered, Label("nfr", "r cleanupResources := func() error { var err error - // FIXME (bjee19): https://github.com/nginx/nginx-gateway-fabric/issues/2376 - // Find a way to bulk delete these namespaces. - for i := 1; i <= maxResourceCount; i++ { - nsName := "namespace" + strconv.Itoa(i) - resultError := resourceManager.DeleteNamespace(nsName) - if resultError != nil { - err = resultError - } + namespaces := make([]string, maxResourceCount) + for i := range maxResourceCount { + namespaces[i] = "namespace" + strconv.Itoa(i+1) } + err = resourceManager.DeleteNamespaces(namespaces) Expect(resourceManager.DeleteNamespace(reconfigNamespace.Name)).To(Succeed()) return err From 8ea5e0baa5d87007cff585af13db4b809a0eb5f1 Mon Sep 17 00:00:00 2001 From: Benjamin Jee Date: Tue, 27 May 2025 11:57:44 -0700 Subject: [PATCH 2/2] Adjust reconfig results template and delete namespaces --- tests/framework/resourcemanager.go | 8 +++----- tests/suite/reconfig_test.go | 2 +- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/tests/framework/resourcemanager.go b/tests/framework/resourcemanager.go index 077586b162..c48c4d40e0 100644 --- a/tests/framework/resourcemanager.go +++ b/tests/framework/resourcemanager.go @@ -227,16 +227,14 @@ func (rm *ResourceManager) DeleteNamespaces(names []string) error { defer cancel() var combinedErrors error - ns := &core.Namespace{} for _, name := range names { - if err := rm.K8sClient.Get(ctx, types.NamespacedName{Name: name}, ns); err != nil { + ns := &core.Namespace{ObjectMeta: metav1.ObjectMeta{Name: name}} + + if err := rm.K8sClient.Delete(ctx, ns); err != nil { if apierrors.IsNotFound(err) { continue } - combinedErrors = errors.Join(combinedErrors, fmt.Errorf("error getting namespace: %w", err)) - } - if err := rm.K8sClient.Delete(ctx, ns); err != nil { combinedErrors = errors.Join(combinedErrors, fmt.Errorf("error deleting namespace: %w", err)) } } diff --git a/tests/suite/reconfig_test.go b/tests/suite/reconfig_test.go index d34efc2132..b2f0fee0f2 100644 --- a/tests/suite/reconfig_test.go +++ b/tests/suite/reconfig_test.go @@ -486,7 +486,7 @@ Time To Ready Description: {{ .TimeToReadyDescription }} {{- end }} ### NGINX Error Logs -{{ .NGINXErrorLogs }} +{{ .NGINXErrorLogs -}} ` func writeReconfigResults(dest io.Writer, results reconfigTestResults) error {