Skip to content

Commit 41e7dea

Browse files
committed
Add dryrun CLI e2e tests
ref: https://issues.redhat.com/browse/ACM-22932 Tests the dryrun CLI can read resources from a cluster with --from-cluster flag. Reuses the dryrun unit test cases, applies the resources to the test kind cluster, then runs the e2e tests. Sometimes the policy diff from the cluster returns extra context lines surrounding the relevant +/- changes. When this diff does not match the expected output.txt from the unit tests, the e2e test will compare the output with the output_from_cluster.txt file. Signed-off-by: Janelle Law <[email protected]>
1 parent 16473da commit 41e7dea

File tree

11 files changed

+601
-2
lines changed

11 files changed

+601
-2
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Diffs:
2+
v1 Namespace mega-mart:
3+
--- mega-mart : existing
4+
+++ mega-mart : updated
5+
@@ -5,10 +5,12 @@
6+
city: durham
7+
labels:
8+
box: big
9+
+ name: mega-mart
10+
+ new-label: durham
11+
name: mega-mart
12+
spec:
13+
finalizers:
14+
# Compliance messages:
15+
NonCompliant; violation - namespaces [mega-mart] found but not as specified
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Diffs:
2+
v1 ConfigMap mega-mart/inventory:
3+
--- mega-mart/inventory : existing
4+
+++ mega-mart/inventory : updated
5+
@@ -2,10 +2,12 @@
6+
data:
7+
inventory.yaml: 'appliance: toaster'
8+
kind: ConfigMap
9+
metadata:
10+
+ labels:
11+
+ new-label: toaster
12+
name: inventory
13+
namespace: mega-mart
14+
15+
# Compliance messages:
16+
NonCompliant; violation - configmaps [inventory] found but not as specified in namespace mega-mart

test/dryrun/context_vars/object_namespaced/policy.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,4 @@ spec:
1919
name: '{{ .ObjectName }}'
2020
namespace: '{{ .ObjectNamespace }}'
2121
labels:
22-
new-label: '{{ (fromYAML (index .Object.data "inventory.yaml")).appliance }}'
22+
new-label: '{{ ne (printf "%s" .ObjectName) "inventory" | skipObject }}{{ (fromYAML (index .Object.data "inventory.yaml")).appliance }}'
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# Diffs:
2+
v1 Pod default/nginx-pod:
3+
--- default/nginx-pod : existing
4+
+++ default/nginx-pod : updated
5+
@@ -1,9 +1,11 @@
6+
apiVersion: v1
7+
kind: Pod
8+
metadata:
9+
+ labels:
10+
+ image: nginx:1.7.9
11+
name: nginx-pod
12+
namespace: default
13+
spec:
14+
# Compliance messages:
15+
NonCompliant; violation - pods [nginx-pod] found but not as specified in namespace default
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# Diffs:
2+
v1 Pod dangler/nginx-pod:
3+
4+
v1 Pod default/nginx-pod:
5+
--- default/nginx-pod : existing
6+
+++ default/nginx-pod : updated
7+
@@ -1,9 +1,11 @@
8+
apiVersion: v1
9+
kind: Pod
10+
metadata:
11+
+ labels:
12+
+ image: nginx:1.7.9
13+
name: nginx-pod
14+
namespace: default
15+
spec:
16+
# Compliance messages:
17+
NonCompliant; violation - pods [nginx-pod] not found in namespace dangler; pods [nginx-pod] found but not as specified in namespace default
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# Diffs:
2+
v1 ConfigMap mega-mart/inventory:
3+
--- mega-mart/inventory : existing
4+
+++ mega-mart/inventory : updated
5+
@@ -1,6 +1,8 @@
6+
apiVersion: v1
7+
+data:
8+
+ hocus: pocus
9+
kind: ConfigMap
10+
metadata:
11+
name: inventory
12+
namespace: mega-mart
13+
v1 ConfigMap mega-mart-2/inventory:
14+
--- mega-mart-2/inventory : existing
15+
+++ mega-mart-2/inventory : updated
16+
@@ -1,7 +1,8 @@
17+
apiVersion: v1
18+
data:
19+
+ hocus: pocus
20+
things: original-stuff
21+
kind: ConfigMap
22+
metadata:
23+
name: inventory
24+
v1 ConfigMap mega-mart-2/inventory-2:
25+
--- mega-mart-2/inventory-2 : existing
26+
+++ mega-mart-2/inventory-2 : updated
27+
@@ -1,7 +1,8 @@
28+
apiVersion: v1
29+
data:
30+
+ hocus: pocus
31+
things: stuff
32+
kind: ConfigMap
33+
metadata:
34+
name: inventory-2
35+
# Compliance messages:
36+
NonCompliant; violation - configmaps [inventory-2] found but not as specified in namespace mega-mart-2; configmaps [inventory] found but not as specified in namespaces: mega-mart, mega-mart-2

