Skip to content

Commit 37fa2de

Browse files
committed
Add kafka e2e test
1 parent a429344 commit 37fa2de

File tree

3 files changed

+165
-4
lines changed

3 files changed

+165
-4
lines changed

.github/workflows/e2e-test-setpup-action.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ inputs:
1313
sniffer-image:
1414
required: true
1515
type: string
16+
install-extra-flags:
17+
required: false
18+
type: string
19+
default: ""
1620
registry:
1721
required: true
1822
type: string
@@ -97,7 +101,7 @@ runs:
97101
SNIFFER_FLAGS="--set-string sniffer.repository=${{ env.REGISTRY }} --set-string sniffer.image=${{ inputs.sniffer-image }} --set-string sniffer.tag=${{ inputs.sniffer-tag }} --set-string sniffer.pullPolicy=Never"
98102
TELEMETRY_FLAG="--set global.telemetry.enabled=false"
99103
helm dep up ./helm-charts/network-mapper
100-
helm install otterize ./helm-charts/network-mapper -n otterize-system --create-namespace --set debug=true $MAPPER_FLAGS $SNIFFER_FLAGS $TELEMETRY_FLAG
104+
helm install otterize ./helm-charts/network-mapper -n otterize-system --create-namespace --set debug=true $MAPPER_FLAGS $SNIFFER_FLAGS $TELEMETRY_FLAG ${{inputs.install-extra-flags}}
101105
102106
- name: Install CLI
103107
run: |-

.github/workflows/e2e-test.yaml

Lines changed: 76 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ env:
3030
REGISTRY: ${{ inputs.registry }}
3131

