start-server.test.sh 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. #!/usr/bin/env bash
  2. # Fast tests for start-server.sh shell-only platform decisions.
  3. set -uo pipefail
  4. SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
  5. REPO_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
  6. START_SCRIPT="$REPO_ROOT/skills/brainstorming/scripts/start-server.sh"
  7. TEST_DIR="${TMPDIR:-/tmp}/brainstorm-start-test-$$"
  8. passed=0
  9. failed=0
  10. cleanup() {
  11. rm -rf "$TEST_DIR"
  12. }
  13. trap cleanup EXIT
  14. pass() {
  15. echo " PASS: $1"
  16. passed=$((passed + 1))
  17. }
  18. fail() {
  19. echo " FAIL: $1"
  20. echo " $2"
  21. failed=$((failed + 1))
  22. }
  23. make_fake_uname() {
  24. local fake_bin="$1"
  25. cat > "$fake_bin/uname" <<'EOF'
  26. #!/usr/bin/env bash
  27. if [[ "${1:-}" == "-s" ]]; then
  28. echo "MINGW64_NT-10.0"
  29. else
  30. /usr/bin/uname "$@"
  31. fi
  32. EOF
  33. chmod +x "$fake_bin/uname"
  34. }
  35. echo ""
  36. echo "--- start-server.sh platform detection ---"
  37. mkdir -p "$TEST_DIR/fake-bin" "$TEST_DIR/project"
  38. make_fake_uname "$TEST_DIR/fake-bin"
  39. cat > "$TEST_DIR/fake-bin/node" <<'EOF'
  40. #!/usr/bin/env bash
  41. echo "CAPTURED_OWNER_PID=${BRAINSTORM_OWNER_PID:-__UNSET__}"
  42. echo "CAPTURED_ARGV=$*"
  43. exit 0
  44. EOF
  45. chmod +x "$TEST_DIR/fake-bin/node"
  46. captured=$(
  47. PATH="$TEST_DIR/fake-bin:$PATH" \
  48. MSYSTEM="" \
  49. bash "$START_SCRIPT" --project-dir "$TEST_DIR/project" --foreground 2>/dev/null || true
  50. )
  51. owner_pid_value=$(echo "$captured" | grep "CAPTURED_OWNER_PID=" | head -1 | sed 's/CAPTURED_OWNER_PID=//')
  52. if [[ "$owner_pid_value" == "" || "$owner_pid_value" == "__UNSET__" ]]; then
  53. pass "clears BRAINSTORM_OWNER_PID when uname reports a Windows-like shell"
  54. else
  55. fail "clears BRAINSTORM_OWNER_PID when uname reports a Windows-like shell" \
  56. "expected empty or unset, got '$owner_pid_value'"
  57. fi
  58. captured_argv=$(echo "$captured" | grep "CAPTURED_ARGV=" | head -1 | sed 's/CAPTURED_ARGV=//')
  59. if echo "$captured_argv" | grep -Eq -- '--brainstorm-server-id=[A-Za-z0-9_-]{32,64}'; then
  60. pass "passes shell-safe server instance id argv"
  61. else
  62. fail "passes shell-safe server instance id argv" \
  63. "expected --brainstorm-server-id=<safe id>, got: $captured_argv"
  64. fi
  65. server_id_file=$(find "$TEST_DIR/project/.superpowers/brainstorm" -name server-instance-id -print 2>/dev/null | head -1)
  66. server_id_value=""
  67. if [[ -n "$server_id_file" ]]; then
  68. server_id_value="$(tr -d '\r\n' < "$server_id_file")"
  69. fi
  70. if [[ "$server_id_value" =~ ^[A-Za-z0-9_-]{32,64}$ ]]; then
  71. pass "writes shell-safe server-instance-id state file"
  72. else
  73. fail "writes shell-safe server-instance-id state file" \
  74. "expected valid id in state, got '$server_id_value'"
  75. fi
  76. rm -rf "$TEST_DIR/project"/*
  77. cat > "$TEST_DIR/fake-bin/node" <<'EOF'
  78. #!/usr/bin/env bash
  79. echo "FOREGROUND_MODE=true"
  80. exit 0
  81. EOF
  82. chmod +x "$TEST_DIR/fake-bin/node"
  83. captured=$(
  84. PATH="$TEST_DIR/fake-bin:$PATH" \
  85. MSYSTEM="" \
  86. bash "$START_SCRIPT" --project-dir "$TEST_DIR/project" 2>/dev/null || true
  87. )
  88. if echo "$captured" | grep -q "FOREGROUND_MODE=true"; then
  89. pass "auto-foregrounds when uname reports a Windows-like shell"
  90. else
  91. fail "auto-foregrounds when uname reports a Windows-like shell" \
  92. "expected foreground node path, got: $captured"
  93. fi
  94. echo ""
  95. echo "--- Results: $passed passed, $failed failed ---"
  96. if [[ $failed -gt 0 ]]; then
  97. exit 1
  98. fi