Skip to content

Commit a61c3c0

Browse files
committed
Annotated integration test classes
Signed-off-by: Attila Mészáros <[email protected]>
1 parent 0a9a3f5 commit a61c3c0

File tree

62 files changed

+508
-1
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

62 files changed

+508
-1
lines changed

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ConcurrencyIT.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.slf4j.LoggerFactory;
1111

1212
import io.fabric8.kubernetes.api.model.ConfigMap;
13+
import io.javaoperatorsdk.annotation.Sample;
1314
import io.javaoperatorsdk.operator.baseapi.simple.TestCustomResource;
1415
import io.javaoperatorsdk.operator.baseapi.simple.TestReconciler;
1516
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
@@ -18,6 +19,13 @@
1819
import static org.assertj.core.api.Assertions.assertThat;
1920
import static org.awaitility.Awaitility.await;
2021

22+
@Sample(
23+
tldr = "Concurrent Reconciliation of Multiple Resources",
24+
description =
25+
"Demonstrates the operator's ability to handle concurrent reconciliation of multiple"
26+
+ " resources. The test creates, updates, and deletes many resources simultaneously to"
27+
+ " verify proper handling of concurrent operations, ensuring thread safety and correct"
28+
+ " resource state management under load.")
2129
class ConcurrencyIT {
2230
public static final int NUMBER_OF_RESOURCES_CREATED = 50;
2331
public static final int NUMBER_OF_RESOURCES_DELETED = 30;

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/builtinresourcecleaner/BuiltInResourceCleanerIT.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,21 @@
88
import org.slf4j.LoggerFactory;
99

1010
import io.fabric8.kubernetes.api.model.Service;
11+
import io.javaoperatorsdk.annotation.Sample;
1112
import io.javaoperatorsdk.operator.ReconcilerUtils;
1213
import io.javaoperatorsdk.operator.dependent.standalonedependent.StandaloneDependentResourceIT;
1314
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
1415

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

19+
@Sample(
20+
tldr = "Cleanup handler for built-in Kubernetes resources",
21+
description =
22+
"Demonstrates how to implement cleanup handlers (finalizers) for built-in Kubernetes"
23+
+ " resources like Service and Pod. These resources don't use generation the same way"
24+
+ " as custom resources, so this sample shows the proper approach to handle their"
25+
+ " lifecycle and cleanup logic.")
1826
class BuiltInResourceCleanerIT {
1927

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

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/changenamespace/ChangeNamespaceIT.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,22 @@
1414
import io.fabric8.kubernetes.api.model.NamespaceBuilder;
1515
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
1616
import io.fabric8.kubernetes.client.KubernetesClient;
17+
import io.javaoperatorsdk.annotation.Sample;
1718
import io.javaoperatorsdk.operator.RegisteredController;
1819
import io.javaoperatorsdk.operator.api.reconciler.Constants;
1920
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
2021

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

25+
@Sample(
26+
tldr = "Dynamically Changing Watched Namespaces",
27+
description =
28+
"Demonstrates how to dynamically change the set of namespaces that an operator watches at"
29+
+ " runtime. This feature allows operators to add or remove namespaces from their watch"
30+
+ " list, including switching between specific namespaces and watching all namespaces."
31+
+ " The test verifies that resources in newly added namespaces are reconciled and"
32+
+ " resources in removed namespaces are no longer watched.")
2433
class ChangeNamespaceIT {
2534

2635
public static final String TEST_RESOURCE_NAME_1 = "test1";

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanerforreconciler/CleanerForReconcilerIT.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,21 @@
44
import org.junit.jupiter.api.extension.RegisterExtension;
55

66
import io.fabric8.kubernetes.api.model.ObjectMeta;
7+
import io.javaoperatorsdk.annotation.Sample;
78
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
89

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

13+
@Sample(
14+
tldr = "Implementing Cleanup Logic with Cleaner Interface",
15+
description =
16+
"Demonstrates how to implement cleanup logic for custom resources using the Cleaner"
17+
+ " interface. When a reconciler implements Cleaner, the framework automatically adds a"
18+
+ " finalizer to resources and calls the cleanup method when the resource is deleted."
19+
+ " This pattern is useful for cleaning up external resources or performing custom"
20+
+ " deletion logic. The test verifies finalizer handling, cleanup execution, and the"
21+
+ " ability to reschedule cleanup operations.")
1222
class CleanerForReconcilerIT {
1323

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

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateInformerEventSourceEventFilterIT.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,20 @@
77

88
import io.fabric8.kubernetes.api.model.ConfigMap;
99
import io.fabric8.kubernetes.api.model.ObjectMeta;
10+
import io.javaoperatorsdk.annotation.Sample;
1011
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
1112

1213
import static io.javaoperatorsdk.operator.baseapi.createupdateeventfilter.CreateUpdateEventFilterTestReconciler.CONFIG_MAP_TEST_DATA_KEY;
1314
import static org.assertj.core.api.Assertions.assertThat;
1415
import static org.awaitility.Awaitility.await;
1516

17+
@Sample(
18+
tldr = "Event filtering for create and update operations",
19+
description =
20+
"Shows how to configure event filters on informer event sources to control which create and"
21+
+ " update events trigger reconciliation. This is useful for preventing unnecessary"
22+
+ " reconciliation loops when dependent resources are modified by the controller"
23+
+ " itself.")
1624
class CreateUpdateInformerEventSourceEventFilterIT {
1725

1826
@RegisterExtension

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/deployment/KubernetesResourceStatusUpdateIT.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,21 @@
1717
import io.fabric8.kubernetes.api.model.PodTemplateSpec;
1818
import io.fabric8.kubernetes.api.model.apps.Deployment;
1919
import io.fabric8.kubernetes.api.model.apps.DeploymentSpec;
20+
import io.javaoperatorsdk.annotation.Sample;
2021
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
2122

2223
import static io.javaoperatorsdk.operator.baseapi.deployment.DeploymentReconciler.STATUS_MESSAGE;
2324
import static org.assertj.core.api.Assertions.assertThat;
2425
import static org.awaitility.Awaitility.await;
2526

27+
@Sample(
28+
tldr = "Reconciling Non-Custom Kubernetes Resources with Status Updates",
29+
description =
30+
"Demonstrates how to reconcile standard Kubernetes resources (like Deployments) instead of"
31+
+ " custom resources, and how to update their status subresource. This pattern is"
32+
+ " useful when building operators that manage native Kubernetes resources rather than"
33+
+ " custom resource definitions. The test verifies that the operator can watch,"
34+
+ " reconcile, and update the status of a Deployment resource.")
2635
class KubernetesResourceStatusUpdateIT {
2736

2837
@RegisterExtension

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/errorstatushandler/ErrorStatusHandlerIT.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,20 @@
66
import org.junit.jupiter.api.extension.RegisterExtension;
77

88
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
9+
import io.javaoperatorsdk.annotation.Sample;
910
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
1011
import io.javaoperatorsdk.operator.processing.retry.GenericRetry;
1112

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

16+
@Sample(
17+
tldr = "Error Status Handler for Failed Reconciliations",
18+
description =
19+
"Demonstrates how to implement error status handlers that update resource status when"
20+
+ " reconciliations fail. The test verifies that error messages are properly recorded"
21+
+ " in the resource status after each failed retry attempt. This provides visibility"
22+
+ " into reconciliation failures and helps with debugging operator issues.")
1523
class ErrorStatusHandlerIT {
1624

1725
public static final int MAX_RETRY_ATTEMPTS = 3;

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceIT.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,20 @@
66
import org.junit.jupiter.api.extension.RegisterExtension;
77

88
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
9+
import io.javaoperatorsdk.annotation.Sample;
910
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
1011
import io.javaoperatorsdk.operator.support.TestUtils;
1112

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

16+
@Sample(
17+
tldr = "Custom Event Source for Periodic Reconciliation",
18+
description =
19+
"Demonstrates how to implement custom event sources that trigger reconciliation on a"
20+
+ " periodic basis. The test verifies that reconciliations are triggered at regular"
21+
+ " intervals by a timer-based event source. This enables operators to perform periodic"
22+
+ " checks or updates independent of resource changes.")
1523
class EventSourceIT {
1624

1725
@RegisterExtension

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterIT.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,20 @@
66
import org.junit.jupiter.api.extension.RegisterExtension;
77

88
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
9+
import io.javaoperatorsdk.annotation.Sample;
910
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
1011

1112
import static io.javaoperatorsdk.operator.baseapi.filter.FilterTestReconciler.CONFIG_MAP_FILTER_VALUE;
1213
import static org.assertj.core.api.Assertions.assertThat;
1314
import static org.awaitility.Awaitility.await;
1415

16+
@Sample(
17+
tldr = "Filtering Events for Primary and Secondary Resources",
18+
description =
19+
"Demonstrates how to implement event filters for both primary custom resources and"
20+
+ " secondary dependent resources. The test verifies that resource updates matching"
21+
+ " specific filter criteria are ignored and don't trigger reconciliation. This helps"
22+
+ " reduce unnecessary reconciliation executions and improve operator efficiency.")
1523
class FilterIT {
1624

1725
public static final String RESOURCE_NAME = "test1";

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/generickubernetesresourcehandling/GenericKubernetesResourceHandlingIT.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,19 @@
33
import org.junit.jupiter.api.extension.RegisterExtension;
44

55
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
6+
import io.javaoperatorsdk.annotation.Sample;
67
import io.javaoperatorsdk.operator.dependent.generickubernetesresource.GenericKubernetesDependentSpec;
78
import io.javaoperatorsdk.operator.dependent.generickubernetesresource.GenericKubernetesDependentTestBase;
89
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
910

11+
@Sample(
12+
tldr = "Working with GenericKubernetesResource for Dynamic Resource Types",
13+
description =
14+
"Demonstrates how to use GenericKubernetesResource to work with Kubernetes resources"
15+
+ " dynamically without requiring compile-time type definitions. This approach is"
16+
+ " useful when building operators that need to manage arbitrary Kubernetes resources"
17+
+ " or when the resource types are not known at compile time. The test shows how to"
18+
+ " handle generic resources as dependent resources in a reconciler.")
1019
public class GenericKubernetesResourceHandlingIT
1120
extends GenericKubernetesDependentTestBase<GenericKubernetesResourceHandlingCustomResource> {
1221

0 commit comments

Comments
 (0)