Skip to content

Commit f1c1e41

Browse files
committed
Fix namespace deletion (!)
1 parent 9bd87c7 commit f1c1e41

9 files changed

+58
-29
lines changed

tests/framework/prometheus.go

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ import (
1313
"github.com/prometheus/client_golang/api"
1414
v1 "github.com/prometheus/client_golang/api/prometheus/v1"
1515
"github.com/prometheus/common/model"
16-
core "k8s.io/api/core/v1"
17-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1816
"k8s.io/client-go/rest"
1917
"sigs.k8s.io/controller-runtime/pkg/client"
2018
)
@@ -121,13 +119,7 @@ func UninstallPrometheus(rm ResourceManager) error {
121119
return fmt.Errorf("failed to uninstall Prometheus: %w; output: %s", err, string(output))
122120
}
123121

124-
ns := &core.Namespace{
125-
ObjectMeta: metav1.ObjectMeta{
126-
Name: prometheusNamespace,
127-
},
128-
}
129-
130-
if err := rm.Delete([]client.Object{ns}); err != nil {
122+
if err := rm.DeleteNamespace(prometheusNamespace); err != nil {
131123
return fmt.Errorf("failed to delete Prometheus namespace: %w", err)
132124
}
133125

tests/framework/resourcemanager.go

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,38 @@ func (rm *ResourceManager) Delete(resources []client.Object, opts ...client.Dele
167167
return nil
168168
}
169169

170+
func (rm *ResourceManager) DeleteNamespace(name string) error {
171+
ctx, cancel := context.WithTimeout(context.Background(), rm.TimeoutConfig.DeleteNamespaceTimeout)
172+
defer cancel()
173+
174+
ns := &core.Namespace{}
175+
if err := rm.K8sClient.Get(ctx, types.NamespacedName{Name: name}, ns); err != nil {
176+
if apierrors.IsNotFound(err) {
177+
return nil
178+
}
179+
return fmt.Errorf("error getting namespace: %w", err)
180+
}
181+
182+
if err := rm.K8sClient.Delete(ctx, ns); err != nil {
183+
return fmt.Errorf("error deleting namespace: %w", err)
184+
}
185+
186+
// Because the namespace deletion is asynchronous, we need to wait for the namespace to be deleted.
187+
return wait.PollUntilContextCancel(
188+
ctx,
189+
500*time.Millisecond,
190+
true, /* poll immediately */
191+
func(ctx context.Context) (bool, error) {
192+
if err := rm.K8sClient.Get(ctx, types.NamespacedName{Name: name}, ns); err != nil {
193+
if apierrors.IsNotFound(err) {
194+
return true, nil
195+
}
196+
return false, fmt.Errorf("error getting namespace: %w", err)
197+
}
198+
return false, nil
199+
})
200+
}
201+
170202
// DeleteFromFiles deletes Kubernetes resources defined within the provided YAML files.
171203
func (rm *ResourceManager) DeleteFromFiles(files []string, namespace string) error {
172204
handlerFunc := func(obj unstructured.Unstructured) error {

tests/framework/timeout.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,9 @@ type TimeoutConfig struct {
1212
// DeleteTimeout represents the maximum time for a Kubernetes object to be deleted.
1313
DeleteTimeout time.Duration
1414

15+
// DeleteNamespaceTimeout represents the maximum time for a Kubernetes namespace to be deleted.
16+
DeleteNamespaceTimeout time.Duration
17+
1518
// GetTimeout represents the maximum time to get a Kubernetes object.
1619
GetTimeout time.Duration
1720

@@ -34,6 +37,7 @@ func DefaultTimeoutConfig() TimeoutConfig {
3437
CreateTimeout: 60 * time.Second,
3538
UpdateTimeout: 60 * time.Second,
3639
DeleteTimeout: 10 * time.Second,
40+
DeleteNamespaceTimeout: 60 * time.Second,
3741
GetTimeout: 10 * time.Second,
3842
ManifestFetchTimeout: 10 * time.Second,
3943
RequestTimeout: 10 * time.Second,

tests/suite/dataplane_perf_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,7 @@ var _ = Describe("Dataplane performance", Ordered, Label("nfr", "performance"),
7777

7878
AfterAll(func() {
7979
Expect(resourceManager.DeleteFromFiles(files, ns.Name)).To(Succeed())
80-
Expect(resourceManager.Delete([]client.Object{ns})).To(Succeed())
80+
Expect(resourceManager.DeleteNamespace(ns.Name)).To(Succeed())
8181
outFile.Close()
8282
})
8383

tests/suite/graceful_recovery_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ var _ = Describe("Graceful Recovery test", Ordered, Label("nfr", "graceful-recov
7878

7979
AfterAll(func() {
8080
Expect(resourceManager.DeleteFromFiles(files, ns.Name)).To(Succeed())
81-
Expect(resourceManager.Delete([]client.Object{ns})).To(Succeed())
81+
Expect(resourceManager.DeleteNamespace(ns.Name)).To(Succeed())
8282
})
8383

8484
It("recovers when NGF container is restarted", func() {

tests/suite/longevity_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ var _ = Describe("Longevity", Label("longevity-setup", "longevity-teardown"), fu
8181
Expect(writeTrafficResults(resultsFile, homeDir, "tea.txt", "HTTPS")).To(Succeed())
8282

8383
Expect(resourceManager.DeleteFromFiles(files, ns.Name)).To(Succeed())
84-
Expect(resourceManager.Delete([]client.Object{ns})).To(Succeed())
84+
Expect(resourceManager.DeleteNamespace(ns.Name)).To(Succeed())
8585
})
8686
})
8787

tests/suite/sample_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ var _ = Describe("Basic test example", Label("functional"), func() {
3434

3535
AfterEach(func() {
3636
Expect(resourceManager.DeleteFromFiles(files, ns.Name)).To(Succeed())
37-
Expect(resourceManager.Delete([]client.Object{ns})).To(Succeed())
37+
Expect(resourceManager.DeleteNamespace(ns.Name)).To(Succeed())
3838
})
3939

4040
It("sends traffic", func() {

tests/suite/scale_test.go

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,7 @@ var _ = Describe("Scale test", Ordered, Label("nfr", "scale"), func() {
3838
"scale/upstreams.yaml",
3939
}
4040

41-
ns = &core.Namespace{
42-
ObjectMeta: metav1.ObjectMeta{
43-
Name: "scale",
44-
},
45-
}
41+
namespace = "scale"
4642

4743
scrapeInterval = 15 * time.Second
4844
queryRangeStep = 15 * time.Second
@@ -96,6 +92,11 @@ var _ = Describe("Scale test", Ordered, Label("nfr", "scale"), func() {
9692
cfg.nfr = true
9793
setup(cfg)
9894

95+
ns := &core.Namespace{
96+
ObjectMeta: metav1.ObjectMeta{
97+
Name: namespace,
98+
},
99+
}
99100
Expect(resourceManager.Apply([]client.Object{ns})).To(Succeed())
100101

101102
podNames, err := framework.GetReadyNGFPodNames(k8sClient, ngfNamespace, releaseName, timeoutConfig.GetTimeout)
@@ -475,7 +476,7 @@ var _ = Describe("Scale test", Ordered, Label("nfr", "scale"), func() {
475476
ctx, cancel := context.WithTimeout(context.Background(), 2*time.Minute)
476477
defer cancel()
477478

478-
Expect(resourceManager.WaitForPodsToBeReady(ctx, ns.Name)).To(Succeed())
479+
Expect(resourceManager.WaitForPodsToBeReady(ctx, namespace)).To(Succeed())
479480

480481
for i := 0; i < len(objects.ScaleIterationGroups); i++ {
481482
Expect(resourceManager.Apply(objects.ScaleIterationGroups[i])).To(Succeed())
@@ -515,8 +516,8 @@ var _ = Describe("Scale test", Ordered, Label("nfr", "scale"), func() {
515516
}
516517

517518
runScaleUpstreams := func() {
518-
Expect(resourceManager.ApplyFromFiles(upstreamsManifests, ns.Name)).To(Succeed())
519-
Expect(resourceManager.WaitForAppsToBeReady(ns.Name)).To(Succeed())
519+
Expect(resourceManager.ApplyFromFiles(upstreamsManifests, namespace)).To(Succeed())
520+
Expect(resourceManager.WaitForAppsToBeReady(namespace)).To(Succeed())
520521

521522
var url string
522523
if portFwdPort != 0 {
@@ -530,13 +531,13 @@ var _ = Describe("Scale test", Ordered, Label("nfr", "scale"), func() {
530531
).WithTimeout(5 * time.Second).WithPolling(100 * time.Millisecond).Should(Succeed())
531532

532533
Expect(
533-
resourceManager.ScaleDeployment(ns.Name, "backend", upstreamServerCount),
534+
resourceManager.ScaleDeployment(namespace, "backend", upstreamServerCount),
534535
).To(Succeed())
535536

536537
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Minute)
537538
defer cancel()
538539

539-
Expect(resourceManager.WaitForPodsToBeReady(ctx, ns.Name)).To(Succeed())
540+
Expect(resourceManager.WaitForPodsToBeReady(ctx, namespace)).To(Succeed())
540541

541542
Eventually(
542543
createResponseChecker(url, address),
@@ -545,11 +546,11 @@ var _ = Describe("Scale test", Ordered, Label("nfr", "scale"), func() {
545546

546547
setNamespace := func(objects framework.ScaleObjects) {
547548
for _, obj := range objects.BaseObjects {
548-
obj.SetNamespace(ns.Name)
549+
obj.SetNamespace(namespace)
549550
}
550551
for _, objs := range objects.ScaleIterationGroups {
551552
for _, obj := range objs {
552-
obj.SetNamespace(ns.Name)
553+
obj.SetNamespace(namespace)
553554
}
554555
}
555556
}
@@ -644,8 +645,8 @@ var _ = Describe("Scale test", Ordered, Label("nfr", "scale"), func() {
644645
It("scales HTTP matches", func() {
645646
const testName = "TestScale_HTTPMatches"
646647

647-
Expect(resourceManager.ApplyFromFiles(matchesManifests, ns.Name)).To(Succeed())
648-
Expect(resourceManager.WaitForAppsToBeReady(ns.Name)).To(Succeed())
648+
Expect(resourceManager.ApplyFromFiles(matchesManifests, namespace)).To(Succeed())
649+
Expect(resourceManager.WaitForAppsToBeReady(namespace)).To(Succeed())
649650

650651
var port int
651652
if portFwdPort != 0 {
@@ -700,7 +701,7 @@ var _ = Describe("Scale test", Ordered, Label("nfr", "scale"), func() {
700701

701702
AfterEach(func() {
702703
teardown(releaseName)
703-
Expect(resourceManager.Delete([]client.Object{ns})).To(Succeed())
704+
Expect(resourceManager.DeleteNamespace(namespace)).To(Succeed())
704705
})
705706

706707
AfterAll(func() {

tests/suite/upgrade_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ var _ = Describe("Upgrade testing", Label("nfr", "upgrade"), func() {
7676

7777
AfterEach(func() {
7878
Expect(resourceManager.DeleteFromFiles(files, ns.Name)).To(Succeed())
79-
Expect(resourceManager.Delete([]client.Object{ns})).To(Succeed())
79+
Expect(resourceManager.DeleteNamespace(ns.Name)).To(Succeed())
8080
resultsFile.Close()
8181
})
8282

0 commit comments

Comments
 (0)