Files
chart/library/common-test/tests/container/volumeMounts_test.yaml
Stavros Kois 5b1abdd839 NAS-118930 / 23.10 / Improve/Refactor Common Library (#917)
* fix

* fix

* some more

* somefixs

* whops

* initial structure

* finish up configmap

* secret class

* runtest secret

* move files arround

* ignore

* make clear on call template that need root context

* imagePullSecret (minus targetSelector)

* move out of the way

* clean up comment

* deployment basic spec

* daemonset basic spec

* statefulset spec

* split file

* docs

* update values

* job spec

* job docs

* cronJob basic spec

* job in cron test

* add common version

* podsepc

* whoopsis

* selectorlabels and pod metadata

* job and cron pod metadata

* update docs

* consistent order

* get ready for pod

* first targetSelector

* remove todo

* update docs

* add hostnet and enableservicelinks

* update selector logic

* update docs

* add tests for restartpolicy

* schedulerName

* priorityclassname

* hostname

* termperiodsec

* nodeselector

* add fail case

* host aliases

* dns policy

* dns config

* tolerations

* serviceaccoutn class, spawner, saname selector

* add pod todo

* update some tests

* add runtimeclassname

* controllers -> workload and plurar to singular

* require at least 1 primary on enabled SAs

* fix script

* remove wrong comment

* update naming scheme

* update rbac values ref

* rbac docs

* rbac's

* append short name, for future use

* update comments

* initial service wireframe

* shorten line

* simplify labels and update tests

* service selectors

* simplify error messages

* finish clusterIP type

* loadbalancer

* noedport

* externalname

* external ip

* update service

* fix highlighting

* session affinity

* add comment

* update comments

* service ports

* fix indentation

* externalname can have no ports

* fixup externalIP

* add pvc class and spawner and tests

* add nfs and emptyDir vols

* example

* extend docs a bit

* not create pvc if existing claim is set

* helm... you are dumb really. how this fixes an unrelated test

* add configmap

* add secret vol

* add pvc vol

* add hostpath

* finish volumes

* initial podsec

* podsec context with some todo's to check

* automatic sysctls

* remove todo

* update doc struct

* split docs

* split service docs

* initial container plumbing

* fix tests

* fix test

* rename to class

* command and args

* termination

* add lifecycle

* int value from tpl

* another case

* fix service protocol tpl

* update readme

* ports

* update todo

* cleanup values a bit

* only add sysctl when port is bellow 1024

* whops, thats a different range

* update avlue

* move some old docs to the "to be deleted" dir

* externalinteface validation

* update an error message and apply externalinterface annotations to workloads

* external interfaces

* TZ - TIMEZONE

* update rdoc

* reduce code duple

* device vol type

* initial certificate plumbing

* update comments

* finish secret creation of certificate

* cert dosc

* volumeMounts

* scale certs

* doc

* add tests for volMounts

* values updates

* update todo

* add test case

* remove some todo

* update todos

* vct

* remove tdoo

* restore default

* rename function

* make selectorlabels a bit better

* trim

* some cleanup

* update some ci values

* update ci

* rollingup defaults

* rename dir

* fix nil pointers

* check the same strategy var

* whops

* fix tests

* typo

* not a good day for copy paste

* move check

* move another check

* fix some tests for upcoming probes

* one mroe

* split docs

* add default probes for `main` and docs

* add probes and some ci testruns

* whops

* fix an edge case

* add an error for edge case

* runtests

* runtest updaets

* update

* check if podvalues exist first

* force types

* force only one of the 2

* quote labels and annotaions values

* job/cron have auto gen selectors

* remove false test

* fix maxsureg

* fix end

* different fix

* fix some tests

* fix rollUp

* try to fix 3.9.4 helm

* move file to helpers

* use capital types in probes and lifecycle

* Revert "use capital types in probes and lifecycle"

This reverts commit 380ebd5f1f.

* typo

* use lowercase for protocol everywhere

* rbac runtest

* prune old

* add resources

* add resources

* fix rbc

* fix sa naming in pod

* fix test

* 44 suppl group on gpu

* remove todo

* extract function in another file

* whops

* add securityContext implementation

* add fail cases

* add rest of the tests

* remove todo

* envFrom

* minify

* env list

* add env

* add envdupe check tests

* add fixed envs

* replace containers with callers

* add callers

* add initContainer

* add init run test

* reset default test val

* add  name tests

* add some more tests

* rename

* validate workload type only if enabled

* lint fix for 3.9.4

* add tpl on init enabled

* whops

* fix init

* echo

* echo

* args...

* list

* comment out disabled persistences

* fix some typos and improve resources `requests` requirement

* improve docs a bit

* require name,description,version,type

* add some wording regarding what Helm Template column means

* add title as requirement

* remove scheduler

* remove priority class name

* remove nfs + externalIP

* remove LB

* remove STS & VCT

* fix a test

* remove nodeselector

* remove DS

* remove pvc

* remove todo

* conditionally print the type, as we might want to use the template to select all objects inthe chart

* add some docs

* docs for notes

* add `tls.` in the certificate secret, according to k8s docs

* add some basic docs around the rest of the options

* clean values.yaml

* catch an edge case

* remove externalName

* set autmountSA on SA to false

* add note about the automountSA
2023-02-20 15:23:33 +02:00

710 lines
20 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:
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
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: shared-vol
mountPath: /some/path
readOnly: false
- documentIndex: *deploymentDoc
contains:
path: spec.template.spec.containers[1].volumeMounts
content:
name: shared-vol
mountPath: /some/path
readOnly: false
- documentIndex: &jobDoc 1
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[1].volumeMounts
content:
name: shared-vol
mountPath: /some/path
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:
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:
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:
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:
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>