Skip to content

Commit d59e3dc

Browse files
committed
feat: add smoke snapshot test
1 parent a72f110 commit d59e3dc

4 files changed

Lines changed: 365 additions & 35 deletions

File tree

Lines changed: 1 addition & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,6 @@
1+
---
12
apiVersion: kuttl.dev/v1beta1
23
kind: TestAssert
34
timeout: 300
45
commands:
56
- script: kubectl -n $NAMESPACE wait --for=condition=available opaclusters.opa.stackable.tech/test-opa --timeout 301s
6-
---
7-
apiVersion: apps/v1
8-
kind: DaemonSet
9-
metadata:
10-
name: test-opa-server-default
11-
spec:
12-
updateStrategy:
13-
type: RollingUpdate
14-
rollingUpdate:
15-
maxSurge: 1
16-
maxUnavailable: 0
17-
template:
18-
spec:
19-
containers:
20-
- name: opa
21-
resources:
22-
limits:
23-
cpu: 500m
24-
memory: 256Mi
25-
requests:
26-
cpu: 250m
27-
memory: 256Mi
28-
- name: bundle-builder
29-
resources:
30-
limits:
31-
cpu: 200m
32-
memory: 128Mi
33-
requests:
34-
cpu: 100m
35-
memory: 128Mi
36-
{% if lookup('env', 'VECTOR_AGGREGATOR') %}
37-
- name: vector
38-
{% endif %}
39-
terminationGracePeriodSeconds: 125 # 2 minutes + 5s safety buffer

