--- # yaml-language-server: $schema=https://raw.githubusercontent.com/helm-unittest/helm-unittest/main/schema/helm-testsuite.json suite: serviceMonitor values templates: - common.yaml values: - ../_values/controllers_main_default_container.yaml tests: - it: a serviceMonitor is not created by default asserts: - not: true containsDocument: kind: ServiceMonitor apiVersion: monitoring.coreos.com/v1 name: RELEASE-NAME - it: a serviceMonitor is not created when disabled set: serviceMonitor: main: enabled: false serviceName: "{{ .Release.Name }}" asserts: - not: true containsDocument: kind: ServiceMonitor apiVersion: monitoring.coreos.com/v1 name: RELEASE-NAME - it: a serviceMonitor can be configured set: serviceMonitor: main: labels: test.label: testvalue serviceName: "{{ .Release.Name }}" endpoints: - port: http scheme: http path: /metrics interval: 1m scrapeTimeout: 10s documentSelector: &ServiceMonitorSelector path: $[?(@.kind == "ServiceMonitor")].metadata.name value: RELEASE-NAME asserts: - equal: path: spec.namespaceSelector value: matchNames: - NAMESPACE - equal: path: spec.jobLabel value: RELEASE-NAME - equal: path: spec.selector.matchLabels value: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/name: RELEASE-NAME app.kubernetes.io/service: RELEASE-NAME - equal: path: spec.endpoints value: - port: http scheme: http path: /metrics interval: 1m scrapeTimeout: 10s - equal: path: metadata.labels value: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/managed-by: Helm app.kubernetes.io/name: RELEASE-NAME helm.sh/chart: common-test-1.0.0 test.label: testvalue - it: a serviceMonitor can be created with a nameOverride set: serviceMonitor: main: nameOverride: test serviceName: "{{ .Release.Name }}" endpoints: - port: http scheme: http path: /metrics interval: 1m scrapeTimeout: 10s documentSelector: path: $[?(@.kind == "ServiceMonitor")].metadata.name value: RELEASE-NAME-test asserts: - equal: path: spec.selector.matchLabels value: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/name: RELEASE-NAME app.kubernetes.io/service: RELEASE-NAME - it: a templated service can be configured set: serviceMonitor: main: serviceName: "{{ .Release.Name }}" endpoints: - port: http scheme: http path: /metrics interval: 1m scrapeTimeout: 10s documentSelector: *ServiceMonitorSelector asserts: - equal: path: spec.selector.matchLabels value: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/name: RELEASE-NAME app.kubernetes.io/service: RELEASE-NAME - it: a custom selector can be configured set: serviceMonitor: main: selector: matchExpressions: - {key: k8s-app, operator: Exists} endpoints: - port: http scheme: http path: /metrics interval: 1m scrapeTimeout: 10s documentSelector: *ServiceMonitorSelector asserts: - equal: path: spec.selector value: matchExpressions: - key: k8s-app operator: Exists - it: targetLabels can be configured set: serviceMonitor: main: enabled: true serviceName: "{{ .Release.Name }}" endpoints: - port: http scheme: http path: /metrics interval: 1m scrapeTimeout: 10s targetLabels: - testlabel1 - testlabel2 documentSelector: *ServiceMonitorSelector asserts: - equal: path: spec.selector.matchLabels value: app.kubernetes.io/instance: RELEASE-NAME app.kubernetes.io/name: RELEASE-NAME app.kubernetes.io/service: RELEASE-NAME - equal: path: spec.endpoints value: - port: http scheme: http path: /metrics interval: 1m scrapeTimeout: 10s - equal: path: spec.targetLabels value: - testlabel1 - testlabel2 - it: a serviceMonitor can be configured with templated endpoints set: serviceMonitor: main: labels: test.label: testvalue serviceName: "{{ .Release.Name }}" endpoints: - port: http scheme: http path: /metrics interval: 1m scrapeTimeout: 10s basicAuth: username: name: "{{.Release.Name}}-secret" key: USERNAME password: name: "{{.Release.Name}}-secret" key: PASSWORD documentSelector: &ServiceMonitorSelector path: $[?(@.kind == "ServiceMonitor")].metadata.name value: RELEASE-NAME asserts: - equal: path: spec.endpoints value: - port: http scheme: http path: /metrics interval: 1m scrapeTimeout: 10s basicAuth: username: name: RELEASE-NAME-secret key: USERNAME password: name: RELEASE-NAME-secret key: PASSWORD