Skip to content

feat: jenvtest parallel execution of IT #1863

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

Closed
wants to merge 8 commits into from
Closed
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 @@ -43,6 +43,7 @@ public abstract class AbstractOperatorExtension implements HasKubernetesClient,
protected final boolean preserveNamespaceOnError;
protected final boolean waitForNamespaceDeletion;
protected final int namespaceDeleteTimeout = DEFAULT_NAMESPACE_DELETE_TIMEOUT;
protected final boolean clientProvided;

protected String namespace;

Expand All @@ -53,6 +54,7 @@ protected AbstractOperatorExtension(
boolean preserveNamespaceOnError,
boolean waitForNamespaceDeletion,
KubernetesClient kubernetesClient) {
this.clientProvided = kubernetesClient != null;
this.kubernetesClient = kubernetesClient != null ? kubernetesClient
: new KubernetesClientBuilder()
.withConfig(ConfigurationServiceProvider.instance().getClientConfiguration()).build();
Expand Down Expand Up @@ -182,6 +184,7 @@ protected void afterAllImpl(ExtensionContext context) {
protected void afterEachImpl(ExtensionContext context) {
// resets the config service provider so the controller configs are reconstructed always
ConfigurationServiceProvider.reset();
ConfigurationServiceProvider.overrideCurrent(c -> c.withCloseClientOnStop(!clientProvided));
if (!oneNamespacePerClass) {
after(context);
}
Expand Down Expand Up @@ -257,6 +260,7 @@ public T oneNamespacePerClass(boolean value) {
}

public T withConfigurationService(Consumer<ConfigurationServiceOverrider> overrider) {
ConfigurationServiceProvider.reset();
ConfigurationServiceProvider.overrideCurrent(overrider);
return (T) this;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ private LocallyRunOperatorExtension(
this.portForwards = portForwards;
this.localPortForwards = new ArrayList<>(portForwards.size());
this.additionalCustomResourceDefinitions = additionalCustomResourceDefinitions;
this.operator = new Operator(getKubernetesClient());
ConfigurationServiceProvider.reset();
this.operator =
new Operator(getKubernetesClient(), o -> o.withCloseClientOnStop(!clientProvided));
this.registeredControllers = new HashMap<>();
}

Expand Down
2 changes: 1 addition & 1 deletion operator-framework/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
</dependency>
<dependency>
<groupId>io.javaoperatorsdk</groupId>
<artifactId>jenvtest</artifactId>
<artifactId>jenvtest-fabric8-client-support</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,19 +8,26 @@
import org.slf4j.LoggerFactory;

import io.fabric8.kubernetes.api.model.Service;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer;
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
import io.javaoperatorsdk.operator.sample.builtinresourcecleaner.ObservedGenerationTestReconciler;

import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;

@EnableKubeAPIServer
class BuiltInResourceCleanerIT {

private static final Logger log = LoggerFactory.getLogger(BuiltInResourceCleanerIT.class);

static KubernetesClient client;

@RegisterExtension
LocallyRunOperatorExtension operator =
LocallyRunOperatorExtension.builder()
.withKubernetesClient(client)
.waitForNamespaceDeletion(false)
.withReconciler(new ObservedGenerationTestReconciler())
.build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ class ChangeNamespaceIT {

@RegisterExtension
LocallyRunOperatorExtension operator =
LocallyRunOperatorExtension.builder().withReconciler(new ChangeNamespaceTestReconciler())
LocallyRunOperatorExtension.builder()
.withReconciler(new ChangeNamespaceTestReconciler())
.build();

@BeforeEach
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,20 +4,28 @@
import org.junit.jupiter.api.extension.RegisterExtension;

import io.fabric8.kubernetes.api.model.ObjectMeta;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer;
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
import io.javaoperatorsdk.operator.sample.cleanerforreconciler.CleanerForReconcilerCustomResource;
import io.javaoperatorsdk.operator.sample.cleanerforreconciler.CleanerForReconcilerTestReconciler;

import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;

@EnableKubeAPIServer
class CleanerForReconcilerIT {

public static final String TEST_RESOURCE_NAME = "cleaner-for-reconciler-test1";

static KubernetesClient client;

@RegisterExtension
LocallyRunOperatorExtension operator =
LocallyRunOperatorExtension.builder().withReconciler(new CleanerForReconcilerTestReconciler())
LocallyRunOperatorExtension.builder()
.withKubernetesClient(client)
.waitForNamespaceDeletion(false)
.withReconciler(new CleanerForReconcilerTestReconciler())
.build();


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@
import org.junit.jupiter.api.extension.RegisterExtension;

import io.fabric8.kubernetes.api.model.ObjectMeta;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer;
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
import io.javaoperatorsdk.operator.sample.cleanupconflict.CleanupConflictCustomResource;
import io.javaoperatorsdk.operator.sample.cleanupconflict.CleanupConflictReconciler;
Expand All @@ -14,14 +16,20 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;

@EnableKubeAPIServer
class CleanupConflictIT {

private static final String ADDITIONAL_FINALIZER = "javaoperatorsdk.io/additionalfinalizer";
public static final String TEST_RESOURCE_NAME = "test1";

static KubernetesClient client;

@RegisterExtension
LocallyRunOperatorExtension operator =
LocallyRunOperatorExtension.builder().withReconciler(new CleanupConflictReconciler())
LocallyRunOperatorExtension.builder()
.withKubernetesClient(client)
.waitForNamespaceDeletion(false)
.withReconciler(new CleanupConflictReconciler())
.build();

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
import org.slf4j.LoggerFactory;

import io.fabric8.kubernetes.api.model.ConfigMap;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer;
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
import io.javaoperatorsdk.operator.sample.simple.TestCustomResource;
import io.javaoperatorsdk.operator.sample.simple.TestReconciler;
Expand All @@ -18,16 +20,22 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;

@EnableKubeAPIServer
class ConcurrencyIT {
public static final int NUMBER_OF_RESOURCES_CREATED = 50;
public static final int NUMBER_OF_RESOURCES_DELETED = 30;
public static final int NUMBER_OF_RESOURCES_UPDATED = 20;
public static final String UPDATED_SUFFIX = "_updated";
private static final Logger log = LoggerFactory.getLogger(ConcurrencyIT.class);

static KubernetesClient client;

@RegisterExtension
LocallyRunOperatorExtension operator =
LocallyRunOperatorExtension.builder().withReconciler(new TestReconciler(true)).build();
LocallyRunOperatorExtension.builder()
.withKubernetesClient(client)
.waitForNamespaceDeletion(false)
.withReconciler(new TestReconciler(true)).build();

@Test
void manyResourcesGetCreatedUpdatedAndDeleted() throws InterruptedException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

import io.fabric8.kubernetes.api.model.ConfigMap;
import io.fabric8.kubernetes.api.model.ObjectMeta;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer;
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
import io.javaoperatorsdk.operator.sample.createupdateeventfilter.CreateUpdateEventFilterTestCustomResource;
import io.javaoperatorsdk.operator.sample.createupdateeventfilter.CreateUpdateEventFilterTestCustomResourceSpec;
Expand All @@ -16,14 +18,19 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;

@EnableKubeAPIServer
class CreateUpdateInformerEventSourceEventFilterIT {

@RegisterExtension
LocallyRunOperatorExtension operator =
LocallyRunOperatorExtension.builder()
.withKubernetesClient(client)
.waitForNamespaceDeletion(false)
.withReconciler(new CreateUpdateEventFilterTestReconciler())
.build();

static KubernetesClient client;

@Test
void updateEventNotReceivedAfterCreateOrUpdate() {
CreateUpdateEventFilterTestCustomResource resource = prepareTestResource();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,26 @@
import org.junit.jupiter.api.extension.RegisterExtension;

import io.fabric8.kubernetes.api.model.ObjectMeta;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer;
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
import io.javaoperatorsdk.operator.sample.customfilter.CustomFilteringTestReconciler;
import io.javaoperatorsdk.operator.sample.customfilter.CustomFilteringTestResource;
import io.javaoperatorsdk.operator.sample.customfilter.CustomFilteringTestResourceSpec;

import static org.assertj.core.api.Assertions.assertThat;

@EnableKubeAPIServer
class CustomResourceFilterIT {

static KubernetesClient client;

@RegisterExtension
LocallyRunOperatorExtension operator =
LocallyRunOperatorExtension.builder().withReconciler(new CustomFilteringTestReconciler())
LocallyRunOperatorExtension.builder()
.withKubernetesClient(client)
.waitForNamespaceDeletion(false)
.withReconciler(new CustomFilteringTestReconciler())
.build();

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
import org.junit.jupiter.api.extension.RegisterExtension;

import io.fabric8.kubernetes.api.model.ObjectMeta;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer;
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
import io.javaoperatorsdk.operator.sample.cleanermanageddependent.CleanerForManagedDependentCustomResource;
import io.javaoperatorsdk.operator.sample.cleanermanageddependent.CleanerForManagedDependentTestReconciler;
Expand All @@ -12,13 +14,18 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;

@EnableKubeAPIServer
class DeleterForManagedDependentResourcesOnlyIT {

public static final String TEST_RESOURCE_NAME = "cleaner-for-reconciler-test1";

static KubernetesClient client;

@RegisterExtension
LocallyRunOperatorExtension operator =
LocallyRunOperatorExtension.builder()
.withKubernetesClient(client)
.waitForNamespaceDeletion(false)
.withReconciler(new CleanerForManagedDependentTestReconciler())
.build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

import io.fabric8.kubernetes.api.model.ConfigMap;
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer;
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
import io.javaoperatorsdk.operator.sample.dependentannotationsecondarymapper.DependentAnnotationSecondaryMapperReconciler;
import io.javaoperatorsdk.operator.sample.dependentannotationsecondarymapper.DependentAnnotationSecondaryMapperResource;
Expand All @@ -16,13 +18,18 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;

@EnableKubeAPIServer
class DependentAnnotationSecondaryMapperIT {

public static final String TEST_RESOURCE_NAME = "test1";

static KubernetesClient client;

@RegisterExtension
LocallyRunOperatorExtension operator =
LocallyRunOperatorExtension.builder()
.withKubernetesClient(client)
.waitForNamespaceDeletion(false)
.withReconciler(DependentAnnotationSecondaryMapperReconciler.class)
.build();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@

import io.fabric8.kubernetes.api.model.ConfigMap;
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer;
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
import io.javaoperatorsdk.operator.sample.dependentfilter.DependentFilterTestCustomResource;
import io.javaoperatorsdk.operator.sample.dependentfilter.DependentFilterTestReconciler;
Expand All @@ -18,13 +20,19 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;

@EnableKubeAPIServer
class DependentFilterIT {

public static final String RESOURCE_NAME = "test1";

static KubernetesClient client;

@RegisterExtension
LocallyRunOperatorExtension operator =
LocallyRunOperatorExtension.builder().withReconciler(DependentFilterTestReconciler.class)
LocallyRunOperatorExtension.builder()
.withKubernetesClient(client)
.waitForNamespaceDeletion(false)
.withReconciler(DependentFilterTestReconciler.class)
.build();

@Test
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@

import io.fabric8.kubernetes.api.model.ConfigMap;
import io.fabric8.kubernetes.api.model.ObjectMeta;
import io.fabric8.kubernetes.client.KubernetesClient;
import io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer;
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
import io.javaoperatorsdk.operator.sample.dependentoperationeventfiltering.ConfigMapDependentResource;
import io.javaoperatorsdk.operator.sample.dependentoperationeventfiltering.DependentOperationEventFilterCustomResource;
Expand All @@ -16,15 +18,20 @@
import static org.assertj.core.api.Assertions.assertThat;
import static org.awaitility.Awaitility.await;

@EnableKubeAPIServer
class DependentOperationEventFilterIT {

public static final String TEST = "test";
public static final String SPEC_VAL_1 = "val1";
public static final String SPEC_VAL_2 = "val2";

static KubernetesClient client;

@RegisterExtension
LocallyRunOperatorExtension operator =
LocallyRunOperatorExtension.builder()
.withKubernetesClient(client)
.waitForNamespaceDeletion(false)
.withReconciler(new DependentOperationEventFilterCustomResourceTestReconciler())
.build();

Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,19 @@
package io.javaoperatorsdk.operator;

import io.fabric8.kubernetes.client.KubernetesClient;
import io.javaoperatorsdk.jenvtest.junit.EnableKubeAPIServer;
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
import io.javaoperatorsdk.operator.sample.primaryindexer.DependentPrimaryIndexerTestReconciler;

@EnableKubeAPIServer
public class DependentPrimaryIndexerIT extends PrimaryIndexerIT {

static KubernetesClient client;

protected LocallyRunOperatorExtension buildOperator() {
return LocallyRunOperatorExtension.builder()
.withKubernetesClient(client)
.waitForNamespaceDeletion(false)
.withReconciler(new DependentPrimaryIndexerTestReconciler())
.build();
}
Expand Down
Loading