Skip to content

Commit 5375fac

Browse files
committed
test skeleton
Signed-off-by: Attila Mészáros <a_meszaros@apple.com>
1 parent 122d59e commit 5375fac

File tree

10 files changed

+109
-16
lines changed

10 files changed

+109
-16
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import io.fabric8.kubernetes.api.model.HasMetadata;
77
import io.fabric8.kubernetes.client.KubernetesClient;
88
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.ManagedWorkflowAndDependentResourceContext;
9+
import io.javaoperatorsdk.operator.api.reconciler.expectation.Expectation;
910
import io.javaoperatorsdk.operator.api.reconciler.expectation.ExpectationResult;
1011
import io.javaoperatorsdk.operator.processing.event.source.IndexerResourceCache;
1112

@@ -54,5 +55,5 @@ public interface Context<P extends HasMetadata> extends CacheAware<P> {
5455
*/
5556
boolean isNextReconciliationImminent();
5657

57-
Optional<ExpectationResult<P>> expectationResult();
58+
<T extends Expectation<P>> Optional<ExpectationResult<P, T>> expectationResult();
5859
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContext.java

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import io.fabric8.kubernetes.client.KubernetesClient;
88
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.DefaultManagedWorkflowAndDependentResourceContext;
99
import io.javaoperatorsdk.operator.api.reconciler.dependent.managed.ManagedWorkflowAndDependentResourceContext;
10+
import io.javaoperatorsdk.operator.api.reconciler.expectation.Expectation;
1011
import io.javaoperatorsdk.operator.api.reconciler.expectation.ExpectationResult;
1112
import io.javaoperatorsdk.operator.processing.Controller;
1213
import io.javaoperatorsdk.operator.processing.event.ResourceID;
@@ -19,13 +20,15 @@ public class DefaultContext<P extends HasMetadata> extends DefaultCacheAware<P>
1920
private final DefaultManagedWorkflowAndDependentResourceContext<P>
2021
defaultManagedDependentResourceContext;
2122

22-
private final ExpectationResult<P> expectationResult;
23+
@SuppressWarnings("rawtypes")
24+
private final ExpectationResult expectationResult;
2325

26+
@SuppressWarnings("rawtypes")
2427
public DefaultContext(
2528
RetryInfo retryInfo,
2629
Controller<P> controller,
2730
P primaryResource,
28-
ExpectationResult<P> expectationResult) {
31+
ExpectationResult expectationResult) {
2932
super(controller, primaryResource);
3033
this.retryInfo = retryInfo;
3134
this.defaultManagedDependentResourceContext =
@@ -63,7 +66,8 @@ public boolean isNextReconciliationImminent() {
6366
}
6467

6568
@Override
66-
public Optional<ExpectationResult<P>> expectationResult() {
69+
@SuppressWarnings("unchecked")
70+
public <T extends Expectation<P>> Optional<ExpectationResult<P, T>> expectationResult() {
6771
return Optional.ofNullable(expectationResult);
6872
}
6973

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/expectation/ExpectationResult.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@
22

33
import io.fabric8.kubernetes.api.model.HasMetadata;
44

5-
public record ExpectationResult<P extends HasMetadata>(
6-
ExpectationStatus status, Expectation<P> expectation) {}
5+
public record ExpectationResult<P extends HasMetadata, T extends Expectation<P>>(
6+
ExpectationStatus status, T expectation) {}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -133,14 +133,15 @@ private void handleMarkedEventForResource(ResourceState state) {
133133
}
134134
}
135135

136+
@SuppressWarnings("rawtypes")
136137
private void submitReconciliationExecution(ResourceState state) {
137138
try {
138139
boolean controllerUnderExecution = isControllerUnderExecution(state);
139140
final var resourceID = state.getId();
140141
Optional<P> maybeLatest = cache.get(resourceID);
141142
maybeLatest.ifPresent(MDCUtils::addResourceInfo);
142143
if (!controllerUnderExecution && maybeLatest.isPresent()) {
143-
ExpectationResult<P> expectationResult = null;
144+
ExpectationResult expectationResult = null;
144145
if (isExpectationPresent(state)) {
145146
var expectationCheckResult =
146147
shouldProceedWithExpectation(state, maybeLatest.orElseThrow());
@@ -197,19 +198,17 @@ private boolean isExpectationPresent(ResourceState state) {
197198
return state.getExpectationHolder().isPresent();
198199
}
199200

200-
@SuppressWarnings("unchecked")
201-
Optional<ExpectationResult<P>> shouldProceedWithExpectation(ResourceState state, P primary) {
201+
@SuppressWarnings({"unchecked", "rawtypes"})
202+
Optional<ExpectationResult> shouldProceedWithExpectation(ResourceState state, P primary) {
202203

203204
var holder = state.getExpectationHolder().orElseThrow();
204205
if (holder.isTimedOut()) {
205-
return Optional.of(
206-
new ExpectationResult<P>(ExpectationStatus.TIMEOUT, holder.getExpectation()));
206+
return Optional.of(new ExpectationResult(ExpectationStatus.TIMEOUT, holder.getExpectation()));
207207
}
208208
ExpectationContext<P> expectationContext =
209209
new DefaultExpectationContext<>(this.eventSourceManager.getController(), primary);
210210
return holder.getExpectation().isFulfilled(primary, expectationContext)
211-
? Optional.of(
212-
new ExpectationResult<P>(ExpectationStatus.FULFILLED, holder.getExpectation()))
211+
? Optional.of(new ExpectationResult(ExpectationStatus.FULFILLED, holder.getExpectation()))
213212
: Optional.empty();
214213
}
215214

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ExecutionScope.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@ class ExecutionScope<R extends HasMetadata> {
99
// the latest custom resource from cache
1010
private R resource;
1111
private final RetryInfo retryInfo;
12-
private final ExpectationResult<R> expectationResult;
12+
private final ExpectationResult<R, ?> expectationResult;
1313

14-
ExecutionScope(RetryInfo retryInfo, ExpectationResult<R> expectationResult) {
14+
ExecutionScope(RetryInfo retryInfo, ExpectationResult<R, ?> expectationResult) {
1515
this.retryInfo = retryInfo;
1616
this.expectationResult = expectationResult;
1717
}
@@ -46,7 +46,7 @@ public RetryInfo getRetryInfo() {
4646
return retryInfo;
4747
}
4848

49-
public ExpectationResult<R> getExpectationResult() {
49+
public ExpectationResult<R, ?> getExpectationResult() {
5050
return expectationResult;
5151
}
5252
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.javaoperatorsdk.operator.baseapi.expectation.simple;
2+
3+
import io.fabric8.kubernetes.api.model.Namespaced;
4+
import io.fabric8.kubernetes.client.CustomResource;
5+
import io.fabric8.kubernetes.model.annotation.Group;
6+
import io.fabric8.kubernetes.model.annotation.ShortNames;
7+
import io.fabric8.kubernetes.model.annotation.Version;
8+
9+
@Group("sample.javaoperatorsdk")
10+
@Version("v1")
11+
@ShortNames("secr")
12+
public class SimpleExpectationCustomResource
13+
extends CustomResource<
14+
SimpleExpectationCustomResourceSpec, SimpleExpectationCustomResourceStatus>
15+
implements Namespaced {}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.javaoperatorsdk.operator.baseapi.expectation.simple;
2+
3+
public class SimpleExpectationCustomResourceSpec {
4+
5+
private int replicaCount;
6+
7+
public int getReplicaCount() {
8+
return replicaCount;
9+
}
10+
11+
public void setReplicaCount(int replicaCount) {
12+
this.replicaCount = replicaCount;
13+
}
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.javaoperatorsdk.operator.baseapi.expectation.simple;
2+
3+
public class SimpleExpectationCustomResourceStatus {
4+
5+
private Boolean ready;
6+
7+
public Boolean getReady() {
8+
return ready;
9+
}
10+
11+
public void setReady(Boolean ready) {
12+
this.ready = ready;
13+
}
14+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package io.javaoperatorsdk.operator.baseapi.expectation.simple;
2+
3+
import io.javaoperatorsdk.operator.api.reconciler.Context;
4+
import io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration;
5+
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
6+
import io.javaoperatorsdk.operator.api.reconciler.UpdateControl;
7+
8+
@ControllerConfiguration
9+
public class SimpleExpectationReconciler implements Reconciler<SimpleExpectationCustomResource> {
10+
11+
@Override
12+
public UpdateControl<SimpleExpectationCustomResource> reconcile(
13+
SimpleExpectationCustomResource resource, Context<SimpleExpectationCustomResource> context) {
14+
15+
return UpdateControl.noUpdate();
16+
}
17+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package io.javaoperatorsdk.operator.baseapi.expectation.simple;
2+
3+
import org.junit.jupiter.api.Test;
4+
import org.junit.jupiter.api.extension.RegisterExtension;
5+
6+
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
7+
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
8+
9+
class SimpleExpectationSampleIT {
10+
11+
@RegisterExtension
12+
LocallyRunOperatorExtension operator =
13+
LocallyRunOperatorExtension.builder()
14+
.withReconciler(new SimpleExpectationReconciler())
15+
.build();
16+
17+
@Test
18+
void exceptDeploymentUp() {}
19+
20+
public SimpleExpectationCustomResource createCustomResource() {
21+
SimpleExpectationCustomResource resource = new SimpleExpectationCustomResource();
22+
resource.setMetadata(
23+
new ObjectMetaBuilder()
24+
.withName("error-status-test")
25+
.withNamespace(operator.getNamespace())
26+
.build());
27+
return resource;
28+
}
29+
}

0 commit comments

Comments
 (0)