Skip to content
Snippets Groups Projects
Verified Commit b2e701df authored by Sheogorath's avatar Sheogorath :european_castle:
Browse files

tests(mastodon): Add helm unit-tests for mastodon

parent 41f3547a
No related branches found
No related tags found
No related merge requests found
suite: shared pod attributes
templates:
- configmap-env.yaml
- deployment-sidekiq.yaml
- deployment-streaming.yaml
- deployment-web.yaml
- pvc-assets.yaml
- pvc-system.yaml
- secrets.yaml
tests:
- it: has the correct "envFrom" settings for secret and configmap
values:
- mocks/dev.yaml
- mocks/sidekiq.yaml
asserts:
- equal:
path: spec.template.spec.containers[0].envFrom[0].configMapRef.name
value: RELEASE-NAME-mastodon-env
template: deployment-sidekiq.yaml
- equal:
path: spec.template.spec.containers[0].envFrom[1].secretRef.name
value: RELEASE-NAME-mastodon
template: deployment-sidekiq.yaml
- equal:
path: spec.template.spec.containers[0].envFrom[0].configMapRef.name
value: RELEASE-NAME-mastodon-env
template: deployment-streaming.yaml
- equal:
path: spec.template.spec.containers[0].envFrom[1].secretRef.name
value: RELEASE-NAME-mastodon
template: deployment-streaming.yaml
- equal:
path: spec.template.spec.containers[0].envFrom[0].configMapRef.name
value: RELEASE-NAME-mastodon-env
template: deployment-web.yaml
- equal:
path: spec.template.spec.containers[0].envFrom[1].secretRef.name
value: RELEASE-NAME-mastodon
template: deployment-web.yaml
- equal:
path: metadata.name
value: RELEASE-NAME-mastodon-env
template: configmap-env.yaml
- equal:
path: metadata.name
value: RELEASE-NAME-mastodon
template: secrets.yaml
- it: has the correct volumes
values:
- mocks/dev.yaml
- mocks/sidekiq.yaml
asserts:
- equal:
path: spec.template.spec.volumes[0].name
value: assets
template: deployment-sidekiq.yaml
- equal:
path: spec.template.spec.volumes[0].persistentVolumeClaim.claimName
value: RELEASE-NAME-mastodon-assets
template: deployment-sidekiq.yaml
- equal:
path: spec.template.spec.volumes[1].name
value: system
template: deployment-sidekiq.yaml
- equal:
path: spec.template.spec.volumes[1].persistentVolumeClaim.claimName
value: RELEASE-NAME-mastodon-system
template: deployment-sidekiq.yaml
- equal:
path: spec.template.spec.containers[0].volumeMounts[0].name
value: assets
template: deployment-sidekiq.yaml
- equal:
path: spec.template.spec.containers[0].volumeMounts[0].mountPath
value: /opt/mastodon/public/assets
template: deployment-sidekiq.yaml
- equal:
path: spec.template.spec.containers[0].volumeMounts[1].name
value: system
template: deployment-sidekiq.yaml
- equal:
path: spec.template.spec.containers[0].volumeMounts[1].mountPath
value: /opt/mastodon/public/system
template: deployment-sidekiq.yaml
- equal:
path: spec.template.spec.volumes[0].name
value: assets
template: deployment-web.yaml
- equal:
path: spec.template.spec.volumes[0].persistentVolumeClaim.claimName
value: RELEASE-NAME-mastodon-assets
template: deployment-web.yaml
- equal:
path: spec.template.spec.volumes[1].name
value: system
template: deployment-web.yaml
- equal:
path: spec.template.spec.volumes[1].persistentVolumeClaim.claimName
value: RELEASE-NAME-mastodon-system
template: deployment-web.yaml
- equal:
path: spec.template.spec.containers[0].volumeMounts[0].name
value: assets
template: deployment-web.yaml
- equal:
path: spec.template.spec.containers[0].volumeMounts[0].mountPath
value: /opt/mastodon/public/assets
template: deployment-web.yaml
- equal:
path: spec.template.spec.containers[0].volumeMounts[1].name
value: system
template: deployment-web.yaml
- equal:
path: spec.template.spec.containers[0].volumeMounts[1].mountPath
value: /opt/mastodon/public/system
template: deployment-web.yaml
- equal:
path: metadata.name
value: RELEASE-NAME-mastodon-assets
template: pvc-assets.yaml
- equal:
path: metadata.name
value: RELEASE-NAME-mastodon-system
template: pvc-system.yaml
\ No newline at end of file
suite: sidekiq
templates:
- configmap-env.yaml
- deployment-sidekiq.yaml
- secrets.yaml
tests:
- it: should match basic snapshot
values:
- mocks/dev.yaml
chart:
version: 1.2.3
appVersion: 4.5.6
asserts:
- matchSnapshot: {}
- it: should create multiple deployments when multiple queues are defined
values:
- mocks/dev.yaml
set:
mastodon:
sidekiq:
workers:
- name: scheduler
concurrency: 25
replicas: 1
queues:
- scheduler
- name: push-pull
concurrency: 50
replicas: 2
queues:
- push,6
- pull
- ingress,4
- name: mailers
concurrency: 25
replicas: 2
queues:
- mailers
- name: default
concurrency: 25
replicas: 2
queues:
- default
asserts:
- hasDocuments:
count: 4
template: deployment-sidekiq.yaml
- it: should use strategy recreate if scheduler is part of queues
values:
- mocks/dev.yaml
- mocks/sidekiq.yaml
asserts:
- equal:
path: spec.strategy.type
value: Recreate
documentIndex: 0
template: deployment-sidekiq.yaml
- isNull:
path: spec.strategy
documentIndex: 1
template: deployment-sidekiq.yaml
- it: has the correct labels for sidekiq
values:
- mocks/dev.yaml
- mocks/sidekiq.yaml
asserts:
- equal:
path: spec.selector.matchLabels.app\.kubernetes\.io/component
value: sidekiq-scheduler
documentIndex: 0
template: deployment-sidekiq.yaml
- equal:
path: spec.selector.matchLabels.app\.kubernetes\.io/component
value: sidekiq-default
documentIndex: 1
template: deployment-sidekiq.yaml
- equal:
path: spec.selector.matchLabels.app\.kubernetes\.io/part-of
value: rails
template: deployment-sidekiq.yaml
suite: web
templates:
- configmap-env.yaml
- deployment-web.yaml
- ingress.yaml
- secrets.yaml
- service-web.yaml
tests:
- it: should match basic snapshot
values:
- mocks/dev.yaml
chart:
version: 1.2.3
appVersion: 4.5.6
capabilities:
apiVersions:
- networking.k8s.io/v1/Ingress
asserts:
- matchSnapshot: {}
- it: should provide mathing ports for Ingress, Service and Pod
values:
- mocks/dev.yaml
capabilities:
apiVersions:
- networking.k8s.io/v1/Ingress
asserts:
- equal:
path: spec.template.spec.containers[0].ports[0].name
value: http
template: deployment-web.yaml
- equal:
path: spec.ports[0].targetPort
value: http
template: service-web.yaml
- equal:
path: spec.template.spec.containers[0].ports[0].protocol
value: TCP
template: deployment-web.yaml
- equal:
path: spec.ports[0].protocol
value: TCP
template: service-web.yaml
- equal:
path: spec.ports[0].port
value: 3000
template: service-web.yaml
- equal:
path: spec.rules[0].http.paths[0].backend.service.port.number
value: 3000
template: ingress.yaml
- equal:
path: metadata.name
value: RELEASE-NAME-mastodon-web
template: service-web.yaml
- equal:
path: spec.rules[0].http.paths[0].backend.service.name
value: RELEASE-NAME-mastodon-web
template: ingress.yaml
suite: Basic Snapshot test
templates:
- configmap-env.yaml
- cronjob-media-remove.yaml
- deployment-sidekiq.yaml
- deployment-streaming.yaml
- deployment-web.yaml
- ingress.yaml
- job-assets-precompile.yaml
- job-chewy-upgrade.yaml
- job-create-admin.yaml
- job-db-migrate.yaml
- job-db-pre-migrate.yaml
- pvc-assets.yaml
- pvc-system.yaml
- secrets.yaml
- serviceaccount.yaml
- service-streaming.yaml
- service-web.yaml
tests:
- it: should match basic snapshot
values:
- mocks/dev.yaml
set:
mastodon:
createAdmin:
enabled: true
chart:
version: 1.2.3
appVersion: 4.5.6
asserts:
- matchSnapshot: {}
suite: Kubernetes recommendations
templates:
- configmap-env.yaml
- cronjob-media-remove.yaml
- deployment-sidekiq.yaml
- deployment-streaming.yaml
- deployment-web.yaml
- ingress.yaml
- job-assets-precompile.yaml
- job-chewy-upgrade.yaml
- job-create-admin.yaml
- job-db-migrate.yaml
- job-db-pre-migrate.yaml
- pvc-assets.yaml
- pvc-system.yaml
- secrets.yaml
- serviceaccount.yaml
- service-streaming.yaml
- service-web.yaml
tests:
- it: should have the kubernetes recommended labels
values:
- mocks/dev.yaml
set:
mastodon:
createAdmin:
enabled: true
release:
name: "test-suite"
chart:
version: 1.2.3
asserts:
- equal:
path: metadata.labels.[app.kubernetes.io/instance]
value: "test-suite"
- equal:
path: metadata.labels.[app.kubernetes.io/managed-by]
value: "Helm"
- equal:
path: metadata.labels.[app.kubernetes.io/name]
value: "mastodon"
should match basic snapshot:
1: |
apiVersion: v1
data:
DB_HOST: RELEASE-NAME-postgresql
DB_NAME: mastodon_production
DB_POOL: "25"
DB_PORT: "5432"
DB_USER: mastodon
DEFAULT_LOCALE: en
ES_ENABLED: "true"
ES_HOST: RELEASE-NAME-elasticsearch-master-hl
ES_PORT: "9200"
LOCAL_DOMAIN: mastodon.local
MALLOC_ARENA_MAX: "2"
NODE_ENV: production
PREPARED_STATEMENTS: "true"
RAILS_ENV: production
REDIS_HOST: RELEASE-NAME-redis-master
REDIS_PORT: "6379"
SMTP_AUTH_METHOD: plain
SMTP_CA_FILE: /etc/ssl/certs/ca-certificates.crt
SMTP_DELIVERY_METHOD: smtp
SMTP_ENABLE_STARTTLS: auto
SMTP_FROM_ADDRESS: notifications@example.com
SMTP_OPENSSL_VERIFY_MODE: peer
SMTP_PORT: "587"
SMTP_SERVER: smtp.mailgun.org
STREAMING_CLUSTER_NUM: "1"
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: mastodon
app.kubernetes.io/version: 4.5.6
helm.sh/chart: mastodon-1.2.3
name: RELEASE-NAME-mastodon-env
2: |
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/component: sidekiq-all-queues
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: mastodon
app.kubernetes.io/part-of: rails
app.kubernetes.io/version: 4.5.6
helm.sh/chart: mastodon-1.2.3
name: RELEASE-NAME-mastodon-sidekiq-all-queues
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: sidekiq-all-queues
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/name: mastodon
app.kubernetes.io/part-of: rails
strategy:
type: Recreate
template:
metadata:
annotations:
checksum/config-configmap: 6171320454845e8c5c867b5db63251ff95089e25c0200ca8f72d6bb9f6535726
checksum/config-secrets: c0d40e352ffcd2127af550b605bb0464640cd2960d007d940960d3d69d3c6aa4
rollme: "0"
labels:
app.kubernetes.io/component: sidekiq-all-queues
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/name: mastodon
app.kubernetes.io/part-of: rails
spec:
containers:
- command:
- bundle
- exec
- sidekiq
- -c
- "25"
- -q
- default,8
- -q
- push,6
- -q
- ingress,4
- -q
- mailers,2
- -q
- pull
- -q
- scheduler
env:
- name: DB_PASS
valueFrom:
secretKeyRef:
key: password
name: RELEASE-NAME-postgresql
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
key: redis-password
name: RELEASE-NAME-redis
envFrom:
- configMapRef:
name: RELEASE-NAME-mastodon-env
- secretRef:
name: RELEASE-NAME-mastodon
image: ghcr.io/mastodon/mastodon:4.5.6
imagePullPolicy: IfNotPresent
name: mastodon
resources: {}
securityContext: {}
volumeMounts:
- mountPath: /opt/mastodon/public/assets
name: assets
- mountPath: /opt/mastodon/public/system
name: system
securityContext:
fsGroup: 991
runAsGroup: 991
runAsUser: 991
serviceAccountName: RELEASE-NAME-mastodon
volumes:
- name: assets
persistentVolumeClaim:
claimName: RELEASE-NAME-mastodon-assets
- name: system
persistentVolumeClaim:
claimName: RELEASE-NAME-mastodon-system
3: |
apiVersion: v1
data:
OTP_SECRET: ZHVtbXktb3RwX3NlY3JldA==
SECRET_KEY_BASE: ZHVtbXktc2VjcmV0X2tleV9iYXNl
VAPID_PRIVATE_KEY: ZHVtbXktdmFwaWQtcHJpdmF0ZV9rZXk=
VAPID_PUBLIC_KEY: ZHVtbXktdmFwaWQtcHVibGljX2tleQ==
kind: Secret
metadata:
labels:
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: mastodon
app.kubernetes.io/version: 4.5.6
helm.sh/chart: mastodon-1.2.3
name: RELEASE-NAME-mastodon
type: Opaque
should match basic snapshot:
1: |
apiVersion: v1
data:
DB_HOST: RELEASE-NAME-postgresql
DB_NAME: mastodon_production
DB_POOL: "25"
DB_PORT: "5432"
DB_USER: mastodon
DEFAULT_LOCALE: en
ES_ENABLED: "true"
ES_HOST: RELEASE-NAME-elasticsearch-master-hl
ES_PORT: "9200"
LOCAL_DOMAIN: mastodon.local
MALLOC_ARENA_MAX: "2"
NODE_ENV: production
PREPARED_STATEMENTS: "true"
RAILS_ENV: production
REDIS_HOST: RELEASE-NAME-redis-master
REDIS_PORT: "6379"
SMTP_AUTH_METHOD: plain
SMTP_CA_FILE: /etc/ssl/certs/ca-certificates.crt
SMTP_DELIVERY_METHOD: smtp
SMTP_ENABLE_STARTTLS: auto
SMTP_FROM_ADDRESS: notifications@example.com
SMTP_OPENSSL_VERIFY_MODE: peer
SMTP_PORT: "587"
SMTP_SERVER: smtp.mailgun.org
STREAMING_CLUSTER_NUM: "1"
kind: ConfigMap
metadata:
labels:
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: mastodon
app.kubernetes.io/version: 4.5.6
helm.sh/chart: mastodon-1.2.3
name: RELEASE-NAME-mastodon-env
2: |
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: mastodon
app.kubernetes.io/version: 4.5.6
helm.sh/chart: mastodon-1.2.3
name: RELEASE-NAME-mastodon-web
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: web
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/name: mastodon
app.kubernetes.io/part-of: rails
template:
metadata:
annotations:
checksum/config-configmap: 6171320454845e8c5c867b5db63251ff95089e25c0200ca8f72d6bb9f6535726
checksum/config-secrets: c0d40e352ffcd2127af550b605bb0464640cd2960d007d940960d3d69d3c6aa4
rollme: "0"
labels:
app.kubernetes.io/component: web
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/name: mastodon
app.kubernetes.io/part-of: rails
spec:
containers:
- command:
- bundle
- exec
- puma
- -C
- config/puma.rb
env:
- name: DB_PASS
valueFrom:
secretKeyRef:
key: password
name: RELEASE-NAME-postgresql
- name: REDIS_PASSWORD
valueFrom:
secretKeyRef:
key: redis-password
name: RELEASE-NAME-redis
- name: PORT
value: "3000"
envFrom:
- configMapRef:
name: RELEASE-NAME-mastodon-env
- secretRef:
name: RELEASE-NAME-mastodon
image: ghcr.io/mastodon/mastodon:4.5.6
imagePullPolicy: IfNotPresent
livenessProbe:
tcpSocket:
port: http
name: mastodon-web
ports:
- containerPort: 3000
name: http
protocol: TCP
readinessProbe:
httpGet:
path: /health
port: http
startupProbe:
failureThreshold: 30
httpGet:
path: /health
port: http
periodSeconds: 5
volumeMounts:
- mountPath: /opt/mastodon/public/assets
name: assets
- mountPath: /opt/mastodon/public/system
name: system
securityContext:
fsGroup: 991
runAsGroup: 991
runAsUser: 991
serviceAccountName: RELEASE-NAME-mastodon
volumes:
- name: assets
persistentVolumeClaim:
claimName: RELEASE-NAME-mastodon-assets
- name: system
persistentVolumeClaim:
claimName: RELEASE-NAME-mastodon-system
3: |
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
labels:
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: mastodon
app.kubernetes.io/version: 4.5.6
helm.sh/chart: mastodon-1.2.3
name: RELEASE-NAME-mastodon
spec:
rules:
- host: mastodon.local
http:
paths:
- backend:
service:
name: RELEASE-NAME-mastodon-web
port:
number: 3000
path: /
pathType: Prefix
- backend:
service:
name: RELEASE-NAME-mastodon-streaming
port:
number: 4000
path: /api/v1/streaming
pathType: Prefix
tls:
- hosts:
- mastodon.local
secretName: mastodon-tls
4: |
apiVersion: v1
data:
OTP_SECRET: ZHVtbXktb3RwX3NlY3JldA==
SECRET_KEY_BASE: ZHVtbXktc2VjcmV0X2tleV9iYXNl
VAPID_PRIVATE_KEY: ZHVtbXktdmFwaWQtcHJpdmF0ZV9rZXk=
VAPID_PUBLIC_KEY: ZHVtbXktdmFwaWQtcHVibGljX2tleQ==
kind: Secret
metadata:
labels:
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: mastodon
app.kubernetes.io/version: 4.5.6
helm.sh/chart: mastodon-1.2.3
name: RELEASE-NAME-mastodon
type: Opaque
5: |
apiVersion: v1
kind: Service
metadata:
labels:
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/managed-by: Helm
app.kubernetes.io/name: mastodon
app.kubernetes.io/version: 4.5.6
helm.sh/chart: mastodon-1.2.3
name: RELEASE-NAME-mastodon-web
spec:
ports:
- name: http
port: 3000
protocol: TCP
targetPort: http
selector:
app.kubernetes.io/component: web
app.kubernetes.io/instance: RELEASE-NAME
app.kubernetes.io/name: mastodon
type: ClusterIP
This diff is collapsed.
# Chart values used for testing the Helm chart.
#
mastodon:
secrets:
secret_key_base: dummy-secret_key_base
otp_secret: dummy-otp_secret
vapid:
private_key: dummy-vapid-private_key
public_key: dummy-vapid-public_key
# ref: https://github.com/bitnami/charts/tree/main/bitnami/redis#parameters
redis:
replica:
replicaCount: 1
# ref: https://github.com/bitnami/charts/tree/main/bitnami/elasticsearch#parameters
elasticsearch:
master:
replicaCount: 1
data:
replicaCount: 1
coordinating:
replicaCount: 1
ingest:
replicaCount: 1
mastodon:
sidekiq:
workers:
- name: scheduler
concurrency: 25
replicas: 1
queues:
- scheduler
- name: default
concurrency: 25
replicas: 2
queues:
- default
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment