|
| 1 | +#!/bin/bash |
| 2 | +# Smoke-test high-value baudbot CLI flows in droplet CI. |
| 3 | +# Intended to run as root after `baudbot install` completes. |
| 4 | + |
| 5 | +set -euo pipefail |
| 6 | + |
| 7 | +TOTAL=0 |
| 8 | +PASSED=0 |
| 9 | +FAILED=0 |
| 10 | + |
| 11 | +run_expect() { |
| 12 | + local name="$1" |
| 13 | + local timeout_seconds="$2" |
| 14 | + local expected_csv="$3" |
| 15 | + shift 3 |
| 16 | + |
| 17 | + TOTAL=$((TOTAL + 1)) |
| 18 | + printf " %-44s " "$name" |
| 19 | + |
| 20 | + local out rc=0 |
| 21 | + out="$(mktemp /tmp/baudbot-smoke.XXXXXX)" |
| 22 | + |
| 23 | + if [ "$timeout_seconds" -gt 0 ]; then |
| 24 | + timeout "$timeout_seconds" "$@" >"$out" 2>&1 || rc=$? |
| 25 | + else |
| 26 | + "$@" >"$out" 2>&1 || rc=$? |
| 27 | + fi |
| 28 | + |
| 29 | + local expected_ok=1 expected |
| 30 | + IFS=',' read -r -a expected <<< "$expected_csv" |
| 31 | + expected_ok=0 |
| 32 | + for code in "${expected[@]}"; do |
| 33 | + if [ "$rc" -eq "$code" ]; then |
| 34 | + expected_ok=1 |
| 35 | + break |
| 36 | + fi |
| 37 | + done |
| 38 | + |
| 39 | + if [ "$expected_ok" -eq 1 ]; then |
| 40 | + echo "✓" |
| 41 | + PASSED=$((PASSED + 1)) |
| 42 | + else |
| 43 | + echo "✗ FAILED (exit $rc, expected $expected_csv)" |
| 44 | + tail -40 "$out" | sed 's/^/ /' |
| 45 | + FAILED=$((FAILED + 1)) |
| 46 | + fi |
| 47 | + |
| 48 | + rm -f "$out" |
| 49 | +} |
| 50 | + |
| 51 | +echo "=== CLI smoke checks ===" |
| 52 | + |
| 53 | +# Basic dispatcher/help paths. |
| 54 | +run_expect "baudbot --version" 15 0 baudbot --version |
| 55 | +run_expect "baudbot --help" 15 0 baudbot --help |
| 56 | +run_expect "baudbot env --help" 15 0 baudbot env --help |
| 57 | + |
| 58 | +# Always-on PR CI flows. |
| 59 | +run_expect "sudo baudbot start" 60 0 sudo baudbot start |
| 60 | +run_expect "sudo baudbot status" 30 0 sudo baudbot status |
| 61 | +run_expect "sudo baudbot sessions" 30 0 sudo baudbot sessions |
| 62 | +run_expect "sudo baudbot logs (timeout expected)" 8 124 sudo baudbot logs |
| 63 | +run_expect "sudo baudbot doctor" 60 0 sudo baudbot doctor |
| 64 | +# audit can legitimately return 1 (warn) or 2 (critical) while still proving command execution. |
| 65 | +run_expect "sudo baudbot audit --deep" 90 0,1,2 sudo baudbot audit --deep |
| 66 | +run_expect "sudo baudbot restart" 60 0 sudo baudbot restart |
| 67 | +run_expect "sudo baudbot stop" 60 0 sudo baudbot stop |
| 68 | +run_expect "sudo baudbot start (again)" 60 0 sudo baudbot start |
| 69 | +run_expect "sudo baudbot uninstall --dry-run" 60 0 sudo baudbot uninstall --dry-run |
| 70 | + |
| 71 | +echo "" |
| 72 | +echo "=== CLI smoke checks: $PASSED/$TOTAL passed, $FAILED failed ===" |
| 73 | + |
| 74 | +if [ "$FAILED" -gt 0 ]; then |
| 75 | + exit 1 |
| 76 | +fi |
0 commit comments