diff --git a/api/src/test/java/io/strimzi/api/kafka/model/bridge/KafkaBridgeCrdIT.java b/api/src/test/java/io/strimzi/api/kafka/model/bridge/KafkaBridgeCrdIT.java index 5cf1c5838ed..ebbb43af80a 100644 --- a/api/src/test/java/io/strimzi/api/kafka/model/bridge/KafkaBridgeCrdIT.java +++ b/api/src/test/java/io/strimzi/api/kafka/model/bridge/KafkaBridgeCrdIT.java @@ -11,6 +11,7 @@ import io.strimzi.test.CrdUtils; import io.strimzi.test.ReadWriteUtils; import io.strimzi.test.TestUtils; +import org.hamcrest.CoreMatchers; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; @@ -34,6 +35,11 @@ void testKafkaBridgeScaling() { createScaleDelete(KafkaBridge.class, "KafkaBridge.yaml"); } + @Test + void testKafkaBridgeV1() { + createDeleteCustomResource("KafkaBridge-v1.yaml"); + } + @Test void testKafkaBridgeMinimal() { createDeleteCustomResource("KafkaBridge-minimal.yaml"); @@ -118,6 +124,48 @@ void testKafkaBridgeWithMetrics() { createDeleteCustomResource("KafkaBridge-with-metrics.yaml"); } + @Test + void testKafkaBridgeV1NoSpec() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaBridge-v1-no-spec.yaml")); + + assertMissingRequiredPropertiesMessage(exception.getMessage(), "spec"); + } + + @Test + void testKafkaBridgeV1NoReplicas() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaBridge-v1-no-replicas.yaml")); + + assertMissingRequiredPropertiesMessage(exception.getMessage(), "replicas"); + } + + @Test + public void testKafkaBridgeV1WrongAuth() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaBridge-v1-wrong-auth.yaml")); + + assertThat(exception.getMessage(), allOf( + CoreMatchers.containsStringIgnoringCase("Unsupported value: \"oauth\""), + CoreMatchers.containsStringIgnoringCase("supported values: \"tls\", \"scram-sha-256\", \"scram-sha-512\", \"plain\", \"custom\"")) + ); + } + + @Test + public void testKafkaBridgeV1WrongTracing() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaBridge-v1-wrong-tracing.yaml")); + + assertThat(exception.getMessage(), allOf( + CoreMatchers.containsStringIgnoringCase("Unsupported value: \"jaeger\""), + CoreMatchers.containsStringIgnoringCase("supported values: \"opentelemetry\"")) + ); + } + @BeforeAll void setupEnvironment() { client = new KubernetesClientBuilder().withConfig(new ConfigBuilder().withNamespace(NAMESPACE).build()).build(); diff --git a/api/src/test/java/io/strimzi/api/kafka/model/connect/KafkaConnectCrdIT.java b/api/src/test/java/io/strimzi/api/kafka/model/connect/KafkaConnectCrdIT.java index af89321a489..9a905a96fbd 100644 --- a/api/src/test/java/io/strimzi/api/kafka/model/connect/KafkaConnectCrdIT.java +++ b/api/src/test/java/io/strimzi/api/kafka/model/connect/KafkaConnectCrdIT.java @@ -10,10 +10,12 @@ import io.strimzi.api.kafka.model.AbstractCrdIT; import io.strimzi.test.CrdUtils; import io.strimzi.test.TestUtils; +import org.hamcrest.CoreMatchers; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.containsStringIgnoringCase; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -32,6 +34,11 @@ void testKafkaConnectScaling() { createScaleDelete(KafkaConnect.class, "KafkaConnect.yaml"); } + @Test + void testKafkaConnectV1() { + createDeleteCustomResource("KafkaConnect-v1.yaml"); + } + @Test void testKafkaConnectMinimal() { createDeleteCustomResource("KafkaConnect-minimal.yaml"); @@ -103,6 +110,48 @@ public void testKafkaConnectWithDnsConfig() { createDeleteCustomResource("KafkaConnect-with-dnsConfig.yaml"); } + @Test + void testKafkaConnectV1NoSpec() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaConnect-v1-no-spec.yaml")); + + assertMissingRequiredPropertiesMessage(exception.getMessage(), "spec"); + } + + @Test + void testKafkaConnectV1NoReplicasGroupEtc() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaConnect-v1-no-replicas-group-etc.yaml")); + + assertMissingRequiredPropertiesMessage(exception.getMessage(), "replicas", "groupId", "configStorageTopic", "statusStorageTopic", "offsetStorageTopic"); + } + + @Test + public void testKafkaConnectV1WrongAuth() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaConnect-v1-wrong-auth.yaml")); + + assertThat(exception.getMessage(), allOf( + CoreMatchers.containsStringIgnoringCase("Unsupported value: \"oauth\""), + CoreMatchers.containsStringIgnoringCase("supported values: \"tls\", \"scram-sha-256\", \"scram-sha-512\", \"plain\", \"custom\"")) + ); + } + + @Test + public void testKafkaConnectV1WrongTracing() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaConnect-v1-wrong-tracing.yaml")); + + assertThat(exception.getMessage(), allOf( + CoreMatchers.containsStringIgnoringCase("Unsupported value: \"jaeger\""), + CoreMatchers.containsStringIgnoringCase("supported values: \"opentelemetry\"")) + ); + } + @BeforeAll void setupEnvironment() { client = new KubernetesClientBuilder().withConfig(new ConfigBuilder().withNamespace(NAMESPACE).build()).build(); diff --git a/api/src/test/java/io/strimzi/api/kafka/model/connector/KafkaConnectorCrdIT.java b/api/src/test/java/io/strimzi/api/kafka/model/connector/KafkaConnectorCrdIT.java index a7eb833a950..a0eccaec263 100644 --- a/api/src/test/java/io/strimzi/api/kafka/model/connector/KafkaConnectorCrdIT.java +++ b/api/src/test/java/io/strimzi/api/kafka/model/connector/KafkaConnectorCrdIT.java @@ -6,6 +6,7 @@ import io.fabric8.kubernetes.client.ConfigBuilder; import io.fabric8.kubernetes.client.KubernetesClientBuilder; +import io.fabric8.kubernetes.client.KubernetesClientException; import io.strimzi.api.kafka.model.AbstractCrdIT; import io.strimzi.test.CrdUtils; import io.strimzi.test.TestUtils; @@ -13,6 +14,8 @@ import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertThrows; + /** * The purpose of this test is to confirm that we can create a * resource from the POJOs, serialize it and create the resource in K8S. @@ -27,11 +30,25 @@ void testKafkaConnector() { createDeleteCustomResource("KafkaConnector.yaml"); } + @Test + void testKafkaConnectorv1() { + createDeleteCustomResource("KafkaConnector-v1.yaml"); + } + @Test void testKafkaConnectorScaling() { createScaleDelete(KafkaConnector.class, "KafkaConnector.yaml"); } + @Test + void testKafkaConnectorV1NoSpec() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaConnector-v1-no-spec.yaml")); + + assertMissingRequiredPropertiesMessage(exception.getMessage(), "spec"); + } + @BeforeAll void setupEnvironment() { client = new KubernetesClientBuilder().withConfig(new ConfigBuilder().withNamespace(NAMESPACE).build()).build(); diff --git a/api/src/test/java/io/strimzi/api/kafka/model/kafka/KafkaCrdIT.java b/api/src/test/java/io/strimzi/api/kafka/model/kafka/KafkaCrdIT.java index 873fb31d42e..c868586c908 100644 --- a/api/src/test/java/io/strimzi/api/kafka/model/kafka/KafkaCrdIT.java +++ b/api/src/test/java/io/strimzi/api/kafka/model/kafka/KafkaCrdIT.java @@ -10,10 +10,12 @@ import io.strimzi.api.kafka.model.AbstractCrdIT; import io.strimzi.test.CrdUtils; import io.strimzi.test.TestUtils; +import org.hamcrest.CoreMatchers; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.anyOf; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.containsStringIgnoringCase; @@ -33,6 +35,11 @@ void testKafka() { createDeleteCustomResource("Kafka.yaml"); } + @Test + void testKafkaV1() { + createDeleteCustomResource("Kafka-v1.yaml"); + } + @Test void testKafkaWithZooKeeper() { createDeleteCustomResource("Kafka-with-zookeeper.yaml"); @@ -124,6 +131,29 @@ public void testKafkaWithAutoRebalanceEmpty() { assertThat(exception.getMessage(), containsStringIgnoringCase("spec.cruiseControl.autoRebalance in body should have at least 1 items")); } + @Test + void testKafkaV1NoSpec() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("Kafka-v1-no-spec.yaml")); + + assertMissingRequiredPropertiesMessage(exception.getMessage(), "spec"); + } + + @Test + public void testKafkaV1WrongTypes() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("Kafka-v1-wrong-types.yaml")); + + assertThat(exception.getMessage(), allOf( + CoreMatchers.containsStringIgnoringCase("Unsupported value: \"opa\""), + CoreMatchers.containsStringIgnoringCase("supported values: \"simple\", \"custom\""), + CoreMatchers.containsStringIgnoringCase("Unsupported value: \"oauth\""), + CoreMatchers.containsStringIgnoringCase("supported values: \"tls\", \"scram-sha-512\", \"custom\"")) + ); + } + @BeforeAll void setupEnvironment() { client = new KubernetesClientBuilder().withConfig(new ConfigBuilder().withNamespace(NAMESPACE).build()).build(); diff --git a/api/src/test/java/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2CrdIT.java b/api/src/test/java/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2CrdIT.java index f22861e5f32..85d2ef1ba13 100644 --- a/api/src/test/java/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2CrdIT.java +++ b/api/src/test/java/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2CrdIT.java @@ -10,10 +10,12 @@ import io.strimzi.api.kafka.model.AbstractCrdIT; import io.strimzi.test.CrdUtils; import io.strimzi.test.TestUtils; +import org.hamcrest.CoreMatchers; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import static org.hamcrest.CoreMatchers.allOf; import static org.hamcrest.CoreMatchers.containsStringIgnoringCase; import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; @@ -32,6 +34,11 @@ void testKafkaMirrorMaker2Scaling() { createScaleDelete(KafkaMirrorMaker2.class, "KafkaMirrorMaker2.yaml"); } + @Test + void testKafkaMirrorMaker2V1() { + createDeleteCustomResource("KafkaMirrorMaker2-v1.yaml"); + } + @Test void testKafkaMirrorMaker2Minimal() { createDeleteCustomResource("KafkaMirrorMaker2-minimal.yaml"); @@ -103,6 +110,45 @@ void testKafkaMirrorMaker2WithDnsConfig() { createDeleteCustomResource("KafkaMirrorMaker2-with-dnsConfig.yaml"); } + @Test + void testKafkaMirrorMaker2V1NoSpec() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaMirrorMaker2-v1-no-spec.yaml")); + + assertMissingRequiredPropertiesMessage(exception.getMessage(), "spec"); + } + + @Test + void testKafkaMirrorMaker2V1MissingRequiredTopLevel() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaMirrorMaker2-v1-missing-required-top-level.yaml")); + + assertMissingRequiredPropertiesMessage(exception.getMessage(), "source", "target"); + } + + @Test + void testKafkaMirrorMaker2V1MissingRequiredLowerLevel() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaMirrorMaker2-v1-missing-required-lower-level.yaml")); + + assertMissingRequiredPropertiesMessage(exception.getMessage(), "groupId", "configStorageTopic", "statusStorageTopic", "offsetStorageTopic", "alias"); + } + + @Test + public void testKafkaMirrorMaker2V1WrongTracing() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaMirrorMaker2-v1-wrong-tracing.yaml")); + + assertThat(exception.getMessage(), allOf( + CoreMatchers.containsStringIgnoringCase("Unsupported value: \"jaeger\""), + CoreMatchers.containsStringIgnoringCase("supported values: \"opentelemetry\"")) + ); + } + @BeforeAll void setupEnvironment() { client = new KubernetesClientBuilder().withConfig(new ConfigBuilder().withNamespace(NAMESPACE).build()).build(); diff --git a/api/src/test/java/io/strimzi/api/kafka/model/nodepool/KafkaNodePoolCrdIT.java b/api/src/test/java/io/strimzi/api/kafka/model/nodepool/KafkaNodePoolCrdIT.java index 1ba786d5651..e1cd604e462 100644 --- a/api/src/test/java/io/strimzi/api/kafka/model/nodepool/KafkaNodePoolCrdIT.java +++ b/api/src/test/java/io/strimzi/api/kafka/model/nodepool/KafkaNodePoolCrdIT.java @@ -30,6 +30,11 @@ void testKafkaNodePool() { createDeleteCustomResource("KafkaNodePool.yaml"); } + @Test + void testKafkaNodePoolV1() { + createDeleteCustomResource("KafkaNodePool-v1.yaml"); + } + @Test void testKafkaNodePoolScaling() { createScaleDelete(KafkaNodePool.class, "KafkaNodePool.yaml"); @@ -46,6 +51,15 @@ public void testKafkaWithInvalidRole() { containsStringIgnoringCase("spec.roles[0]: Unsupported value: \"helper\": supported values: \"controller\", \"broker\""))); } + @Test + void testKafkaNodePoolNoSpec() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaNodePool-v1-no-spec.yaml")); + + assertMissingRequiredPropertiesMessage(exception.getMessage(), "spec"); + } + @BeforeAll void setupEnvironment() { client = new KubernetesClientBuilder().withConfig(new ConfigBuilder().withNamespace(NAMESPACE).build()).build(); diff --git a/api/src/test/java/io/strimzi/api/kafka/model/podset/StrimziPodSetCrdIT.java b/api/src/test/java/io/strimzi/api/kafka/model/podset/StrimziPodSetCrdIT.java index e50348da2af..a199f434bb4 100644 --- a/api/src/test/java/io/strimzi/api/kafka/model/podset/StrimziPodSetCrdIT.java +++ b/api/src/test/java/io/strimzi/api/kafka/model/podset/StrimziPodSetCrdIT.java @@ -38,6 +38,11 @@ void testStrimziPodSetMinimal() { createDeleteCustomResource("StrimziPodSet.yaml"); } + @Test + void testStrimziPodSetV1() { + createDeleteCustomResource("StrimziPodSet-v1.yaml"); + } + @Test void testStrimziPodSettWithMissingRequired() { Throwable exception = assertThrows( @@ -69,6 +74,15 @@ void testZeroReplicas() { Crds.strimziPodSetOperation(client).inNamespace(NAMESPACE).withName("my-pod-set").delete(); } + @Test + void testNoSpec() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("StrimziPodSet-v1-no-spec.yaml")); + + assertMissingRequiredPropertiesMessage(exception.getMessage(), "spec"); + } + @BeforeAll void setupEnvironment() { client = new KubernetesClientBuilder().withConfig(new ConfigBuilder().withNamespace(NAMESPACE).build()).build(); diff --git a/api/src/test/java/io/strimzi/api/kafka/model/rebalance/KafkaRebalanceCrdIT.java b/api/src/test/java/io/strimzi/api/kafka/model/rebalance/KafkaRebalanceCrdIT.java index 4a92a0b0979..d43b6f036d0 100644 --- a/api/src/test/java/io/strimzi/api/kafka/model/rebalance/KafkaRebalanceCrdIT.java +++ b/api/src/test/java/io/strimzi/api/kafka/model/rebalance/KafkaRebalanceCrdIT.java @@ -39,6 +39,11 @@ void testKafkaRebalanceMinimal() { createDeleteCustomResource("KafkaRebalance-minimal.yaml"); } + @Test + void testKafkaRebalanceV1() { + createDeleteCustomResource("KafkaRebalance-v1.yaml"); + } + @Test void testKafkaRebalanceWithGoals() { createDeleteCustomResource("KafkaRebalance-with-goals.yaml"); @@ -103,6 +108,15 @@ void testKafkaRebalanceWrongMode() { assertThat(exception.getMessage(), containsString("spec.mode: Unsupported value: \"wrong-mode\": supported values: \"full\", \"add-brokers\", \"remove-brokers\"")); } + @Test + void testKafkaRebalanceV1NoSpec() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaRebalance-v1-no-spec.yaml")); + + assertMissingRequiredPropertiesMessage(exception.getMessage(), "spec"); + } + @BeforeAll void setupEnvironment() { client = new KubernetesClientBuilder().withConfig(new ConfigBuilder().withNamespace(NAMESPACE).build()).build(); diff --git a/api/src/test/java/io/strimzi/api/kafka/model/topic/KafkaTopicCrdIT.java b/api/src/test/java/io/strimzi/api/kafka/model/topic/KafkaTopicCrdIT.java index 80ca2ca9a48..925d45fb49c 100644 --- a/api/src/test/java/io/strimzi/api/kafka/model/topic/KafkaTopicCrdIT.java +++ b/api/src/test/java/io/strimzi/api/kafka/model/topic/KafkaTopicCrdIT.java @@ -40,11 +40,26 @@ void testKafkaTopicV1beta1() { createDeleteCustomResource("KafkaTopicV1beta1.yaml"); } + @Test + void testKafkaTopicV1() { + createDeleteCustomResource("KafkaTopic-v1.yaml"); + } + + @Test void testKafkaTopicMinimal() { createDeleteCustomResource("KafkaTopic-minimal.yaml"); } + @Test + void testKafkaTopicV1NoSpec() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaTopic-v1-no-spec.yaml")); + + assertMissingRequiredPropertiesMessage(exception.getMessage(), "spec"); + } + @BeforeAll void setupEnvironment() { client = new KubernetesClientBuilder().withConfig(new ConfigBuilder().withNamespace(NAMESPACE).build()).build(); diff --git a/api/src/test/java/io/strimzi/api/kafka/model/user/KafkaUserCrdIT.java b/api/src/test/java/io/strimzi/api/kafka/model/user/KafkaUserCrdIT.java index cf46a516f5c..5f3e10cdde4 100644 --- a/api/src/test/java/io/strimzi/api/kafka/model/user/KafkaUserCrdIT.java +++ b/api/src/test/java/io/strimzi/api/kafka/model/user/KafkaUserCrdIT.java @@ -40,11 +40,25 @@ void testKafkaUserV1beta1() { createDeleteCustomResource("KafkaUserV1beta1.yaml"); } + @Test + void testKafkaUserV1() { + createDeleteCustomResource("KafkaUser-v1.yaml"); + } + @Test void testKafkaUserMinimal() { createDeleteCustomResource("KafkaUser-minimal.yaml"); } + @Test + void testKafkaUserV1NoSpec() { + Throwable exception = assertThrows( + KubernetesClientException.class, + () -> createDeleteCustomResource("KafkaUser-v1-no-spec.yaml")); + + assertMissingRequiredPropertiesMessage(exception.getMessage(), "spec"); + } + @BeforeAll void setupEnvironment() { client = new KubernetesClientBuilder().withConfig(new ConfigBuilder().withNamespace(NAMESPACE).build()).build(); diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/bridge/KafkaBridge-v1-no-replicas.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/bridge/KafkaBridge-v1-no-replicas.yaml new file mode 100644 index 00000000000..eee2dff7c66 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/bridge/KafkaBridge-v1-no-replicas.yaml @@ -0,0 +1,6 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaBridge +metadata: + name: test-kafka-bridge +spec: + bootstrapServers: my-cluster-kafka:9092 \ No newline at end of file diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/bridge/KafkaBridge-v1-no-spec.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/bridge/KafkaBridge-v1-no-spec.yaml new file mode 100644 index 00000000000..4dcd7c985f1 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/bridge/KafkaBridge-v1-no-spec.yaml @@ -0,0 +1,4 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaBridge +metadata: + name: test-kafka-bridge \ No newline at end of file diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/bridge/KafkaBridge-v1-wrong-auth.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/bridge/KafkaBridge-v1-wrong-auth.yaml new file mode 100644 index 00000000000..5f7fde32a7a --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/bridge/KafkaBridge-v1-wrong-auth.yaml @@ -0,0 +1,11 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaBridge +metadata: + name: my-bridge +spec: + replicas: 1 + bootstrapServers: my-cluster-kafka-bootstrap:9092 + http: + port: 8080 + authentication: + type: oauth \ No newline at end of file diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/bridge/KafkaBridge-v1-wrong-tracing.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/bridge/KafkaBridge-v1-wrong-tracing.yaml new file mode 100644 index 00000000000..4f0c22c14f5 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/bridge/KafkaBridge-v1-wrong-tracing.yaml @@ -0,0 +1,11 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaBridge +metadata: + name: my-bridge +spec: + replicas: 1 + bootstrapServers: my-cluster-kafka-bootstrap:9092 + http: + port: 8080 + tracing: + type: jaeger \ No newline at end of file diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/bridge/KafkaBridge-v1.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/bridge/KafkaBridge-v1.yaml new file mode 100644 index 00000000000..5839675f95b --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/bridge/KafkaBridge-v1.yaml @@ -0,0 +1,9 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaBridge +metadata: + name: my-bridge +spec: + replicas: 1 + bootstrapServers: my-cluster-kafka-bootstrap:9092 + http: + port: 8080 diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/connect/KafkaConnect-v1-no-replicas-group-etc.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/connect/KafkaConnect-v1-no-replicas-group-etc.yaml new file mode 100644 index 00000000000..4cbb55d6b21 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/connect/KafkaConnect-v1-no-replicas-group-etc.yaml @@ -0,0 +1,18 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaConnect +metadata: + name: test-kafka-connect +spec: + bootstrapServers: kafka:9092 + tls: + trustedCertificates: + - secretName: my-secret + certificate: ca.crt + authentication: + type: tls + certificateAndKey: + secretName: my-user-secret + key: user.key + certificate: user.crt + config: + name: bar diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/connect/KafkaConnect-v1-no-spec.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/connect/KafkaConnect-v1-no-spec.yaml new file mode 100644 index 00000000000..decac9f9773 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/connect/KafkaConnect-v1-no-spec.yaml @@ -0,0 +1,4 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaConnect +metadata: + name: test-kafka-connect diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/connect/KafkaConnect-v1-wrong-auth.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/connect/KafkaConnect-v1-wrong-auth.yaml new file mode 100644 index 00000000000..8835e6c3995 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/connect/KafkaConnect-v1-wrong-auth.yaml @@ -0,0 +1,22 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaConnect +metadata: + name: my-connect-cluster +spec: + version: 4.1.0 + replicas: 1 + bootstrapServers: my-cluster-kafka-bootstrap:9093 + groupId: my-connect-group + configStorageTopic: my-connect-configs + statusStorageTopic: my-connect-status + offsetStorageTopic: my-connect-offsets + tls: + trustedCertificates: + - secretName: my-cluster-cluster-ca-cert + pattern: "*.crt" + authentication: + type: oauth + config: + config.storage.replication.factor: -1 + offset.storage.replication.factor: -1 + status.storage.replication.factor: -1 diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/connect/KafkaConnect-v1-wrong-tracing.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/connect/KafkaConnect-v1-wrong-tracing.yaml new file mode 100644 index 00000000000..fbabfe887bb --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/connect/KafkaConnect-v1-wrong-tracing.yaml @@ -0,0 +1,22 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaConnect +metadata: + name: my-connect-cluster +spec: + version: 4.1.0 + replicas: 1 + bootstrapServers: my-cluster-kafka-bootstrap:9093 + groupId: my-connect-group + configStorageTopic: my-connect-configs + statusStorageTopic: my-connect-status + offsetStorageTopic: my-connect-offsets + tls: + trustedCertificates: + - secretName: my-cluster-cluster-ca-cert + pattern: "*.crt" + config: + config.storage.replication.factor: -1 + offset.storage.replication.factor: -1 + status.storage.replication.factor: -1 + tracing: + type: jaeger \ No newline at end of file diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/connect/KafkaConnect-v1.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/connect/KafkaConnect-v1.yaml new file mode 100644 index 00000000000..86b5b392225 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/connect/KafkaConnect-v1.yaml @@ -0,0 +1,20 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaConnect +metadata: + name: my-connect-cluster +spec: + version: 4.1.0 + replicas: 1 + bootstrapServers: my-cluster-kafka-bootstrap:9093 + groupId: my-connect-group + configStorageTopic: my-connect-configs + statusStorageTopic: my-connect-status + offsetStorageTopic: my-connect-offsets + tls: + trustedCertificates: + - secretName: my-cluster-cluster-ca-cert + pattern: "*.crt" + config: + config.storage.replication.factor: -1 + offset.storage.replication.factor: -1 + status.storage.replication.factor: -1 diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/connector/KafkaConnector-v1-no-spec.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/connector/KafkaConnector-v1-no-spec.yaml new file mode 100644 index 00000000000..8fc49de2632 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/connector/KafkaConnector-v1-no-spec.yaml @@ -0,0 +1,6 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaConnector +metadata: + name: my-source-connector + labels: + strimzi.io/cluster: my-connect-cluster diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/connector/KafkaConnector-v1.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/connector/KafkaConnector-v1.yaml new file mode 100644 index 00000000000..d8a2396d93b --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/connector/KafkaConnector-v1.yaml @@ -0,0 +1,12 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaConnector +metadata: + name: my-source-connector + labels: + strimzi.io/cluster: my-connect-cluster +spec: + class: org.apache.kafka.connect.file.FileStreamSourceConnector + tasksMax: 2 + config: + file: "/opt/kafka/LICENSE" + topic: my-topic diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/kafka/Kafka-v1-no-spec.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/kafka/Kafka-v1-no-spec.yaml new file mode 100644 index 00000000000..664ae7b59fc --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/kafka/Kafka-v1-no-spec.yaml @@ -0,0 +1,4 @@ +apiVersion: kafka.strimzi.io/v1 +kind: Kafka +metadata: + name: my-cluster \ No newline at end of file diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/kafka/Kafka-v1-wrong-types.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/kafka/Kafka-v1-wrong-types.yaml new file mode 100644 index 00000000000..abd7067ba9c --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/kafka/Kafka-v1-wrong-types.yaml @@ -0,0 +1,30 @@ +apiVersion: kafka.strimzi.io/v1 +kind: Kafka +metadata: + name: my-cluster +spec: + kafka: + version: 4.1.0 + metadataVersion: 4.1-IV1 + listeners: + - name: plain + port: 9092 + type: internal + tls: false + authentication: + type: oauth + - name: tls + port: 9093 + type: internal + tls: true + authorization: + type: opa + config: + offsets.topic.replication.factor: 3 + transaction.state.log.replication.factor: 3 + transaction.state.log.min.isr: 2 + default.replication.factor: 3 + min.insync.replicas: 2 + entityOperator: + topicOperator: {} + userOperator: {} \ No newline at end of file diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/kafka/Kafka-v1.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/kafka/Kafka-v1.yaml new file mode 100644 index 00000000000..d9b28e6476c --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/kafka/Kafka-v1.yaml @@ -0,0 +1,26 @@ +apiVersion: kafka.strimzi.io/v1 +kind: Kafka +metadata: + name: my-cluster +spec: + kafka: + version: 4.1.0 + metadataVersion: 4.1-IV1 + listeners: + - name: plain + port: 9092 + type: internal + tls: false + - name: tls + port: 9093 + type: internal + tls: true + config: + offsets.topic.replication.factor: 3 + transaction.state.log.replication.factor: 3 + transaction.state.log.min.isr: 2 + default.replication.factor: 3 + min.insync.replicas: 2 + entityOperator: + topicOperator: {} + userOperator: {} \ No newline at end of file diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2-v1-missing-required-lower-level.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2-v1-missing-required-lower-level.yaml new file mode 100644 index 00000000000..c63d5f91332 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2-v1-missing-required-lower-level.yaml @@ -0,0 +1,34 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaMirrorMaker2 +metadata: + name: my-mirror-maker-2 +spec: + version: 4.1.0 + replicas: 1 + target: + bootstrapServers: cluster-b-kafka-bootstrap:9092 + config: + # -1 means it will use the default replication factor configured in the broker + config.storage.replication.factor: -1 + offset.storage.replication.factor: -1 + status.storage.replication.factor: -1 + mirrors: + - source: + bootstrapServers: cluster-a-kafka-bootstrap:9092 + sourceConnector: + tasksMax: 1 + config: + # -1 means it will use the default replication factor configured in the broker + replication.factor: -1 + offset-syncs.topic.replication.factor: -1 + sync.topic.acls.enabled: "false" + refresh.topics.interval.seconds: 600 + checkpointConnector: + tasksMax: 1 + config: + # -1 means it will use the default replication factor configured in the broker + checkpoints.topic.replication.factor: -1 + sync.group.offsets.enabled: "false" + refresh.groups.interval.seconds: 600 + topicsPattern: ".*" + groupsPattern: ".*" diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2-v1-missing-required-top-level.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2-v1-missing-required-top-level.yaml new file mode 100644 index 00000000000..b6f7ac912c1 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2-v1-missing-required-top-level.yaml @@ -0,0 +1,25 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaMirrorMaker2 +metadata: + name: my-mirror-maker-2 +spec: + version: 4.1.0 + replicas: 1 + mirrors: + - sourceConnector: + tasksMax: 1 + config: + # -1 means it will use the default replication factor configured in the broker + replication.factor: -1 + offset-syncs.topic.replication.factor: -1 + sync.topic.acls.enabled: "false" + refresh.topics.interval.seconds: 600 + checkpointConnector: + tasksMax: 1 + config: + # -1 means it will use the default replication factor configured in the broker + checkpoints.topic.replication.factor: -1 + sync.group.offsets.enabled: "false" + refresh.groups.interval.seconds: 600 + topicsPattern: ".*" + groupsPattern: ".*" diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2-v1-no-spec.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2-v1-no-spec.yaml new file mode 100644 index 00000000000..345081fcc95 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2-v1-no-spec.yaml @@ -0,0 +1,4 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaMirrorMaker2 +metadata: + name: my-mirror-maker-2 diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2-v1-wrong-tracing.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2-v1-wrong-tracing.yaml new file mode 100644 index 00000000000..8726d807d7d --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2-v1-wrong-tracing.yaml @@ -0,0 +1,42 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaMirrorMaker2 +metadata: + name: my-mirror-maker-2 +spec: + version: 4.1.0 + replicas: 1 + target: + alias: cluster-b + bootstrapServers: cluster-b-kafka-bootstrap:9092 + groupId: my-mirror-maker-2-group + configStorageTopic: my-mirror-maker-2-config + offsetStorageTopic: my-mirror-maker-2-offset + statusStorageTopic: my-mirror-maker-2-status + config: + # -1 means it will use the default replication factor configured in the broker + config.storage.replication.factor: -1 + offset.storage.replication.factor: -1 + status.storage.replication.factor: -1 + mirrors: + - source: + bootstrapServers: cluster-a-kafka-bootstrap:9092 + alias: cluster-a + sourceConnector: + tasksMax: 1 + config: + # -1 means it will use the default replication factor configured in the broker + replication.factor: -1 + offset-syncs.topic.replication.factor: -1 + sync.topic.acls.enabled: "false" + refresh.topics.interval.seconds: 600 + checkpointConnector: + tasksMax: 1 + config: + # -1 means it will use the default replication factor configured in the broker + checkpoints.topic.replication.factor: -1 + sync.group.offsets.enabled: "false" + refresh.groups.interval.seconds: 600 + topicsPattern: ".*" + groupsPattern: ".*" + tracing: + type: jaeger \ No newline at end of file diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2-v1.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2-v1.yaml new file mode 100644 index 00000000000..5c5b493a2d5 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/mirrormaker2/KafkaMirrorMaker2-v1.yaml @@ -0,0 +1,40 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaMirrorMaker2 +metadata: + name: my-mirror-maker-2 +spec: + version: 4.1.0 + replicas: 1 + target: + alias: cluster-b + bootstrapServers: cluster-b-kafka-bootstrap:9092 + groupId: my-mirror-maker-2-group + configStorageTopic: my-mirror-maker-2-config + offsetStorageTopic: my-mirror-maker-2-offset + statusStorageTopic: my-mirror-maker-2-status + config: + # -1 means it will use the default replication factor configured in the broker + config.storage.replication.factor: -1 + offset.storage.replication.factor: -1 + status.storage.replication.factor: -1 + mirrors: + - source: + bootstrapServers: cluster-a-kafka-bootstrap:9092 + alias: cluster-a + sourceConnector: + tasksMax: 1 + config: + # -1 means it will use the default replication factor configured in the broker + replication.factor: -1 + offset-syncs.topic.replication.factor: -1 + sync.topic.acls.enabled: "false" + refresh.topics.interval.seconds: 600 + checkpointConnector: + tasksMax: 1 + config: + # -1 means it will use the default replication factor configured in the broker + checkpoints.topic.replication.factor: -1 + sync.group.offsets.enabled: "false" + refresh.groups.interval.seconds: 600 + topicsPattern: ".*" + groupsPattern: ".*" diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/nodepool/KafkaNodePool-v1-no-spec.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/nodepool/KafkaNodePool-v1-no-spec.yaml new file mode 100644 index 00000000000..3a5b6b30585 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/nodepool/KafkaNodePool-v1-no-spec.yaml @@ -0,0 +1,6 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaNodePool +metadata: + name: controller + labels: + strimzi.io/cluster: my-cluster \ No newline at end of file diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/nodepool/KafkaNodePool-v1.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/nodepool/KafkaNodePool-v1.yaml new file mode 100644 index 00000000000..64aa5e40ecf --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/nodepool/KafkaNodePool-v1.yaml @@ -0,0 +1,16 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaNodePool +metadata: + name: controller + labels: + strimzi.io/cluster: my-cluster +spec: + replicas: 3 + roles: + - controller + storage: + type: jbod + volumes: + - id: 0 + type: ephemeral + kraftMetadata: shared \ No newline at end of file diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/podset/StrimziPodSet-v1-no-spec.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/podset/StrimziPodSet-v1-no-spec.yaml new file mode 100644 index 00000000000..406c2303ac3 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/podset/StrimziPodSet-v1-no-spec.yaml @@ -0,0 +1,4 @@ +apiVersion: core.strimzi.io/v1 +kind: StrimziPodSet +metadata: + name: test-strimzi-pod-set diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/podset/StrimziPodSet-v1.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/podset/StrimziPodSet-v1.yaml new file mode 100644 index 00000000000..a59b3682783 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/podset/StrimziPodSet-v1.yaml @@ -0,0 +1,24 @@ +apiVersion: core.strimzi.io/v1 +kind: StrimziPodSet +metadata: + name: test-strimzi-pod-set +spec: + selector: + matchLabels: + label1: value1 + label2: value2 + pods: + - apiVersion: v1 + kind: Pod + metadata: + name: broker-0 + labels: + role: broker + spec: + containers: + - name: broker + image: kafka:latest + ports: + - name: kafka + containerPort: 9092 + protocol: TCP diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/rebalance/KafkaRebalance-v1-no-spec.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/rebalance/KafkaRebalance-v1-no-spec.yaml new file mode 100644 index 00000000000..0828cc04264 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/rebalance/KafkaRebalance-v1-no-spec.yaml @@ -0,0 +1,4 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaRebalance +metadata: + name: my-rebalance \ No newline at end of file diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/rebalance/KafkaRebalance-v1.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/rebalance/KafkaRebalance-v1.yaml new file mode 100644 index 00000000000..3ce88dab4fb --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/rebalance/KafkaRebalance-v1.yaml @@ -0,0 +1,11 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaRebalance +metadata: + name: my-rebalance +spec: + goals: + - DiskCapacityGoal + - CpuCapacityGoal + skipHardGoalCheck: true + concurrentPartitionMovementsPerBroker: 10 + replicationThrottle: 5000 \ No newline at end of file diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/topic/KafkaTopic-v1-no-spec.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/topic/KafkaTopic-v1-no-spec.yaml new file mode 100644 index 00000000000..0198e82f0ca --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/topic/KafkaTopic-v1-no-spec.yaml @@ -0,0 +1,4 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaTopic +metadata: + name: my-topic diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/topic/KafkaTopic-v1.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/topic/KafkaTopic-v1.yaml new file mode 100644 index 00000000000..2721931a515 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/topic/KafkaTopic-v1.yaml @@ -0,0 +1,13 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaTopic +metadata: + name: my-topic +spec: + replicas: 3 + partitions: 12 + config: + retention.ms: 7200000 + segment.bytes: 1073741824 + cleanup.policy: delete + min.cleanable.dirty.ratio: 0.5 + preallocate: true diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/user/KafkaUser-v1-no-spec.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/user/KafkaUser-v1-no-spec.yaml new file mode 100644 index 00000000000..2125d2ac3f9 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/user/KafkaUser-v1-no-spec.yaml @@ -0,0 +1,4 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaUser +metadata: + name: "my-user" diff --git a/api/src/test/resources/io/strimzi/api/kafka/model/user/KafkaUser-v1.yaml b/api/src/test/resources/io/strimzi/api/kafka/model/user/KafkaUser-v1.yaml new file mode 100644 index 00000000000..e07c9041244 --- /dev/null +++ b/api/src/test/resources/io/strimzi/api/kafka/model/user/KafkaUser-v1.yaml @@ -0,0 +1,38 @@ +apiVersion: kafka.strimzi.io/v1 +kind: KafkaUser +metadata: + name: "my-user" +spec: + authentication: + type: tls + authorization: + type: simple + acls: + - type: allow + resource: + type: topic + name: my-topic + patternType: prefix + operations: + - Read + - Write + - resource: + type: topic + name: my + patternType: prefix + operations: + - Read + - Write + - Describe + - Create + host: 127.0.0.1 + - resource: + type: group + name: my-group + operations: + - Read + host: 127.0.0.1 + - resource: + type: cluster + operations: + - Read \ No newline at end of file