diff --git a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/LocallyRunOperatorExtension.java b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/LocallyRunOperatorExtension.java index 241c59371d..45cd85b468 100644 --- a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/LocallyRunOperatorExtension.java +++ b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/LocallyRunOperatorExtension.java @@ -8,11 +8,16 @@ import java.nio.file.Files; import java.nio.file.Path; import java.time.Duration; +import java.util.ArrayDeque; import java.util.ArrayList; +import java.util.Deque; import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.Consumer; import java.util.function.Function; import java.util.stream.Stream; @@ -43,6 +48,8 @@ public class LocallyRunOperatorExtension extends AbstractOperatorExtension { private static final Logger LOGGER = LoggerFactory.getLogger(LocallyRunOperatorExtension.class); private static final int CRD_DELETE_TIMEOUT = 1000; + private static final Set appliedCRDs = new HashSet<>(); + private static final boolean deleteCRDs = Boolean.parseBoolean(System.getProperty("testsuite.deleteCRDs", "true")); private final Operator operator; private final List reconcilers; @@ -51,7 +58,6 @@ public class LocallyRunOperatorExtension extends AbstractOperatorExtension { private final List> additionalCustomResourceDefinitions; private final Map registeredControllers; private final Map crdMappings; - private static final LinkedList appliedCRDs = new LinkedList<>(); private LocallyRunOperatorExtension( List reconcilers, @@ -297,8 +303,10 @@ protected void after(ExtensionContext context) { var kubernetesClient = getKubernetesClient(); - while (!appliedCRDs.isEmpty()) { - deleteCrd(appliedCRDs.poll(), kubernetesClient); + var iterator = appliedCRDs.iterator(); + while (iterator.hasNext()) { + deleteCrd(iterator.next(), kubernetesClient); + iterator.remove(); } kubernetesClient.close(); @@ -320,6 +328,10 @@ protected void after(ExtensionContext context) { } private void deleteCrd(AppliedCRD appliedCRD, KubernetesClient client) { + if (!deleteCRDs) { + LOGGER.debug("Skipping deleting CRD because of configuration: {}", appliedCRD); + return; + } try { LOGGER.debug("Deleting CRD: {}", appliedCRD.crdString); final var crd = client.load(new ByteArrayInputStream(appliedCRD.crdString.getBytes()));