diff --git a/src/main/helm/templates/_helpers.tpl b/src/main/helm/templates/_helpers.tpl
index 8c613dac72be13abdf18b464e323513b6044363b..c75701fd803c0c182d21d01a5d956092df489911 100644
--- a/src/main/helm/templates/_helpers.tpl
+++ b/src/main/helm/templates/_helpers.tpl
@@ -132,4 +132,8 @@ app.kubernetes.io/namespace: {{ include "app.namespace" . }}
 {{- else -}}
 {{ printf "user-manager-database" }}
 {{- end -}}
+{{- end -}}
+
+{{- define "app.serviceAccountName" -}}
+{{ printf "%s" ( (.Values.serviceAccount).name | default "user-manager-service-account" ) }}
 {{- end -}}
\ No newline at end of file
diff --git a/src/main/helm/templates/api-password-secret.yaml b/src/main/helm/templates/api-password-secret.yaml
index 7402d8532ea15c212f1f6d4f1541260f00dccfae..87a1368702c576e90a6f95121c83c4967c0b8a69 100644
--- a/src/main/helm/templates/api-password-secret.yaml
+++ b/src/main/helm/templates/api-password-secret.yaml
@@ -1,4 +1,4 @@
-{{- if not (.Values.sso).api_user -}}
+{{- if and (not (.Values.sso).api_user) (((.Values.ozgcloud).keycloak).api).password -}}
 apiVersion: v1
 kind: Secret
 metadata:
diff --git a/src/main/helm/templates/deployment.yaml b/src/main/helm/templates/deployment.yaml
index 2f65ea6f1443d60b32ca4c5e349674d607a93c8f..8aed2667d831c4ea8f47c61c32cec7e5d7715083 100644
--- a/src/main/helm/templates/deployment.yaml
+++ b/src/main/helm/templates/deployment.yaml
@@ -48,6 +48,9 @@ spec:
         {{- include "app.defaultLabels" . | indent 8 }}
         component: user-manager
     spec:
+      {{- if (.Values.serviceAccount).create }}
+      serviceAccountName: {{ include "app.serviceAccountName" . }}
+      {{- end }}
       topologySpreadConstraints:
       - maxSkew: 1
         topologyKey: kubernetes.io/hostname
@@ -107,6 +110,17 @@ spec:
         {{- with (.Values.env).customList }}
 {{ toYaml . | indent 8 }}
         {{- end }}
+        {{- if .Values.optionalTrustStoreSecretName }}
+        - name: TRUST_STORE_PASSWORD
+          valueFrom:
+            secretKeyRef:
+              name: {{ .Values.optionalTrustStoreSecretName }}
+              key: password
+              optional: false
+        args:
+          - '-Djavax.net.ssl.trustStore=/optional-trust-store/truststore.jks'
+          - '-Djavax.net.ssl.trustStorePassword=$(TRUST_STORE_PASSWORD)'
+        {{- end }}
         image: "{{ .Values.image.repo }}/{{ .Values.image.name }}:{{ coalesce (.Values.image).tag "latest" }}"
         imagePullPolicy: Always
         name: user-manager
@@ -144,7 +158,13 @@ spec:
           allowPrivilegeEscalation: false
           privileged: false
           readOnlyRootFilesystem: false
-          runAsNonRoot: false
+          runAsNonRoot: true
+          {{- with (.Values.securityContext).runAsUser }}
+          runAsUser: {{ . }}
+          {{- end }}
+          {{- with (.Values.securityContext).runAsGroup }}
+          runAsGroup: {{ . }}
+          {{- end }}
         stdin: true
         terminationMessagePath: /dev/termination-log
         terminationMessagePolicy: File
@@ -158,15 +178,34 @@ spec:
             mountPath: "/user-manager-tls-certificate/tls.key"
             subPath: tls.key
             readOnly: true
+          {{- if .Values.optionalTrustStoreSecretName }}
+          - name: optional-trust-store
+            mountPath: "/optional-trust-store/truststore.jks"
+            subPath: truststore.jks
+            readOnly: true
+          {{- end }}
       volumes:
          - name: user-manager-tls-certificate
            secret:
               secretName: user-manager-tls-cert
+        {{- if .Values.optionalTrustStoreSecretName }}
+         - name: optional-trust-store
+           secret:
+              secretName: {{ .Values.optionalTrustStoreSecretName }}
+        {{- end }}
       dnsConfig: {}
       dnsPolicy: ClusterFirst
       imagePullSecrets:
