Skip to content

Commit

Permalink
add integration test
Browse files Browse the repository at this point in the history
Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
  • Loading branch information
csviri committed Sep 18, 2024
1 parent 68627ad commit 5dc5f4b
Show file tree
Hide file tree
Showing 6 changed files with 169 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package io.javaoperatorsdk.operator.workflow.getnonactivesecondary;


import io.fabric8.kubernetes.api.model.ConfigMap;
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
import io.javaoperatorsdk.operator.api.reconciler.Context;
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;

public class ConfigMapDependentResource
extends CRUDKubernetesDependentResource<ConfigMap, GetNonActiveSecondaryCustomResource> {

public static final String DATA_KEY = "data";

public ConfigMapDependentResource() {
super(ConfigMap.class);
}

@Override
protected ConfigMap desired(GetNonActiveSecondaryCustomResource primary,
Context<GetNonActiveSecondaryCustomResource> context) {
ConfigMap configMap = new ConfigMap();
configMap.setMetadata(new ObjectMetaBuilder()
.withName(primary.getMetadata().getName())
.withNamespace(primary.getMetadata().getNamespace())
.build());
return configMap;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.javaoperatorsdk.operator.workflow.getnonactivesecondary;

import io.fabric8.openshift.api.model.Route;
import io.javaoperatorsdk.operator.api.reconciler.Context;
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition;

public class FalseActivationCondition
implements Condition<Route, GetNonActiveSecondaryCustomResource> {
@Override
public boolean isMet(
DependentResource<Route, GetNonActiveSecondaryCustomResource> dependentResource,
GetNonActiveSecondaryCustomResource primary,
Context<GetNonActiveSecondaryCustomResource> context) {
return false;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package io.javaoperatorsdk.operator.workflow.getnonactivesecondary;

import io.fabric8.kubernetes.api.model.Namespaced;
import io.fabric8.kubernetes.client.CustomResource;
import io.fabric8.kubernetes.model.annotation.Group;
import io.fabric8.kubernetes.model.annotation.ShortNames;
import io.fabric8.kubernetes.model.annotation.Version;

@Group("sample.javaoperatorsdk")
@Version("v1")
@ShortNames("gnas")
public class GetNonActiveSecondaryCustomResource
extends CustomResource<Void, Void>
implements Namespaced {


}
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package io.javaoperatorsdk.operator.workflow.getnonactivesecondary;

import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
import io.fabric8.openshift.api.model.Route;
import io.javaoperatorsdk.operator.api.reconciler.Context;
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource;

public class RouteDependentResource
extends CRUDKubernetesDependentResource<Route, GetNonActiveSecondaryCustomResource> {

public RouteDependentResource() {
super(Route.class);
}

@Override
protected Route desired(GetNonActiveSecondaryCustomResource primary,
Context<GetNonActiveSecondaryCustomResource> context) {
// basically does not matter since this should not be called
Route route = new Route();
route.setMetadata(new ObjectMetaBuilder()
.withName(primary.getMetadata().getName())
.withNamespace(primary.getMetadata().getNamespace())
.build());

return route;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package io.javaoperatorsdk.operator.workflow.getnonactivesecondary;

import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.RegisterExtension;

import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;

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

public class WorkflowActivationConditionIT {

public static final String TEST_RESOURCE_NAME = "test1";

@RegisterExtension
LocallyRunOperatorExtension extension =
LocallyRunOperatorExtension.builder()
.withReconciler(WorkflowActivationConditionReconciler.class)
.build();

@Test
void reconciledOnVanillaKubernetesDespiteRouteInWorkflow() {
extension.create(testResource());

await().untilAsserted(() -> {
assertThat(extension.getReconcilerOfType(WorkflowActivationConditionReconciler.class)
.getNumberOfReconciliationExecution()).isEqualTo(1);
});
}

private GetNonActiveSecondaryCustomResource testResource() {
var res = new GetNonActiveSecondaryCustomResource();
res.setMetadata(new ObjectMetaBuilder()
.withName(TEST_RESOURCE_NAME)
.build());
return res;
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package io.javaoperatorsdk.operator.workflow.getnonactivesecondary;

import java.util.concurrent.atomic.AtomicInteger;

import io.fabric8.openshift.api.model.Route;
import io.javaoperatorsdk.operator.api.reconciler.Context;
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
import io.javaoperatorsdk.operator.api.reconciler.Workflow;
import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;

@Workflow(dependents = {
@Dependent(type = ConfigMapDependentResource.class),
@Dependent(type = RouteDependentResource.class,
activationCondition = FalseActivationCondition.class)
})
@ControllerConfiguration
public class WorkflowActivationConditionReconciler
implements Reconciler<GetNonActiveSecondaryCustomResource> {

private final AtomicInteger numberOfReconciliationExecution = new AtomicInteger(0);

@Override
public UpdateControl<GetNonActiveSecondaryCustomResource> reconcile(
GetNonActiveSecondaryCustomResource resource,
Context<GetNonActiveSecondaryCustomResource> context) {

// should not throw an exception even if the condition is false
var route = context.getSecondaryResource(Route.class);

numberOfReconciliationExecution.incrementAndGet();

return UpdateControl.noUpdate();
}

public int getNumberOfReconciliationExecution() {
return numberOfReconciliationExecution.get();
}
}

0 comments on commit 5dc5f4b

Please sign in to comment.