Files
jellyfin-helm/charts/jellyfin/tests/deployment_scheduling_test.yaml
T
Aleksei SviridkinandClaude 9c0cf4395d test(charts): add critical resource tests (ingress, serviceaccount, servicemonitor, security, scheduling)
Phase 2: Create comprehensive tests for critical resources that had no
coverage previously.

New test files:
- ingress_test.yaml: Full ingress coverage including className, annotations,
  hosts, paths, pathTypes, TLS, edge cases (70+ tests)
- serviceaccount_test.yaml: ServiceAccount creation, custom names,
  annotations (AWS IRSA, GCP Workload Identity, Azure), automount settings,
  integration with deployment (60+ tests)
- servicemonitor_test.yaml: Prometheus ServiceMonitor with dependencies,
  labels, endpoints, intervals, TLS, relabeling, metricRelabeling (70+ tests)
- deployment_security_test.yaml: Pod and container security contexts,
  capabilities, host privileges (hostNetwork/IPC/PID), runtime and priority
  classes, DLNA scenarios (30+ tests)
- deployment_scheduling_test.yaml: Node selector, tolerations, affinity
  (node/pod/podAnti), DNS policy and config, complete scenarios (30+ tests)

Critical validations added:
- ServiceMonitor requires both metrics.enabled AND serviceMonitor.enabled
- hostNetwork automatically sets dnsPolicy to ClusterFirstWithHostNet
- Ingress pathType validation (Prefix, Exact, ImplementationSpecific)
- ServiceAccount integration with AWS IRSA, GCP WI, Azure WI

Total: 5 new test files, 260+ new test cases

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Aleksei Sviridkin <f@lex.la>
2025-11-08 17:27:02 +03:00

204 lines
5.1 KiB
YAML

suite: test deployment scheduling
templates:
- deployment.yaml
tests:
# NODE SELECTOR
- it: should not have nodeSelector by default
asserts:
- isNull:
path: spec.template.spec.nodeSelector
- it: should set single nodeSelector
set:
nodeSelector:
disktype: ssd
asserts:
- equal:
path: spec.template.spec.nodeSelector.disktype
value: ssd
- it: should set multiple nodeSelectors
set:
nodeSelector:
disktype: ssd
zone: us-west1-a
instance-type: n1-standard-4
asserts:
- equal:
path: spec.template.spec.nodeSelector.disktype
value: ssd
- equal:
path: spec.template.spec.nodeSelector.zone
value: us-west1-a
# TOLERATIONS
- it: should not have tolerations by default
asserts:
- isNull:
path: spec.template.spec.tolerations
- it: should set toleration with Equal operator
set:
tolerations:
- key: key1
operator: Equal
value: value1
effect: NoSchedule
asserts:
- lengthEqual:
path: spec.template.spec.tolerations
count: 1
- equal:
path: spec.template.spec.tolerations[0].key
value: key1
- equal:
path: spec.template.spec.tolerations[0].operator
value: Equal
- it: should set toleration with Exists operator
set:
tolerations:
- key: special
operator: Exists
effect: NoExecute
asserts:
- equal:
path: spec.template.spec.tolerations[0].operator
value: Exists
- it: should support multiple tolerations
set:
tolerations:
- key: key1
operator: Equal
value: value1
effect: NoSchedule
- key: key2
operator: Exists
effect: NoExecute
- key: key3
operator: Equal
value: value3
effect: PreferNoSchedule
asserts:
- lengthEqual:
path: spec.template.spec.tolerations
count: 3
# AFFINITY
- it: should not have affinity by default
asserts:
- isNull:
path: spec.template.spec.affinity
- it: should set nodeAffinity
set:
affinity:
nodeAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
nodeSelectorTerms:
- matchExpressions:
- key: disktype
operator: In
values: [ssd]
asserts:
- isNotNull:
path: spec.template.spec.affinity.nodeAffinity
- it: should set podAffinity
set:
affinity:
podAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
app: cache
topologyKey: kubernetes.io/hostname
asserts:
- isNotNull:
path: spec.template.spec.affinity.podAffinity
- it: should set podAntiAffinity
set:
affinity:
podAntiAffinity:
preferredDuringSchedulingIgnoredDuringExecution:
- weight: 100
podAffinityTerm:
labelSelector:
matchLabels:
app: jellyfin
topologyKey: kubernetes.io/hostname
asserts:
- isNotNull:
path: spec.template.spec.affinity.podAntiAffinity
# DNS CONFIGURATION
- it: should use ClusterFirst dnsPolicy by default
asserts:
- equal:
path: spec.template.spec.dnsPolicy
value: ClusterFirst
- it: should set custom dnsPolicy
set:
dnsPolicy: None
asserts:
- equal:
path: spec.template.spec.dnsPolicy
value: None
- it: should not have dnsConfig by default
asserts:
- isNull:
path: spec.template.spec.dnsConfig
- it: should set dnsConfig when specified
set:
dnsConfig:
nameservers: [1.1.1.1, 8.8.8.8]
searches: [example.com]
options:
- name: ndots
value: "2"
asserts:
- contains:
path: spec.template.spec.dnsConfig.nameservers
content: 1.1.1.1
- contains:
path: spec.template.spec.dnsConfig.searches
content: example.com
# COMPLETE SCENARIOS
- it: should combine nodeSelector, tolerations, and affinity
set:
nodeSelector:
disktype: ssd
tolerations:
- key: dedicated
operator: Equal
value: jellyfin
effect: NoSchedule
affinity:
podAntiAffinity:
requiredDuringSchedulingIgnoredDuringExecution:
- labelSelector:
matchLabels:
app.kubernetes.io/name: jellyfin
topologyKey: kubernetes.io/hostname
asserts:
- isNotNull:
path: spec.template.spec.nodeSelector
- lengthEqual:
path: spec.template.spec.tolerations
count: 1
- isNotNull:
path: spec.template.spec.affinity.podAntiAffinity
# REGRESSION
- it: should maintain ClusterFirst dnsPolicy when hostNetwork not enabled
asserts:
- equal:
path: spec.template.spec.dnsPolicy
value: ClusterFirst