+      {{- if .Values.imagePullSecret }}
+      - name: {{ .Values.imagePullSecret }}
+      {{ else }}
       - name: user-manager-image-pull-secret
+      {{- end }}
       restartPolicy: Always
+      {{- with .Values.hostAliases }}
+      hostAliases:
+{{ toYaml . | indent 8 }}
+      {{- end }}
       schedulerName: default-scheduler
       securityContext: {}
       terminationGracePeriodSeconds: 30
\ No newline at end of file
diff --git a/src/main/helm/templates/image-pull-secret.yaml b/src/main/helm/templates/image-pull-secret.yaml
index 513467db846b2e8cb43f8afe510ce1691f62edc4..02be1463951799822886c4bc8593c9310be130fa 100644
--- a/src/main/helm/templates/image-pull-secret.yaml
+++ b/src/main/helm/templates/image-pull-secret.yaml
@@ -22,6 +22,7 @@
 # unter der Lizenz sind dem Lizenztext zu entnehmen.
 #
 
+{{- if not (.Values.imagePullSecret) }}
 apiVersion: v1
 kind: Secret
 metadata:
@@ -29,4 +30,5 @@ metadata:
   namespace: {{ include "app.namespace" . }}
 type: kubernetes.io/dockerconfigjson
 data:
-  .dockerconfigjson: {{ include "app.imagePullSecret" . }}
\ No newline at end of file
+  .dockerconfigjson: {{ include "app.imagePullSecret" . }}
+{{- end }}
\ No newline at end of file
diff --git a/src/main/helm/templates/ingress.yaml b/src/main/helm/templates/ingress.yaml
index cb19ba1f2301358224418e0c738d97394c7d5689..b10443e90f79d47c91d1724bf1192da9b8e0de8e 100644
--- a/src/main/helm/templates/ingress.yaml
+++ b/src/main/helm/templates/ingress.yaml
@@ -29,7 +29,11 @@ metadata:
   annotations: {{- toYaml . | nindent 4 }}
   {{- end }}
       more_set_headers "Access-Control-Allow-Origin: {{ (include "app.alfaAddress" .) }}";
-    {{- if (.Values.ingress).use_staging_cert }}
+    {{- if (.Values.ingress).certManagerAnnotations -}}
+    {{- range (.Values.ingress).certManagerAnnotations }}
+{{ . | indent 4 }}
+    {{- end }}
+    {{- else if (.Values.ingress).use_staging_cert }}
     cert-manager.io/cluster-issuer: letsencrypt-staging
     {{- else }}
     cert-manager.io/cluster-issuer: letsencrypt-prod
@@ -54,6 +58,8 @@ spec:
   tls:
     - hosts:
       - {{ trimPrefix "https://" ( include "app.baseUrl" . ) }}
-      {{- if ne (.Values).cluster_env "dataport" }}
+      {{- if (.Values.ingress).tlsSecretName }}
+      secretName: {{ (.Values.ingress).tlsSecretName }}
+      {{- else if ne (.Values).cluster_env "dataport" }}
       secretName: {{ .Values.ozgcloud.bezeichner }}-{{ include "app.name" . }}-tls
       {{- end }}
\ No newline at end of file
diff --git a/src/main/helm/templates/keycloak-user-crd.yaml b/src/main/helm/templates/keycloak-user-crd.yaml
index 1800e7a79dfd86fcee095f7df760cd054ae71d8d..42dd1067e64c01021d3df351f92caab603bc8c02 100644
--- a/src/main/helm/templates/keycloak-user-crd.yaml
+++ b/src/main/helm/templates/keycloak-user-crd.yaml
@@ -1,5 +1,5 @@
-{{ if .Values.sso.api_user }}
----
+{{- if not (.Values.sso).disableOzgOperator }}
+{{ if (.Values.sso).api_user }}
 apiVersion: operator.ozgcloud.de/v1
 kind: OzgCloudKeycloakUser
 metadata:
@@ -32,4 +32,5 @@ spec:
 {{ toYaml . | indent 6 }}
     {{- end }}
   {{- end }}
