* This is important when tests are affected by permission changes, since the watch permissions are @@ -41,14 +43,16 @@ * 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"; - 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 @@ -57,6 +61,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 @@ -66,7 +71,6 @@ void beforeEach(TestInfo testInfo) { @AfterEach void cleanup() { adminClient.resource(testCustomResource()).delete(); - adminClient.resource(namespace()).delete(); } @Test @@ -110,24 +114,15 @@ void startsUpWhenNoPermissionToSecondaryResource() { @Test void startsUpIfNoPermissionToOneOfTwoNamespaces() { - var otherNamespace = - adminClient.resource(namespace(ADDITIONAL_NAMESPACE_NAME)).createOrReplace(); - try { - addRoleBindingsToTestNamespaces(); - var operator = startOperator(false, false, actualNamespace, ADDITIONAL_NAMESPACE_NAME); - 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(); - }); - } + adminClient.resource(namespace(additionalNamespace)).createOrReplace(); + + addRoleBindingsToTestNamespaces(); + var operator = startOperator(false, false, actualNamespace, additionalNamespace); + assertInformerNotWatchingForAdditionalNamespace(operator); + + adminClient.resource(testCustomResource()).createOrReplace(); + waitForWatchReconnect(); + assertReconciled(); } private void assertInformerNotWatchingForAdditionalNamespace(Operator operator) { @@ -139,17 +134,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(); } diff --git a/pom.xml b/pom.xml index 7fdb593dc4..6bccd6bf96 100644 --- a/pom.xml +++ b/pom.xml @@ -72,6 +72,7 @@