From f26acfb36ab9fab803dbc8d499bf4c8c1f9cea13 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Charles-Edouard=20Br=C3=A9t=C3=A9ch=C3=A9?=
 <charles.edouard@nirmata.com>
Date: Mon, 10 Jun 2024 17:57:29 +0200
Subject: [PATCH] chore: add chainsaw test for controllers leader election
 (#10416)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* chore: add chainsaw test for reports controller leader election

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

* other controllers

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>

---------

Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
---
 .github/workflows/conformance.yaml            |  1 +
 .../admission-controller/chainsaw-test.yaml   | 45 +++++++++++++++++++
 .../background-controller/chainsaw-test.yaml  | 45 +++++++++++++++++++
 .../cleanup-controller/chainsaw-test.yaml     | 45 +++++++++++++++++++
 .../reports-controller/chainsaw-test.yaml     | 45 +++++++++++++++++++
 5 files changed, 181 insertions(+)
 create mode 100755 test/conformance/chainsaw/lease/admission-controller/chainsaw-test.yaml
 create mode 100755 test/conformance/chainsaw/lease/background-controller/chainsaw-test.yaml
 create mode 100755 test/conformance/chainsaw/lease/cleanup-controller/chainsaw-test.yaml
 create mode 100755 test/conformance/chainsaw/lease/reports-controller/chainsaw-test.yaml

diff --git a/.github/workflows/conformance.yaml b/.github/workflows/conformance.yaml
index 289649b45c..37d2217255 100644
--- a/.github/workflows/conformance.yaml
+++ b/.github/workflows/conformance.yaml
@@ -105,6 +105,7 @@ jobs:
           - ^generate$/^policy$
           - ^generate$/^validation$
           - ^globalcontext$
+          - ^lease$
           - ^mutate$
           - ^policy-validation$
           - ^rangeoperators$
diff --git a/test/conformance/chainsaw/lease/admission-controller/chainsaw-test.yaml b/test/conformance/chainsaw/lease/admission-controller/chainsaw-test.yaml
new file mode 100755
index 0000000000..c3a083f11c
--- /dev/null
+++ b/test/conformance/chainsaw/lease/admission-controller/chainsaw-test.yaml
@@ -0,0 +1,45 @@
+apiVersion: chainsaw.kyverno.io/v1alpha1
+kind: Test
+metadata:
+  name: admission-controller-lease
+spec:
+  concurrent: false
+  steps:
+  - try:
+    - assert:
+        resource:
+          apiVersion: v1
+          kind: Pod
+          metadata:
+            namespace: kyverno
+            labels:
+              app.kubernetes.io/component: admission-controller
+              app.kubernetes.io/instance: kyverno
+              app.kubernetes.io/part-of: kyverno
+          status:
+            (containerStatuses[?name == 'kyverno']):
+            - ready: true
+              restartCount: 0
+    - patch:
+        resource:
+          apiVersion: coordination.k8s.io/v1
+          kind: Lease
+          metadata:
+            name: kyverno
+            namespace: kyverno
+          spec:
+            holderIdentity: foo
+    - assert:
+        resource:
+          apiVersion: v1
+          kind: Pod
+          metadata:
+            namespace: kyverno
+            labels:
+              app.kubernetes.io/component: admission-controller
+              app.kubernetes.io/instance: kyverno
+              app.kubernetes.io/part-of: kyverno
+          status:
+            (containerStatuses[?name == 'kyverno']):
+            - ready: true
+              restartCount: 1
diff --git a/test/conformance/chainsaw/lease/background-controller/chainsaw-test.yaml b/test/conformance/chainsaw/lease/background-controller/chainsaw-test.yaml
new file mode 100755
index 0000000000..ab34eb7284
--- /dev/null
+++ b/test/conformance/chainsaw/lease/background-controller/chainsaw-test.yaml
@@ -0,0 +1,45 @@
+apiVersion: chainsaw.kyverno.io/v1alpha1
+kind: Test
+metadata:
+  name: background-controller-lease
+spec:
+  concurrent: false
+  steps:
+  - try:
+    - assert:
+        resource:
+          apiVersion: v1
+          kind: Pod
+          metadata:
+            namespace: kyverno
+            labels:
+              app.kubernetes.io/component: background-controller
+              app.kubernetes.io/instance: kyverno
+              app.kubernetes.io/part-of: kyverno
+          status:
+            (containerStatuses[?name == 'controller']):
+            - ready: true
+              restartCount: 0
+    - patch:
+        resource:
+          apiVersion: coordination.k8s.io/v1
+          kind: Lease
+          metadata:
+            name: kyverno-background-controller
+            namespace: kyverno
+          spec:
+            holderIdentity: foo
+    - assert:
+        resource:
+          apiVersion: v1
+          kind: Pod
+          metadata:
+            namespace: kyverno
+            labels:
+              app.kubernetes.io/component: background-controller
+              app.kubernetes.io/instance: kyverno
+              app.kubernetes.io/part-of: kyverno
+          status:
+            (containerStatuses[?name == 'controller']):
+            - ready: true
+              restartCount: 1
diff --git a/test/conformance/chainsaw/lease/cleanup-controller/chainsaw-test.yaml b/test/conformance/chainsaw/lease/cleanup-controller/chainsaw-test.yaml
new file mode 100755
index 0000000000..08d23c9575
--- /dev/null
+++ b/test/conformance/chainsaw/lease/cleanup-controller/chainsaw-test.yaml
@@ -0,0 +1,45 @@
+apiVersion: chainsaw.kyverno.io/v1alpha1
+kind: Test
+metadata:
+  name: cleanup-controller-lease
+spec:
+  concurrent: false
+  steps:
+  - try:
+    - assert:
+        resource:
+          apiVersion: v1
+          kind: Pod
+          metadata:
+            namespace: kyverno
+            labels:
+              app.kubernetes.io/component: cleanup-controller
+              app.kubernetes.io/instance: kyverno
+              app.kubernetes.io/part-of: kyverno
+          status:
+            (containerStatuses[?name == 'controller']):
+            - ready: true
+              restartCount: 0
+    - patch:
+        resource:
+          apiVersion: coordination.k8s.io/v1
+          kind: Lease
+          metadata:
+            name: kyverno-cleanup-controller
+            namespace: kyverno
+          spec:
+            holderIdentity: foo
+    - assert:
+        resource:
+          apiVersion: v1
+          kind: Pod
+          metadata:
+            namespace: kyverno
+            labels:
+              app.kubernetes.io/component: cleanup-controller
+              app.kubernetes.io/instance: kyverno
+              app.kubernetes.io/part-of: kyverno
+          status:
+            (containerStatuses[?name == 'controller']):
+            - ready: true
+              restartCount: 1
diff --git a/test/conformance/chainsaw/lease/reports-controller/chainsaw-test.yaml b/test/conformance/chainsaw/lease/reports-controller/chainsaw-test.yaml
new file mode 100755
index 0000000000..e8039a1987
--- /dev/null
+++ b/test/conformance/chainsaw/lease/reports-controller/chainsaw-test.yaml
@@ -0,0 +1,45 @@
+apiVersion: chainsaw.kyverno.io/v1alpha1
+kind: Test
+metadata:
+  name: reports-controller-lease
+spec:
+  concurrent: false
+  steps:
+  - try:
+    - assert:
+        resource:
+          apiVersion: v1
+          kind: Pod
+          metadata:
+            namespace: kyverno
+            labels:
+              app.kubernetes.io/component: reports-controller
+              app.kubernetes.io/instance: kyverno
+              app.kubernetes.io/part-of: kyverno
+          status:
+            (containerStatuses[?name == 'controller']):
+            - ready: true
+              restartCount: 0
+    - patch:
+        resource:
+          apiVersion: coordination.k8s.io/v1
+          kind: Lease
+          metadata:
+            name: kyverno-reports-controller
+            namespace: kyverno
+          spec:
+            holderIdentity: foo
+    - assert:
+        resource:
+          apiVersion: v1
+          kind: Pod
+          metadata:
+            namespace: kyverno
+            labels:
+              app.kubernetes.io/component: reports-controller
+              app.kubernetes.io/instance: kyverno
+              app.kubernetes.io/part-of: kyverno
+          status:
+            (containerStatuses[?name == 'controller']):
+            - ready: true
+              restartCount: 1