-{{ end }}
\ No newline at end of file
+{{ end }}
+{{- end }}
\ No newline at end of file
diff --git a/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_read_role.yaml b/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_read_role.yaml
index 02f30c4d6e6e6e12209b0832495852dbc4f58497..b8647883929a1d044d1ab307dd15f6173331ed5e 100644
--- a/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_read_role.yaml
+++ b/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_read_role.yaml
@@ -1,3 +1,4 @@
+{{- if not (.Values.sso).disableOzgOperator }}
 {{- if (.Values.sso).api_user }}
 apiVersion: rbac.authorization.k8s.io/v1
 kind: Role
@@ -14,4 +15,5 @@ rules:
     verbs:
       - get
       - list
+{{- end }}
 {{- end }}
\ No newline at end of file
diff --git a/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_read_role_binding.yaml b/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_read_role_binding.yaml
index fdcf591e4bce23591d62e06622edccaaf81e7821..b20195a78428c6f8585200a2e9c0af9cc780a4d1 100644
--- a/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_read_role_binding.yaml
+++ b/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_read_role_binding.yaml
@@ -1,3 +1,4 @@
+{{- if not (.Values.sso).disableOzgOperator }}
 {{- if (.Values.sso).api_user }}
 apiVersion: rbac.authorization.k8s.io/v1
 kind: RoleBinding
@@ -12,4 +13,5 @@ roleRef:
   kind: Role
   name: ozgcloud-keycloak-operator-secrets-read-role-user-manager
   apiGroup: rbac.authorization.k8s.io
+{{- end }}
 {{- end }}
\ No newline at end of file
diff --git a/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_write_role.yaml b/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_write_role.yaml
index f5f02cf36921c472bee3e8ad5a33cc90ee69c9b1..4144a159aebbd65bcad03fc2d88a5b023c64225f 100644
--- a/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_write_role.yaml
+++ b/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_write_role.yaml
@@ -1,3 +1,4 @@
+{{- if not (.Values.sso).disableOzgOperator }}
 {{- if (.Values.sso).api_user }}
 apiVersion: rbac.authorization.k8s.io/v1
 kind: Role
@@ -11,4 +12,5 @@ rules:
       - secrets
     verbs:
       - create
+{{- end }}
 {{- end }}
\ No newline at end of file
diff --git a/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_write_role_binding.yaml b/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_write_role_binding.yaml
index ad6a1e1141feb98aa4e9df6eda829149347dd4f4..147d792a337e04a4d1b4dd81c8b57826af08dfa1 100644
--- a/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_write_role_binding.yaml
+++ b/src/main/helm/templates/ozgcloud_keycloak_operator_secrets_write_role_binding.yaml
@@ -1,3 +1,4 @@
+{{- if not (.Values.sso).disableOzgOperator }}
 {{- if (.Values.sso).api_user }}
 apiVersion: rbac.authorization.k8s.io/v1
 kind: RoleBinding
@@ -12,4 +13,5 @@ roleRef:
   kind: Role
   name: ozgcloud-keycloak-operator-secrets-write-role-user-manager
   apiGroup: rbac.authorization.k8s.io
+{{- end }}
 {{- end }}
\ No newline at end of file
diff --git a/src/main/helm/templates/service_account.yaml b/src/main/helm/templates/service_account.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..0e13e6bcabf1933117c29487473453b63265922a
--- /dev/null
+++ b/src/main/helm/templates/service_account.yaml
@@ -0,0 +1,31 @@
+#
+# 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.
+#
+
+{{- if (.Values.serviceAccount).create }}
+apiVersion: v1
+kind: ServiceAccount
+metadata:
+  name: {{ include "app.serviceAccountName" . }}
+  namespace: {{ include "app.namespace" . }}
+{{- end }}
\ No newline at end of file
diff --git a/src/main/helm/values.yaml b/src/main/helm/values.yaml
index 49b4769c0b0aea9f8dc22b61dda59b26e83e7234..daa6f7ce4cfe5f3660282d2a063e9f709a08c1f4 100644
--- a/src/main/helm/values.yaml
+++ b/src/main/helm/values.yaml
@@ -39,12 +39,6 @@ ozgcloud:
     api:
       user: userManagerApiUser
 
-imageCredentials:
-  registry: docker.ozg-sh.de
-  username: ozgcloud
-  password: Ymtbek3BWR8v
-  email: webmaster@ozg-sh.de
-
 ingress:
   configuration_snippet:
     nginx.ingress.kubernetes.io/configuration-snippet: |
