Skip to content

Commit 76ee3c2

Browse files
committed
Ensure every test uses its own namespace
Issue: [sc-12206]
1 parent 0be3701 commit 76ee3c2

16 files changed

+81
-303
lines changed

internal/controller/postgrescluster/apply_test.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ import (
3333
"k8s.io/apimachinery/pkg/api/equality"
3434
apierrors "k8s.io/apimachinery/pkg/api/errors"
3535
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
36-
"k8s.io/apimachinery/pkg/labels"
3736
"k8s.io/apimachinery/pkg/util/version"
3837
"k8s.io/client-go/discovery"
3938
"sigs.k8s.io/controller-runtime/pkg/client"
@@ -55,11 +54,7 @@ func TestServerSideApply(t *testing.T) {
5554
cc, err := client.New(config, client.Options{})
5655
assert.NilError(t, err)
5756

58-
ns := &corev1.Namespace{}
59-
ns.GenerateName = "postgres-operator-test-"
60-
ns.Labels = labels.Set{"postgres-operator-test": t.Name()}
61-
assert.NilError(t, cc.Create(ctx, ns))
62-
t.Cleanup(func() { assert.Check(t, cc.Delete(ctx, ns)) })
57+
ns := setupNamespace(t, cc)
6358

6459
dc, err := discovery.NewDiscoveryClientForConfig(config)
6560
assert.NilError(t, err)

internal/controller/postgrescluster/cluster_test.go

Lines changed: 5 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ import (
3434
rbacv1 "k8s.io/api/rbac/v1"
3535
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3636
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
37-
"k8s.io/apimachinery/pkg/labels"
3837
"k8s.io/apimachinery/pkg/runtime"
3938
"k8s.io/apimachinery/pkg/runtime/schema"
4039
"k8s.io/apimachinery/pkg/util/wait"
@@ -110,11 +109,7 @@ func TestCustomLabels(t *testing.T) {
110109
})
111110
t.Cleanup(func() { teardownManager(cancel, t) })
112111

113-
ns := &corev1.Namespace{}
114-
ns.GenerateName = "postgres-operator-test-"
115-
ns.Labels = labels.Set{"postgres-operator-test": t.Name()}
116-
assert.NilError(t, cc.Create(ctx, ns))
117-
t.Cleanup(func() { assert.Check(t, cc.Delete(ctx, ns)) })
112+
ns := setupNamespace(t, cc)
118113

119114
reconcileTestCluster := func(cluster *v1beta1.PostgresCluster) {
120115
assert.NilError(t, errors.WithStack(reconciler.Client.Create(ctx, cluster)))
@@ -372,11 +367,7 @@ func TestCustomAnnotations(t *testing.T) {
372367
})
373368
t.Cleanup(func() { teardownManager(cancel, t) })
374369

375-
ns := &corev1.Namespace{}
376-
ns.GenerateName = "postgres-operator-test-"
377-
ns.Labels = labels.Set{"postgres-operator-test": ""}
378-
assert.NilError(t, cc.Create(ctx, ns))
379-
t.Cleanup(func() { assert.Check(t, cc.Delete(ctx, ns)) })
370+
ns := setupNamespace(t, cc)
380371

381372
reconcileTestCluster := func(cluster *v1beta1.PostgresCluster) {
382373
assert.NilError(t, errors.WithStack(reconciler.Client.Create(ctx, cluster)))
@@ -642,14 +633,8 @@ func TestContainerSecurityContext(t *testing.T) {
642633
})
643634
t.Cleanup(func() { teardownManager(cancel, t) })
644635

645-
ns := &corev1.Namespace{}
646-
ns.GenerateName = "postgres-operator-test-"
647-
ns.Labels = labels.Set{"postgres-operator-test": ""}
648-
assert.NilError(t, cc.Create(ctx, ns))
649-
t.Cleanup(func() { assert.Check(t, cc.Delete(ctx, ns)) })
650-
651636
cluster := testCluster()
652-
cluster.Namespace = ns.Name
637+
cluster.Namespace = setupNamespace(t, cc).Name
653638

654639
assert.NilError(t, errors.WithStack(reconciler.Client.Create(ctx, cluster)))
655640
t.Cleanup(func() {
@@ -673,7 +658,7 @@ func TestContainerSecurityContext(t *testing.T) {
673658
}
674659

675660
err = reconciler.Client.List(ctx, pods,
676-
client.InNamespace(ns.Name),
661+
client.InNamespace(cluster.Namespace),
677662
client.MatchingLabels{
678663
naming.LabelCluster: cluster.Name,
679664
})
@@ -810,16 +795,10 @@ func TestReconcileClusterPrimaryService(t *testing.T) {
810795
env, cc, _ := setupTestEnv(t, ControllerName)
811796
t.Cleanup(func() { teardownTestEnv(t, env) })
812797

813-
ns := &corev1.Namespace{}
814-
ns.GenerateName = "postgres-operator-test-"
815-
ns.Labels = labels.Set{"postgres-operator-test": t.Name()}
816-
assert.NilError(t, cc.Create(ctx, ns))
817-
t.Cleanup(func() { assert.Check(t, cc.Delete(ctx, ns)) })
818-
819798
reconciler := &Reconciler{Client: cc, Owner: client.FieldOwner(t.Name())}
820799

821800
cluster := testCluster()
822-
cluster.Namespace = ns.Name
801+
cluster.Namespace = setupNamespace(t, cc).Name
823802
assert.NilError(t, cc.Create(ctx, cluster))
824803

825804
_, err := reconciler.reconcileClusterPrimaryService(ctx, cluster, nil)

internal/controller/postgrescluster/controller_ref_manager_test.go

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,9 @@ import (
2222
"testing"
2323

2424
"go.opentelemetry.io/otel"
25-
"gotest.tools/v3/assert"
2625
appsv1 "k8s.io/api/apps/v1"
2726
corev1 "k8s.io/api/core/v1"
2827
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
29-
"k8s.io/apimachinery/pkg/labels"
3028
"sigs.k8s.io/controller-runtime/pkg/client"
3129
"sigs.k8s.io/controller-runtime/pkg/manager"
3230

@@ -53,14 +51,8 @@ func TestManageControllerRefs(t *testing.T) {
5351

5452
clusterName := "hippo"
5553

56-
ns := &corev1.Namespace{}
57-
ns.GenerateName = "postgres-operator-test-"
58-
ns.Labels = labels.Set{"postgres-operator-test": t.Name()}
59-
assert.NilError(t, tClient.Create(ctx, ns))
60-
t.Cleanup(func() { assert.Check(t, tClient.Delete(ctx, ns)) })
61-
6254
cluster := testCluster()
63-
cluster.Namespace = ns.Name
55+
cluster.Namespace = setupNamespace(t, tClient).Name
6456

6557
// create the test PostgresCluster
6658
if err := tClient.Create(ctx, cluster); err != nil {
@@ -70,7 +62,7 @@ func TestManageControllerRefs(t *testing.T) {
7062
// create a base StatefulSet that can be used by the various tests below
7163
objBase := &appsv1.StatefulSet{
7264
ObjectMeta: metav1.ObjectMeta{
73-
Namespace: ns.Name,
65+
Namespace: cluster.Namespace,
7466
},
7567
Spec: appsv1.StatefulSetSpec{
7668
Selector: &metav1.LabelSelector{

internal/controller/postgrescluster/controller_test.go

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ import (
3434
corev1 "k8s.io/api/core/v1"
3535
apierrors "k8s.io/apimachinery/pkg/api/errors"
3636
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
37-
"k8s.io/apimachinery/pkg/labels"
3837
"k8s.io/apimachinery/pkg/util/rand"
3938
"k8s.io/apimachinery/pkg/util/version"
4039
"k8s.io/client-go/tools/record"
@@ -51,14 +50,9 @@ func TestDeleteControlled(t *testing.T) {
5150
tEnv, cc, _ := setupTestEnv(t, t.Name())
5251
t.Cleanup(func() { teardownTestEnv(t, tEnv) })
5352

53+
ns := setupNamespace(t, cc)
5454
reconciler := Reconciler{Client: cc}
5555

56-
ns := &corev1.Namespace{}
57-
ns.GenerateName = "postgres-operator-test-"
58-
ns.Labels = labels.Set{"postgres-operator-test": t.Name()}
59-
assert.NilError(t, cc.Create(ctx, ns))
60-
t.Cleanup(func() { assert.Check(t, cc.Delete(ctx, ns)) })
61-
6256
cluster := testCluster()
6357
cluster.Namespace = ns.Name
6458
cluster.Name = strings.ToLower(t.Name())

internal/controller/postgrescluster/delete_test.go

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,7 @@ func TestReconcilerHandleDelete(t *testing.T) {
7676
cc, err := client.New(config, options)
7777
assert.NilError(t, err)
7878

79-
ns := &corev1.Namespace{}
80-
ns.GenerateName = "postgres-operator-test-"
81-
ns.Labels = labels.Set{"postgres-operator-test": t.Name()}
82-
assert.NilError(t, cc.Create(ctx, ns))
83-
t.Cleanup(func() { assert.Check(t, cc.Delete(ctx, ns)) })
84-
79+
ns := setupNamespace(t, cc)
8580
reconciler := Reconciler{
8681
Client: cc,
8782
Owner: client.FieldOwner(t.Name()),
@@ -381,11 +376,7 @@ func TestReconcilerHandleDeleteNamespace(t *testing.T) {
381376
cc, err := client.New(config, options)
382377
assert.NilError(t, err)
383378

384-
ns := &corev1.Namespace{}
385-
ns.GenerateName = "postgres-operator-test-"
386-
ns.Labels = labels.Set{"postgres-operator-test": t.Name()}
387-
assert.NilError(t, cc.Create(ctx, ns))
388-
t.Cleanup(func() { assert.Check(t, client.IgnoreNotFound(cc.Delete(ctx, ns))) })
379+
ns := setupNamespace(t, cc)
389380

390381
var mm struct {
391382
manager.Manager

internal/controller/postgrescluster/helpers_test.go

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"testing"
2424
"time"
2525

26+
"gotest.tools/v3/assert"
2627
corev1 "k8s.io/api/core/v1"
2728
"k8s.io/apimachinery/pkg/api/resource"
2829
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
@@ -68,6 +69,22 @@ func marshalMatches(actual interface{}, expected string) cmp.Comparison {
6869
return cmp.MarshalMatches(actual, expected)
6970
}
7071

72+
// setupNamespace creates a random namespace that will be deleted by t.Cleanup.
73+
// When creation fails, it calls t.Fatal. The caller may delete the namespace
74+
// at any time.
75+
func setupNamespace(t testing.TB, cc client.Client) *corev1.Namespace {
76+
t.Helper()
77+
ns := &corev1.Namespace{}
78+
ns.GenerateName = "postgres-operator-test-"
79+
ns.Labels = map[string]string{"postgres-operator-test": t.Name()}
80+
81+
ctx := context.Background()
82+
assert.NilError(t, cc.Create(ctx, ns))
83+
t.Cleanup(func() { assert.Check(t, client.IgnoreNotFound(cc.Delete(ctx, ns))) })
84+
85+
return ns
86+
}
87+
7188
func testVolumeClaimSpec() corev1.PersistentVolumeClaimSpec {
7289
// Defines a volume claim spec that can be used to create instances
7390
return corev1.PersistentVolumeClaimSpec{

internal/controller/postgrescluster/instance_test.go

Lines changed: 8 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ import (
4141
"k8s.io/apimachinery/pkg/api/resource"
4242
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
4343
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
44-
"k8s.io/apimachinery/pkg/labels"
4544
"k8s.io/apimachinery/pkg/runtime/schema"
4645
"k8s.io/apimachinery/pkg/types"
4746
"k8s.io/apimachinery/pkg/util/intstr"
@@ -1114,15 +1113,9 @@ func TestDeleteInstance(t *testing.T) {
11141113
})
11151114
t.Cleanup(func() { teardownManager(cancel, t) })
11161115

1117-
ns := &corev1.Namespace{}
1118-
ns.GenerateName = "postgres-operator-test-"
1119-
ns.Labels = labels.Set{"postgres-operator-test": t.Name()}
1120-
assert.NilError(t, reconciler.Client.Create(ctx, ns))
1121-
t.Cleanup(func() { assert.Check(t, reconciler.Client.Delete(ctx, ns)) })
1122-
11231116
// Define, Create, and Reconcile a cluster to get an instance running in kube
11241117
cluster := testCluster()
1125-
cluster.Namespace = ns.Name
1118+
cluster.Namespace = setupNamespace(t, cc).Name
11261119

11271120
assert.NilError(t, errors.WithStack(reconciler.Client.Create(ctx, cluster)))
11281121
t.Cleanup(func() {
@@ -1726,12 +1719,7 @@ func TestReconcileUpgrade(t *testing.T) {
17261719
})
17271720
t.Cleanup(func() { teardownManager(cancel, t) })
17281721

1729-
ns := &corev1.Namespace{}
1730-
ns.GenerateName = "postgres-operator-test-"
1731-
ns.Labels = labels.Set{"postgres-operator-test": t.Name()}
1732-
assert.NilError(t, tClient.Create(ctx, ns))
1733-
t.Cleanup(func() { assert.Check(t, tClient.Delete(ctx, ns)) })
1734-
1722+
ns := setupNamespace(t, tClient)
17351723
sa := &corev1.ServiceAccount{
17361724
ObjectMeta: metav1.ObjectMeta{Name: "hippo-sa"},
17371725
}
@@ -2075,12 +2063,7 @@ func TestObserveUpgradeEnv(t *testing.T) {
20752063
})
20762064
t.Cleanup(func() { teardownManager(cancel, t) })
20772065

2078-
ns := &corev1.Namespace{}
2079-
ns.GenerateName = "postgres-operator-test-"
2080-
ns.Labels = labels.Set{"postgres-operator-test": t.Name()}
2081-
assert.NilError(t, tClient.Create(ctx, ns))
2082-
t.Cleanup(func() { assert.Check(t, tClient.Delete(ctx, ns)) })
2083-
namespace := ns.Name
2066+
namespace := setupNamespace(t, tClient).Name
20842067

20852068
generateJob := func(clusterName string, completed, failed *bool) *batchv1.Job {
20862069

@@ -2302,12 +2285,7 @@ func TestPrepareForUpgrade(t *testing.T) {
23022285
})
23032286
t.Cleanup(func() { teardownManager(cancel, t) })
23042287

2305-
ns := &corev1.Namespace{}
2306-
ns.GenerateName = "postgres-operator-test-"
2307-
ns.Labels = labels.Set{"postgres-operator-test": t.Name()}
2308-
assert.NilError(t, tClient.Create(ctx, ns))
2309-
t.Cleanup(func() { assert.Check(t, tClient.Delete(ctx, ns)) })
2310-
namespace := ns.Name
2288+
ns := setupNamespace(t, tClient)
23112289

23122290
generateJob := func(clusterName string) *batchv1.Job {
23132291

@@ -2344,7 +2322,7 @@ func TestPrepareForUpgrade(t *testing.T) {
23442322
generateRunner := func(name string) *appsv1.StatefulSet {
23452323
return &appsv1.StatefulSet{
23462324
ObjectMeta: metav1.ObjectMeta{
2347-
Name: name, Namespace: namespace,
2325+
Name: name, Namespace: ns.Name,
23482326
},
23492327
Spec: appsv1.StatefulSetSpec{
23502328
Selector: &metav1.LabelSelector{
@@ -2581,7 +2559,7 @@ func TestPrepareForUpgrade(t *testing.T) {
25812559

25822560
clusterName := "prepare-for-upgrade-" + strconv.Itoa(i)
25832561
clusterUID := clusterName
2584-
cluster := fakeUpgradeCluster(clusterName, namespace, clusterUID)
2562+
cluster := fakeUpgradeCluster(clusterName, ns.Name, clusterUID)
25852563
cluster.Status.StartupInstance = primaryInstanceName
25862564
cluster.Status.StartupInstanceSet = primaryInstanceSetName
25872565
cluster.Status.Patroni.SystemIdentifier = "abcde12345"
@@ -2745,11 +2723,7 @@ func TestReconcileInstanceSetPodDisruptionBudget(t *testing.T) {
27452723

27462724
}
27472725

2748-
ns := &corev1.Namespace{}
2749-
ns.GenerateName = "postgres-operator-test-"
2750-
ns.Labels = labels.Set{"postgres-operator-test": t.Name()}
2751-
assert.NilError(t, cc.Create(ctx, ns))
2752-
t.Cleanup(func() { assert.Check(t, cc.Delete(ctx, ns)) })
2726+
ns := setupNamespace(t, cc)
27532727

27542728
t.Run("empty", func(t *testing.T) {
27552729
cluster := &v1beta1.PostgresCluster{}
@@ -2856,11 +2830,7 @@ func TestCleanupDisruptionBudgets(t *testing.T) {
28562830
Owner: client.FieldOwner(t.Name()),
28572831
}
28582832

2859-
ns := &corev1.Namespace{}
2860-
ns.GenerateName = "postgres-operator-test-"
2861-
ns.Labels = labels.Set{"postgres-operator-test": t.Name()}
2862-
assert.NilError(t, cc.Create(ctx, ns))
2863-
t.Cleanup(func() { assert.Check(t, cc.Delete(ctx, ns)) })
2833+
ns := setupNamespace(t, cc)
28642834

28652835
generatePDB := func(
28662836
t *testing.T,

0 commit comments

Comments
 (0)