#!/usr/bin/env bash set -euo pipefail SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) KNOE_HOME_REPO=$(cd "$SCRIPT_DIR/../.." && pwd) SCRIPT_UNDER_TEST="$KNOE_HOME_REPO/etc/status_common_services.sh" TMP_DIR=$(mktemp -d) trap 'rm -rf "$TMP_DIR"' EXIT export TMP_DIR BIN_DIR="$TMP_DIR/bin" mkdir -p "$BIN_DIR" cat <<'K_EOF' >"$BIN_DIR/kubectl" #!/usr/bin/env bash set -euo pipefail _log_file="${TMP_DIR}/mock_calls.log" args="$*" echo "$args" >>"${_log_file}" if [[ "$args" == *"opentofu"* ]]; then echo "$args" >>"${TMP_DIR}/opentofu_calls.log" echo "Error from server (NotFound): opentofu removed" >&2 exit 1 fi if [[ "$args" == "config current-context" ]]; then echo "gke_plenary-truck-485623-p7_us-west3_knoe-dev-0" exit 0 fi if [[ "$args" == "config view --minify -o jsonpath={.clusters[0].cluster.server}" ]]; then echo "https://34.106.133.94" exit 0 fi if [[ "$args" == "-n test-ns get svc garage openbao" ]]; then cat <<'EOF' NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE garage ClusterIP 34.118.228.37 3900/TCP,3901/TCP,3903/TCP 30m openbao ClusterIP 34.118.231.12 8200/TCP 31m EOF exit 0 fi if [[ "$args" == "-n test-ns get svc knoe-svc-kong" ]]; then echo "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE" echo "knoe-svc-kong ClusterIP 34.118.226.103 8000/TCP 26m" exit 0 fi if [[ "$args" == "-n cert-manager get svc cert-manager cert-manager-webhook" ]]; then echo "NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE" echo "cert-manager ClusterIP 34.118.236.229 9402/TCP 30m" echo "cert-manager-webhook ClusterIP 34.118.232.148 443/TCP 30m" exit 0 fi if [[ "$args" == "-n test-ns get statefulset openbao" ]]; then echo "NAME READY AGE" echo "openbao 1/1 31m" exit 0 fi if [[ "$args" == "-n test-ns get statefulset garage" ]]; then echo "NAME READY AGE" echo "garage 1/1 30m" exit 0 fi if [[ "$args" == "-n test-ns get deploy knoe-svc-kong" ]]; then echo "NAME READY UP-TO-DATE AVAILABLE AGE" echo "knoe-svc-kong 1/1 1 1 27m" exit 0 fi if [[ "$args" == "-n cert-manager get deploy cert-manager cert-manager-cainjector cert-manager-webhook" ]]; then echo "NAME READY UP-TO-DATE AVAILABLE AGE" echo "cert-manager 1/1 1 1 31m" echo "cert-manager-cainjector 1/1 1 1 31m" echo "cert-manager-webhook 1/1 1 1 30m" exit 0 fi # check_resource queries if [[ "$args" == "-n test-ns get svc garage" || "$args" == "-n test-ns get svc openbao" || "$args" == "-n test-ns get svc knoe-svc-kong" ]]; then exit 0 fi if [[ "$args" == "-n cert-manager get svc cert-manager" || "$args" == "-n cert-manager get svc cert-manager-webhook" ]]; then exit 0 fi if [[ "$args" == "-n test-ns get statefulset openbao" || "$args" == "-n test-ns get statefulset garage" ]]; then exit 0 fi if [[ "$args" == "-n test-ns get deploy knoe-svc-kong" ]]; then exit 0 fi if [[ "$args" == "-n cert-manager get deploy cert-manager" || "$args" == "-n cert-manager get deploy cert-manager-cainjector" || "$args" == "-n cert-manager get deploy cert-manager-webhook" ]]; then exit 0 fi if [[ "$args" == "-n test-ns get pods --no-headers" ]]; then cat <<'EOF' garage-0 1/1 Running 0 30m openbao-0 1/1 Running 0 32m knoe-svc-kong-f685786f-rgtwl 1/1 Running 0 27m EOF exit 0 fi if [[ "$args" == "-n cert-manager get pods --no-headers" ]]; then cat <<'EOF' cert-manager-7b67f8d7d8-gsf2t 1/1 Running 0 31m cert-manager-cainjector-76f94d9655-blqd9 1/1 Running 0 31m cert-manager-webhook-7b86d8b889-l88kr 1/1 Running 0 31m EOF exit 0 fi exit 0 K_EOF chmod +x "$BIN_DIR/kubectl" CFG_DIR="$TMP_DIR/conf" mkdir -p "$CFG_DIR" cat <"$CFG_DIR/knoe.cfg" [User] NAMESPACE = test-ns SERVICE_NAMESPACE = test-ns KONG_NAMESPACE = test-ns CERT_MANAGER_NAMESPACE = cert-manager [Global] DEPLOYMENT_MODE = k8s C_EOF export PATH="$BIN_DIR:$PATH" set +e KONG_NAME=knoe-svc-kong bash "$SCRIPT_UNDER_TEST" -c "$CFG_DIR/knoe.cfg" --mode k8s -n test-ns >"$TMP_DIR/stdout" 2>"$TMP_DIR/stderr" RC=$? set -e if [[ $RC -ne 0 ]]; then echo "FAILURE: expected status_common_services.sh to succeed in k8s mode without OpenTofu" >&2 sed -n '1,240p' "$TMP_DIR/stdout" >&2 || true sed -n '1,240p' "$TMP_DIR/stderr" >&2 || true exit 1 fi if [[ -s "$TMP_DIR/opentofu_calls.log" ]]; then echo "FAILURE: expected no OpenTofu kubectl calls in k8s mode" >&2 sed -n '1,240p' "$TMP_DIR/opentofu_calls.log" >&2 || true sed -n '1,240p' "$TMP_DIR/mock_calls.log" >&2 || true exit 1 fi if ! grep -q "skipping OpenTofu service check" "$TMP_DIR/stdout"; then echo "FAILURE: expected informational OpenTofu skip message" >&2 sed -n '1,240p' "$TMP_DIR/stdout" >&2 || true exit 1 fi echo "SUCCESS"