diff --git a/src/test/helm/deployment_container_security_context_test.yaml b/src/test/helm/deployment_container_security_context_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..d95c4d151a7fc52e2f94edbc6740571fb9460c8c
--- /dev/null
+++ b/src/test/helm/deployment_container_security_context_test.yaml
@@ -0,0 +1,65 @@
+#
+# 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: test deployment
+release:
+  name: user-manager
+  namespace: sh-helm-test
+templates:
+  - templates/deployment.yaml
+tests:
+  - it: check default values
+    asserts:
+      - isKind:
+          of: Deployment
+      - equal:
+          path: spec.template.spec.containers[0].securityContext.allowPrivilegeEscalation
+          value: false
+      - equal:
+          path: spec.template.spec.containers[0].securityContext.privileged
+          value: false
+      - equal:
+          path: spec.template.spec.containers[0].securityContext.readOnlyRootFilesystem
+          value: false
+      - equal:
+          path: spec.template.spec.containers[0].securityContext.runAsNonRoot
+          value: true
+      - isNull:
+          path: spec.template.spec.containers[0].securityContext.runAsUser
+      - isNull:
+          path: spec.template.spec.containers[0].securityContext.runAsGroup
+  - it: check runAsUser
+    set:
+      securityContext.runAsUser: 1000
+    asserts:
+      - equal:
+          path: spec.template.spec.containers[0].securityContext.runAsUser
+          value: 1000
+  - it: check runAsGroup
+    set:
+      securityContext.runAsGroup: 1000
+    asserts:
+      - equal:
+          path: spec.template.spec.containers[0].securityContext.runAsGroup
+          value: 1000
\ No newline at end of file
diff --git a/src/test/helm/deployment_host_aliases_test.yaml b/src/test/helm/deployment_host_aliases_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..6b1ce6a5b7626f4b00a7d9274fb7f5948430414e
--- /dev/null
+++ b/src/test/helm/deployment_host_aliases_test.yaml
@@ -0,0 +1,50 @@
+#
+# 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: deployment host aliases
+release:
+  name: user-manager
+  namespace: sh-helm-test
+templates:
+  - templates/deployment.yaml
+tests:
+  - it: should not set hostAliases
+    asserts:
+      - isNull:
+          path: spec.template.spec.hostAliases
+  - it: should set hostAliases
+    set:
+      hostAliases:
+        - ip: "127.0.0.1"
+          hostname:
+          - "eins"
+          - "zwei"
+    asserts:
+      - contains:
+          path: spec.template.spec.hostAliases
+          content:
+            ip: "127.0.0.1"
+            hostname:
+            - "eins"
+            - "zwei"
diff --git a/src/test/helm/deployment_imagepull_secret_test.yaml b/src/test/helm/deployment_imagepull_secret_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..41ea808d5871897af3c6712f19aaff37bbf2203e
--- /dev/null
+++ b/src/test/helm/deployment_imagepull_secret_test.yaml
@@ -0,0 +1,47 @@
+#
+# 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: test deployment
+release:
+  name: user-manager
+  namespace: sh-helm-test
+templates:
+  - templates/deployment.yaml
+tests:
+  - it: should use default imagePull secret
+    asserts:
+      - isKind:
+          of: Deployment
+      - equal:
+          path: spec.template.spec.imagePullSecrets[0].name
+          value: user-manager-image-pull-secret
+  - it: should set the imagePull secret
+    set:
+      imagePullSecret: image-pull-secret
+    asserts:
+      - isKind:
+          of: Deployment
+      - equal:
+          path: spec.template.spec.imagePullSecrets[0].name
+          value: image-pull-secret
\ No newline at end of file
diff --git a/src/test/helm/deployment_optional_trust_store_test.yaml b/src/test/helm/deployment_optional_trust_store_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..497868820b5a644004ce464d6bfb4404822a0236
--- /dev/null
+++ b/src/test/helm/deployment_optional_trust_store_test.yaml
@@ -0,0 +1,79 @@
+#
+# 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: test environments
+templates:
+  - templates/deployment.yaml
+tests:
+  - it: check without truststore
+    asserts:
+      - isEmpty:
+          path: spec.template.spec.containers[0].args
+      - notContains:
+          path: spec.template.spec.containers[0].env
+          content:
+            name: TRUST_STORE_PASSWORD
+      - notContains:
+          path: spec.template.spec.containers[0].volumeMounts
+          content:
+            name: optional-trust-store
+            mountPath: "/optional-trust-store/truststore.jks"
+            subPath: truststore.jks
+            readOnly: true
+      - notContains:
+          path: spec.template.spec.volumes
+          content:
+            name: optional-trust-store
+
+  - it: check with truststore
+    set:
+      optionalTrustStoreSecretName: optional-trust-store-secret
+    asserts:
+      - equal:
+          path: spec.template.spec.containers[0].args
+          value: 
+          - '-Djavax.net.ssl.trustStore=/optional-trust-store/truststore.jks' 
+          - '-Djavax.net.ssl.trustStorePassword=$(TRUST_STORE_PASSWORD)'
+      - contains:
+          path: spec.template.spec.containers[0].env
+          content:
+            name: TRUST_STORE_PASSWORD
+            valueFrom:
+              secretKeyRef:
+                name: optional-trust-store-secret
+                key: password
+                optional: false
+      - contains:
+          path: spec.template.spec.containers[0].volumeMounts
+          content:
+            name: optional-trust-store
+            mountPath: "/optional-trust-store/truststore.jks"
+            subPath: truststore.jks
+            readOnly: true
+      - contains:
+          path: spec.template.spec.volumes
+          content:
+            name: optional-trust-store
+            secret:
+              secretName: optional-trust-store-secret
\ No newline at end of file
diff --git a/src/test/helm/deployment_service_account_test.yaml b/src/test/helm/deployment_service_account_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..2b3d1c98e38a215a33eee7affe428325c416538e
--- /dev/null
+++ b/src/test/helm/deployment_service_account_test.yaml
@@ -0,0 +1,52 @@
+#
+# 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: deployment service account
+release:
+  name: user-manager
+  namespace: sh-helm-test
+templates:
+  - templates/deployment.yaml
+tests:
+  - it: should use service account with default name
+    set:
+      serviceAccount:
+        create: true
+    asserts:
+      - equal:
+          path: spec.template.spec.serviceAccountName
+          value: user-manager-service-account
+  - it: should use service account with name
+    set:
+      serviceAccount:
+        create: true
+        name: helm-service-account
+    asserts:
+      - equal:
+          path: spec.template.spec.serviceAccountName
+          value: helm-service-account
+  - it: should use default service account
+    asserts:
+      - isNull:
+          path: spec.template.spec.serviceAccountName
\ No newline at end of file
diff --git a/src/test/helm/imagepull_secret_test.yaml b/src/test/helm/imagepull_secret_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f30a2e15fb14d1f12518d4b6f3777f5ae6cc972f
--- /dev/null
+++ b/src/test/helm/imagepull_secret_test.yaml
@@ -0,0 +1,59 @@
+#
+# 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: test image pull secret
+templates:
+  - templates/image-pull-secret.yaml
+release:
+  name: user-manager
+  namespace: helm-test
+tests:
+  - it: should match basic data
+    set:
+      imageCredentials:
+        registry: docker.ozg-sh.de
+        username: test
+        password: test1234
+        email: webmaster@ozg-sh.de
+    asserts:
+      - hasDocuments:
+          count: 1
+      - containsDocument:
+          kind: Secret
+          apiVersion: v1
+      - equal:
+          path: metadata.name
+          value: user-manager-image-pull-secret
+      - equal:
+          path: metadata.namespace
+          value: helm-test
+      - isNotEmpty:
+          path: data.[.dockerconfigjson]
+
+  - it: should not create image pull secret
+    set:
+      imagePullSecret: "image-pull-secret"
+    asserts:
+      - hasDocuments:
+          count: 0
\ No newline at end of file
diff --git a/src/test/helm/ozgcloud_keycloak_operator_secrets_read_role_binding_test.yaml b/src/test/helm/ozgcloud_keycloak_operator_secrets_read_role_binding_test.yaml
index 3acc4647aae75a30637491d988d399085b6a276a..88406d05a1cc1a22cb3140049e6e35ec1e9b7804 100644
--- a/src/test/helm/ozgcloud_keycloak_operator_secrets_read_role_binding_test.yaml
+++ b/src/test/helm/ozgcloud_keycloak_operator_secrets_read_role_binding_test.yaml
@@ -59,6 +59,15 @@ tests:
           path: roleRef.apiGroup
           value: rbac.authorization.k8s.io
   - it: should not create RoleBinding if no keycloak users available
