Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions bin/baudbot
Original file line number Diff line number Diff line change
Expand Up @@ -351,6 +351,16 @@ case "${1:-}" in
shift
require_root "restart"
if has_systemd; then
# Ensure any pre-existing detached bridge tmux session is torn down so
# restart always boots a fresh bridge from currently deployed runtime files.
AGENT_USER="${BAUDBOT_AGENT_USER:-baudbot_agent}"
if command -v tmux >/dev/null 2>&1; then
if command -v sudo >/dev/null 2>&1; then
sudo -u "$AGENT_USER" tmux kill-session -t slack-bridge 2>/dev/null || true
elif command -v runuser >/dev/null 2>&1; then
runuser -u "$AGENT_USER" -- tmux kill-session -t slack-bridge 2>/dev/null || true
fi
fi
exec systemctl restart baudbot "$@"
else
echo "systemd not available."
Expand Down
62 changes: 62 additions & 0 deletions bin/baudbot.test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -130,13 +130,75 @@ EOF
)
}

test_restart_restarts_systemd_and_kills_bridge_tmux() {
(
set -euo pipefail
local tmp fakebin log_file
tmp="$(mktemp -d /tmp/baudbot-cli-test.XXXXXX)"
trap 'rm -rf "$tmp"' EXIT

mkdir -p "$tmp/fakebin" "$tmp/bin/lib"
fakebin="$tmp/fakebin"
log_file="$tmp/calls.log"

printf '{"version":"1.2.3"}\n' > "$tmp/package.json"
cat > "$tmp/bin/lib/baudbot-runtime.sh" <<'EOF'
#!/bin/bash
has_systemd() { return 0; }
cmd_status() { :; }
cmd_logs() { :; }
cmd_sessions() { :; }
cmd_attach() { :; }
EOF

cat > "$fakebin/id" <<'EOF'
#!/bin/bash
if [ "${1:-}" = "-u" ]; then
echo 0
else
/usr/bin/id "$@"
fi
EOF

cat > "$fakebin/sudo" <<'EOF'
#!/bin/bash
if [ "${1:-}" = "-u" ]; then
user="$2"
shift 2
fi
echo "sudo $*" >> "${BAUDBOT_TEST_LOG}"
exec "$@"
EOF

cat > "$fakebin/tmux" <<'EOF'
#!/bin/bash
echo "tmux $*" >> "${BAUDBOT_TEST_LOG}"
exit 0
EOF

cat > "$fakebin/systemctl" <<'EOF'
#!/bin/bash
echo "systemctl $*" >> "${BAUDBOT_TEST_LOG}"
exit 0
EOF

chmod +x "$fakebin/id" "$fakebin/sudo" "$fakebin/tmux" "$fakebin/systemctl"

PATH="$fakebin:$PATH" BAUDBOT_TEST_LOG="$log_file" BAUDBOT_ROOT="$tmp" bash "$CLI" restart

grep -q '^tmux kill-session -t slack-bridge$' "$log_file"
grep -q '^systemctl restart baudbot$' "$log_file"
)
}

echo "=== baudbot cli tests ==="
echo ""

run_test "version reads package.json" test_version_uses_package_json
run_test "status dispatches via runtime module" test_status_dispatches_via_runtime_module
run_test "attach requires root" test_attach_requires_root
run_test "broker register requires root" test_broker_register_requires_root
run_test "restart kills bridge tmux then restarts systemd" test_restart_restarts_systemd_and_kills_bridge_tmux

echo ""
echo "=== $PASSED/$TOTAL passed, $FAILED failed ==="
Expand Down