From 6e638672dbddfd2496f2cb5ab5981bd4c3a7216c Mon Sep 17 00:00:00 2001
From: csviri
Date: Mon, 27 Mar 2023 10:18:43 +0200
Subject: [PATCH 1/4] feat: use jenvtest in special ITs
---
operator-framework/pom.xml | 5 +++++
.../operator/InformerRelatedBehaviorITS.java | 2 ++
pom.xml | 7 +++++++
3 files changed, 14 insertions(+)
diff --git a/operator-framework/pom.xml b/operator-framework/pom.xml
index 88ee911692..4455b43f97 100644
--- a/operator-framework/pom.xml
+++ b/operator-framework/pom.xml
@@ -79,6 +79,11 @@
${project.version}
test
+
+ io.javaoperatorsdk
+ jenvtest
+ test
+
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/InformerRelatedBehaviorITS.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/InformerRelatedBehaviorITS.java
index 7bc96912b4..a4b1552b15 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/InformerRelatedBehaviorITS.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/InformerRelatedBehaviorITS.java
@@ -14,6 +14,7 @@
import io.fabric8.kubernetes.client.KubernetesClient;
import io.fabric8.kubernetes.client.KubernetesClientBuilder;
import io.fabric8.kubernetes.client.utils.KubernetesResourceUtil;
+import io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer;
import io.javaoperatorsdk.operator.api.config.ConfigurationServiceProvider;
import io.javaoperatorsdk.operator.health.InformerHealthIndicator;
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
@@ -41,6 +42,7 @@
* The test ends with "ITS" (Special) since it needs to run separately from other ITs
*
*/
+@EnableKubeAPIServer(apiServerFlags = {"--min-request-timeout", "3"})
class InformerRelatedBehaviorITS {
public static final String TEST_RESOURCE_NAME = "test1";
diff --git a/pom.xml b/pom.xml
index 7fdb593dc4..6bccd6bf96 100644
--- a/pom.xml
+++ b/pom.xml
@@ -72,6 +72,7 @@
1.0
1.8.0
4.10.0
+ 0.4.0
@@ -193,6 +194,12 @@
mockwebserver
${okhttp.version}
+
+ io.javaoperatorsdk
+ jenvtest
+ ${jenvtest.version}
+ test
+
From 4ed7bb0836df1cf455c3fe080e22872eb44becf8 Mon Sep 17 00:00:00 2001
From: csviri
Date: Mon, 27 Mar 2023 10:36:03 +0200
Subject: [PATCH 2/4] don't run minikube
---
.github/workflows/pr.yml | 8 --------
1 file changed, 8 deletions(-)
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index b6743a6ac6..bdf2a8d2a3 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -68,13 +68,5 @@ jobs:
distribution: temurin
java-version: ${{ matrix.java }}
cache: 'maven'
- - name: Minikube Min Request Timeout Setting
- uses: manusa/actions-setup-minikube@v2.7.2
- with:
- minikube version: 'v1.28.0'
- kubernetes version: ${{ matrix.kubernetes }}
- driver: 'docker'
- start args: '--extra-config=apiserver.min-request-timeout=3'
- github token: ${{ secrets.GITHUB_TOKEN }}
- name: Run Special Integration Tests
run: ./mvnw ${MAVEN_ARGS} -B package -P minimal-watch-timeout-dependent-it --file pom.xml
\ No newline at end of file
From a798ea1c2be729b85fa544542a3dc654a1bd02c9 Mon Sep 17 00:00:00 2001
From: csviri
Date: Mon, 27 Mar 2023 10:50:25 +0200
Subject: [PATCH 3/4] test refactor for jenvtest
---
.../operator/InformerRelatedBehaviorITS.java | 28 +++++++------------
1 file changed, 10 insertions(+), 18 deletions(-)
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/InformerRelatedBehaviorITS.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/InformerRelatedBehaviorITS.java
index a4b1552b15..976df07c49 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/InformerRelatedBehaviorITS.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/InformerRelatedBehaviorITS.java
@@ -46,11 +46,12 @@
class InformerRelatedBehaviorITS {
public static final String TEST_RESOURCE_NAME = "test1";
- public static final String ADDITIONAL_NAMESPACE_NAME = "additionalns";
+ public static final String ADDITIONAL_NAMESPACE_SUFFIX = "-additional";
KubernetesClient adminClient = new KubernetesClientBuilder().build();
InformerRelatedBehaviorTestReconciler reconciler;
String actualNamespace;
+ String additionalNamespace;
volatile boolean replacementStopHandlerCalled = false;
@BeforeEach
@@ -59,6 +60,7 @@ void beforeEach(TestInfo testInfo) {
adminClient);
testInfo.getTestMethod().ifPresent(method -> {
actualNamespace = KubernetesResourceUtil.sanitizeName(method.getName());
+ additionalNamespace = actualNamespace+ADDITIONAL_NAMESPACE_SUFFIX;
adminClient.resource(namespace()).createOrReplace();
});
// cleans up binding before test, not all test cases use cluster role
@@ -68,7 +70,6 @@ void beforeEach(TestInfo testInfo) {
@AfterEach
void cleanup() {
adminClient.resource(testCustomResource()).delete();
- adminClient.resource(namespace()).delete();
}
@Test
@@ -112,24 +113,15 @@ void startsUpWhenNoPermissionToSecondaryResource() {
@Test
void startsUpIfNoPermissionToOneOfTwoNamespaces() {
- var otherNamespace =
- adminClient.resource(namespace(ADDITIONAL_NAMESPACE_NAME)).createOrReplace();
- try {
+ adminClient.resource(namespace(additionalNamespace)).createOrReplace();
+
addRoleBindingsToTestNamespaces();
- var operator = startOperator(false, false, actualNamespace, ADDITIONAL_NAMESPACE_NAME);
+ var operator = startOperator(false, false, actualNamespace, additionalNamespace);
assertInformerNotWatchingForAdditionalNamespace(operator);
adminClient.resource(testCustomResource()).createOrReplace();
waitForWatchReconnect();
assertReconciled();
-
- } finally {
- adminClient.resource(otherNamespace).delete();
- await().untilAsserted(() -> {
- var ns = adminClient.namespaces().resource(otherNamespace).fromServer().get();
- assertThat(ns).isNull();
- });
- }
}
private void assertInformerNotWatchingForAdditionalNamespace(Operator operator) {
@@ -141,17 +133,17 @@ private void assertInformerNotWatchingForAdditionalNamespace(Operator operator)
InformerHealthIndicator controllerHealthIndicator =
(InformerHealthIndicator) unhealthyEventSources
.get(ControllerResourceEventSource.class.getSimpleName())
- .informerHealthIndicators().get(ADDITIONAL_NAMESPACE_NAME);
+ .informerHealthIndicators().get(additionalNamespace);
assertThat(controllerHealthIndicator).isNotNull();
- assertThat(controllerHealthIndicator.getTargetNamespace()).isEqualTo(ADDITIONAL_NAMESPACE_NAME);
+ assertThat(controllerHealthIndicator.getTargetNamespace()).isEqualTo(additionalNamespace);
assertThat(controllerHealthIndicator.isWatching()).isFalse();
InformerHealthIndicator configMapHealthIndicator =
(InformerHealthIndicator) unhealthyEventSources
.get(ConfigMapDependentResource.class.getSimpleName())
- .informerHealthIndicators().get(ADDITIONAL_NAMESPACE_NAME);
+ .informerHealthIndicators().get(additionalNamespace);
assertThat(configMapHealthIndicator).isNotNull();
- assertThat(configMapHealthIndicator.getTargetNamespace()).isEqualTo(ADDITIONAL_NAMESPACE_NAME);
+ assertThat(configMapHealthIndicator.getTargetNamespace()).isEqualTo(additionalNamespace);
assertThat(configMapHealthIndicator.isWatching()).isFalse();
}
From 79983899540ae8fce868b2c7ed7f498d3d9db4b3 Mon Sep 17 00:00:00 2001
From: csviri
Date: Mon, 27 Mar 2023 10:55:40 +0200
Subject: [PATCH 4/4] removing kub api
---
.github/workflows/pr.yml | 1 -
operator-framework/pom.xml | 6 ++++++
.../operator/InformerRelatedBehaviorITS.java | 19 ++++++++++---------
3 files changed, 16 insertions(+), 10 deletions(-)
diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml
index bdf2a8d2a3..db6dc5ec21 100644
--- a/.github/workflows/pr.yml
+++ b/.github/workflows/pr.yml
@@ -59,7 +59,6 @@ jobs:
strategy:
matrix:
java: [ 11, 17 ]
- kubernetes: [ 'v1.23.15', 'v1.24.9', 'v1.25.5' ]
steps:
- uses: actions/checkout@v3
- name: Set up Java and Maven
diff --git a/operator-framework/pom.xml b/operator-framework/pom.xml
index 4455b43f97..1d0f8307e0 100644
--- a/operator-framework/pom.xml
+++ b/operator-framework/pom.xml
@@ -55,6 +55,12 @@
com.google.testing.compile
compile-testing
test
+
+
+ com.google.guava
+ guava
+
+
io.fabric8
diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/InformerRelatedBehaviorITS.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/InformerRelatedBehaviorITS.java
index 976df07c49..8fa0186bba 100644
--- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/InformerRelatedBehaviorITS.java
+++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/InformerRelatedBehaviorITS.java
@@ -31,7 +31,8 @@
/**
* The test relies on a special api server configuration: "min-request-timeout" to have a very low
- * value, use: "minikube start --extra-config=apiserver.min-request-timeout=3"
+ * value (in case want to try with minikube use: "minikube start
+ * --extra-config=apiserver.min-request-timeout=3")
*
*
* This is important when tests are affected by permission changes, since the watch permissions are
@@ -60,7 +61,7 @@ void beforeEach(TestInfo testInfo) {
adminClient);
testInfo.getTestMethod().ifPresent(method -> {
actualNamespace = KubernetesResourceUtil.sanitizeName(method.getName());
- additionalNamespace = actualNamespace+ADDITIONAL_NAMESPACE_SUFFIX;
+ additionalNamespace = actualNamespace + ADDITIONAL_NAMESPACE_SUFFIX;
adminClient.resource(namespace()).createOrReplace();
});
// cleans up binding before test, not all test cases use cluster role
@@ -113,15 +114,15 @@ void startsUpWhenNoPermissionToSecondaryResource() {
@Test
void startsUpIfNoPermissionToOneOfTwoNamespaces() {
- adminClient.resource(namespace(additionalNamespace)).createOrReplace();
+ adminClient.resource(namespace(additionalNamespace)).createOrReplace();
- addRoleBindingsToTestNamespaces();
- var operator = startOperator(false, false, actualNamespace, additionalNamespace);
- assertInformerNotWatchingForAdditionalNamespace(operator);
+ addRoleBindingsToTestNamespaces();
+ var operator = startOperator(false, false, actualNamespace, additionalNamespace);
+ assertInformerNotWatchingForAdditionalNamespace(operator);
- adminClient.resource(testCustomResource()).createOrReplace();
- waitForWatchReconnect();
- assertReconciled();
+ adminClient.resource(testCustomResource()).createOrReplace();
+ waitForWatchReconnect();
+ assertReconciled();
}
private void assertInformerNotWatchingForAdditionalNamespace(Operator operator) {