+    asserts:
+      - hasDocuments:
+          count: 0
+  - it: should not create RoleBinding if ozg operator is disabled
+    set:
+      sso:
+        disableOzgOperator: true
+        api_user:
+          - name: apiuser
     asserts:
       - hasDocuments:
           count: 0
\ No newline at end of file
diff --git a/src/test/helm/ozgcloud_keycloak_operator_secrets_read_role_test.yaml b/src/test/helm/ozgcloud_keycloak_operator_secrets_read_role_test.yaml
index 4464f2f2ede235ba32da45a0dcfc10e2aa582c9b..17dcf4f36dece6a74e68ee49a515ffcf8562de7e 100644
--- a/src/test/helm/ozgcloud_keycloak_operator_secrets_read_role_test.yaml
+++ b/src/test/helm/ozgcloud_keycloak_operator_secrets_read_role_test.yaml
@@ -46,6 +46,15 @@ tests:
                - get
                - list
   - it: should not create RoleBinding if no keycloak users available
+    asserts:
+      - hasDocuments:
+          count: 0
+  - it: should not create Role if ozg operator is disabled
+    set:
+      sso:
+        disableOzgOperator: true
+        api_user:
+          - name: apiuser
     asserts:
       - hasDocuments:
           count: 0
\ No newline at end of file
diff --git a/src/test/helm/ozgcloud_keycloak_operator_secrets_write_role_binding_test.yaml b/src/test/helm/ozgcloud_keycloak_operator_secrets_write_role_binding_test.yaml
index 0522ac029b8512e76e162023cbaa0d5ade5d9af2..a4e1272f182b1d8fe08e82c6d644de5543ab80e8 100644
--- a/src/test/helm/ozgcloud_keycloak_operator_secrets_write_role_binding_test.yaml
+++ b/src/test/helm/ozgcloud_keycloak_operator_secrets_write_role_binding_test.yaml
@@ -59,6 +59,15 @@ tests:
           path: roleRef.apiGroup
           value: rbac.authorization.k8s.io
   - it: should not create RoleBinding if no keycloak users available
