Skip to content

Commit f2380a1

Browse files
authored
chore: add metrics test for NiFi 2.x (#823)
* chore: add metrics tests for NiFi 2.x * add openshift-specific rbac
1 parent 0726965 commit f2380a1

File tree

5 files changed

+147
-28
lines changed

5 files changed

+147
-28
lines changed

tests/templates/kuttl/smoke_v2/50-install-test-nifi.yaml

Lines changed: 0 additions & 28 deletions
This file was deleted.
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
---
2+
apiVersion: apps/v1
3+
kind: StatefulSet
4+
metadata:
5+
name: test-nifi
6+
labels:
7+
app: test-nifi
8+
spec:
9+
replicas: 1
10+
selector:
11+
matchLabels:
12+
app: test-nifi
13+
template:
14+
metadata:
15+
labels:
16+
app: test-nifi
17+
spec:
18+
serviceAccountName: "tls-sa"
19+
securityContext:
20+
fsGroup: 1000
21+
containers:
22+
- name: test-nifi
23+
image: oci.stackable.tech/sdp/testing-tools:0.2.0-stackable0.0.0-dev
24+
command: ["sleep", "infinity"]
25+
resources:
26+
requests:
27+
memory: "128Mi"
28+
cpu: "100m"
29+
limits:
30+
memory: "128Mi"
31+
cpu: "400m"
32+
volumeMounts:
33+
- name: tls
34+
mountPath: /stackable/tls
35+
volumes:
36+
- name: tls
37+
ephemeral:
38+
volumeClaimTemplate:
39+
metadata:
40+
annotations:
41+
secrets.stackable.tech/class: tls
42+
secrets.stackable.tech/scope: pod
43+
spec:
44+
storageClassName: secrets.stackable.tech
45+
accessModes:
46+
- ReadWriteOnce
47+
resources:
48+
requests:
49+
storage: "1"
50+
---
51+
apiVersion: v1
52+
kind: ServiceAccount
53+
metadata:
54+
name: tls-sa
55+
{% if test_scenario['values']['openshift'] == 'true' %}
56+
---
57+
kind: Role
58+
apiVersion: rbac.authorization.k8s.io/v1
59+
metadata:
60+
name: use-integration-tests-scc
61+
rules:
62+
- apiGroups: ["security.openshift.io"]
63+
resources: ["securitycontextconstraints"]
64+
resourceNames: ["privileged"]
65+
verbs: ["use"]
66+
---
67+
kind: RoleBinding
68+
apiVersion: rbac.authorization.k8s.io/v1
69+
metadata:
70+
name: use-integration-tests-scc
71+
subjects:
72+
- kind: ServiceAccount
73+
name: tls-sa
74+
roleRef:
75+
kind: Role
76+
name: use-integration-tests-scc
77+
apiGroup: rbac.authorization.k8s.io
78+
{% endif %}

tests/templates/kuttl/smoke_v2/60-assert.yaml.j2

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ kind: TestAssert
44
timeout: 300
55
commands:
66
- script: kubectl exec -n $NAMESPACE test-nifi-0 -- python /tmp/test_nifi.py -u admin -p 'passwordWithSpecialCharacter\@<&>"'"'" -n $NAMESPACE -c 3
7+
- script: kubectl exec -n $NAMESPACE test-nifi-0 -- python /tmp/test_nifi_metrics.py -n $NAMESPACE

tests/templates/kuttl/smoke_v2/60-prepare-test-nifi.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,6 @@
22
apiVersion: kuttl.dev/v1beta1
33
kind: TestStep
44
commands:
5+
- script: kubectl cp -n $NAMESPACE ./test_nifi_metrics.py test-nifi-0:/tmp
56
- script: kubectl cp -n $NAMESPACE ./test_nifi.py test-nifi-0:/tmp
67
- script: kubectl cp -n $NAMESPACE ./cacert.pem test-nifi-0:/tmp
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
#!/usr/bin/env python
2+
import requests
3+
import time
4+
import argparse
5+
6+
if __name__ == "__main__":
7+
# Construct an argument parser
8+
all_args = argparse.ArgumentParser()
9+
10+
# Add arguments to the parser
11+
all_args.add_argument(
12+
"-m",
13+
"--metric",
14+
required=False,
15+
default="nifi_amount_bytes_read",
16+
help="The name of a certain metric to check",
17+
)
18+
all_args.add_argument(
19+
"-n", "--namespace", required=True, help="The namespace the test is running in"
20+
)
21+
all_args.add_argument(
22+
"-p",
23+
"--port",
24+
required=False,
25+
default="8443",
26+
help="The port where metrics are exposed",
27+
)
28+
all_args.add_argument(
29+
"-t",
30+
"--timeout",
31+
required=False,
32+
default="120",
33+
help="The timeout in seconds to wait for the metrics port to be opened",
34+
)
35+
36+
args = vars(all_args.parse_args())
37+
metric_name = args["metric"]
38+
namespace = args["namespace"]
39+
port = args["port"]
40+
timeout = int(args["timeout"])
41+
42+
url = f"https://nifi-node-default-metrics.{args['namespace']}.svc.cluster.local:{port}/nifi-api/flow/metrics/prometheus"
43+
44+
# wait for 'timeout' seconds
45+
t_end = time.time() + timeout
46+
while time.time() < t_end:
47+
try:
48+
response = requests.get(
49+
url,
50+
cert=("/stackable/tls/tls.crt", "/stackable/tls/tls.key"),
51+
verify="/stackable/tls/ca.crt",
52+
)
53+
response.raise_for_status()
54+
if metric_name in response.text:
55+
print("Test metrics succeeded!")
56+
exit(0)
57+
else:
58+
print(
59+
f"Could not find metric [{metric_name}] in response:\n {response.text}"
60+
)
61+
time.sleep(timeout)
62+
except ConnectionError:
63+
# NewConnectionError is expected until metrics are available
64+
time.sleep(10)
65+
66+
print("Test failed")
67+
exit(-1)

0 commit comments

Comments
 (0)