test/dryrun/context_vars/objectname_nsselector/policy.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,4 @@ spec:
1515
kind: ConfigMap
1616
metadata:
1717
name: '{{ not (hasPrefix "inv" .ObjectName) | skipObject }}'
18-
data: '{{ set .Object.data "hocus" "pocus" | toJSON | toLiteral }}'
18+
data: '{{ set (.Object.data | default (dict)) "hocus" "pocus" | toJSON | toLiteral }}'
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
compliant: NonCompliant
2+
relatedObjects:
3+
- compliant: NonCompliant
4+
object:
5+
apiVersion: v1
6+
kind: Namespace
7+
properties:
8+
diff: |-
9+
# Truncated: showing 50/68 diff lines:
10+
--- default : existing
11+
+++ default : updated
12+
@@ -1,8 +1,64 @@
13+
apiVersion: v1
14+
kind: Namespace
15+
metadata:
16+
+ annotations:
17+
+ message1: message
18+
+ message2: message
19+
+ message3: message
20+
+ message4: message
21+
+ message5: message
22+
+ message6: message
23+
+ message7: message
24+
+ message8: message
25+
+ message9: message
26+
+ message10: message
27+
+ message11: message
28+
+ message12: message
29+
+ message13: message
30+
+ message14: message
31+
+ message15: message
32+
+ message16: message
33+
+ message17: message
34+
+ message18: message
35+
+ message19: message
36+
+ message20: message
37+
+ message21: message
38+
+ message22: message
39+
+ message23: message
40+
+ message24: message
41+
+ message25: message
42+
+ message26: message
43+
+ message27: message
44+
+ message28: message
45+
+ message29: message
46+
+ message30: message
47+
+ message31: message
48+
+ message32: message
49+
+ message33: message
50+
+ message34: message
51+
+ message35: message
52+
+ message36: message
53+
+ message37: message
54+
+ message38: message
55+
+ message39: message
56+
+ message40: message
57+
+ message41: message
58+
+ message42: message
59+
+ message43: message
60+
+ message44: message
61+
+ message45: message
62+
+ message46: message
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
# Status compare:
2+
.compliant: 'NonCompliant' does match 'NonCompliant'
3+
.relatedObjects[0] matches
4+
.relatedObjects matches
5+
Expected status matches the actual status
6+
7+
# Diffs:
8+
v1 Namespace default:
9+
# Truncated: showing 50/68 diff lines:
10+
--- default : existing
11+
+++ default : updated
12+
@@ -1,8 +1,64 @@
13+
apiVersion: v1
14+
kind: Namespace
15+
metadata:
16+
+ annotations:
17+
+ message1: message
18+
+ message2: message
19+
+ message3: message
20+
+ message4: message
21+
+ message5: message
22+
+ message6: message
23+
+ message7: message
24+
+ message8: message
25+
+ message9: message
26+
+ message10: message
27+
+ message11: message
28+
+ message12: message
29+
+ message13: message
30+
+ message14: message
31+
+ message15: message
32+
+ message16: message
33+
+ message17: message
34+
+ message18: message
35+
+ message19: message
36+
+ message20: message
37+
+ message21: message
38+
+ message22: message
39+
+ message23: message
40+
+ message24: message
41+
+ message25: message
42+
+ message26: message
43+
+ message27: message
44+
+ message28: message
45+
+ message29: message
46+
+ message30: message
47+
+ message31: message
48+
+ message32: message
49+
+ message33: message
50+
+ message34: message
51+
+ message35: message
52+
+ message36: message
53+
+ message37: message
54+
+ message38: message
55+
+ message39: message
56+
+ message40: message
57+
+ message41: message
58+
+ message42: message
59+
+ message43: message
60+
+ message44: message
61+
+ message45: message
62+
+ message46: message
63+
# Compliance messages:
64+
NonCompliant; violation - namespaces [default] found but not as specified
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
# Status compare:
2+
.compliant: 'NonCompliant' does match 'NonCompliant'
3+
.relatedObjects[0] matches
4+
.relatedObjects[1] matches
5+
.relatedObjects[2] matches
6+
.relatedObjects matches
7+
Expected status matches the actual status
8+
9+
# Diffs:
10+
networking.k8s.io/v1 Ingress default/good-ingress:
11+
12+
networking.k8s.io/v1 Ingress default/wrong-1-ingress:
13+
--- default/wrong-1-ingress : existing
14+
+++ default/wrong-1-ingress : updated
15+
@@ -7,11 +7,11 @@
16+
name: wrong-1-ingress
17+
namespace: default
18+
spec:
19+
- ingressClassName: wrong-name
20+
+ ingressClassName: test
21+
rules:
22+
- http:
23+
paths:
24+
- backend:
25+
service:
26+
networking.k8s.io/v1 Ingress default/wrong-2-ingress:
27+
--- default/wrong-2-ingress : existing
28+
+++ default/wrong-2-ingress : updated
29+
@@ -7,11 +7,11 @@
30+
name: wrong-2-ingress
31+
namespace: default
32+
spec:
33+
- ingressClassName: wrong-name
34+
+ ingressClassName: test
35+
rules:
36+
- http:
37+
paths:
38+
- backend:
39+
service:
40+
# Compliance messages:
41+
NonCompliant; violation - ingresses [wrong-1-ingress, wrong-2-ingress] found but not as specified in namespace default

0 commit comments

Comments
 (0)