+    asserts:
+      - hasDocuments:
+          count: 0
+  - it: should not create RoleBinding if ozg operator is disabled
+    set:
+      sso:
+        disableOzgOperator: true
+        api_user:
+          - name: apiuser
     asserts:
       - hasDocuments:
           count: 0
\ No newline at end of file
diff --git a/src/test/helm/ozgcloud_keycloak_operator_secrets_write_role_test.yaml b/src/test/helm/ozgcloud_keycloak_operator_secrets_write_role_test.yaml
index f5a365040075125f0a02784ee1e800f97561456f..25f63240d466854506a043b44c184335a0c2c63e 100644
--- a/src/test/helm/ozgcloud_keycloak_operator_secrets_write_role_test.yaml
+++ b/src/test/helm/ozgcloud_keycloak_operator_secrets_write_role_test.yaml
@@ -43,6 +43,15 @@ tests:
             verbs:
                - create
   - it: should not create RoleBinding if no keycloak users available
+    asserts:
+      - hasDocuments:
+          count: 0
+  - it: should not create Role if ozg operator is disabled
+    set:
+      sso:
+        disableOzgOperator: true
+        api_user:
+          - name: apiuser
     asserts:
       - hasDocuments:
           count: 0
\ No newline at end of file
diff --git a/src/test/helm/service_account_test.yaml b/src/test/helm/service_account_test.yaml
new file mode 100644
index 0000000000000000000000000000000000000000..f5b9a319ac60675d0f1ebabfa17e8882cab5d2c5
--- /dev/null
+++ b/src/test/helm/service_account_test.yaml
@@ -0,0 +1,62 @@
+#
+# 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: test service account
+release:
+  name: user-manager
+  namespace: sh-helm-test
+templates:
+  - templates/service_account.yaml
+tests:
+  - it: should create service account with default name
+    set:
+      serviceAccount:
+        create: true
+    asserts:
+      - isKind:
+          of: ServiceAccount
+      - equal:
+          path: metadata.name
+          value: user-manager-service-account
+      - equal:
+          path: metadata.namespace
+          value: sh-helm-test
+  - it: should create service account with name
+    set:
+      serviceAccount:
+        create: true
+        name: helm-service-account
+    asserts:
+      - isKind:
+          of: ServiceAccount
+      - equal:
+          path: metadata.name
+          value: helm-service-account
+      - equal:
+          path: metadata.namespace
+          value: sh-helm-test
+  - it: should not create service account
+    asserts:
+      - hasDocuments:
+        count: 0
\ No newline at end of file