From e6c1f0eb0fa797f7c0244a813c0616ae45df300b Mon Sep 17 00:00:00 2001
From: OZGCloud <ozgcloud@mgm-tp.com>
Date: Mon, 21 Aug 2023 16:35:31 +0200
Subject: [PATCH] OZG-3961 add rbac test

---
 Jenkinsfile                                   |  2 +-
 run_helm_test.sh                              |  2 +-
 .../rbacs/keycloak_admin_secret_read.yaml     | 90 ++++++++++++++++++
 src/test/helm/rbacs/keycloak_read_test.yaml   | 93 +++++++++++++++++++
 src/test/helm/rbacs/keycloak_write_test.yaml  | 92 ++++++++++++++++++
 src/test/helm/rbacs/serviceaccount_test.yaml  | 41 ++++++++
 6 files changed, 318 insertions(+), 2 deletions(-)
 create mode 100644 src/test/helm/rbacs/keycloak_admin_secret_read.yaml
 create mode 100644 src/test/helm/rbacs/keycloak_read_test.yaml
 create mode 100644 src/test/helm/rbacs/keycloak_write_test.yaml
 create mode 100644 src/test/helm/rbacs/serviceaccount_test.yaml

diff --git a/Jenkinsfile b/Jenkinsfile
index 10a1a2f..95ffb54 100644
--- a/Jenkinsfile
+++ b/Jenkinsfile
@@ -126,7 +126,7 @@ pipeline {
                     dir('src/main/helm') {
                         sh "helm lint -f ../../test/helm/linter_values.yaml"
 
-                        sh "helm unittest --helm3 -f '../../test/helm/*.yaml' ."
+                        sh "helm unittest --helm3 -f '../../test/helm/*.yaml' -f '../../test/helm/*/*.yaml' ."
 
                         sh "helm package --version=${HELM_CHART_VERSION} ."
 
diff --git a/run_helm_test.sh b/run_helm_test.sh
index 5413103..8097a39 100755
--- a/run_helm_test.sh
+++ b/run_helm_test.sh
@@ -4,4 +4,4 @@ set -e
 
 helm template  ./src/main/helm/ -f src/test/helm/linter_values.yaml
 helm lint -f src/test/helm/linter_values.yaml ./src/main/helm/
-cd src/main/helm && helm unittest --helm3 -f '../../test/helm/*.yaml' .
\ No newline at end of file
+cd src/main/helm && helm unittest --helm3 -f '../../test/helm/*/*.yaml' -f '../../test/helm/*.yaml' .
diff --git a/src/test/helm/rbacs/keycloak_admin_secret_read.yaml b/src/test/helm/rbacs/keycloak_admin_secret_read.yaml
new file mode 100644
index 0000000..214392d
--- /dev/null
+++ b/src/test/helm/rbacs/keycloak_admin_secret_read.yaml
@@ -0,0 +1,90 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+suite: Keycloak admin secret rbac test
+release:
+  name: ozg-operator
+  namespace: test-namespace
+templates:
+  - templates/rbacs/keycloak_admin_secret_read.yaml
+tests:
+  - it: test RoleBinding metadata
+    asserts:
+      - isKind:
+          of: RoleBinding
+        documentIndex: 0
+      - equal:
+          path: metadata.name
+          value: ozg-operator-keycloak-admin-secret-viewer-role-binding
+        documentIndex: 0
+      - equal:
+          path: metadata.namespace
+          value: keycloak
+        documentIndex: 0
+  - it: test RoleBinding subject
+    asserts:
+      - contains:
+          path: subjects
+          content:
+            kind: ServiceAccount
+            name: ozg-operator-serviceaccount
+            namespace: test-namespace
+        documentIndex: 0
+  - it: test RoleBinding roleRef
+    asserts:
+      - equal:
+          path: roleRef
+          value:
+            kind: Role
+            name: ozg-operator-keycloak-admin-secret-viewer-role
+            apiGroup: rbac.authorization.k8s.io
+        documentIndex: 0
+
+  - it: test Role metadata
+    asserts:
+      - isKind:
+          of: Role
+        documentIndex: 1
+      - equal:
+          path: metadata.name
+          value: ozg-operator-keycloak-admin-secret-viewer-role
+        documentIndex: 1
+      - equal:
+          path: metadata.namespace
+          value: keycloak
+        documentIndex: 1
+  - it: test RoleBinding rules
+    asserts:
+      - contains:
+          path: rules
+          content:
+              apiGroups:
+                - ""
+              resourceNames:
+                - keycloak-admin-secret
+              resources:
+                - secrets
+              verbs:
+                - get
+        documentIndex: 1
\ No newline at end of file
diff --git a/src/test/helm/rbacs/keycloak_read_test.yaml b/src/test/helm/rbacs/keycloak_read_test.yaml
new file mode 100644
index 0000000..840ac9b
--- /dev/null
+++ b/src/test/helm/rbacs/keycloak_read_test.yaml
@@ -0,0 +1,93 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+suite: Keycloak read rbac test
+release:
+  name: ozg-operator
+  namespace: test-namespace
+templates:
+  - templates/rbacs/keycloak_read.yaml
+tests:
+  - it: test ClusterRoleBinding metadata
+    asserts:
+      - isKind:
+          of: ClusterRoleBinding
+        documentIndex: 0
+      - equal:
+          path: metadata.name
+          value: ozg-operator-keycloak-viewer-role-binding
+        documentIndex: 0
+  - it: test ClusterRoleBinding subject
+    asserts:
+      - contains:
+          path: subjects
+          content:
+            kind: ServiceAccount
+            name: ozg-operator-serviceaccount
+            namespace: test-namespace
+        documentIndex: 0
+  - it: test ClusterRoleBinding roleRef
+    asserts:
+      - equal:
+          path: roleRef
+          value:
+            kind: ClusterRole
+            name: ozg-operator-keycloak-viewer-role
+            apiGroup: rbac.authorization.k8s.io
+        documentIndex: 0
+
+  - it: test ClusterRole metadata
+    asserts:
+      - isKind:
+          of: ClusterRole
+        documentIndex: 1
+      - equal:
+          path: metadata.name
+          value: ozg-operator-keycloak-viewer-role
+        documentIndex: 1
+  - it: test ClusterRoleBinding rules
+    asserts:
+      - contains:
+          path: rules
+          content:
+              apiGroups:
+                - operator.ozgcloud.de
+              resources:
+                - ozgkeycloakusers
+                - ozgkeycloakusers/status
+                - ozgkeycloakusers/finalizers
+                - ozgkeycloakgroups
+                - ozgkeycloakgroups/status
+                - ozgkeycloakgroups/finalizers
+                - ozgkeycloakrealms
+                - ozgkeycloakrealms/status
+                - ozgkeycloakrealms/finalizers
+                - ozgkeycloakclients
+                - ozgkeycloakclients/status
+                - ozgkeycloakclients/finalizers
+              verbs:
+                - get
+                - list
+                - watch
+        documentIndex: 1
\ No newline at end of file
diff --git a/src/test/helm/rbacs/keycloak_write_test.yaml b/src/test/helm/rbacs/keycloak_write_test.yaml
new file mode 100644
index 0000000..6aa6630
--- /dev/null
+++ b/src/test/helm/rbacs/keycloak_write_test.yaml
@@ -0,0 +1,92 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+suite: Keycloak write rbac test
+release:
+  name: ozg-operator
+  namespace: test-namespace
+templates:
+  - templates/rbacs/keycloak_write.yaml
+tests:
+  - it: test ClusterRoleBinding metadata
+    asserts:
+      - isKind:
+          of: ClusterRoleBinding
+        documentIndex: 0
+      - equal:
+          path: metadata.name
+          value: ozg-operator-keycloak-write-role-binding
+        documentIndex: 0
+  - it: test ClusterRoleBinding subject
+    asserts:
+      - contains:
+          path: subjects
+          content:
+            kind: ServiceAccount
+            name: ozg-operator-serviceaccount
+            namespace: test-namespace
+        documentIndex: 0
+  - it: test ClusterRoleBinding roleRef
+    asserts:
+      - equal:
+          path: roleRef
+          value:
+            kind: ClusterRole
+            name: ozg-operator-keycloak-write-role
+            apiGroup: rbac.authorization.k8s.io
+        documentIndex: 0
+
+  - it: test ClusterRole metadata
+    asserts:
+      - isKind:
+          of: ClusterRole
+        documentIndex: 1
+      - equal:
+          path: metadata.name
+          value: ozg-operator-keycloak-write-role
+        documentIndex: 1
+  - it: test ClusterRoleBinding rules
+    asserts:
+      - contains:
+          path: rules
+          content:
+              apiGroups:
+                - operator.ozgcloud.de
+              resources:
+                - ozgkeycloakusers
+                - ozgkeycloakusers/status
+                - ozgkeycloakusers/finalizers
+                - ozgkeycloakgroups
+                - ozgkeycloakgroups/status
+                - ozgkeycloakgroups/finalizers
+                - ozgkeycloakrealms
+                - ozgkeycloakrealms/status
+                - ozgkeycloakrealms/finalizers
+                - ozgkeycloakclients
+                - ozgkeycloakclients/status
+                - ozgkeycloakclients/finalizers
+              verbs:
+                - patch
+                - update
+        documentIndex: 1
\ No newline at end of file
diff --git a/src/test/helm/rbacs/serviceaccount_test.yaml b/src/test/helm/rbacs/serviceaccount_test.yaml
new file mode 100644
index 0000000..5f79cd6
--- /dev/null
+++ b/src/test/helm/rbacs/serviceaccount_test.yaml
@@ -0,0 +1,41 @@
+#
+# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den
+# Ministerpräsidenten des Landes Schleswig-Holstein
+# Staatskanzlei
+# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung
+#
+# Lizenziert unter der EUPL, Version 1.2 oder - sobald
+# diese von der Europäischen Kommission genehmigt wurden -
+# Folgeversionen der EUPL ("Lizenz");
+# Sie dürfen dieses Werk ausschließlich gemäß
+# dieser Lizenz nutzen.
+# Eine Kopie der Lizenz finden Sie hier:
+#
+# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12
+#
+# Sofern nicht durch anwendbare Rechtsvorschriften
+# gefordert oder in schriftlicher Form vereinbart, wird
+# die unter der Lizenz verbreitete Software "so wie sie
+# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN -
+# ausdrücklich oder stillschweigend - verbreitet.
+# Die sprachspezifischen Genehmigungen und Beschränkungen
+# unter der Lizenz sind dem Lizenztext zu entnehmen.
+#
+
+suite: ServiceAccount test
+release:
+  name: ozg-operator
+  namespace: test-namespace
+templates:
+  - templates/rbacs/serviceaccount.yaml
+tests:
+  - it: test metadata
+    asserts:
+      - isKind:
+          of: ServiceAccount
+      - equal:
+          path: metadata.name
+          value: ozg-operator-serviceaccount
+      - equal:
+          path: metadata.namespace
+          value: test-namespace
\ No newline at end of file
-- 
GitLab