3232
jobs:
33-
e2e-test:
33+
e2e-test-policy-export:
3434
timeout-minutes: 5
3535
strategy:
3636
matrix:
@@ -75,15 +75,88 @@ jobs:
7575
sleep 10 ;
7676
fi
7777
done
78-
78+
7979
echo Outputting all logs
8080
echo _SNIFFER LOGS_
8181
kubectl logs -n otterize-system -l app=otterize-network-sniffer --tail=-1
8282
echo _MAPPER LOGS_
8383
kubectl logs -n otterize-system -l app=otterize-network-mapper --tail=-1
84-
84+
8585
echo "export intents and compare to expected file"
8686
otterize network-mapper export --telemetry-enabled=false -n otterize-tutorial-mapper --format=json | jq 'sort_by(.metadata.namespace + .metadata.name)' > /tmp/intents.json
8787
diff .github/workflows/tests-expected-results/simple-tutorial-intents.json /tmp/intents.json
8888
echo "expected" && cat .github/workflows/tests-expected-results/simple-tutorial-intents.json
8989
echo "actual" && cat /tmp/intents.json
90+
91+
e2e-test-kafka:
92+
timeout-minutes: 8
93+
runs-on: ubuntu-latest
94+
steps:
95+
- name: Checkout code
96+
uses: actions/checkout@v2
97+
98+
- name: Test setup
99+
uses: ./.github/workflows/e2e-test-setpup-action.yaml
100+
with:
101+
mapper-tag: ${{ inputs.mapper-tag }}
102+
sniffer-tag: ${{ inputs.sniffer-tag }}
103+
mapper-image: ${{ inputs.mapper-image }}
104+
sniffer-image: ${{ inputs.sniffer-image }}
105+
registry: ${{ inputs.registry }}
106+
install-extra-flags: " --set kafkawatcher.enable=true --set kafkawatcher.kafkaServers={\"kafka-0.kafka\"} "
107+
108+
- name: Deploy Kafka
109+
run: |-
110+
helm repo add otterize https://helm.otterize.com
111+
helm repo update
112+
helm install --create-namespace -n kafka -f https://docs.otterize.com/code-examples/kafka-mapping/helm/values.yaml kafka otterize/kafka --version 21.4.4
113+
114+
- name: Deploy Kafka Tutorial services
115+
run: |-
116+
kubectl apply -n otterize-tutorial-kafka-mapping -f https://docs.otterize.com/code-examples/kafka-mapping/all.yaml
117+
118+
- name: Wait for Kafka & Tutorial services
119+
run: |-
120+
kubectl wait pods -n kafka -l app.kubernetes.io/component=kafka --for condition=Ready --timeout=90s
121+
kubectl wait pods -n kafka -l app.kubernetes.io/component=zookeeper --for condition=Ready --timeout=90s
122+
kubectl wait pods -n otterize-system -l app=otterize-kafka-watcher --for condition=Ready --timeout=90s
123+
kubectl wait pods -n otterize-tutorial-kafka-mapping -l app=client --for condition=Ready --timeout=90s
124+
kubectl wait pods -n otterize-tutorial-kafka-mapping -l app=client-2 --for condition=Ready --timeout=90s
125+
126+
- name: Test Policy Export
127+
run: |-
128+
# wait for 2 intents to be discovered with timeout of 30 seconds.
129+
# sleeps 10 because this is the report interval from the watcher to the mapper
130+
for i in {1..5}
131+
do
132+
OUTPUT_JSON=`otterize network-mapper export --telemetry-enabled=false -n otterize-tutorial-kafka-mapping --format=json`
133+
if [ `echo "$OUTPUT_JSON" | jq ". | length"` != 2 ] || [ `echo "$OUTPUT_JSON" | jq '[.[] | select(.spec.targets[] | has("kafka"))] | length'` != 2 ] ; then
134+
echo "wait for discovered intents";
135+
echo _SNIFFER LOGS_
136+
kubectl logs --since=15s -n otterize-system -l app=otterize-network-sniffer
137+
echo _MAPPER LOGS_
138+
kubectl logs --since=15s -n otterize-system -l app=otterize-network-mapper
139+
sleep 10 ;
140+
fi
141+
done
142+
143+
echo Outputting all logs
144+
echo _SNIFFER LOGS_
145+
kubectl logs -n otterize-system -l app=otterize-network-sniffer --tail=-1
146+
echo _MAPPER LOGS_
147+
kubectl logs -n otterize-system -l app=otterize-network-mapper --tail=-1
148+
149+
echo "export intents and compare to expected file"
150+
otterize network-mapper export --telemetry-enabled=false -n otterize-tutorial-kafka-mapping --format=json | jq 'sort_by(.metadata.namespace + .metadata.name)' > /tmp/intents.json
151+
diff .github/workflows/tests-expected-results/kafka-tutorial-intents.json /tmp/intents.json
152+
echo "expected" && cat .github/workflows/tests-expected-results/kafka-tutorial-intents.json
153+
echo "actual" && cat /tmp/intents.json
154+
155+
e2e-test:
156+
needs:
157+
- e2e-test-policy-export
158+
- e2e-test-kafka
159+
runs-on: ubuntu-latest
160+
steps:
161+
- run: |-
162+
echo Success! This step is only here to depend on the tests.
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
[
2+
{
3+
"kind": "ClientIntents",
4+
"apiVersion": "k8s.otterize.com/v2beta1",
5+
"metadata": {
6+
"name": "client",
7+
"namespace": "otterize-tutorial-kafka-mapping",
8+
"creationTimestamp": null
9+
},
10+
"spec": {
11+
"workload": {
12+
"name": "client",
13+
"kind": "Deployment"
14+
},
15+
"targets": [
16+
{
17+
"kubernetes": {
18+
"name": "kafka.kafka",
19+
"kind": "StatefulSet"
20+
}
21+
},
22+
{
23+
"kafka": {
24+
"name": "kafka.kafka",
25+
"topics": [
26+
{
27+
"name": "mytopic",
28+
"operations": [
29+
"describe",
30+
"consume"
31+
]
32+
}
33+
]
34+
}
35+
}
36+
]
37+
},
38+
"status": {
39+
"upToDate": false,
40+
"observedGeneration": 0
41+
}
42+
},
43+
{
44+
"kind": "ClientIntents",
45+
"apiVersion": "k8s.otterize.com/v2beta1",
46+
"metadata": {
47+
"name": "client-2",
48+
"namespace": "otterize-tutorial-kafka-mapping",
49+
"creationTimestamp": null
50+
},
51+
"spec": {
52+
"workload": {
53+
"name": "client-2",
54+
"kind": "Deployment"
55+
},
56+
"targets": [
57+
{
58+
"kubernetes": {
59+
"name": "kafka.kafka",
60+
"kind": "StatefulSet"
61+
}
62+
},
63+
{
64+
"kafka": {
65+
"name": "kafka.kafka",
66+
"topics": [
67+
{
68+
"name": "mytopic",
69+
"operations": [
70+
"describe",
71+
"produce"
72+
]
73+
}
74+
]
75+
}
76+
}
77+
]
78+
},
79+
"status": {
80+
"upToDate": false,
81+
"observedGeneration": 0
82+
}
83+
}
84+
]

0 commit comments

Comments
 (0)