Skip to content

Commit e84c595

Browse files
committed
fix: add clean up of applied CRDs after tests
Signed-off-by: xstefank <[email protected]>
1 parent a8f08ed commit e84c595

File tree

1 file changed

+25
-0
lines changed

1 file changed

+25
-0
lines changed

operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/LocallyRunOperatorExtension.java

+25
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@
1010
import java.time.Duration;
1111
import java.util.ArrayList;
1212
import java.util.HashMap;
13+
import java.util.LinkedList;
1314
import java.util.List;
1415
import java.util.Map;
1516
import java.util.function.Consumer;
1617
import java.util.function.Function;
1718
import java.util.stream.Stream;
1819

20+
import io.fabric8.kubernetes.client.dsl.NamespaceListVisitFromServerGetDeleteRecreateWaitApplicable;
1921
import org.junit.jupiter.api.extension.ExtensionContext;
2022
import org.slf4j.Logger;
2123
import org.slf4j.LoggerFactory;
@@ -48,6 +50,7 @@ public class LocallyRunOperatorExtension extends AbstractOperatorExtension {
4850
private final List<Class<? extends CustomResource>> additionalCustomResourceDefinitions;
4951
private final Map<Reconciler, RegisteredController> registeredControllers;
5052
private final Map<String, String> crdMappings;
53+
private static final LinkedList<AppliedCRD> appliedCRDs = new LinkedList<>();
5154

5255
private LocallyRunOperatorExtension(
5356
List<ReconcilerSpec> reconcilers,
@@ -144,6 +147,7 @@ private static void applyCrd(String crdString, String path, KubernetesClient cli
144147
LOGGER.debug("Applying CRD: {}", crdString);
145148
final var crd = client.load(new ByteArrayInputStream(crdString.getBytes()));
146149
crd.serverSideApply();
150+
appliedCRDs.add(new AppliedCRD(crdString, path));
147151
Thread.sleep(CRD_READY_WAIT); // readiness is not applicable for CRD, just wait a little
148152
LOGGER.debug("Applied CRD with path: {}", path);
149153
} catch (InterruptedException ex) {
@@ -304,8 +308,29 @@ protected void after(ExtensionContext context) {
304308
}
305309
}
306310
localPortForwards.clear();
311+
312+
var kubernetesClient = getKubernetesClient();
313+
314+
while (!appliedCRDs.isEmpty()) {
315+
deleteCrd(appliedCRDs.poll(), kubernetesClient);
316+
}
317+
318+
kubernetesClient.close();
319+
}
320+
321+
private void deleteCrd(AppliedCRD appliedCRD, KubernetesClient client) {
322+
try {
323+
LOGGER.debug("Deleting CRD: {}", appliedCRD.crdString);
324+
final var crd = client.load(new ByteArrayInputStream(appliedCRD.crdString.getBytes()));
325+
crd.withTimeoutInMillis(10000).delete();
326+
LOGGER.debug("Deleted CRD with path: {}", appliedCRD.path);
327+
} catch (Exception ex) {
328+
throw new IllegalStateException("Cannot delete CRD yaml: " + appliedCRD.path, ex);
329+
}
307330
}
308331

332+
private record AppliedCRD(String crdString, String path) {}
333+
309334
@SuppressWarnings("rawtypes")
310335
public static class Builder extends AbstractBuilder<Builder> {
311336
private final List<ReconcilerSpec> reconcilers;

0 commit comments

Comments
 (0)