#!/usr/bin/env bats load test_helper TEST_APP="rdmtestapp" setup_local_tls() { TLS=$BATS_TMPDIR/tls mkdir -p $TLS tar xf $BATS_TEST_DIRNAME/server_ssl.tar -C $TLS sudo chown -R dokku:dokku $TLS } teardown_local_tls() { TLS=$BATS_TMPDIR/tls rm -R $TLS } setup() { uninstall_k3s || true global_setup dokku nginx:stop export KUBECONFIG="/etc/rancher/k3s/k3s.yaml" setup_local_tls } teardown() { global_teardown dokku nginx:start uninstall_k3s || true teardown_local_tls } @test "(scheduler-k3s:certs) deploy uses imported certificate when present" { if [[ -z "$DOCKERHUB_USERNAME" ]] || [[ -z "$DOCKERHUB_TOKEN" ]]; then skip "skipping due to missing docker.io credentials DOCKERHUB_USERNAME:DOCKERHUB_TOKEN" fi INGRESS_CLASS=nginx install_k3s run /bin/bash -c "dokku apps:create $TEST_APP" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku domains:set $TEST_APP $TEST_APP.dokku.me" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku certs:add $TEST_APP $BATS_TMPDIR/tls/server.crt $BATS_TMPDIR/tls/server.key" echo "output: $output" echo "status: $status" assert_success run deploy_app python "dokku@$DOKKU_DOMAIN:$TEST_APP" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "sleep 30" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "kubectl get ingress ${TEST_APP}-web-${TEST_APP}-dokku-me -n default -o jsonpath='{.spec.tls[0].secretName}'" echo "output: $output" echo "status: $status" assert_success assert_output "tls-$TEST_APP" } @test "(scheduler-k3s:certs) deploy falls back to letsencrypt when no imported cert" { if [[ -z "$DOCKERHUB_USERNAME" ]] || [[ -z "$DOCKERHUB_TOKEN" ]]; then skip "skipping due to missing docker.io credentials DOCKERHUB_USERNAME:DOCKERHUB_TOKEN" fi INGRESS_CLASS=nginx install_k3s run /bin/bash -c "dokku scheduler-k3s:set --global letsencrypt-email-stag test@dokku.me" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku scheduler-k3s:set --global letsencrypt-server staging" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku apps:create $TEST_APP" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku domains:set $TEST_APP $TEST_APP.dokku.me" echo "output: $output" echo "status: $status" assert_success run deploy_app python "dokku@$DOKKU_DOMAIN:$TEST_APP" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "sleep 30" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "kubectl get ingress ${TEST_APP}-web-${TEST_APP}-dokku-me -n default -o jsonpath='{.spec.tls[0].secretName}'" echo "output: $output" echo "status: $status" assert_success assert_output "tls-${TEST_APP}-web" } @test "(scheduler-k3s:certs) no TLS secret created for non-k3s scheduler app" { if [[ -z "$DOCKERHUB_USERNAME" ]] || [[ -z "$DOCKERHUB_TOKEN" ]]; then skip "skipping due to missing docker.io credentials DOCKERHUB_USERNAME:DOCKERHUB_TOKEN" fi INGRESS_CLASS=nginx install_k3s run /bin/bash -c "dokku apps:create $TEST_APP" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku scheduler:set $TEST_APP selected docker-local" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "dokku certs:add $TEST_APP $BATS_TMPDIR/tls/server.crt $BATS_TMPDIR/tls/server.key" echo "output: $output" echo "status: $status" assert_success run /bin/bash -c "kubectl get secret tls-$TEST_APP -n default 2>&1" echo "output: $output" echo "status: $status" assert_failure }