Skip to content

Commit 9308661

Browse files
committed
extract resetEnvironment to a TestUtils method and always reset all CR in the reverse dependency order, so we prevent possible cross-test pollution
1 parent 58ce8f8 commit 9308661

8 files changed

Lines changed: 55 additions & 184 deletions

File tree

operator/src/test/java/it/aboutbits/postgresql/PostgreSQLInstanceReadinessCheckTest.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
import io.fabric8.kubernetes.client.KubernetesClient;
44
import io.quarkus.test.junit.QuarkusTest;
5+
import it.aboutbits.postgresql._support.testdata.base.TestUtil;
56
import it.aboutbits.postgresql._support.testdata.persisted.Given;
6-
import it.aboutbits.postgresql.crd.clusterconnection.ClusterConnection;
77
import jakarta.inject.Inject;
88
import org.eclipse.microprofile.health.HealthCheckResponse;
99
import org.eclipse.microprofile.health.Readiness;
@@ -12,10 +12,8 @@
1212
import org.junit.jupiter.api.Test;
1313

1414
import java.util.Objects;
15-
import java.util.concurrent.TimeUnit;
1615

1716
import static org.assertj.core.api.Assertions.assertThat;
18-
import static org.awaitility.Awaitility.await;
1917

2018
@NullMarked
2119
@QuarkusTest
@@ -32,13 +30,7 @@ class PostgreSQLInstanceReadinessCheckTest {
3230

3331
@BeforeEach
3432
void resetEnvironment() {
35-
kubernetesClient.resources(ClusterConnection.class).delete();
36-
37-
await().atMost(5, TimeUnit.SECONDS)
38-
.pollInterval(100, TimeUnit.MILLISECONDS)
39-
.until(() ->
40-
kubernetesClient.resources(ClusterConnection.class).list().getItems().isEmpty()
41-
);
33+
TestUtil.resetEnvironment(kubernetesClient);
4234
}
4335

4436
@Test
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package it.aboutbits.postgresql._support.testdata.base;
2+
3+
import io.fabric8.kubernetes.api.model.HasMetadata;
4+
import io.fabric8.kubernetes.client.KubernetesClient;
5+
import it.aboutbits.postgresql.crd.clusterconnection.ClusterConnection;
6+
import it.aboutbits.postgresql.crd.database.Database;
7+
import it.aboutbits.postgresql.crd.defaultprivilege.DefaultPrivilege;
8+
import it.aboutbits.postgresql.crd.grant.Grant;
9+
import it.aboutbits.postgresql.crd.role.Role;
10+
import it.aboutbits.postgresql.crd.schema.Schema;
11+
import org.jspecify.annotations.NullMarked;
12+
13+
import java.util.concurrent.TimeUnit;
14+
15+
import static org.awaitility.Awaitility.await;
16+
17+
@NullMarked
18+
public class TestUtil {
19+
public static void resetEnvironment(KubernetesClient kubernetesClient) {
20+
// Reverse Dependency Deletion
21+
deleteResource(kubernetesClient, DefaultPrivilege.class);
22+
deleteResource(kubernetesClient, Grant.class);
23+
deleteResource(kubernetesClient, Schema.class);
24+
deleteResource(kubernetesClient, Role.class);
25+
deleteResource(kubernetesClient, Database.class);
26+
deleteResource(kubernetesClient, ClusterConnection.class);
27+
}
28+
29+
public static void deleteResource(
30+
KubernetesClient kubernetesClient,
31+
Class<? extends HasMetadata> resourceClass
32+
) {
33+
// Async call to the Kubernetes API Server that triggers the Operator Controllers
34+
kubernetesClient.resources(resourceClass).delete();
35+
36+
// Wait for the Operator Controller to finish the CR cleanup
37+
await().atMost(5, TimeUnit.SECONDS)
38+
.pollInterval(100, TimeUnit.MILLISECONDS)
39+
.until(() -> kubernetesClient.resources(resourceClass).list().getItems().isEmpty());
40+
}
41+
}

operator/src/test/java/it/aboutbits/postgresql/crd/clusterconnection/ClusterConnectionReconcilerTest.java

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import io.fabric8.kubernetes.client.KubernetesClient;
44
import io.quarkus.test.junit.QuarkusTest;
5+
import it.aboutbits.postgresql._support.testdata.base.TestUtil;
56
import it.aboutbits.postgresql._support.testdata.persisted.Given;
67
import it.aboutbits.postgresql.core.CRPhase;
78
import it.aboutbits.postgresql.core.CRStatus;
@@ -18,13 +19,11 @@
1819
import java.time.ZoneOffset;
1920
import java.time.temporal.ChronoUnit;
2021
import java.util.Objects;
21-
import java.util.concurrent.TimeUnit;
2222
import java.util.concurrent.atomic.AtomicReference;
2323

2424
import static org.assertj.core.api.Assertions.assertThat;
2525
import static org.assertj.core.api.Assertions.assertThatNoException;
2626
import static org.assertj.core.api.Assertions.within;
27-
import static org.awaitility.Awaitility.await;
2827

2928
@NullMarked
3029
@QuarkusTest
@@ -38,13 +37,7 @@ class ClusterConnectionReconcilerTest {
3837

3938
@BeforeEach
4039
void resetEnvironment() {
41-
kubernetesClient.resources(ClusterConnection.class).delete();
42-
43-
await().atMost(5, TimeUnit.SECONDS)
44-
.pollInterval(100, TimeUnit.MILLISECONDS)
45-
.until(() ->
46-
kubernetesClient.resources(ClusterConnection.class).list().getItems().isEmpty()
47-
);
40+
TestUtil.resetEnvironment(kubernetesClient);
4841
}
4942

5043
@Test

operator/src/test/java/it/aboutbits/postgresql/crd/database/DatabaseReconcilerTest.java

Lines changed: 2 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import io.fabric8.kubernetes.client.KubernetesClient;
44
import io.quarkus.test.junit.QuarkusTest;
5+
import it.aboutbits.postgresql._support.testdata.base.TestUtil;
56
import it.aboutbits.postgresql._support.testdata.persisted.Given;
67
import it.aboutbits.postgresql.core.CRPhase;
78
import it.aboutbits.postgresql.core.CRStatus;
89
import it.aboutbits.postgresql.core.PostgreSQLContextFactory;
9-
import it.aboutbits.postgresql.crd.clusterconnection.ClusterConnection;
1010
import lombok.RequiredArgsConstructor;
1111
import org.jspecify.annotations.NullMarked;
1212
import org.junit.jupiter.api.BeforeEach;
@@ -15,11 +15,9 @@
1515

1616
import java.time.OffsetDateTime;
1717
import java.time.ZoneOffset;
18-
import java.util.concurrent.TimeUnit;
1918

2019
import static it.aboutbits.postgresql.core.ReclaimPolicy.DELETE;
2120
import static org.assertj.core.api.Assertions.assertThat;
22-
import static org.awaitility.Awaitility.await;
2321

2422
@NullMarked
2523
@QuarkusTest
@@ -34,21 +32,7 @@ class DatabaseReconcilerTest {
3432

3533
@BeforeEach
3634
void resetEnvironment() {
37-
kubernetesClient.resources(Database.class).delete();
38-
39-
await().atMost(5, TimeUnit.SECONDS)
40-
.pollInterval(100, TimeUnit.MILLISECONDS)
41-
.until(() ->
42-
kubernetesClient.resources(Database.class).list().getItems().isEmpty()
43-
);
44-
45-
kubernetesClient.resources(ClusterConnection.class).delete();
46-
47-
await().atMost(5, TimeUnit.SECONDS)
48-
.pollInterval(100, TimeUnit.MILLISECONDS)
49-
.until(() ->
50-
kubernetesClient.resources(ClusterConnection.class).list().getItems().isEmpty()
51-
);
35+
TestUtil.resetEnvironment(kubernetesClient);
5236
}
5337

5438
@Test

operator/src/test/java/it/aboutbits/postgresql/crd/defaultprivilege/DefaultPrivilegeReconcilerTest.java

Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,14 @@
33
import io.fabric8.kubernetes.client.KubernetesClient;
44
import io.fabric8.kubernetes.client.KubernetesClientException;
55
import io.quarkus.test.junit.QuarkusTest;
6+
import it.aboutbits.postgresql._support.testdata.base.TestUtil;
67
import it.aboutbits.postgresql._support.testdata.persisted.Given;
78
import it.aboutbits.postgresql._support.valuesource.BlankSource;
89
import it.aboutbits.postgresql.core.CRPhase;
910
import it.aboutbits.postgresql.core.CRStatus;
1011
import it.aboutbits.postgresql.core.PostgreSQLContextFactory;
1112
import it.aboutbits.postgresql.core.Privilege;
1213
import it.aboutbits.postgresql.crd.clusterconnection.ClusterConnection;
13-
import it.aboutbits.postgresql.crd.database.Database;
14-
import it.aboutbits.postgresql.crd.role.Role;
15-
import it.aboutbits.postgresql.crd.schema.Schema;
1614
import lombok.RequiredArgsConstructor;
1715
import org.jspecify.annotations.NullMarked;
1816
import org.junit.jupiter.api.BeforeEach;
@@ -43,7 +41,6 @@
4341
import static it.aboutbits.postgresql.crd.defaultprivilege.DefaultPrivilegeObjectType.TABLE;
4442
import static org.assertj.core.api.Assertions.assertThat;
4543
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
46-
import static org.awaitility.Awaitility.await;
4744

4845
@NullMarked
4946
@QuarkusTest
@@ -58,45 +55,7 @@ class DefaultPrivilegeReconcilerTest {
5855

5956
@BeforeEach
6057
void resetEnvironment() {
61-
kubernetesClient.resources(DefaultPrivilege.class).delete();
62-
63-
await().atMost(5, TimeUnit.SECONDS)
64-
.pollInterval(100, TimeUnit.MILLISECONDS)
65-
.until(() ->
66-
kubernetesClient.resources(DefaultPrivilege.class).list().getItems().isEmpty()
67-
);
68-
69-
kubernetesClient.resources(Schema.class).delete();
70-
71-
await().atMost(5, TimeUnit.SECONDS)
72-
.pollInterval(100, TimeUnit.MILLISECONDS)
73-
.until(() ->
74-
kubernetesClient.resources(Schema.class).list().getItems().isEmpty()
75-
);
76-
77-
kubernetesClient.resources(Role.class).delete();
78-
79-
await().atMost(5, TimeUnit.SECONDS)
80-
.pollInterval(100, TimeUnit.MILLISECONDS)
81-
.until(() ->
82-
kubernetesClient.resources(Role.class).list().getItems().isEmpty()
83-
);
84-
85-
kubernetesClient.resources(Database.class).delete();
86-
87-
await().atMost(5, TimeUnit.SECONDS)
88-
.pollInterval(100, TimeUnit.MILLISECONDS)
89-
.until(() ->
90-
kubernetesClient.resources(Database.class).list().getItems().isEmpty()
91-
);
92-
93-
kubernetesClient.resources(ClusterConnection.class).delete();
94-
95-
await().atMost(5, TimeUnit.SECONDS)
96-
.pollInterval(100, TimeUnit.MILLISECONDS)
97-
.until(() ->
98-
kubernetesClient.resources(ClusterConnection.class).list().getItems().isEmpty()
99-
);
58+
TestUtil.resetEnvironment(kubernetesClient);
10059
}
10160

10261
@Nested

operator/src/test/java/it/aboutbits/postgresql/crd/grant/GrantReconcilerTest.java

Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,14 @@
33
import io.fabric8.kubernetes.client.KubernetesClient;
44
import io.fabric8.kubernetes.client.KubernetesClientException;
55
import io.quarkus.test.junit.QuarkusTest;
6+
import it.aboutbits.postgresql._support.testdata.base.TestUtil;
67
import it.aboutbits.postgresql._support.testdata.persisted.Given;
78
import it.aboutbits.postgresql._support.valuesource.BlankSource;
89
import it.aboutbits.postgresql.core.CRPhase;
910
import it.aboutbits.postgresql.core.CRStatus;
1011
import it.aboutbits.postgresql.core.PostgreSQLContextFactory;
1112
import it.aboutbits.postgresql.core.Privilege;
1213
import it.aboutbits.postgresql.crd.clusterconnection.ClusterConnection;
13-
import it.aboutbits.postgresql.crd.database.Database;
14-
import it.aboutbits.postgresql.crd.role.Role;
15-
import it.aboutbits.postgresql.crd.schema.Schema;
1614
import lombok.RequiredArgsConstructor;
1715
import org.jooq.impl.SQLDataType;
1816
import org.jspecify.annotations.NullMarked;
@@ -47,7 +45,6 @@
4745
import static it.aboutbits.postgresql.crd.grant.GrantObjectType.TABLE;
4846
import static org.assertj.core.api.Assertions.assertThat;
4947
import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
50-
import static org.awaitility.Awaitility.await;
5148
import static org.jooq.impl.DSL.quotedName;
5249

5350
@NullMarked
@@ -63,45 +60,7 @@ class GrantReconcilerTest {
6360

6461
@BeforeEach
6562
void resetEnvironment() {
66-
kubernetesClient.resources(Grant.class).delete();
67-
68-
await().atMost(5, TimeUnit.SECONDS)
69-
.pollInterval(100, TimeUnit.MILLISECONDS)
70-
.until(() ->
71-
kubernetesClient.resources(Grant.class).list().getItems().isEmpty()
72-
);
73-
74-
kubernetesClient.resources(Schema.class).delete();
75-
76-
await().atMost(5, TimeUnit.SECONDS)
77-
.pollInterval(100, TimeUnit.MILLISECONDS)
78-
.until(() ->
79-
kubernetesClient.resources(Schema.class).list().getItems().isEmpty()
80-
);
81-
82-
kubernetesClient.resources(Role.class).delete();
83-
84-
await().atMost(5, TimeUnit.SECONDS)
85-
.pollInterval(100, TimeUnit.MILLISECONDS)
86-
.until(() ->
87-
kubernetesClient.resources(Role.class).list().getItems().isEmpty()
88-
);
89-
90-
kubernetesClient.resources(Database.class).delete();
91-
92-
await().atMost(5, TimeUnit.SECONDS)
93-
.pollInterval(100, TimeUnit.MILLISECONDS)
94-
.until(() ->
95-
kubernetesClient.resources(Database.class).list().getItems().isEmpty()
96-
);
97-
98-
kubernetesClient.resources(ClusterConnection.class).delete();
99-
100-
await().atMost(5, TimeUnit.SECONDS)
101-
.pollInterval(100, TimeUnit.MILLISECONDS)
102-
.until(() ->
103-
kubernetesClient.resources(ClusterConnection.class).list().getItems().isEmpty()
104-
);
63+
TestUtil.resetEnvironment(kubernetesClient);
10564
}
10665

10766
@Nested

operator/src/test/java/it/aboutbits/postgresql/crd/role/RoleReconcilerTest.java

Lines changed: 2 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,13 @@
33
import io.fabric8.kubernetes.api.model.SecretBuilder;
44
import io.fabric8.kubernetes.client.KubernetesClient;
55
import io.quarkus.test.junit.QuarkusTest;
6+
import it.aboutbits.postgresql._support.testdata.base.TestUtil;
67
import it.aboutbits.postgresql._support.testdata.persisted.Given;
78
import it.aboutbits.postgresql.core.CRPhase;
89
import it.aboutbits.postgresql.core.CRStatus;
910
import it.aboutbits.postgresql.core.PostgreSQLAuthenticationService;
1011
import it.aboutbits.postgresql.core.PostgreSQLContextFactory;
1112
import it.aboutbits.postgresql.core.SecretRef;
12-
import it.aboutbits.postgresql.crd.clusterconnection.ClusterConnection;
13-
import it.aboutbits.postgresql.crd.database.Database;
14-
import it.aboutbits.postgresql.crd.grant.Grant;
15-
import it.aboutbits.postgresql.crd.schema.Schema;
1613
import lombok.RequiredArgsConstructor;
1714
import org.jooq.DSLContext;
1815
import org.jooq.Field;
@@ -54,45 +51,7 @@ class RoleReconcilerTest {
5451

5552
@BeforeEach
5653
void resetEnvironment() {
57-
kubernetesClient.resources(Grant.class).delete();
58-
59-
await().atMost(5, TimeUnit.SECONDS)
60-
.pollInterval(100, TimeUnit.MILLISECONDS)
61-
.until(() ->
62-
kubernetesClient.resources(Grant.class).list().getItems().isEmpty()
63-
);
64-
65-
kubernetesClient.resources(Schema.class).delete();
66-
67-
await().atMost(5, TimeUnit.SECONDS)
68-
.pollInterval(100, TimeUnit.MILLISECONDS)
69-
.until(() ->
70-
kubernetesClient.resources(Schema.class).list().getItems().isEmpty()
71-
);
72-
73-
kubernetesClient.resources(Role.class).delete();
74-
75-
await().atMost(5, TimeUnit.SECONDS)
76-
.pollInterval(100, TimeUnit.MILLISECONDS)
77-
.until(() ->
78-
kubernetesClient.resources(Role.class).list().getItems().isEmpty()
79-
);
80-
81-
kubernetesClient.resources(Database.class).delete();
82-
83-
await().atMost(5, TimeUnit.SECONDS)
84-
.pollInterval(100, TimeUnit.MILLISECONDS)
85-
.until(() ->
86-
kubernetesClient.resources(Database.class).list().getItems().isEmpty()
87-
);
88-
89-
kubernetesClient.resources(ClusterConnection.class).delete();
90-
91-
await().atMost(5, TimeUnit.SECONDS)
92-
.pollInterval(100, TimeUnit.MILLISECONDS)
93-
.until(() ->
94-
kubernetesClient.resources(ClusterConnection.class).list().getItems().isEmpty()
95-
);
54+
TestUtil.resetEnvironment(kubernetesClient);
9655
}
9756

9857
@Test

0 commit comments

Comments
 (0)