Skip to content

allow to override test infrastructure kube client separately #2764

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public abstract class AbstractOperatorExtension
public static final int DEFAULT_NAMESPACE_DELETE_TIMEOUT = 90;

private final KubernetesClient kubernetesClient;
private final KubernetesClient infrastructureKubernetesClient;
protected final List<HasMetadata> infrastructure;
protected Duration infrastructureTimeout;
protected final boolean oneNamespacePerClass;
Expand All @@ -56,10 +57,15 @@ protected AbstractOperatorExtension(
boolean preserveNamespaceOnError,
boolean waitForNamespaceDeletion,
KubernetesClient kubernetesClient,
KubernetesClient infrastructureKubernetesClient,
Function<ExtensionContext, String> namespaceNameSupplier,
Function<ExtensionContext, String> perClassNamespaceNameSupplier) {
this.infrastructureKubernetesClient =
infrastructureKubernetesClient != null
? infrastructureKubernetesClient
: new KubernetesClientBuilder().build();
this.kubernetesClient =
kubernetesClient != null ? kubernetesClient : new KubernetesClientBuilder().build();
kubernetesClient != null ? kubernetesClient : this.infrastructureKubernetesClient;
this.infrastructure = infrastructure;
this.infrastructureTimeout = infrastructureTimeout;
this.oneNamespacePerClass = oneNamespacePerClass;
Expand Down Expand Up @@ -94,6 +100,11 @@ public KubernetesClient getKubernetesClient() {
return kubernetesClient;
}

@Override
public KubernetesClient getInfrastructureKubernetesClient() {
return infrastructureKubernetesClient;
}

public String getNamespace() {
return namespace;
}
Expand Down Expand Up @@ -137,16 +148,16 @@ protected void beforeEachImpl(ExtensionContext context) {
protected void before(ExtensionContext context) {
LOGGER.info("Initializing integration test in namespace {}", namespace);

kubernetesClient
infrastructureKubernetesClient
.namespaces()
.resource(
new NamespaceBuilder()
.withMetadata(new ObjectMetaBuilder().withName(namespace).build())
.build())
.serverSideApply();

kubernetesClient.resourceList(infrastructure).serverSideApply();
kubernetesClient
infrastructureKubernetesClient.resourceList(infrastructure).serverSideApply();
infrastructureKubernetesClient
.resourceList(infrastructure)
.waitUntilReady(infrastructureTimeout.toMillis(), TimeUnit.MILLISECONDS);
}
Expand All @@ -168,16 +179,19 @@ protected void after(ExtensionContext context) {
if (preserveNamespaceOnError && context.getExecutionException().isPresent()) {
LOGGER.info("Preserving namespace {}", namespace);
} else {
kubernetesClient.resourceList(infrastructure).delete();
infrastructureKubernetesClient.resourceList(infrastructure).delete();
deleteOperator();
LOGGER.info("Deleting namespace {} and stopping operator", namespace);
kubernetesClient.namespaces().withName(namespace).delete();
infrastructureKubernetesClient.namespaces().withName(namespace).delete();
if (waitForNamespaceDeletion) {
LOGGER.info("Waiting for namespace {} to be deleted", namespace);
Awaitility.await("namespace deleted")
.pollInterval(50, TimeUnit.MILLISECONDS)
.atMost(namespaceDeleteTimeout, TimeUnit.SECONDS)
.until(() -> kubernetesClient.namespaces().withName(namespace).get() == null);
.until(
() ->
infrastructureKubernetesClient.namespaces().withName(namespace).get()
== null);
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ private ClusterDeployedOperatorExtension(
boolean waitForNamespaceDeletion,
boolean oneNamespacePerClass,
KubernetesClient kubernetesClient,
KubernetesClient infrastructureKubernetesClient,
Function<ExtensionContext, String> namespaceNameSupplier,
Function<ExtensionContext, String> perClassNamespaceNameSupplier) {
super(
Expand All @@ -48,6 +49,7 @@ private ClusterDeployedOperatorExtension(
preserveNamespaceOnError,
waitForNamespaceDeletion,
kubernetesClient,
infrastructureKubernetesClient,
namespaceNameSupplier,
perClassNamespaceNameSupplier);
this.operatorDeployment = operatorDeployment;
Expand All @@ -69,7 +71,7 @@ protected void before(ExtensionContext context) {
final var crdPath = "./target/classes/META-INF/fabric8/";
final var crdSuffix = "-v1.yml";

final var kubernetesClient = getKubernetesClient();
final var kubernetesClient = getInfrastructureKubernetesClient();
for (var crdFile :
Objects.requireNonNull(
new File(crdPath).listFiles((ignored, name) -> name.endsWith(crdSuffix)))) {
Expand Down Expand Up @@ -107,13 +109,17 @@ protected void before(ExtensionContext context) {

@Override
protected void deleteOperator() {
getKubernetesClient().resourceList(operatorDeployment).inNamespace(namespace).delete();
getInfrastructureKubernetesClient()
.resourceList(operatorDeployment)
.inNamespace(namespace)
.delete();
}

public static class Builder extends AbstractBuilder<Builder> {
private final List<HasMetadata> operatorDeployment;
private Duration deploymentTimeout;
private KubernetesClient kubernetesClient;
private KubernetesClient infrastructureKubernetesClient;

protected Builder() {
super();
Expand Down Expand Up @@ -151,6 +157,12 @@ public Builder withKubernetesClient(KubernetesClient kubernetesClient) {
}

public ClusterDeployedOperatorExtension build() {
infrastructureKubernetesClient =
infrastructureKubernetesClient != null
? infrastructureKubernetesClient
: new KubernetesClientBuilder().build();
kubernetesClient =
kubernetesClient != null ? kubernetesClient : infrastructureKubernetesClient;
return new ClusterDeployedOperatorExtension(
operatorDeployment,
deploymentTimeout,
Expand All @@ -159,7 +171,8 @@ public ClusterDeployedOperatorExtension build() {
preserveNamespaceOnError,
waitForNamespaceDeletion,
oneNamespacePerClass,
kubernetesClient != null ? kubernetesClient : new KubernetesClientBuilder().build(),
kubernetesClient,
infrastructureKubernetesClient,
namespaceNameSupplier,
perClassNamespaceNameSupplier);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,6 @@

public interface HasKubernetesClient {
KubernetesClient getKubernetesClient();

KubernetesClient getInfrastructureKubernetesClient();
}
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,7 @@ private LocallyRunOperatorExtension(
boolean waitForNamespaceDeletion,
boolean oneNamespacePerClass,
KubernetesClient kubernetesClient,
KubernetesClient infrastructureKubernetesClient,
Consumer<ConfigurationServiceOverrider> configurationServiceOverrider,
Function<ExtensionContext, String> namespaceNameSupplier,
Function<ExtensionContext, String> perClassNamespaceNameSupplier,
Expand All @@ -76,6 +77,7 @@ private LocallyRunOperatorExtension(
preserveNamespaceOnError,
waitForNamespaceDeletion,
kubernetesClient,
infrastructureKubernetesClient,
namespaceNameSupplier,
perClassNamespaceNameSupplier);
this.reconcilers = reconcilers;
Expand Down Expand Up @@ -237,7 +239,7 @@ public Operator getOperator() {
protected void before(ExtensionContext context) {
super.before(context);

final var kubernetesClient = getKubernetesClient();
final var kubernetesClient = getInfrastructureKubernetesClient();

for (var ref : portForwards) {
String podName =
Expand Down Expand Up @@ -306,7 +308,7 @@ protected void before(ExtensionContext context) {
protected void after(ExtensionContext context) {
super.after(context);

var kubernetesClient = getKubernetesClient();
var kubernetesClient = getInfrastructureKubernetesClient();

var iterator = appliedCRDs.iterator();
while (iterator.hasNext()) {
Expand Down Expand Up @@ -357,6 +359,7 @@ public static class Builder extends AbstractBuilder<Builder> {
private final List<Class<? extends CustomResource>> additionalCustomResourceDefinitions;
private final List<String> additionalCRDs = new ArrayList<>();
private KubernetesClient kubernetesClient;
private KubernetesClient infrastructureKubernetesClient;

protected Builder() {
super();
Expand Down Expand Up @@ -411,6 +414,12 @@ public Builder withKubernetesClient(KubernetesClient kubernetesClient) {
return this;
}

public Builder withInfrastructureKubernetesClient(
KubernetesClient infrastructureKubernetesClient) {
this.infrastructureKubernetesClient = infrastructureKubernetesClient;
return this;
}

public Builder withAdditionalCustomResourceDefinition(
Class<? extends CustomResource> customResource) {
additionalCustomResourceDefinitions.add(customResource);
Expand All @@ -435,6 +444,7 @@ public LocallyRunOperatorExtension build() {
waitForNamespaceDeletion,
oneNamespacePerClass,
kubernetesClient,
infrastructureKubernetesClient,
configurationServiceOverrider,
namespaceNameSupplier,
perClassNamespaceNameSupplier,
Expand Down