From 2d5243867402a4c8c6de82b8fc4a54151d6cba12 Mon Sep 17 00:00:00 2001 From: Ishwar Kanse Date: Wed, 25 Oct 2023 16:57:20 +0530 Subject: [PATCH] Add e2e test case for OTEL Kafka receiver and exporter. --- tests/e2e-openshift/kafka/00-assert.yaml | 180 ++++++++++++++++++ .../kafka/00-create-kafka-instance.yaml | 60 ++++++ tests/e2e-openshift/kafka/01-assert.yaml | 13 ++ .../kafka/01-create-kafka-topics.yaml | 13 ++ tests/e2e-openshift/kafka/02-assert.yaml | 39 ++++ .../kafka/02-otel-kakfa-receiver.yaml | 22 +++ tests/e2e-openshift/kafka/03-assert.yaml | 75 ++++++++ .../kafka/03-otel-kakfa-exporter.yaml | 25 +++ tests/e2e-openshift/kafka/04-assert.yaml | 9 + .../kafka/04-generate-traces.yaml | 26 +++ tests/e2e-openshift/kafka/05-assert.yaml | 6 + tests/e2e-openshift/kafka/check_traces.sh | 39 ++++ 12 files changed, 507 insertions(+) create mode 100644 tests/e2e-openshift/kafka/00-assert.yaml create mode 100644 tests/e2e-openshift/kafka/00-create-kafka-instance.yaml create mode 100644 tests/e2e-openshift/kafka/01-assert.yaml create mode 100644 tests/e2e-openshift/kafka/01-create-kafka-topics.yaml create mode 100644 tests/e2e-openshift/kafka/02-assert.yaml create mode 100644 tests/e2e-openshift/kafka/02-otel-kakfa-receiver.yaml create mode 100644 tests/e2e-openshift/kafka/03-assert.yaml create mode 100644 tests/e2e-openshift/kafka/03-otel-kakfa-exporter.yaml create mode 100644 tests/e2e-openshift/kafka/04-assert.yaml create mode 100644 tests/e2e-openshift/kafka/04-generate-traces.yaml create mode 100644 tests/e2e-openshift/kafka/05-assert.yaml create mode 100755 tests/e2e-openshift/kafka/check_traces.sh diff --git a/tests/e2e-openshift/kafka/00-assert.yaml b/tests/e2e-openshift/kafka/00-assert.yaml new file mode 100644 index 0000000000..7474e7da98 --- /dev/null +++ b/tests/e2e-openshift/kafka/00-assert.yaml @@ -0,0 +1,180 @@ +apiVersion: v1 +kind: Namespace +metadata: + name: kuttl-kafka + +--- +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/instance: my-cluster + app.kubernetes.io/managed-by: strimzi-cluster-operator + app.kubernetes.io/name: entity-operator + app.kubernetes.io/part-of: strimzi-my-cluster + strimzi.io/cluster: my-cluster + strimzi.io/component-type: entity-operator + strimzi.io/kind: Kafka + strimzi.io/name: my-cluster-entity-operator + name: my-cluster-entity-operator + namespace: kuttl-kafka +status: + availableReplicas: 1 + readyReplicas: 1 + replicas: 1 + +--- +apiVersion: v1 +kind: Pod +metadata: + name: my-cluster-kafka-0 + namespace: kuttl-kafka +status: + phase: Running + +--- +apiVersion: v1 +kind: Pod +metadata: + name: my-cluster-zookeeper-0 + namespace: kuttl-kafka +status: + phase: Running + +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/instance: my-cluster + app.kubernetes.io/managed-by: strimzi-cluster-operator + app.kubernetes.io/name: kafka + app.kubernetes.io/part-of: strimzi-my-cluster + strimzi.io/cluster: my-cluster + strimzi.io/component-type: kafka + strimzi.io/discovery: "true" + strimzi.io/kind: Kafka + strimzi.io/name: my-cluster-kafka + name: my-cluster-kafka-bootstrap + namespace: kuttl-kafka +spec: + ports: + - name: tcp-replication + port: 9091 + protocol: TCP + targetPort: 9091 + - name: tcp-clients + port: 9092 + protocol: TCP + targetPort: 9092 + - name: tcp-clientstls + port: 9093 + protocol: TCP + targetPort: 9093 + selector: + strimzi.io/cluster: my-cluster + strimzi.io/kind: Kafka + strimzi.io/name: my-cluster-kafka + +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/instance: my-cluster + app.kubernetes.io/managed-by: strimzi-cluster-operator + app.kubernetes.io/name: kafka + app.kubernetes.io/part-of: strimzi-my-cluster + strimzi.io/cluster: my-cluster + strimzi.io/component-type: kafka + strimzi.io/kind: Kafka + strimzi.io/name: my-cluster-kafka + name: my-cluster-kafka-brokers + namespace: kuttl-kafka +spec: + ports: + - name: tcp-ctrlplane + port: 9090 + protocol: TCP + targetPort: 9090 + - name: tcp-replication + port: 9091 + protocol: TCP + targetPort: 9091 + - name: tcp-kafkaagent + port: 8443 + protocol: TCP + targetPort: 8443 + - name: tcp-clients + port: 9092 + protocol: TCP + targetPort: 9092 + - name: tcp-clientstls + port: 9093 + protocol: TCP + targetPort: 9093 + publishNotReadyAddresses: true + selector: + strimzi.io/cluster: my-cluster + strimzi.io/kind: Kafka + strimzi.io/name: my-cluster-kafka + +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/instance: my-cluster + app.kubernetes.io/managed-by: strimzi-cluster-operator + app.kubernetes.io/name: zookeeper + app.kubernetes.io/part-of: strimzi-my-cluster + strimzi.io/cluster: my-cluster + strimzi.io/component-type: zookeeper + strimzi.io/kind: Kafka + strimzi.io/name: my-cluster-zookeeper + name: my-cluster-zookeeper-client + namespace: kuttl-kafka +spec: + ports: + - name: tcp-clients + port: 2181 + protocol: TCP + targetPort: 2181 + selector: + strimzi.io/cluster: my-cluster + strimzi.io/kind: Kafka + strimzi.io/name: my-cluster-zookeeper + +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/instance: my-cluster + app.kubernetes.io/managed-by: strimzi-cluster-operator + app.kubernetes.io/name: zookeeper + app.kubernetes.io/part-of: strimzi-my-cluster + strimzi.io/cluster: my-cluster + strimzi.io/component-type: zookeeper + strimzi.io/kind: Kafka + strimzi.io/name: my-cluster-zookeeper + name: my-cluster-zookeeper-nodes + namespace: kuttl-kafka +spec: + ports: + - name: tcp-clients + port: 2181 + protocol: TCP + targetPort: 2181 + - name: tcp-clustering + port: 2888 + protocol: TCP + targetPort: 2888 + - name: tcp-election + port: 3888 + protocol: TCP + targetPort: 3888 + selector: + strimzi.io/cluster: my-cluster + strimzi.io/kind: Kafka + strimzi.io/name: my-cluster-zookeeper diff --git a/tests/e2e-openshift/kafka/00-create-kafka-instance.yaml b/tests/e2e-openshift/kafka/00-create-kafka-instance.yaml new file mode 100644 index 0000000000..22b30c0759 --- /dev/null +++ b/tests/e2e-openshift/kafka/00-create-kafka-instance.yaml @@ -0,0 +1,60 @@ +#For creating the Kafka instance, install the AMQ streams operator https://access.redhat.com/documentation/en-us/red_hat_amq_streams/2.5/html/getting_started_with_amq_streams_on_openshift/proc-deploying-cluster-operator-hub-str + +apiVersion: v1 +kind: Namespace +metadata: + name: kuttl-kafka + +--- +apiVersion: kafka.strimzi.io/v1beta2 +kind: Kafka +metadata: + name: my-cluster + namespace: kuttl-kafka +spec: + entityOperator: + topicOperator: + reconciliationIntervalSeconds: 90 + userOperator: + reconciliationIntervalSeconds: 120 + kafka: + config: + log.message.format.version: 3.5.0 + message.max.bytes: 10485760 + offsets.topic.replication.factor: 1 + ssl.cipher.suites: TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 + ssl.enabled.protocols: TLSv1.2 + ssl.protocol: TLSv1.2 + transaction.state.log.min.isr: 1 + transaction.state.log.replication.factor: 1 + jvmOptions: + -Xms: 1024m + -Xmx: 1024m + listeners: + - configuration: + useServiceDnsDomain: true + name: plain + port: 9092 + tls: false + type: internal + - authentication: + type: tls + name: tls + port: 9093 + tls: true + type: internal + replicas: 1 + resources: + limits: + cpu: "1" + memory: 4Gi + requests: + cpu: "1" + memory: 4Gi + storage: + type: ephemeral + version: 3.5.0 + zookeeper: + replicas: 1 + storage: + type: ephemeral diff --git a/tests/e2e-openshift/kafka/01-assert.yaml b/tests/e2e-openshift/kafka/01-assert.yaml new file mode 100644 index 0000000000..eceae60c45 --- /dev/null +++ b/tests/e2e-openshift/kafka/01-assert.yaml @@ -0,0 +1,13 @@ +apiVersion: kafka.strimzi.io/v1beta2 +kind: KafkaTopic +metadata: + name: otlp-spans + namespace: kuttl-kafka +spec: + config: + retention.ms: 300000 + segment.bytes: 1073741824 + partitions: 1 + replicas: 1 +status: + topicName: otlp-spans diff --git a/tests/e2e-openshift/kafka/01-create-kafka-topics.yaml b/tests/e2e-openshift/kafka/01-create-kafka-topics.yaml new file mode 100644 index 0000000000..e7cfcc23d4 --- /dev/null +++ b/tests/e2e-openshift/kafka/01-create-kafka-topics.yaml @@ -0,0 +1,13 @@ +apiVersion: kafka.strimzi.io/v1beta1 +kind: KafkaTopic +metadata: + labels: + strimzi.io/cluster: my-cluster + name: otlp-spans + namespace: kuttl-kafka +spec: + config: + retention.ms: 300000 + segment.bytes: 1073741824 + partitions: 1 + replicas: 1 diff --git a/tests/e2e-openshift/kafka/02-assert.yaml b/tests/e2e-openshift/kafka/02-assert.yaml new file mode 100644 index 0000000000..5fa0ca1403 --- /dev/null +++ b/tests/e2e-openshift/kafka/02-assert.yaml @@ -0,0 +1,39 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: kuttl-kafka.kafka-receiver + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: kafka-receiver-collector + app.kubernetes.io/part-of: opentelemetry + app.kubernetes.io/version: latest + name: kafka-receiver-collector + namespace: kuttl-kafka +status: + availableReplicas: 1 + readyReplicas: 1 + replicas: 1 + +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: kuttl-kafka.kafka-receiver + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: kafka-receiver-collector-monitoring + name: kafka-receiver-collector-monitoring + namespace: kuttl-kafka +spec: + ports: + - name: monitoring + port: 8888 + protocol: TCP + targetPort: 8888 + selector: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: kuttl-kafka.kafka-receiver + app.kubernetes.io/managed-by: opentelemetry-operator + type: ClusterIP diff --git a/tests/e2e-openshift/kafka/02-otel-kakfa-receiver.yaml b/tests/e2e-openshift/kafka/02-otel-kakfa-receiver.yaml new file mode 100644 index 0000000000..800732cefb --- /dev/null +++ b/tests/e2e-openshift/kafka/02-otel-kakfa-receiver.yaml @@ -0,0 +1,22 @@ +apiVersion: opentelemetry.io/v1alpha1 +kind: OpenTelemetryCollector +metadata: + name: kafka-receiver + namespace: kuttl-kafka +spec: + mode: "deployment" + config: | + receivers: + kafka/traces: + brokers: ["my-cluster-kafka-brokers.kuttl-kafka.svc:9092"] + protocol_version: 3.5.0 + topic: otlp-spans + exporters: + debug: + verbosity: detailed + service: + pipelines: + traces: + receivers: [kafka/traces] + processors: [] + exporters: [debug] diff --git a/tests/e2e-openshift/kafka/03-assert.yaml b/tests/e2e-openshift/kafka/03-assert.yaml new file mode 100644 index 0000000000..6881d17302 --- /dev/null +++ b/tests/e2e-openshift/kafka/03-assert.yaml @@ -0,0 +1,75 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + labels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: kuttl-kafka.kafka-exporter + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: kafka-exporter-collector + app.kubernetes.io/part-of: opentelemetry + app.kubernetes.io/version: latest + name: kafka-exporter-collector + namespace: kuttl-kafka +status: + availableReplicas: 1 + readyReplicas: 1 + replicas: 1 + +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: kuttl-kafka.kafka-exporter + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: kafka-exporter-collector + name: kafka-exporter-collector + namespace: kuttl-kafka +spec: + ports: + - appProtocol: grpc + name: otlp-grpc + port: 4317 + protocol: TCP + targetPort: 4317 + - appProtocol: http + name: otlp-http + port: 4318 + protocol: TCP + targetPort: 4318 + selector: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: kuttl-kafka.kafka-exporter + app.kubernetes.io/managed-by: opentelemetry-operator + sessionAffinity: None + +--- +apiVersion: v1 +kind: Service +metadata: + labels: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: kuttl-kafka.kafka-exporter + app.kubernetes.io/managed-by: opentelemetry-operator + app.kubernetes.io/name: kafka-exporter-collector + operator.opentelemetry.io/collector-headless-service: Exists + name: kafka-exporter-collector-headless + namespace: kuttl-kafka +spec: + ports: + - appProtocol: grpc + name: otlp-grpc + port: 4317 + protocol: TCP + targetPort: 4317 + - appProtocol: http + name: otlp-http + port: 4318 + protocol: TCP + targetPort: 4318 + selector: + app.kubernetes.io/component: opentelemetry-collector + app.kubernetes.io/instance: kuttl-kafka.kafka-exporter + app.kubernetes.io/managed-by: opentelemetry-operator + type: ClusterIP diff --git a/tests/e2e-openshift/kafka/03-otel-kakfa-exporter.yaml b/tests/e2e-openshift/kafka/03-otel-kakfa-exporter.yaml new file mode 100644 index 0000000000..65f1f114f5 --- /dev/null +++ b/tests/e2e-openshift/kafka/03-otel-kakfa-exporter.yaml @@ -0,0 +1,25 @@ +apiVersion: opentelemetry.io/v1alpha1 +kind: OpenTelemetryCollector +metadata: + name: kafka-exporter + namespace: kuttl-kafka +spec: + mode: deployment + config: | + receivers: + otlp: + protocols: + grpc: + http: + processors: + exporters: + kafka/traces: + brokers: ["my-cluster-kafka-brokers.kuttl-kafka.svc:9092"] + protocol_version: 3.5.0 + topic: otlp-spans + service: + pipelines: + traces: + receivers: [otlp] + processors: [] + exporters: [kafka/traces] diff --git a/tests/e2e-openshift/kafka/04-assert.yaml b/tests/e2e-openshift/kafka/04-assert.yaml new file mode 100644 index 0000000000..942ada3c58 --- /dev/null +++ b/tests/e2e-openshift/kafka/04-assert.yaml @@ -0,0 +1,9 @@ +apiVersion: batch/v1 +kind: Job +metadata: + labels: + app: telemetrygen-traces + job-name: telemetrygen-traces + name: telemetrygen-traces +status: + succeeded: 1 diff --git a/tests/e2e-openshift/kafka/04-generate-traces.yaml b/tests/e2e-openshift/kafka/04-generate-traces.yaml new file mode 100644 index 0000000000..11f2d1fd7f --- /dev/null +++ b/tests/e2e-openshift/kafka/04-generate-traces.yaml @@ -0,0 +1,26 @@ +apiVersion: batch/v1 +kind: Job +metadata: + name: telemetrygen-traces +spec: + completions: 1 + parallelism: 1 + template: + metadata: + labels: + app: telemetrygen-traces + spec: + containers: + - name: telemetrygen-traces + image: ghcr.io/open-telemetry/opentelemetry-collector-contrib/telemetrygen:latest + command: ["./telemetrygen"] + args: + - "--otlp-endpoint=kafka-exporter-collector-headless.kuttl-kafka.svc:4317" + - "--otlp-insecure=true" + - "--rate=1" + - "--duration=30s" + - "--otlp-attributes=test=\"kuttl-kafka\"" + - "--otlp-header=kafka-topic=\"otlp-spans\"" + - "--service=\"kafka\"" + - "traces" + restartPolicy: Never diff --git a/tests/e2e-openshift/kafka/05-assert.yaml b/tests/e2e-openshift/kafka/05-assert.yaml new file mode 100644 index 0000000000..0dfd963f94 --- /dev/null +++ b/tests/e2e-openshift/kafka/05-assert.yaml @@ -0,0 +1,6 @@ +--- +apiVersion: kuttl.dev/v1beta1 +kind: TestAssert +timeout: 30 +commands: +- script: ./tests/e2e-openshift/kafka/check_traces.sh diff --git a/tests/e2e-openshift/kafka/check_traces.sh b/tests/e2e-openshift/kafka/check_traces.sh new file mode 100755 index 0000000000..05b4755d07 --- /dev/null +++ b/tests/e2e-openshift/kafka/check_traces.sh @@ -0,0 +1,39 @@ +#!/bin/bash +# This script checks the kafka-receiver OTEL collector pod for the presence of Traces. + +# Define the label selector +LABEL_SELECTOR="app.kubernetes.io/instance=kuttl-kafka.kafka-receiver" + +# Define the search strings +SEARCH_STRING1='-> service.name: Str("kafka")' +SEARCH_STRING2='-> test: Str(kuttl-kafka)' + +# Get the list of pods with the specified label +PODS=$(kubectl -n kuttl-kafka get pods -l $LABEL_SELECTOR -o jsonpath='{.items[*].metadata.name}') + +# Initialize flags to track if strings are found +FOUND1=false +FOUND2=false + +# Loop through each pod and search for the strings in the logs +for POD in $PODS; do + # Search for the first string + if ! $FOUND1 && kubectl -n kuttl-kafka logs $POD | grep -q -- "$SEARCH_STRING1"; then + echo "\"$SEARCH_STRING1\" found in $POD" + FOUND1=true + fi + # Search for the second string + if ! $FOUND2 && kubectl -n kuttl-kafka logs $POD | grep -q -- "$SEARCH_STRING2"; then + echo "\"$SEARCH_STRING2\" found in $POD" + FOUND2=true + fi +done + +# Check if either of the strings was not found +if ! $FOUND1 || ! $FOUND2; then + echo "No Traces with service name Kafka and attribute test=kuttl-kafka found." + exit 1 +else + echo "Traces with service name Kafka and attribute test=kuttl-kafka found." +fi +