#!/usr/bin/env bats # The etcd chart pins the Helm release name to 'etcd' via # packages/extra/etcd/templates/check-release-name.yaml, so every test # must apply its Etcd with metadata.name: etcd. setup() clears any # prior run so tests remain independent despite the singleton name. setup() { kubectl -n tenant-test delete etcd.apps.cozystack.io --all --ignore-not-found --timeout=2m # HelmRelease teardown is async relative to the CR deletion above; wait for # downstream resources so the next test starts from a clean state. kubectl -n tenant-test wait hr/etcd --for=delete --timeout=2m --ignore-not-found kubectl -n tenant-test wait secret/etcd-s3-creds --for=delete --timeout=1m --ignore-not-found kubectl -n tenant-test wait etcdbackupschedule.etcd.aenix.io/etcd --for=delete --timeout=1m --ignore-not-found } dump_diagnostics() { echo "# --- diagnostics ---" >&3 kubectl -n tenant-test get etcdcluster,etcdbackupschedule,cronjob -o wide >&3 2>&1 || true kubectl -n tenant-test describe etcdbackupschedule etcd >&3 2>&1 || true kubectl -n cozy-etcd-operator logs -l app.kubernetes.io/name=etcd-operator --tail=100 >&3 2>&1 || true } # Wait until the etcd HelmRelease is reconciled by Flux and its # condition=ready is set. kubectl wait fails immediately on a missing # resource, so poll for existence first. wait_etcd_hr_ready() { timeout 60 sh -ec 'until kubectl -n tenant-test get hr/etcd >/dev/null 2>&1; do sleep 2; done' kubectl -n tenant-test wait hr/etcd --timeout=60s --for=condition=ready } @test "Create Etcd" { kubectl apply -f- </dev/null ! kubectl -n tenant-test get secret etcd-s3-creds 2>/dev/null } @test "Create Etcd with backup schedule" { kubectl apply -f- </dev/null)\" != '' ]; do sleep 5; done" || { dump_diagnostics; false; } }