Files
chart/library/common-test/tests/container/volumeMounts_test.yaml
Stavros Kois 1e5e1b8ef8 NAS-123350 / 24.04 / Add support in common for nfs/smb pvc (#1422)
* Empty-Commit

* temp commit

* make sure that we use the pv

* typo

* add validation

* typo

* cleanup validation and add secret for smb

* revert

* add some tets

* add more tests

* add more tests

* more tests

* rename to share

* rename

* moar tests

* clean

* add some docs

* fix name uniqueness and tests

* make mountOptions validation a bit better

* update docs
2023-08-24 17:40:31 +03:00

787 lines
22 KiB
YAML

suite: container volumeMounts test
templates:
- common.yaml
tests:
- it: should pass with shared volume on multiple workloads and containers with targetSelectAll
set:
some_path: /some/path
image: &image
repository: nginx
tag: 1.19.0
pullPolicy: IfNotPresent
workload:
workload-name:
enabled: true
primary: true
type: Deployment
podSpec:
containers:
container-name1:
enabled: true
primary: true
imageSelector: image
probes: &probes
liveness:
enabled: false
readiness:
enabled: false
startup:
enabled: false
container-name2:
enabled: true
primary: false
imageSelector: image
probes: *probes
workload-name2:
enabled: true
primary: false
type: Job
podSpec:
restartPolicy: Never
containers:
container-name1:
enabled: true
primary: true
imageSelector: image
probes: *probes
container-name2:
enabled: true
primary: false
imageSelector: image
probes: *probes
persistence:
shared-vol:
enabled: true
type: emptyDir
mountPath: "{{ .Values.some_path }}"
targetSelectAll: true
nfs-vol-pvc:
enabled: true
type: nfs-pv-pvc
server: my-server
share: /my-path
mountPath: /nfs-mount
targetSelectAll: true
smb-vol-pvc:
enabled: true
type: smb-pv-pvc
server: my-server
share: my-share
username: my-user
password: my-pass
mountPath: /smb-mount
targetSelectAll: true
asserts:
- documentIndex: &deploymentDoc 5
isKind:
of: Deployment
- documentIndex: *deploymentDoc
isAPIVersion:
of: apps/v1
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: shared-vol
mountPath: /some/path
readOnly: false
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: nfs-vol-pvc
mountPath: /nfs-mount
readOnly: false
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: smb-vol-pvc
mountPath: /smb-mount
readOnly: false
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[1].volumeMounts
content:
name: shared-vol
mountPath: /some/path
readOnly: false
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[1].volumeMounts
content:
name: nfs-vol-pvc
mountPath: /nfs-mount
readOnly: false
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[1].volumeMounts
content:
name: smb-vol-pvc
mountPath: /smb-mount
readOnly: false
- documentIndex: &jobDoc 6
isKind:
of: Job
- documentIndex: *jobDoc
isAPIVersion:
of: batch/v1
- documentIndex: *jobDoc
contains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: shared-vol
mountPath: /some/path
readOnly: false
- documentIndex: *jobDoc
contains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: nfs-vol-pvc
mountPath: /nfs-mount
readOnly: false
- documentIndex: *jobDoc
contains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: smb-vol-pvc
mountPath: /smb-mount
readOnly: false
- documentIndex: *jobDoc
contains:
path: spec.template.spec.containers[1].volumeMounts
content:
name: shared-vol
mountPath: /some/path
readOnly: false
- documentIndex: *jobDoc
contains:
path: spec.template.spec.containers[1].volumeMounts
content:
name: nfs-vol-pvc
mountPath: /nfs-mount
readOnly: false
- documentIndex: *jobDoc
contains:
path: spec.template.spec.containers[1].volumeMounts
content:
name: smb-vol-pvc
mountPath: /smb-mount
readOnly: false
- it: should pass with volume on primary workload and container
set:
image: *image
workload:
workload-name:
enabled: true
primary: true
type: Deployment
podSpec:
containers:
container-name1:
enabled: true
primary: true
imageSelector: image
probes: *probes
container-name2:
enabled: true
primary: false
imageSelector: image
probes: *probes
workload-name2:
enabled: true
primary: false
type: Job
podSpec:
restartPolicy: Never
containers:
container-name1:
enabled: true
primary: true
imageSelector: image
probes: *probes
container-name2:
enabled: true
primary: false
imageSelector: image
probes: *probes
persistence:
some-vol:
enabled: true
type: emptyDir
mountPath: /some/path
readOnly: true
asserts:
- documentIndex: &deploymentDoc 0
isKind:
of: Deployment
- documentIndex: *deploymentDoc
isAPIVersion:
of: apps/v1
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: some-vol
mountPath: /some/path
readOnly: true
- documentIndex: *deploymentDoc
isNull:
path: spec.template.spec.containers[1].volumeMounts
- documentIndex: &jobDoc 1
isKind:
of: Job
- documentIndex: *jobDoc
isAPIVersion:
of: batch/v1
- documentIndex: *jobDoc
isNull:
path: spec.template.spec.containers[0].volumeMounts
- documentIndex: *jobDoc
isNull:
path: spec.template.spec.containers[1].volumeMounts
- it: should pass with volume with selected pod and container
set:
image: *image
workload:
workload-name:
enabled: true
primary: true
type: Deployment
podSpec:
containers:
container-name1:
enabled: true
primary: true
imageSelector: image
probes: *probes
container-name2:
enabled: true
primary: false
imageSelector: image
probes: *probes
workload-name2:
enabled: true
primary: false
type: Job
podSpec:
restartPolicy: Never
containers:
container-name1:
enabled: true
primary: true
imageSelector: image
probes: *probes
container-name2:
enabled: true
primary: false
imageSelector: image
probes: *probes
persistence:
some-vol:
enabled: true
type: emptyDir
mountPath: /some/path
readOnly: true
targetSelector:
workload-name:
container-name2: {}
workload-name2:
container-name1: {}
asserts:
- documentIndex: &deploymentDoc 0
isKind:
of: Deployment
- documentIndex: *deploymentDoc
isAPIVersion:
of: apps/v1
- documentIndex: *deploymentDoc
isNull:
path: spec.template.spec.containers[0].volumeMounts
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[1].volumeMounts
content:
name: some-vol
mountPath: /some/path
readOnly: true
- documentIndex: &jobDoc 1
isKind:
of: Job
- documentIndex: *jobDoc
isAPIVersion:
of: batch/v1
- documentIndex: *jobDoc
contains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: some-vol
mountPath: /some/path
readOnly: true
- documentIndex: *jobDoc
isNull:
path: spec.template.spec.containers[1].volumeMounts
- it: should pass with volume with selected pod and multiple containers
set:
image: *image
workload:
workload-name:
enabled: true
primary: true
type: Deployment
podSpec:
containers:
container-name1:
enabled: true
primary: true
imageSelector: image
probes: *probes
container-name2:
enabled: true
primary: false
imageSelector: image
probes: *probes
workload-name2:
enabled: true
primary: false
type: Job
podSpec:
restartPolicy: Never
containers:
container-name1:
enabled: true
primary: true
imageSelector: image
probes: *probes
container-name2:
enabled: true
primary: false
imageSelector: image
probes: *probes
persistence:
some-vol:
enabled: true
type: emptyDir
mountPath: /some/path
readOnly: true
targetSelector:
workload-name:
container-name1: {}
container-name2: {}
asserts:
- documentIndex: &deploymentDoc 0
isKind:
of: Deployment
- documentIndex: *deploymentDoc
isAPIVersion:
of: apps/v1
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: some-vol
mountPath: /some/path
readOnly: true
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[1].volumeMounts
content:
name: some-vol
mountPath: /some/path
readOnly: true
- documentIndex: &jobDoc 1
isKind:
of: Job
- documentIndex: *jobDoc
isAPIVersion:
of: batch/v1
- documentIndex: *jobDoc
isNull:
path: spec.template.spec.containers[0].volumeMounts
- documentIndex: *jobDoc
isNull:
path: spec.template.spec.containers[1].volumeMounts
- it: should pass with volume with selected pod and containers and specific values
set:
image: *image
workload:
workload-name:
enabled: true
primary: true
type: Deployment
podSpec:
containers:
container-name1:
enabled: true
primary: true
imageSelector: image
probes: *probes
container-name2:
enabled: true
primary: false
imageSelector: image
probes: *probes
workload-name2:
enabled: true
primary: false
type: Job
podSpec:
restartPolicy: Never
containers:
container-name1:
enabled: true
primary: true
imageSelector: image
probes: *probes
container-name2:
enabled: true
primary: false
imageSelector: image
probes: *probes
persistence:
some-vol:
enabled: true
type: emptyDir
mountPath: /some/path
readOnly: true
targetSelector:
workload-name:
container-name1:
mountPath: /some/other/path
readOnly: false
mountPropagation: None
subPath: /some/sub/path
container-name2: {}
asserts:
- documentIndex: &deploymentDoc 0
isKind:
of: Deployment
- documentIndex: *deploymentDoc
isAPIVersion:
of: apps/v1
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: some-vol
mountPath: /some/other/path
readOnly: false
mountPropagation: None
subPath: /some/sub/path
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[1].volumeMounts
content:
name: some-vol
mountPath: /some/path
readOnly: true
- documentIndex: &jobDoc 1
isKind:
of: Job
- documentIndex: *jobDoc
isAPIVersion:
of: batch/v1
- documentIndex: *jobDoc
isNull:
path: spec.template.spec.containers[0].volumeMounts
- documentIndex: *jobDoc
isNull:
path: spec.template.spec.containers[1].volumeMounts
- it: should pass with volume with selected pod and containers and specific values from tpl
set:
some_path: /some/other/path
some_propagation: None
some_sub_path: /some/sub/path
image: *image
workload:
workload-name:
enabled: true
primary: true
type: Deployment
podSpec:
containers:
container-name1:
enabled: true
primary: true
imageSelector: image
probes: *probes
container-name2:
enabled: true
primary: false
imageSelector: image
probes: *probes
persistence:
some-vol:
enabled: true
type: emptyDir
mountPath: /some/path
readOnly: true
targetSelector:
workload-name:
container-name1:
mountPath: "{{ .Values.some_path }}"
readOnly: false
mountPropagation: "{{ .Values.some_propagation }}"
subPath: "{{ .Values.some_sub_path }}"
container-name2: {}
asserts:
- documentIndex: &deploymentDoc 0
isKind:
of: Deployment
- documentIndex: *deploymentDoc
isAPIVersion:
of: apps/v1
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: some-vol
mountPath: /some/other/path
readOnly: false
mountPropagation: None
subPath: /some/sub/path
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[1].volumeMounts
content:
name: some-vol
mountPath: /some/path
readOnly: true
- it: should pass with cert mounted as volume with subPath
set:
image: *image
ixCertificates:
"1":
certificate: some_cert
key: some_key
scaleCertificate:
cert-name:
enabled: false
id: 1
workload:
workload-name:
enabled: true
primary: true
type: Deployment
podSpec:
containers:
container-name1:
enabled: true
primary: true
imageSelector: image
probes: *probes
persistence:
cert-vol:
enabled: true
type: secret
objectName: cert-name
readOnly: true
targetSelector:
workload-name:
container-name1:
mountPath: /some/path/cert.crt
readOnly: true
subPath: cert.crt
asserts:
- documentIndex: &deploymentDoc 0
isKind:
of: Deployment
- documentIndex: *deploymentDoc
isAPIVersion:
of: apps/v1
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: cert-vol
mountPath: /some/path/cert.crt
readOnly: true
subPath: cert.crt
- it: should pass with cert mounted as volume with subPath
set:
image: *image
ixCertificates:
"1":
certificate: some_cert
key: some_key
scaleCertificate:
cert-name:
enabled: false
id: 1
workload:
workload-name:
enabled: true
primary: true
type: Deployment
podSpec:
containers:
container-name1:
enabled: true
primary: true
imageSelector: image
probes: *probes
persistence:
cert-vol:
enabled: true
type: secret
objectName: cert-name
readOnly: true
items:
- key: tls.crt
path: cert.crt
targetSelector:
workload-name:
container-name1:
mountPath: /some/path
readOnly: true
asserts:
- documentIndex: &deploymentDoc 0
isKind:
of: Deployment
- documentIndex: *deploymentDoc
isAPIVersion:
of: apps/v1
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[0].volumeMounts
content:
name: cert-vol
mountPath: /some/path
readOnly: true
# Failures
- it: should fail with invalid mountPropagation
set:
image: *image
workload:
workload-name: &workload
enabled: true
primary: true
type: Deployment
podSpec:
containers:
container-name1:
enabled: true
primary: true
imageSelector: image
persistence:
vol-name:
enabled: true
type: emptyDir
mountPath: /some/path
mountPropagation: HostToContainer
targetSelector:
workload-name:
container-name1:
mountPropagation: invalid
asserts:
- failedTemplate:
errorMessage: Persistence - Expected <mountPropagation> to be one of [None, HostToContainer, Bidirectional], but got [invalid]
- it: should fail with non-boolean readOnly
set:
image: *image
workload:
workload-name: *workload
persistence:
vol-name:
enabled: true
type: emptyDir
mountPath: /some/path
targetSelector:
workload-name:
container-name1:
readOnly: invalid
asserts:
- failedTemplate:
errorMessage: Persistence - Expected <readOnly> to be [boolean], but got [string]
- it: should fail with empty readOnly
set:
image: *image
workload:
workload-name: *workload
persistence:
vol-name:
enabled: true
type: emptyDir
mountPath: /some/path
targetSelector:
workload-name:
container-name1:
readOnly:
asserts:
- failedTemplate:
errorMessage: Persistence - Expected <readOnly> to be [boolean], but got [invalid]
- it: should fail with empty mountPath
set:
image: *image
workload:
workload-name: *workload
persistence:
vol-name:
enabled: true
type: emptyDir
mountPath: ""
targetSelector:
workload-name:
container-name1: {}
asserts:
- failedTemplate:
errorMessage: Persistence - Expected non-empty <mountPath>
- it: should fail with mountPath not starting with /
set:
image: *image
workload:
workload-name: *workload
persistence:
vol-name:
enabled: true
type: emptyDir
targetSelector:
workload-name:
container-name1:
mountPath: some/path
asserts:
- failedTemplate:
errorMessage: Persistence - Expected <mountPath> to start with a forward slash [/]
- it: should fail with non-dict targetSelect.workloadName
set:
image: *image
workload:
workload-name: *workload
persistence:
vol-name:
enabled: true
type: emptyDir
targetSelector:
workload-name: string
asserts:
- failedTemplate:
errorMessage: Persistence - Expected <targetSelector.workload-name> to be a [dict], but got [string]
- it: should fail with empty targetSelect.workloadName
set:
image: *image
workload:
workload-name: *workload
persistence:
vol-name:
enabled: true
type: emptyDir
targetSelector:
workload-name: {}
asserts:
- failedTemplate:
errorMessage: Persistence - Expected non-empty <targetSelector.workload-name>