{{- /*
# *****************************************************************************
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
#
# ******************************************************************************
*/ -}}

{{- if .Values.test.enabled }}
apiVersion: v1
kind: Pod
metadata:
  name: "{{ include "keycloak.fullname" . }}-test-{{ randAlphaNum 5 | lower }}"
  labels:
    {{- include "keycloak.commonLabels" . | nindent 4 }}
    role: test
  annotations:
    "helm.sh/hook": test-success
spec:
  securityContext:
    {{- toYaml .Values.test.securityContext | nindent 4 }}
  containers:
    - name: {{ .Chart.Name }}-test
      image: "{{ .Values.test.image.repository }}:{{ .Values.test.image.tag }}"
      imagePullPolicy: {{ .Values.test.image.pullPolicy }}
      securityContext:
        {{- toYaml .Values.test.containerSecurityContext | nindent 8 }}
      command:
        - python3
        - /tests/test.py
      env:
        - name: KEYCLOAK_USER
          value: {{ .Values.keycloak.username }}
        - name: KEYCLOAK_PASSWORD
          valueFrom:
            secretKeyRef:
              name: {{ include "keycloak.secret" . }}
              key: {{ include "keycloak.passwordKey" . }}
      volumeMounts:
        - name: tests
          mountPath: /tests
  volumes:
    - name: tests
      configMap:
        name: {{ include "keycloak.fullname" . }}-test
  restartPolicy: Never
{{- end }}