tests/templates/kuttl/smoke/11-assert.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# This test checks if the containerdebug-state.json file is present and valid
33
apiVersion: kuttl.dev/v1beta1
44
kind: TestAssert
5-
timeout: 600
5+
timeout: 60
66
commands:
77
- script: |
88
FIRST_OPA_POD=$(kubectl get -n $NAMESPACE pods --field-selector=status.phase=Running --selector app.kubernetes.io/instance=test-opa -o jsonpath='{.items[0].metadata.name}')
Lines changed: 288 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,288 @@
1+
{%- set use_tls = test_scenario['values']['use-tls'] == "true" -%}
2+
{%- set port_name = "https" if use_tls else "http" -%}
3+
{%- set port_number = 8443 if use_tls else 8081 -%}
4+
{%- set port_scheme = "HTTPS" if use_tls else "HTTP" -%}
5+
---
6+
# Resource-level fingerprint of everything the OPA operator creates for the
7+
# `test-opa` OpaCluster: DaemonSet, three Services, two ConfigMaps (existence
8+
# only here — `.data` is asserted in 13-assert), ServiceAccount, RoleBinding.
9+
#
10+
# Catches drift in labels, owner references, selectors, ports, probe schemes,
11+
# update strategy, container resources and TLS-dependent fields. The operator
12+
# does not create a PodDisruptionBudget for OPA, so none is asserted here.
13+
#
14+
# `app.kubernetes.io/version` is intentionally omitted from label matchers so
15+
# that product-version bumps in test-definition.yaml don't force snapshot
16+
# updates everywhere.
17+
apiVersion: kuttl.dev/v1beta1
18+
kind: TestAssert
19+
timeout: 60
20+
---
21+
apiVersion: apps/v1
22+
kind: DaemonSet
23+
metadata:
24+
name: test-opa-server-default
25+
labels:
26+
app.kubernetes.io/component: server
27+
app.kubernetes.io/instance: test-opa
28+
app.kubernetes.io/managed-by: opa.stackable.tech_opacluster
29+
app.kubernetes.io/name: opa
30+
app.kubernetes.io/role-group: default
31+
stackable.tech/vendor: Stackable
32+
ownerReferences:
33+
- apiVersion: opa.stackable.tech/v1alpha2
34+
controller: true
35+
kind: OpaCluster
36+
name: test-opa
37+
spec:
38+
selector:
39+
matchLabels:
40+
app.kubernetes.io/component: server
41+
app.kubernetes.io/instance: test-opa
42+
app.kubernetes.io/name: opa
43+
app.kubernetes.io/role-group: default
44+
updateStrategy:
45+
type: RollingUpdate
46+
rollingUpdate:
47+
maxSurge: 1
48+
maxUnavailable: 0
49+
template:
50+
metadata:
51+
labels:
52+
app.kubernetes.io/component: server
53+
app.kubernetes.io/instance: test-opa
54+
app.kubernetes.io/managed-by: opa.stackable.tech_opacluster
55+
app.kubernetes.io/name: opa
56+
app.kubernetes.io/role-group: default
57+
stackable.tech/vendor: Stackable
58+
spec:
59+
serviceAccount: test-opa-serviceaccount
60+
serviceAccountName: test-opa-serviceaccount
61+
terminationGracePeriodSeconds: 125
62+
securityContext:
63+
fsGroup: 1000
64+
containers:
65+
- name: opa
66+
ports:
67+
- containerPort: {{ port_number }}
68+
name: {{ port_name }}
69+
protocol: TCP
70+
livenessProbe:
71+
httpGet:
72+
path: /
73+
port: {{ port_name }}
74+
scheme: {{ port_scheme }}
75+
readinessProbe:
76+
httpGet:
77+
path: /
78+
port: {{ port_name }}
79+
scheme: {{ port_scheme }}
80+
resources:
81+
limits:
82+
cpu: 500m
83+
memory: 256Mi
84+
requests:
85+
cpu: 250m
86+
memory: 256Mi
87+
- name: bundle-builder
88+
livenessProbe:
89+
httpGet:
90+
path: /status
91+
port: 3030
92+
scheme: HTTP
93+
readinessProbe:
94+
httpGet:
95+
path: /status
96+
port: 3030
97+
scheme: HTTP
98+
resources:
99+
limits:
100+
cpu: 200m
101+
memory: 128Mi
102+
requests:
103+
cpu: 100m
104+
memory: 128Mi
105+
{% if lookup('env', 'VECTOR_AGGREGATOR') %}
106+
- name: vector
107+
{% endif %}
108+
initContainers:
109+
- name: prepare
110+
resources:
111+
limits:
112+
cpu: 500m
113+
memory: 256Mi
114+
requests:
115+
cpu: 250m
116+
memory: 256Mi
117+
status:
118+
currentNumberScheduled: 1
119+
desiredNumberScheduled: 1
120+
numberAvailable: 1
121+
numberMisscheduled: 0
122+
numberReady: 1
123+
updatedNumberScheduled: 1
124+
---
125+
apiVersion: v1
126+
kind: Service
127+
metadata:
128+
name: test-opa-server
129+
labels:
130+
app.kubernetes.io/component: server
131+
app.kubernetes.io/instance: test-opa
132+
app.kubernetes.io/managed-by: opa.stackable.tech_opacluster
133+
app.kubernetes.io/name: opa
134+
app.kubernetes.io/role-group: global
135+
stackable.tech/vendor: Stackable
136+
ownerReferences:
137+
- apiVersion: opa.stackable.tech/v1alpha2
138+
controller: true
139+
kind: OpaCluster
140+
name: test-opa
141+
spec:
142+
internalTrafficPolicy: Local
143+
ports:
144+
- name: {{ port_name }}
145+
port: {{ port_number }}
146+
protocol: TCP
147+
targetPort: {{ port_number }}
148+
selector:
149+
app.kubernetes.io/component: server
150+
app.kubernetes.io/instance: test-opa
151+
app.kubernetes.io/name: opa
152+
type: ClusterIP
153+
---
154+
apiVersion: v1
155+
kind: Service
156+
metadata:
157+
name: test-opa-server-default-headless
158+
labels:
159+
app.kubernetes.io/component: server
160+
app.kubernetes.io/instance: test-opa
161+
app.kubernetes.io/managed-by: opa.stackable.tech_opacluster
162+
app.kubernetes.io/name: opa
163+
app.kubernetes.io/role-group: default
164+
stackable.tech/vendor: Stackable
165+
ownerReferences:
166+
- apiVersion: opa.stackable.tech/v1alpha2
167+
controller: true
168+
kind: OpaCluster
169+
name: test-opa
170+
spec:
171+
clusterIP: None
172+
publishNotReadyAddresses: true
173+
ports:
174+
- name: {{ port_name }}
175+
port: {{ port_number }}
176+
protocol: TCP
177+
targetPort: {{ port_number }}
178+
selector:
179+
app.kubernetes.io/component: server
180+
app.kubernetes.io/instance: test-opa
181+
app.kubernetes.io/name: opa
182+
app.kubernetes.io/role-group: default
183+
type: ClusterIP
184+
---
185+
apiVersion: v1
186+
kind: Service
187+
metadata:
188+
name: test-opa-server-default-metrics
189+
annotations:
190+
prometheus.io/path: /metrics
191+
prometheus.io/port: "{{ port_number }}"
192+
prometheus.io/scheme: {{ port_name }}
193+
prometheus.io/scrape: "true"
194+
labels:
195+
app.kubernetes.io/component: server
196+
app.kubernetes.io/instance: test-opa
197+
app.kubernetes.io/managed-by: opa.stackable.tech_opacluster
198+
app.kubernetes.io/name: opa
199+
app.kubernetes.io/role-group: default
200+
prometheus.io/scrape: "true"
201+
stackable.tech/vendor: Stackable
202+
ownerReferences:
203+
- apiVersion: opa.stackable.tech/v1alpha2
204+
controller: true
205+
kind: OpaCluster
206+
name: test-opa
207+
spec:
208+
clusterIP: None
209+
ports:
210+
- name: metrics
211+
port: {{ port_number }}
212+
protocol: TCP
213+
targetPort: {{ port_number }}
214+
selector:
215+
app.kubernetes.io/component: server
216+
app.kubernetes.io/instance: test-opa
217+
app.kubernetes.io/name: opa
218+
app.kubernetes.io/role-group: default
219+
type: ClusterIP
220+
---
221+
apiVersion: v1
222+
kind: ConfigMap
223+
metadata:
224+
name: test-opa-server-default
225+
labels:
226+
app.kubernetes.io/component: server
227+
app.kubernetes.io/instance: test-opa
228+
app.kubernetes.io/managed-by: opa.stackable.tech_opacluster
229+
app.kubernetes.io/name: opa
230+
app.kubernetes.io/role-group: default
231+
stackable.tech/vendor: Stackable
232+
ownerReferences:
233+
- apiVersion: opa.stackable.tech/v1alpha2
234+
controller: true
235+
kind: OpaCluster
236+
name: test-opa
237+
---
238+
apiVersion: v1
239+
kind: ConfigMap
240+
metadata:
241+
name: test-opa
242+
labels:
243+
app.kubernetes.io/component: server
244+
app.kubernetes.io/instance: test-opa
245+
app.kubernetes.io/managed-by: opa.stackable.tech_opacluster
246+
app.kubernetes.io/name: opa
247+
app.kubernetes.io/role-group: discovery
248+
stackable.tech/vendor: Stackable
249+
ownerReferences:
250+
- apiVersion: opa.stackable.tech/v1alpha2
251+
controller: true
252+
kind: OpaCluster
253+
name: test-opa
254+
---
255+
apiVersion: v1
256+
kind: ServiceAccount
257+
metadata:
258+
name: test-opa-serviceaccount
259+
labels:
260+
app.kubernetes.io/instance: test-opa
261+
app.kubernetes.io/managed-by: opa.stackable.tech_opacluster
262+
app.kubernetes.io/name: opa
263+
ownerReferences:
264+
- apiVersion: opa.stackable.tech/v1alpha2
265+
controller: true
266+
kind: OpaCluster
267+
name: test-opa
268+
---
269+
apiVersion: rbac.authorization.k8s.io/v1
270+
kind: RoleBinding
271+
metadata:
272+
name: test-opa-rolebinding
273+
labels:
274+
app.kubernetes.io/instance: test-opa
275+
app.kubernetes.io/managed-by: opa.stackable.tech_opacluster
276+
app.kubernetes.io/name: opa
277+
ownerReferences:
278+
- apiVersion: opa.stackable.tech/v1alpha2
279+
controller: true
280+
kind: OpaCluster
281+
name: test-opa
282+
roleRef:
283+
apiGroup: rbac.authorization.k8s.io
284+
kind: ClusterRole
285+
name: opa-clusterrole
286+
subjects:
287+
- kind: ServiceAccount
288+
name: test-opa-serviceaccount

0 commit comments

Comments
 (0)