Files
dbtool-cli-v1/scripts/qa/test-failure-path-evidence-sidecar.sh
Paperclip CTO d5f69462b0
Some checks failed
release-smoke / macos-13 / x86_64-apple-darwin (push) Has been cancelled
release-smoke / ubuntu-latest / x86_64-unknown-linux-gnu (push) Has been cancelled
release-smoke / windows-latest / x86_64-pc-windows-msvc (push) Has been cancelled
feat(usable): integrate current dbtool implementation snapshot
Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-02 08:26:18 +00:00

196 lines
4.4 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
root_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"
tmp_dir="$(mktemp -d)"
state_dir="$tmp_dir/state"
fake_bin_dir="$tmp_dir/bin"
output_dir="$tmp_dir/out"
docker_log="$tmp_dir/docker.log"
mkdir -p "$state_dir/container_fs" "$fake_bin_dir" "$output_dir"
cleanup() {
rm -rf "$tmp_dir"
}
trap cleanup EXIT
cat >"$tmp_dir/fake-dbtool" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
if [ "${1:-}" = "--version" ]; then
echo "fake-dbtool 0.1.0"
exit 0
fi
printf '{"status":"error","state":"error","error":{"kind":"authentication"}}\n'
exit 2
EOF
chmod +x "$tmp_dir/fake-dbtool"
cat >"$fake_bin_dir/docker" <<'EOF'
#!/usr/bin/env bash
set -euo pipefail
state_dir="${MOCK_DOCKER_STATE_DIR:?}"
container_fs="$state_dir/container_fs"
docker_log="${MOCK_DOCKER_LOG:?}"
cmd="${1:?}"
shift
printf '%s %s\n' "$cmd" "$*" >>"$docker_log"
copy_into_container() {
local src="$1"
local dest="$2"
mkdir -p "$(dirname "$dest")"
cp "$src" "$dest"
}
copy_from_container() {
local src="$1"
local dest="$2"
mkdir -p "$dest"
cp -R "$src"/. "$dest"/
}
case "$cmd" in
image)
[ "${1:-}" = "inspect" ] || exit 90
exit 0
;;
create)
echo "mock-sidecar-id"
exit 0
;;
start)
exit 0
;;
rm)
exit 0
;;
cp)
src="${1:?}"
dest="${2:?}"
if [[ "$src" == *:* ]]; then
container_src="${src#*:}"
container_src="${container_src%/.}"
copy_from_container "$container_fs$container_src" "$dest"
else
container_dest="${dest#*:}"
copy_into_container "$src" "$container_fs$container_dest"
fi
exit 0
;;
exec)
env_pairs=()
while [ "${1:-}" = "-e" ]; do
env_pairs+=("${2:?}")
shift 2
done
if [ "${1:-}" = "-i" ]; then
shift
shift
cat >/dev/null
exit 0
fi
target="${1:?}"
shift
case "${1:-}" in
mkdir)
shift
[ "${1:-}" = "-p" ] || exit 91
shift
for path in "$@"; do
mkdir -p "$container_fs$path"
done
exit 0
;;
chmod)
exit 0
;;
bash)
[ "${2:-}" = "-lc" ] || exit 92
for pair in "${env_pairs[@]}"; do
export "$pair"
done
out_dir="$container_fs/tmp/work/out"
mkdir -p "$out_dir"
cat >"$out_dir/PG-CONN-AUTH-001.md" <<EOM
### PG-CONN-AUTH-001
- Host: \`${QA_HOST_LABEL:-missing-host}\`
- Execution Path: \`${QA_EXECUTION_PATH:-missing-execution-path}\`
- Binary Path: \`${QA_BINARY_PATH_LABEL:-missing-binary-path}\`
- Binary Version: \`${QA_BINARY_VERSION:-missing-binary-version}\`
- Commit SHA: \`${QA_COMMIT_SHA:-missing-commit}\`
- Branch: \`${QA_BRANCH_NAME:-missing-branch}\`
- Result: \`pass\`
EOM
exit 0
;;
*)
echo "unsupported docker exec target command: $*" >&2
exit 93
;;
esac
;;
*)
echo "unsupported docker command: $cmd" >&2
exit 94
;;
esac
EOF
chmod +x "$fake_bin_dir/docker"
export PATH="$fake_bin_dir:$PATH"
export MOCK_DOCKER_STATE_DIR="$state_dir"
export MOCK_DOCKER_LOG="$docker_log"
export QA_HOST_LABEL="runner-host-01"
export QA_BINARY_PATH_LABEL="./target/release/dbtool"
export QA_BINARY_VERSION="dbtool 0.1.0"
"$root_dir/scripts/qa/run-failure-path-evidence-sidecar.sh" \
"$tmp_dir/fake-dbtool" \
"$output_dir" >/dev/null
evidence_file="$output_dir/PG-CONN-AUTH-001.md"
[ -f "$evidence_file" ] || {
echo "expected evidence file not copied back: $evidence_file" >&2
exit 95
}
grep -Fq 'exec -e PGPASSWORD=dbtoolroot -i dbtool-cli-v1-postgres-1 psql -v ON_ERROR_STOP=1 -U postgres -d dbtool_demo' "$docker_log" || {
echo "expected sidecar helper to reseed postgres with admin credentials" >&2
exit 98
}
expected_lines=(
'### PG-CONN-AUTH-001'
'- Host: `runner-host-01`'
'- Execution Path: `sidecar`'
'- Binary Path: `./target/release/dbtool`'
'- Binary Version: `dbtool 0.1.0`'
'- Commit SHA: `'
'- Branch: `'
'- Result: `pass`'
)
last_line=0
for expected in "${expected_lines[@]}"; do
current_line="$(grep -nF -- "$expected" "$evidence_file" | head -n 1 | cut -d: -f1)"
if [ -z "$current_line" ]; then
echo "missing expected sidecar markdown line: $expected" >&2
exit 96
fi
if [ "$current_line" -le "$last_line" ]; then
echo "sidecar markdown order regression near: $expected" >&2
exit 97
fi
last_line="$current_line"
done
echo "sidecar helper fixture passed"