Added: dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/deployment_test.yaml ============================================================================== --- dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/deployment_test.yaml (added) +++ dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/deployment_test.yaml Tue Jun 24 00:39:22 2025 @@ -0,0 +1,1061 @@ +# +# 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. +# + +chart: + version: 1.2.3 + appVersion: 4.5.6 + +release: + name: polaris-release + namespace: polaris-ns + +templates: + - deployment.yaml + +tests: + + # metadata.name + - it: should set deployment name + asserts: + - equal: + path: metadata.name + value: polaris-release + - it: should set deployment name with override + set: + nameOverride: polaris-override + asserts: + - equal: + path: metadata.name + value: polaris-release-polaris-override + - it: should set deployment name with full override + set: + fullnameOverride: polaris-override + asserts: + - equal: + path: metadata.name + value: polaris-override + + # metadata.namespace + - it: should set deployment namespace + asserts: + - equal: + path: metadata.namespace + value: polaris-ns + + # metadata.labels + - it: should set deployment default labels + asserts: + - isSubset: + path: metadata.labels + content: + app.kubernetes.io/name: polaris + app.kubernetes.io/instance: polaris-release + app.kubernetes.io/version: 4.5.6 + app.kubernetes.io/managed-by: Helm + helm.sh/chart: polaris-1.2.3 + - it: should set podLabels in deployment labels + set: + podLabels: + app.kubernetes.io/component: polaris + asserts: + - isSubset: + path: metadata.labels + content: + app.kubernetes.io/component: polaris + + # spec.replicas + - it: should set default replicas + asserts: + - equal: + path: spec.replicas + value: 1 + - it: should set replicas + set: + replicaCount: 3 + asserts: + - equal: + path: spec.replicas + value: 3 + - it: should not set replicas if autoscaling is enabled + set: + replicaCount: 3 + autoscaling: + enabled: true + asserts: + - notExists: + path: spec.replicas + + # spec.revisionHistoryLimit + - it: should not set revisionHistoryLimit by default with null + asserts: + - notExists: + path: spec.revisionHistoryLimit + - it: should not set revisionHistoryLimit with quote empty string + set: + revisionHistoryLimit: "" + asserts: + - notExists: + path: spec.revisionHistoryLimit + - it: should not set revisionHistoryLimit with empty string + set: + revisionHistoryLimit: + asserts: + - notExists: + path: spec.revisionHistoryLimit + - it: should set revisionHistoryLimit + set: + revisionHistoryLimit: 1 + asserts: + - equal: + path: spec.revisionHistoryLimit + value: 1 + - it: should set revisionHistoryLimit (disabled revision history) + set: + revisionHistoryLimit: 0 + asserts: + - equal: + path: spec.revisionHistoryLimit + value: 0 + + # spec.selector.matchLabels + spec.template.metadata.labels + - it: should set deployment selector labels + asserts: + - isSubset: + path: spec.selector.matchLabels + content: + app.kubernetes.io/name: polaris + app.kubernetes.io/instance: polaris-release + - isSubset: + path: spec.template.metadata.labels + content: + app.kubernetes.io/name: polaris + app.kubernetes.io/instance: polaris-release + - it: should include podLabels in spec.template.metadata.labels only + set: + podLabels: + app.kubernetes.io/component: polaris + asserts: + - isNotSubset: + path: spec.selector.matchLabels + content: + app.kubernetes.io/component: polaris + - isSubset: + path: spec.template.metadata.labels + content: + app.kubernetes.io/component: polaris + + # spec.template.metadata.annotations + - it: should not set pod annotations by default + asserts: + - notExists: + path: spec.template.metadata.annotations + - it: should set pod annotations + set: + podAnnotations: + foo: bar + asserts: + - isSubset: + path: spec.template.metadata.annotations + content: + foo: bar + + # spec.template.spec.imagePullSecrets + - it: should not set imagePullSecrets by default + asserts: + - notExists: + path: spec.template.spec.imagePullSecrets + - it: should set imagePullSecrets + set: + imagePullSecrets: + - test-secret + asserts: + - contains: + path: spec.template.spec.imagePullSecrets + content: + name: test-secret + + # spec.template.spec.serviceAccountName + - it: should set default service account name + asserts: + - equal: + path: spec.template.spec.serviceAccountName + value: polaris-release + - it: should set service account name when serviceAccount.create is true + set: + serviceAccount: + create: true + asserts: + - equal: + path: spec.template.spec.serviceAccountName + value: polaris-release + - it: should set custom service account name when serviceAccount.create is true + set: + serviceAccount: + create: true + name: polaris-sa + asserts: + - equal: + path: spec.template.spec.serviceAccountName + value: polaris-sa + - it: should set service account name to default when serviceAccount.create is false + set: + serviceAccount: + create: false + asserts: + - equal: + path: spec.template.spec.serviceAccountName + value: default + - it: should set custom service account name when serviceAccount.create is false + set: + serviceAccount: + create: false + name: polaris-sa + asserts: + - equal: + path: spec.template.spec.serviceAccountName + value: polaris-sa + + # spec.template.spec.securityContext + - it: should set securityContext by default + asserts: + - isSubset: + path: spec.template.spec.securityContext + content: + fsGroup: 10001 + seccompProfile: + type: RuntimeDefault + - it: should set custom securityContext + set: + podSecurityContext: + fsGroup: 1234 + asserts: + - isSubset: + path: spec.template.spec.securityContext + content: + fsGroup: 1234 + + # spec.template.spec.containers + - it: should set container name + asserts: + - equal: + path: spec.template.spec.containers[0].name + value: polaris + + # spec.template.spec.containers[0].securityContext + - it: should set container securityContext by default + asserts: + - isSubset: + path: spec.template.spec.containers[0].securityContext + content: + allowPrivilegeEscalation: false + runAsNonRoot: true + runAsUser: 10000 + capabilities: + drop: [ "ALL" ] + seccompProfile: + type: RuntimeDefault + - it: should set custom container securityContext + set: + containerSecurityContext: + allowPrivilegeEscalation: true + runAsNonRoot: false + runAsUser: 1234 + asserts: + - isSubset: + path: spec.template.spec.containers[0].securityContext + content: + allowPrivilegeEscalation: true + runAsNonRoot: false + runAsUser: 1234 + + # spec.template.spec.containers[0].image + - it: should set container image + set: + image: + repository: test-repo + tag: test-tag + asserts: + - equal: + path: spec.template.spec.containers[0].image + value: test-repo:test-tag + - it: should set container image with template + set: + image: + repository: test-repo-{{ .Chart.Version }} + tag: test-tag-{{ .Release.Name }} + asserts: + - equal: + path: spec.template.spec.containers[0].image + value: test-repo-1.2.3:test-tag-polaris-release + - it: should set container image with chart version if no tag provided + set: + image: + repository: test-repo + tag: "" + asserts: + - equal: + path: spec.template.spec.containers[0].image + value: test-repo:1.2.3 + + # spec.template.spec.containers[0].imagePullPolicy + - it: should set container pull policy + set: + image: + pullPolicy: Always + asserts: + - equal: + path: spec.template.spec.containers[0].imagePullPolicy + value: Always + + # spec.template.spec.containers[0].env + - it: should not set container env by default + asserts: + - notExists: + path: spec.template.spec.containers[0].env + - it: should set container env + set: + extraEnv: + - name: foo + value: bar + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: foo + value: bar + + # spec.template.spec.containers[0].volumeMounts + spec.template.spec.volumes + - it: should not set persistence volumes by default + asserts: + - lengthEqual: + path: spec.template.spec.volumes + count: 2 # config-volume + temp-dir + - lengthEqual: + path: spec.template.spec.containers[0].volumeMounts + count: 2 # config-volume + temp-dir + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: config-volume + mountPath: /deployments/config + readOnly: true + + - it: should evaluate template expressions in persistence secret name + set: + persistence: + type: eclipse-link + eclipseLink: + secret: + name: "{{ .Release.Name }}-persistence-secret" + asserts: + - contains: + path: spec.template.spec.volumes + content: + name: config-volume + projected: + sources: + - configMap: + items: + - key: application.properties + path: application.properties + name: polaris-release + - secret: + items: + - key: persistence.xml + path: persistence.xml + name: polaris-release-persistence-secret + + # spec.template.spec.containers[0].ports + - it: should set container ports by default + asserts: + - lengthEqual: + path: spec.template.spec.containers[0].ports + count: 2 + - contains: + path: spec.template.spec.containers[0].ports + content: + name: polaris-http + containerPort: 8181 + protocol: TCP + - contains: + path: spec.template.spec.containers[0].ports + content: + name: polaris-mgmt + containerPort: 8182 + protocol: TCP + + - it: should set custom container ports + set: + service: + ports: + - name: polaris-custom + port: 18181 + managementService: + ports: + - name: mgmt-custom + port: 18182 + extraServices: + - nameSuffix: "-extra" + type: LoadBalancer + ports: + - name: extra-port + port: 18183 + asserts: + - lengthEqual: + path: spec.template.spec.containers[0].ports + count: 3 + - contains: + path: spec.template.spec.containers[0].ports + content: + name: polaris-custom + containerPort: 18181 + protocol: TCP + - contains: + path: spec.template.spec.containers[0].ports + content: + name: mgmt-custom + containerPort: 18182 + protocol: TCP + - contains: + path: spec.template.spec.containers[0].ports + content: + name: extra-port + containerPort: 18183 + protocol: TCP + + - it: should use targetPort if defined + set: + service: + ports: + - name: polaris-custom + port: 18181 + targetPort: 8181 + managementService: + ports: + - name: mgmt-custom + port: 18182 + targetPort: 8182 + extraServices: + - nameSuffix: "-extra" + ports: + - name: extra-port + port: 18183 + targetPort: 8183 + asserts: + - lengthEqual: + path: spec.template.spec.containers[0].ports + count: 3 + - contains: + path: spec.template.spec.containers[0].ports + content: + name: polaris-custom + containerPort: 8181 + protocol: TCP + - contains: + path: spec.template.spec.containers[0].ports + content: + name: mgmt-custom + containerPort: 8182 + protocol: TCP + - contains: + path: spec.template.spec.containers[0].ports + content: + name: extra-port + containerPort: 8183 + protocol: TCP + + - it: should fail if port name is not unique (#1) + set: + service: + ports: + - name: polaris-http + port: 8181 + - name: polaris-http + port: 18181 + asserts: + - failedTemplate: + errorPattern: "service.ports\\[\\d\\]: port name already taken: polaris-http" + + - it: should fail if port name is not unique (#2) + set: + managementService: + ports: + - name: polaris-mgmt + port: 8182 + - name: polaris-mgmt + port: 18182 + asserts: + - failedTemplate: + errorPattern: "managementService.ports\\[\\d\\]: port name already taken: polaris-mgmt" + + - it: should fail if port name is not unique (#3) + set: + service: + ports: + - name: polaris + port: 8181 + managementService: + ports: + - name: polaris + port: 8182 + asserts: + - failedTemplate: + errorPattern: "managementService.ports\\[\\d\\]: port name already taken: polaris" + + - it: should not fail when extra service references the same port name and number + set: + extraServices: + - nameSuffix: "-extra" + type: LoadBalancer + ports: + - name: polaris-http + port: 8181 + asserts: + - lengthEqual: + path: spec.template.spec.containers[0].ports + count: 2 + - contains: + path: spec.template.spec.containers[0].ports + content: + name: polaris-http + containerPort: 8181 + protocol: TCP + - contains: + path: spec.template.spec.containers[0].ports + content: + name: polaris-mgmt + containerPort: 8182 + protocol: TCP + + - it: should fail when extra service references the same port name with different number (#1) + set: + extraServices: + - nameSuffix: "-extra" + type: LoadBalancer + ports: + - name: polaris-http + port: 9999 + asserts: + - failedTemplate: + errorPattern: "extraServices\\[\\d\\].ports\\[\\d\\]: wrong port number for port polaris-http, expected 8181, got 9999" + + - it: should fail when extra service references the same port name with different number (#2) + set: + extraServices: + - nameSuffix: "-extra" + type: LoadBalancer + ports: + - name: polaris-mgmt + port: 9999 + asserts: + - failedTemplate: + errorPattern: "extraServices\\[\\d\\].ports\\[\\d\\]: wrong port number for port polaris-mgmt, expected 8182, got 9999" + + - it: should fail when extra service references the same port name with different number (#3) + set: + service: + ports: + - name: polaris-http + port: 8181 + - name: polaris-https + port: 8043 + extraServices: + - nameSuffix: "-extra" + type: LoadBalancer + ports: + - name: polaris-https + port: 9999 + asserts: + - failedTemplate: + errorPattern: "extraServices\\[\\d\\].ports\\[\\d\\]: wrong port number for port polaris-https, expected 8043, got 9999" + + - it: should fail when extra service references the same port name with different protocol + set: + service: + ports: + - name: polaris-http + port: 8181 + extraServices: + - nameSuffix: "-extra" + type: LoadBalancer + ports: + - name: polaris-http + port: 8181 + protocol: UDP + asserts: + - failedTemplate: + errorPattern: "extraServices\\[\\d\\].ports\\[\\d\\]: wrong protocol for port polaris-http, expected TCP, got UDP" + + - it: should create 2 ports with same number + set: + service: + ports: + - name: polaris-http + port: 8181 + - name: polaris-http2 + port: 8181 + asserts: + - lengthEqual: + path: spec.template.spec.containers[0].ports + count: 3 + - contains: + path: spec.template.spec.containers[0].ports + content: + name: polaris-http + containerPort: 8181 + protocol: TCP + - contains: + path: spec.template.spec.containers[0].ports + content: + name: polaris-http2 + containerPort: 8181 + protocol: TCP + - it: should create 2 ports with same number using targetPort + set: + service: + ports: + - name: polaris-http + port: 18181 + targetPort: 8181 + - name: polaris-http2 + port: 18181 + targetPort: 8181 + asserts: + - lengthEqual: + path: spec.template.spec.containers[0].ports + count: 3 + - contains: + path: spec.template.spec.containers[0].ports + content: + name: polaris-http + containerPort: 8181 + protocol: TCP + - contains: + path: spec.template.spec.containers[0].ports + content: + name: polaris-http2 + containerPort: 8181 + protocol: TCP + - it: should set port protocols + set: + service: + ports: + - name: polaris-http + port: 8181 + protocol: UDP + managementService: + ports: + - name: polaris-mgmt + port: 8182 + protocol: UDP + extraServices: + - nameSuffix: "-extra" + type: LoadBalancer + ports: + - name: polaris-extra + port: 8183 + protocol: UDP + asserts: + - lengthEqual: + path: spec.template.spec.containers[0].ports + count: 3 + - contains: + path: spec.template.spec.containers[0].ports + content: + name: polaris-http + containerPort: 8181 + protocol: UDP + - contains: + path: spec.template.spec.containers[0].ports + content: + name: polaris-mgmt + containerPort: 8182 + protocol: UDP + - contains: + path: spec.template.spec.containers[0].ports + content: + name: polaris-extra + containerPort: 8183 + protocol: UDP + + # spec.template.spec.containers[0].livenessProbe + - it: should set container livenessProbe by default + set: + managementService: + ports: + - name: mgmt-custom + port: 9999 + livenessProbe: + initialDelaySeconds: 11 + periodSeconds: 22 + successThreshold: 33 + failureThreshold: 44 + timeoutSeconds: 55 + terminationGracePeriodSeconds: 66 + asserts: + - equal: + path: spec.template.spec.containers[0].livenessProbe + value: + httpGet: + path: /q/health/live + port: mgmt-custom + scheme: HTTP + initialDelaySeconds: 11 + periodSeconds: 22 + successThreshold: 33 + failureThreshold: 44 + timeoutSeconds: 55 + terminationGracePeriodSeconds: 66 + + # spec.template.spec.containers[0].readinessProbe + - it: should set container readinessProbe by default + set: + managementService: + ports: + - name: mgmt-custom + port: 9999 + readinessProbe: + initialDelaySeconds: 11 + periodSeconds: 22 + successThreshold: 33 + failureThreshold: 44 + timeoutSeconds: 55 + asserts: + - equal: + path: spec.template.spec.containers[0].readinessProbe + value: + httpGet: + path: /q/health/ready + port: mgmt-custom + scheme: HTTP + initialDelaySeconds: 11 + periodSeconds: 22 + successThreshold: 33 + failureThreshold: 44 + timeoutSeconds: 55 + + # spec.template.spec.containers[0].resources + - it: should not set container resources by default + asserts: + - notExists: + path: spec.template.spec.containers[0].resources + - it: should set container resources + set: + resources: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 200m + memory: 256Mi + asserts: + - equal: + path: spec.template.spec.containers[0].resources + value: + requests: + cpu: 100m + memory: 128Mi + limits: + cpu: 200m + memory: 256Mi + + # spec.template.spec.nodeSelector + - it: should not set nodeSelector by default + asserts: + - notExists: + path: spec.template.spec.nodeSelector + - it: should set nodeSelector + set: + nodeSelector: + disktype: ssd + asserts: + - equal: + path: spec.template.spec.nodeSelector + value: + disktype: ssd + + # spec.template.spec.affinity + - it: should not set affinity by default + asserts: + - notExists: + path: spec.template.spec.affinity + - it: should set affinity + set: + affinity: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: zone + operator: In + values: + - zone1 + - zone2 + asserts: + - equal: + path: spec.template.spec.affinity + value: + nodeAffinity: + requiredDuringSchedulingIgnoredDuringExecution: + nodeSelectorTerms: + - matchExpressions: + - key: zone + operator: In + values: + - zone1 + - zone2 + + # spec.template.spec.tolerations + - it: should not set tolerations by default + asserts: + - notExists: + path: spec.template.spec.tolerations + - it: should set tolerations + set: + tolerations: + - key: "key" + operator: "Equal" + value: "value" + effect: "NoSchedule" + asserts: + - equal: + path: spec.template.spec.tolerations + value: + - key: "key" + operator: "Equal" + value: "value" + effect: "NoSchedule" + + - it: should set storage credentials + set: + storage: + secret: + name: polaris-storage-secret + awsAccessKeyId: awsAccessKeyId + awsSecretAccessKey: awsSecretAccessKey + gcpToken: gcpToken + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: polaris.storage.aws.access-key + valueFrom: + secretKeyRef: + name: polaris-storage-secret + key: awsAccessKeyId + - contains: + path: spec.template.spec.containers[0].env + content: + name: polaris.storage.aws.secret-key + valueFrom: + secretKeyRef: + name: polaris-storage-secret + key: awsSecretAccessKey + - contains: + path: spec.template.spec.containers[0].env + content: + name: polaris.storage.gcp.token + valueFrom: + secretKeyRef: + name: polaris-storage-secret + key: gcpToken + + - it: should set extra env + set: + extraEnv: + - name: foo + value: bar + - name: baz + valueFrom: + secretKeyRef: + name: secret + key: key + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: foo + value: bar + - contains: + path: spec.template.spec.containers[0].env + content: + name: baz + valueFrom: + secretKeyRef: + name: secret + key: key + + - it: should set extra env + storage credentials + set: + storage: + secret: + name: polaris-storage-secret + awsAccessKeyId: awsAccessKeyId + extraEnv: + - name: foo + value: bar + asserts: + - contains: + path: spec.template.spec.containers[0].env + content: + name: foo + value: bar + - contains: + path: spec.template.spec.containers[0].env + content: + name: polaris.storage.aws.access-key + valueFrom: + secretKeyRef: + name: polaris-storage-secret + key: awsAccessKeyId + + - it: should not set any environment variables by default + asserts: + - notExists: + path: spec.template.spec.containers[0].env + + - it: should configure config volume + set: + image.configDir: /config/dir + asserts: + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: config-volume + mountPath: /config/dir + readOnly: true + - contains: + path: spec.template.spec.volumes + content: + name: config-volume + projected: + sources: + - configMap: + name: polaris-release + items: + - key: application.properties + path: application.properties + + - it: should configure config volume with token broker secret + set: + image.configDir: /config/dir + authentication: + tokenBroker: + secret: + name: polaris-token-broker + publicKey: public.key + privateKey: private.key + asserts: + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: config-volume + mountPath: /config/dir + readOnly: true + - contains: + path: spec.template.spec.volumes + content: + name: config-volume + projected: + sources: + - configMap: + name: polaris-release + items: + - key: application.properties + path: application.properties + - secret: + name: polaris-token-broker + items: + - key: public.key + path: public.pem + - key: private.key + path: private.pem + + - it: should configure config volume with persistence secret + set: + image.configDir: /config/dir + persistence: + type: eclipse-link + eclipseLink: + secret: + name: polaris-persistence + key: custom.xml + asserts: + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: config-volume + mountPath: /config/dir + readOnly: true + - contains: + path: spec.template.spec.volumes + content: + name: config-volume + projected: + sources: + - configMap: + name: polaris-release + items: + - key: application.properties + path: application.properties + - secret: + name: polaris-persistence + items: + - key: custom.xml + path: persistence.xml + + - it: should configure volume for file logging + set: + logging.file.enabled: true + logging.file.logsDir: /custom/logs + asserts: + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: logs-storage + mountPath: /custom/logs + readOnly: false + - contains: + path: spec.template.spec.volumes + content: + name: logs-storage + persistentVolumeClaim: + claimName: polaris-release-logs + + - it: should include extra volumes and volume mounts + set: + extraVolumes: + - name: extra-volume + emptyDir: {} + extraVolumeMounts: + - name: extra-volume + mountPath: /extra + readOnly: false + asserts: + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: extra-volume + mountPath: /extra + readOnly: false + - contains: + path: spec.template.spec.volumes + content: + name: extra-volume + emptyDir: {}
Added: dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/hpa_test.yaml ============================================================================== --- dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/hpa_test.yaml (added) +++ dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/hpa_test.yaml Tue Jun 24 00:39:22 2025 @@ -0,0 +1,209 @@ +# +# 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. +# + +chart: + version: 1.2.3 + appVersion: 4.5.6 + +release: + name: polaris-release + namespace: polaris-ns + +templates: + - hpa.yaml + +tests: + + # kind + - it: should not create HPA by default + asserts: + - containsDocument: + kind: HorizontalPodAutoscaler + apiVersion: autoscaling/v2 + not: true + - it: should create HPA when enabled + set: + autoscaling.enabled: true + asserts: + - containsDocument: + kind: HorizontalPodAutoscaler + apiVersion: autoscaling/v2 + + # metadata.name (with with autoscaling enabled) + - it: should set HPA name + set: + autoscaling.enabled: true + asserts: + - equal: + path: metadata.name + value: polaris-release + - it: should set HPA name with override + set: + autoscaling.enabled: true + nameOverride: polaris-override + asserts: + - equal: + path: metadata.name + value: polaris-release-polaris-override + - it: should set HPA name with full override + set: + autoscaling.enabled: true + fullnameOverride: polaris-override + asserts: + - equal: + path: metadata.name + value: polaris-override + + # metadata.namespace (with autoscaling enabled) + - it: should set HPA namespace + set: + autoscaling.enabled: true + asserts: + - equal: + path: metadata.namespace + value: polaris-ns + + # metadata.labels (with autoscaling enabled) + - it: should set HPA default labels + set: + autoscaling.enabled: true + asserts: + - isSubset: + path: metadata.labels + content: + app.kubernetes.io/name: polaris + app.kubernetes.io/instance: polaris-release + app.kubernetes.io/version: 4.5.6 + app.kubernetes.io/managed-by: Helm + helm.sh/chart: polaris-1.2.3 + + # spec.scaleTargetRef.name (with autoscaling enabled) + - it: should set target deployment name + set: + autoscaling.enabled: true + asserts: + - equal: + path: spec.scaleTargetRef.name + value: polaris-release + - it: should set target deployment name with override + set: + autoscaling.enabled: true + nameOverride: polaris-override + asserts: + - equal: + path: spec.scaleTargetRef.name + value: polaris-release-polaris-override + - it: should set target deployment name with full override + set: + autoscaling.enabled: true + fullnameOverride: polaris-override + asserts: + - equal: + path: spec.scaleTargetRef.name + value: polaris-override + + # spec.maxReplicas (with autoscaling enabled) + - it: should set default min replicas + set: + autoscaling.enabled: true + asserts: + - equal: + path: spec.minReplicas + value: 1 + - it: should set min replicas + set: + autoscaling.enabled: true + autoscaling.minReplicas: 2 + asserts: + - equal: + path: spec.minReplicas + value: 2 + + # spec.maxReplicas (with autoscaling enabled) + - it: should set default max replicas + set: + autoscaling.enabled: true + asserts: + - equal: + path: spec.maxReplicas + value: 3 + - it: should set max replicas + set: + autoscaling.enabled: true + autoscaling.maxReplicas: 4 + asserts: + - equal: + path: spec.maxReplicas + value: 4 + + # spec.metrics (with autoscaling enabled) + - it: should set default CPU utilization percentage + set: + autoscaling.enabled: true + asserts: + - contains: + path: spec.metrics + content: + type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 80 + - it: should set CPU utilization percentage + set: + autoscaling.enabled: true + autoscaling.targetCPUUtilizationPercentage: 90 + asserts: + - contains: + path: spec.metrics + content: + type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: 90 + - it: should not set default memory utilization percentage + set: + autoscaling.enabled: true + asserts: + - notContains: + path: spec.metrics + content: + type: Resource + resource: + name: memory + target: + type: Utilization + averageUtilization: + - it: should set memory utilization percentage + set: + autoscaling.enabled: true + autoscaling.targetMemoryUtilizationPercentage: 80 + asserts: + - contains: + path: spec.metrics + content: + type: Resource + resource: + name: memory + target: + type: Utilization + averageUtilization: 80 Added: dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/ingress_test.yaml ============================================================================== --- dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/ingress_test.yaml (added) +++ dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/ingress_test.yaml Tue Jun 24 00:39:22 2025 @@ -0,0 +1,176 @@ +# +# 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. +# + +chart: + version: 1.2.3 + appVersion: 4.5.6 + +release: + name: polaris-release + namespace: polaris-ns + +templates: + - ingress.yaml + +tests: + + # kind + - it: should not create ingress by default + asserts: + - containsDocument: + kind: Ingress + apiVersion: networking.k8s.io/v1 + not: true + - it: should create ingress with enabled + set: + ingress.enabled: true + asserts: + - containsDocument: + kind: Ingress + apiVersion: networking.k8s.io/v1 + + # metadata.name (with ingress enabled) + - it: should set ingress name + set: + ingress.enabled: true + asserts: + - equal: + path: metadata.name + value: polaris-release + - it: should set ingress name with override + set: + ingress.enabled: true + nameOverride: polaris-override + asserts: + - equal: + path: metadata.name + value: polaris-release-polaris-override + - it: should set ingress name with full override + set: + ingress.enabled: true + fullnameOverride: polaris-override + asserts: + - equal: + path: metadata.name + value: polaris-override + + # metadata.namespace (with ingress enabled) + - it: should set ingress namespace + set: + ingress.enabled: true + asserts: + - equal: + path: metadata.namespace + value: polaris-ns + + # metadata.labels (with ingress enabled) + - it: should set ingress default labels + set: + ingress.enabled: true + asserts: + - isSubset: + path: metadata.labels + content: + app.kubernetes.io/name: polaris + app.kubernetes.io/instance: polaris-release + app.kubernetes.io/version: 4.5.6 + app.kubernetes.io/managed-by: Helm + helm.sh/chart: polaris-1.2.3 + + # metadata.annotations (with ingress enabled) + - it: should not set ingress annotations by default + set: + ingress.enabled: true + asserts: + - notExists: + path: metadata.annotations + - it: should set ingress annotations + set: + ingress.enabled: true + ingress.annotations: + nginx.ingress.kubernetes.io/upstream-hash-by: "$binary_remote_addr" + asserts: + - isSubset: + path: metadata.annotations + content: + nginx.ingress.kubernetes.io/upstream-hash-by: "$binary_remote_addr" + + # spec.ingressClassName (with ingress enabled) + - it: should not set ingress class by default + set: + ingress.enabled: true + asserts: + - notExists: + path: spec.ingressClassName + - it: should set ingress class + set: + ingress.enabled: true + ingress.className: nginx + asserts: + - equal: + path: spec.ingressClassName + value: nginx + + # spec.tls (with ingress enabled) + - it: should not set ingress TLS by default + set: + ingress.enabled: true + asserts: + - notExists: + path: spec.tls + - it: should set ingress TLS + set: + ingress.enabled: true + ingress.tls: + - hosts: + - chart-example1.local + - chart-example2.local + secretName: secret1 + asserts: + - equal: + path: spec.tls + value: + - hosts: + - "chart-example1.local" + - "chart-example2.local" + secretName: secret1 + + # spec.rules (with ingress enabled) + - it: should set ingress TLS + set: + ingress.enabled: true + ingress.hosts: + - host: chart-example.local + paths: + - path: / + pathType: Prefix + asserts: + - equal: + path: spec.rules + value: + - host: chart-example.local + http: + paths: + - path: / + pathType: Prefix + backend: + service: + name: polaris-release + port: + number: 8181 Added: dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/logging_storage_test.yaml ============================================================================== --- dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/logging_storage_test.yaml (added) +++ dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/logging_storage_test.yaml Tue Jun 24 00:39:22 2025 @@ -0,0 +1,106 @@ +# +# Copyright (C) 2024 Dremio +# +# Licensed 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. +# + +release: + name: polaris + namespace: polaris-ns + +tests: + + - it: should create PVC for file logging + templates: + - storage.yaml + set: + logging.file.enabled: true + logging.file.logsDir: /var/log + logging.file.fileName: app.log + logging.file.storage.className: standard-rwo + logging.file.storage.size: 100Gi + asserts: + - containsDocument: + kind: PersistentVolumeClaim + apiVersion: v1 + name: polaris-logs + namespace: polaris-ns + - equal: + path: spec + value: + accessModes: + - ReadWriteOnce + volumeMode: Filesystem + storageClassName: standard-rwo + resources: + requests: + storage: 100Gi + - notExists: + path: spec.selector + + - it: should create PVC for file logging with selector labels + templates: + - storage.yaml + set: + logging.file.enabled: true + logging.file.logsDir: /var/log + logging.file.fileName: app.log + logging.file.storage.className: standard-rwo + logging.file.storage.size: 100Gi + logging.file.storage.selectorLabels: + app: polaris + documentSelector: + path: metadata.name + value: polaris-logs + asserts: + - containsDocument: + kind: PersistentVolumeClaim + apiVersion: v1 + name: polaris-logs + namespace: polaris-ns + - equal: + path: spec + value: + accessModes: + - ReadWriteOnce + volumeMode: Filesystem + storageClassName: standard-rwo + resources: + requests: + storage: 100Gi + selector: + matchLabels: + app: polaris + + - it: should mount PVC for file logging + templates: + - deployment.yaml + - configmap.yaml + set: + logging.file.enabled: true + logging.file.logsDir: /var/log + asserts: + - contains: + path: spec.template.spec.containers[0].volumeMounts + content: + name: logs-storage + mountPath: /var/log + readOnly: false + template: deployment.yaml + - contains: + path: spec.template.spec.volumes + content: + name: logs-storage + persistentVolumeClaim: + claimName: polaris-logs + template: deployment.yaml Added: dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/quantity_test.yaml ============================================================================== --- dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/quantity_test.yaml (added) +++ dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/quantity_test.yaml Tue Jun 24 00:39:22 2025 @@ -0,0 +1,98 @@ +# +# Copyright (C) 2024 Dremio +# +# Licensed 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. +# + +templates: + - configmap.yaml + +tests: + - it: should convert quantity 12345 + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"12345\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=12345" } } ] + - it: should convert quantity 12345.3456 + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"12345.3456\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=12345.3456" } } ] + - it: should convert quantity 123451234512345 + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"123451234512345\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=123451234512345" } } ] + - it: should convert quantity 1m + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"1m\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=0.001" } } ] + - it: should convert quantity 100m + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"100m\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=0.1" } } ] + - it: should convert quantity 1000m + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"1000m\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=1" } } ] + - it: should convert quantity 10000m + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"10000m\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=10" } } ] + - it: should convert quantity 1k + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"1k\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=1000" } } ] + - it: should convert quantity 1ki + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"1ki\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=1024" } } ] + - it: should convert quantity 100k + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"100k\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=100000" } } ] + - it: should convert quantity 100ki + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"100ki\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=102400" } } ] + - it: should convert quantity 1M + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"1M\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=1000000" } } ] + - it: should convert quantity 1Mi + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"1Mi\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=1048576" } } ] + - it: should convert quantity 1G + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"1G\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=1000000000" } } ] + - it: should convert quantity 1Gi + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"1Gi\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=1073741824" } } ] + - it: should convert quantity 1T + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"1T\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=1000000000000" } } ] + - it: should convert quantity 1Ti + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"1Ti\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=1099511627776" } } ] + - it: should convert quantity 1P + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"1P\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=1000000000000000" } } ] + - it: should convert quantity 1Pi + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"1Pi\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=1125899906842624" } } ] + - it: should convert quantity 1E + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"1E\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=1000000000000000000" } } ] + - it: should convert quantity 1Ei + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"1Ei\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=1152921504606846976" } } ] + - it: should fail on invalid quantity + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"invalid\" }}" }} + asserts: [ { failedTemplate: { errorMessage: "invalid quantity: invalid" } } ] + - it: should fail on zero quantity + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"0\" }}" }} + asserts: [ { failedTemplate: { errorMessage: "invalid quantity: 0" } } ] + - it: should fail on negative quantity + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"-1\" }}" }} + asserts: [ { failedTemplate: { errorMessage: "invalid quantity: -1" } } ] + - it: should convert quantity in scientific notation 123e2 + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"123e2\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=12300" } } ] + - it: should convert quantity in scientific notation 1.23e2 + set: { advancedConfig: { test: "{{ include \"polaris.quantity\" \"1.23e2\" }}" }} + asserts: [ { matchRegex: { path: "data[\"application.properties\"]", pattern: "test=123" } } ] Added: dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/service_extra_test.yaml ============================================================================== --- dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/service_extra_test.yaml (added) +++ dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/service_extra_test.yaml Tue Jun 24 00:39:22 2025 @@ -0,0 +1,349 @@ +# +# 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. +# + +chart: + version: 1.2.3 + appVersion: 4.5.6 + +release: + name: polaris-release + namespace: polaris-ns + +templates: + - service-extra.yaml + +tests: + + - it: should not create extra service by default + asserts: + - containsDocument: + kind: Service + apiVersion: v1 + not: true + + - it: should fail to create extra service if suffix is not set + set: + extraServices: + - nameSuffix: "" + asserts: + - failedTemplate: + errorMessage: "extraServices[0]: missing required nameSuffix" + + - it: should fail to create extra service if suffix is invalid + set: + extraServices: + - nameSuffix: "mgmt" + asserts: + - failedTemplate: + errorMessage: "extraServices[0]: invalid nameSuffix" + - it: should fail to create extra service if suffix is invalid (#2) + set: + extraServices: + - nameSuffix: "-mgmt" + asserts: + - failedTemplate: + errorMessage: "extraServices[0]: invalid nameSuffix" + + # metadata.name + - it: should set service name + set: + extraServices: + - nameSuffix: "extra" + asserts: + - equal: + path: metadata.name + value: polaris-release-extra + - it: should set service name with override + set: + extraServices: + - nameSuffix: "extra" + nameOverride: polaris-override + asserts: + - equal: + path: metadata.name + value: polaris-release-polaris-override-extra + - it: should set service name with full override + set: + extraServices: + - nameSuffix: "extra" + fullnameOverride: polaris-override + asserts: + - equal: + path: metadata.name + value: polaris-override-extra + + # metadata.namespace + - it: should set service namespace + set: + extraServices: + - nameSuffix: "extra" + asserts: + - equal: + path: metadata.namespace + value: polaris-ns + + # metadata.labels + - it: should set service default labels + set: + extraServices: + - nameSuffix: "extra" + asserts: + - isSubset: + path: metadata.labels + content: + app.kubernetes.io/name: polaris + app.kubernetes.io/instance: polaris-release + app.kubernetes.io/version: 4.5.6 + app.kubernetes.io/managed-by: Helm + helm.sh/chart: polaris-1.2.3 + + # metadata.annotations + - it: should not set service annotations by default + set: + extraServices: + - nameSuffix: "extra" + asserts: + - notExists: + path: metadata.annotations + - it: should set service annotations + set: + extraServices: + - nameSuffix: "extra" + annotations: + foo: bar + asserts: + - isSubset: + path: metadata.annotations + content: + foo: bar + + # spec.type + - it: should set service default type + set: + extraServices: + - nameSuffix: "extra" + type: ClusterIP + asserts: + - equal: + path: spec.type + value: ClusterIP + - it: should set service type + set: + extraServices: + - nameSuffix: "extra" + type: NodePort + asserts: + - equal: + path: spec.type + value: NodePort + + # spec.selector + - it: should set service default selector + set: + extraServices: + - nameSuffix: "extra" + asserts: + - isSubset: + path: spec.selector + content: + app.kubernetes.io/name: polaris + app.kubernetes.io/instance: polaris-release + + # spec.ports + - it: should set service ports + set: + extraServices: + - nameSuffix: "extra" + ports: + - port: 18181 + targetPort: 18181 + name: polaris-http + - port: 28181 + targetPort: 28181 + name: polaris-http2 + nodePort: 28181 + protocol: UDP + asserts: + - equal: + path: spec.ports + value: + - port: 18181 + targetPort: 18181 + protocol: TCP + name: polaris-http + - port: 28181 + targetPort: 28181 + name: polaris-http2 + nodePort: 28181 + protocol: UDP + + # spec.sessionAffinity + - it: should not set service session affinity by default + set: + extraServices: + - nameSuffix: "extra" + asserts: + - notExists: + path: spec.sessionAffinity + - it: should set service session affinity + set: + extraServices: + - nameSuffix: "extra" + sessionAffinity: ClientIP + asserts: + - equal: + path: spec.sessionAffinity + value: ClientIP + + # spec.clusterIP + - it: should not set service cluster IP by default + set: + extraServices: + - nameSuffix: "extra" + asserts: + - notExists: + path: spec.clusterIP + - it: should set service cluster IP + set: + extraServices: + - nameSuffix: "extra" + clusterIP: 1.2.3.4 + asserts: + - equal: + path: spec.clusterIP + value: 1.2.3.4 + + # spec.externalTrafficPolicy + - it: should not set service external traffic policy by default + set: + extraServices: + - nameSuffix: "extra" + asserts: + - notExists: + path: spec.externalTrafficPolicy + - it: should set service external traffic policy if LoadBalancer + set: + extraServices: + - nameSuffix: "extra" + externalTrafficPolicy: Local + type: LoadBalancer + asserts: + - equal: + path: spec.externalTrafficPolicy + value: Local + - it: should set service external traffic policy if NodePort + set: + extraServices: + - nameSuffix: "extra" + externalTrafficPolicy: Local + type: NodePort + asserts: + - equal: + path: spec.externalTrafficPolicy + value: Local + - it: should set service external traffic policy if ClusterIP + set: + extraServices: + - nameSuffix: "extra" + externalTrafficPolicy: Local + type: ClusterIP + asserts: + - notExists: + path: spec.externalTrafficPolicy + + # spec.internalTrafficPolicy + - it: should not set service internal traffic policy by default + set: + extraServices: + - nameSuffix: "extra" + asserts: + - notExists: + path: spec.internalTrafficPolicy + - it: should set service internal traffic policy + set: + extraServices: + - nameSuffix: "extra" + internalTrafficPolicy: Local + asserts: + - equal: + path: spec.internalTrafficPolicy + value: Local + + # spec.trafficDistribution + - it: should not set service traffic distribution by default + set: + extraServices: + - nameSuffix: "extra" + asserts: + - notExists: + path: spec.trafficDistribution + - it: should set service traffic distribution if Kubernetes version >= 1.31 + capabilities: + majorVersion: 1 + minorVersion: 31 + set: + extraServices: + - nameSuffix: "extra" + trafficDistribution: Local + asserts: + - equal: + path: spec.trafficDistribution + value: Local + - it: should not set service traffic distribution if Kubernetes version < 1.31 + capabilities: + majorVersion: 1 + minorVersion: 30 + set: + extraServices: + - nameSuffix: "extra" + trafficDistribution: Local + asserts: + - notExists: + path: spec.trafficDistribution + + - it: should define many extra services + set: + extraServices: + - nameSuffix: "extra1" + annotations: + foo: bar + - nameSuffix: "extra2" + annotations: + bar: baz + asserts: + - hasDocuments: + count: 2 + - equal: + path: metadata.name + value: polaris-release-extra1 + documentIndex: 0 + - equal: + path: metadata.name + value: polaris-release-extra2 + documentIndex: 1 + - equal: + path: metadata.annotations + value: + foo: bar + documentIndex: 0 + - equal: + path: metadata.annotations + value: + bar: baz + documentIndex: 1 Added: dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/service_mgmt_test.yaml ============================================================================== --- dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/service_mgmt_test.yaml (added) +++ dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/service_mgmt_test.yaml Tue Jun 24 00:39:22 2025 @@ -0,0 +1,254 @@ +# +# 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. +# + +chart: + version: 1.2.3 + appVersion: 4.5.6 + +release: + name: polaris-release + namespace: polaris-ns + +templates: + - service-mgmt.yaml + +tests: + + # metadata.name + - it: should set service name + asserts: + - equal: + path: metadata.name + value: polaris-release-mgmt + - it: should set service name with override + set: + nameOverride: polaris-override + asserts: + - equal: + path: metadata.name + value: polaris-release-polaris-override-mgmt + - it: should set service name with full override + set: + fullnameOverride: polaris-override + asserts: + - equal: + path: metadata.name + value: polaris-override-mgmt + + # metadata.namespace + - it: should set service namespace + asserts: + - equal: + path: metadata.namespace + value: polaris-ns + + # metadata.labels + - it: should set service default labels + asserts: + - isSubset: + path: metadata.labels + content: + app.kubernetes.io/name: polaris + app.kubernetes.io/instance: polaris-release + app.kubernetes.io/version: 4.5.6 + app.kubernetes.io/managed-by: Helm + helm.sh/chart: polaris-1.2.3 + + # metadata.annotations + - it: should not set service annotations by default + asserts: + - notExists: + path: metadata.annotations + - it: should set service annotations + set: + managementService.annotations: + foo: bar + asserts: + - isSubset: + path: metadata.annotations + content: + foo: bar + + # spec.type + - it: should set service default type + asserts: + - equal: + path: spec.type + value: ClusterIP + - it: should set service type + set: + managementService.type: NodePort + asserts: + - equal: + path: spec.type + value: NodePort + + # spec.selector + - it: should set service default selector + asserts: + - isSubset: + path: spec.selector + content: + app.kubernetes.io/name: polaris + app.kubernetes.io/instance: polaris-release + + # spec.ports + - it: should set service default ports + asserts: + - equal: + path: spec.ports + value: + - port: 8182 + protocol: TCP + name: polaris-mgmt + - it: should set service ports + set: + managementService: + ports: + - port: 18182 + targetPort: 18182 + name: polaris-mgmt + asserts: + - equal: + path: spec.ports + value: + - port: 18182 + targetPort: 18182 + protocol: TCP + name: polaris-mgmt + - it: should set many service ports + set: + managementService: + ports: + - port: 18182 + targetPort: 18182 + name: polaris-mgmt + - port: 28182 + targetPort: 28182 + name: polaris-mgmt2 + nodePort: 28182 + protocol: UDP + asserts: + - equal: + path: spec.ports + value: + - port: 18182 + targetPort: 18182 + protocol: TCP + name: polaris-mgmt + - port: 28182 + targetPort: 28182 + name: polaris-mgmt2 + nodePort: 28182 + protocol: UDP + + # spec.sessionAffinity + - it: should not set service session affinity by default + asserts: + - notExists: + path: spec.sessionAffinity + - it: should set service session affinity + set: + managementService.sessionAffinity: ClientIP + asserts: + - equal: + path: spec.sessionAffinity + value: ClientIP + + # spec.clusterIP + - it: should set service cluster IP to None (headless) by default + asserts: + - equal: + path: spec.clusterIP + value: None + - it: should set service cluster IP + set: + managementService.clusterIP: 1.2.3.4 + asserts: + - equal: + path: spec.clusterIP + value: 1.2.3.4 + + + # spec.externalTrafficPolicy + - it: should not set service external traffic policy by default + asserts: + - notExists: + path: spec.externalTrafficPolicy + - it: should set service external traffic policy if LoadBalancer + set: + managementService.externalTrafficPolicy: Local + managementService.type: LoadBalancer + asserts: + - equal: + path: spec.externalTrafficPolicy + value: Local + - it: should set service external traffic policy if NodePort + set: + managementService.externalTrafficPolicy: Local + managementService.type: NodePort + asserts: + - equal: + path: spec.externalTrafficPolicy + value: Local + - it: should set service external traffic policy if ClusterIP + set: + managementService.externalTrafficPolicy: Local + managementService.type: ClusterIP + asserts: + - notExists: + path: spec.externalTrafficPolicy + + # spec.internalTrafficPolicy + - it: should not set service internal traffic policy by default + asserts: + - notExists: + path: spec.internalTrafficPolicy + - it: should set service internal traffic policy + set: + managementService.internalTrafficPolicy: Local + asserts: + - equal: + path: spec.internalTrafficPolicy + value: Local + + # spec.trafficDistribution + - it: should not set service traffic distribution by default + asserts: + - notExists: + path: spec.trafficDistribution + - it: should set service traffic distribution if Kubernetes version >= 1.31 + capabilities: + majorVersion: 1 + minorVersion: 31 + set: + managementService.trafficDistribution: Local + asserts: + - equal: + path: spec.trafficDistribution + value: Local + - it: should not set service traffic distribution if Kubernetes version < 1.31 + capabilities: + majorVersion: 1 + minorVersion: 30 + set: + managementService.trafficDistribution: Local + asserts: + - notExists: + path: spec.trafficDistribution Added: dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/service_monitor_test.yaml ============================================================================== --- dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/service_monitor_test.yaml (added) +++ dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/service_monitor_test.yaml Tue Jun 24 00:39:22 2025 @@ -0,0 +1,73 @@ +# +# Copyright (C) 2024 Dremio +# +# Licensed 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. +# + +release: + name: polaris + namespace: polaris-ns + +capabilities: + apiVersions: + - monitoring.coreos.com/v1 + +templates: + - servicemonitor.yaml + +tests: + + - it: should create ServiceMonitor if enabled + set: + serviceMonitor: + enabled: true + asserts: + - containsDocument: + kind: ServiceMonitor + apiVersion: monitoring.coreos.com/v1 + name: polaris + namespace: polaris-ns + + - it: should not create ServiceMonitor if disabled + set: + serviceMonitor: + enabled: false + asserts: + - containsDocument: + kind: ServiceMonitor + apiVersion: monitoring.coreos.com/v1 + name: polaris + namespace: polaris-ns + not: true + + - it: should add metrics relabelings + set: + serviceMonitor: + enabled: true + metricRelabelings: + - source_labels: [ __meta_kubernetes_namespace ] + separator: ; + regex: (.*) + target_label: namespace + replacement: $1 + action: replace + asserts: + - equal: + path: spec.endpoints[ 0].metricRelabelings + value: + - source_labels: [ __meta_kubernetes_namespace ] + separator: ; + regex: (.*) + target_label: namespace + replacement: $1 + action: replace \ No newline at end of file Added: dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/service_test.yaml ============================================================================== --- dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/service_test.yaml (added) +++ dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/service_test.yaml Tue Jun 24 00:39:22 2025 @@ -0,0 +1,331 @@ +# +# 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. +# + +chart: + version: 1.2.3 + appVersion: 4.5.6 + +release: + name: polaris-release + namespace: polaris-ns + +templates: + - service.yaml + +tests: + # metadata.name + - it: should set service name + asserts: + - equal: + path: metadata.name + value: polaris-release + - it: should set service name with override + set: + nameOverride: polaris-override + asserts: + - equal: + path: metadata.name + value: polaris-release-polaris-override + - it: should set service name with full override + set: + fullnameOverride: polaris-override + asserts: + - equal: + path: metadata.name + value: polaris-override + + # metadata.namespace + - it: should set service namespace + asserts: + - equal: + path: metadata.namespace + value: polaris-ns + + # metadata.labels + - it: should set service default labels + asserts: + - isSubset: + path: metadata.labels + content: + app.kubernetes.io/name: polaris + app.kubernetes.io/instance: polaris-release + app.kubernetes.io/version: 4.5.6 + app.kubernetes.io/managed-by: Helm + helm.sh/chart: polaris-1.2.3 + + # metadata.annotations + - it: should not set service annotations by default + asserts: + - notExists: + path: metadata.annotations + - it: should set service annotations + set: + service.annotations: + foo: bar + asserts: + - isSubset: + path: metadata.annotations + content: + foo: bar + + # spec.type + - it: should set service default type + asserts: + - equal: + path: spec.type + value: ClusterIP + - it: should set service type + set: + service.type: NodePort + asserts: + - equal: + path: spec.type + value: NodePort + + # spec.selector + - it: should set service default selector + asserts: + - isSubset: + path: spec.selector + content: + app.kubernetes.io/name: polaris + app.kubernetes.io/instance: polaris-release + + # spec.ports + - it: should set service default ports + asserts: + - equal: + path: spec.ports + value: + - port: 8181 + protocol: TCP + name: polaris-http + - it: should set service ports + set: + service: + ports: + - port: 18181 + targetPort: 18181 + name: polaris-http + asserts: + - equal: + path: spec.ports + value: + - port: 18181 + targetPort: 18181 + protocol: TCP + name: polaris-http + - it: should set many service ports + set: + service: + ports: + - port: 18181 + targetPort: 18181 + name: polaris-http + - port: 28181 + targetPort: 28181 + name: polaris-http2 + protocol: UDP + asserts: + - equal: + path: spec.ports + value: + - port: 18181 + targetPort: 18181 + protocol: TCP + name: polaris-http + - port: 28181 + targetPort: 28181 + name: polaris-http2 + protocol: UDP + # node port + - it: should set nodeport only when service type is NodePort + set: + service: + type: NodePort + ports: + - port: 18181 + targetPort: 18181 + nodePort: 30081 + name: polaris-http + asserts: + - equal: + path: spec.type + value: NodePort + - equal: + path: spec.ports + value: + - port: 18181 + targetPort: 18181 + protocol: TCP + name: polaris-http + nodePort: 30081 + - it: should not set nodeport type is NodePort and nodePort value is empty + set: + service: + type: NodePort + ports: + - port: 18181 + targetPort: 18181 + name: polaris-http + asserts: + - equal: + path: spec.type + value: NodePort + - equal: + path: spec.ports + value: + - port: 18181 + targetPort: 18181 + protocol: TCP + name: polaris-http + + - it: should set node port only if service type is NodePort + set: + service: + type: NodePort + ports: + - port: 18181 + targetPort: 18181 + nodePort: 30081 + name: polaris-http + asserts: + - equal: + path: spec.type + value: NodePort + - equal: + path: spec.ports + value: + - port: 18181 + targetPort: 18181 + protocol: TCP + name: polaris-http + nodePort: 30081 + - it: should not set node port if service type is NodePort and nodePort is empty + set: + service: + type: NodePort + ports: + - port: 18181 + targetPort: 18181 + name: polaris-http + asserts: + - equal: + path: spec.type + value: NodePort + - equal: + path: spec.ports + value: + - port: 18181 + targetPort: 18181 + protocol: TCP + name: polaris-http + + # spec.sessionAffinity + - it: should not set service session affinity by default + asserts: + - notExists: + path: spec.sessionAffinity + - it: should set service session affinity + set: + service.sessionAffinity: ClientIP + asserts: + - equal: + path: spec.sessionAffinity + value: ClientIP + + # spec.clusterIP + - it: should not set service cluster IP by default + asserts: + - notExists: + path: spec.clusterIP + - it: should set service cluster IP + set: + service.clusterIP: 1.2.3.4 + asserts: + - equal: + path: spec.clusterIP + value: 1.2.3.4 + + # spec.externalTrafficPolicy + - it: should not set service external traffic policy by default + asserts: + - notExists: + path: spec.externalTrafficPolicy + - it: should set service external traffic policy if LoadBalancer + set: + service.externalTrafficPolicy: Local + service.type: LoadBalancer + asserts: + - equal: + path: spec.externalTrafficPolicy + value: Local + - it: should set service external traffic policy if NodePort + set: + service.externalTrafficPolicy: Local + service.type: NodePort + asserts: + - equal: + path: spec.externalTrafficPolicy + value: Local + - it: should set service external traffic policy if ClusterIP + set: + service.externalTrafficPolicy: Local + service.type: ClusterIP + asserts: + - notExists: + path: spec.externalTrafficPolicy + + # spec.internalTrafficPolicy + - it: should not set service internal traffic policy by default + asserts: + - notExists: + path: spec.internalTrafficPolicy + - it: should set service internal traffic policy + set: + service.internalTrafficPolicy: Local + asserts: + - equal: + path: spec.internalTrafficPolicy + value: Local + + # spec.trafficDistribution + - it: should not set service traffic distribution by default + asserts: + - notExists: + path: spec.trafficDistribution + - it: should set service traffic distribution if Kubernetes version >= 1.31 + capabilities: + majorVersion: 1 + minorVersion: 31 + set: + service.trafficDistribution: Local + asserts: + - equal: + path: spec.trafficDistribution + value: Local + - it: should not set service traffic distribution if Kubernetes version < 1.31 + capabilities: + majorVersion: 1 + minorVersion: 30 + set: + service.trafficDistribution: Local + asserts: + - notExists: + path: spec.trafficDistribution Added: dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/serviceaccount_test.yaml ============================================================================== --- dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/serviceaccount_test.yaml (added) +++ dev/incubator/polaris/apache-polaris-1.0.0-incubating/helm-chart/tests/serviceaccount_test.yaml Tue Jun 24 00:39:22 2025 @@ -0,0 +1,108 @@ +# +# 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. +# + +chart: + version: 1.2.3 + appVersion: 4.5.6 + +release: + name: polaris-release + namespace: polaris-ns + +templates: + - serviceaccount.yaml + +tests: + + # Kind + - it: should create service account by default + asserts: + - containsDocument: + kind: ServiceAccount + apiVersion: v1 + - it: should not create service account when disabled + set: + serviceAccount.create: false + asserts: + - containsDocument: + kind: ServiceAccount + apiVersion: v1 + not: true + + # metadata.name + - it: should set service account name + asserts: + - equal: + path: metadata.name + value: polaris-release + - it: should set service account name with override + set: + nameOverride: polaris-override + asserts: + - equal: + path: metadata.name + value: polaris-release-polaris-override + - it: should set service account name with full override + set: + fullnameOverride: polaris-override + asserts: + - equal: + path: metadata.name + value: polaris-override + - it: should set service account name with defined name + set: + serviceAccount.name: polaris-override + asserts: + - equal: + path: metadata.name + value: polaris-override + + # metadata.namespace + - it: should set service account namespace + asserts: + - equal: + path: metadata.namespace + value: polaris-ns + + # metadata.labels + - it: should set service account default labels + asserts: + - isSubset: + path: metadata.labels + content: + app.kubernetes.io/name: polaris + app.kubernetes.io/instance: polaris-release + app.kubernetes.io/version: 4.5.6 + app.kubernetes.io/managed-by: Helm + helm.sh/chart: polaris-1.2.3 + + # metadata.annotations + - it: should not set service account annotations by default + asserts: + - notExists: + path: metadata.annotations + - it: should set service account annotations + set: + serviceAccount.annotations: + foo: bar + asserts: + - isSubset: + path: metadata.annotations + content: + foo: bar