mirror of
https://github.com/obra/superpowers.git
synced 2026-06-15 15:19:04 +08:00
Harden companion platform tests
This commit is contained in:
@@ -107,6 +107,22 @@ async function waitForServer(server) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function serverStartedMessage(out) {
|
||||||
|
const line = out.trim().split('\n').find(l => l.includes('server-started'));
|
||||||
|
assert(line, 'server-started JSON should be present');
|
||||||
|
return JSON.parse(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
function assertStartedOnExpectedPort(out) {
|
||||||
|
const msg = serverStartedMessage(out);
|
||||||
|
assert.strictEqual(
|
||||||
|
msg.port,
|
||||||
|
TEST_PORT,
|
||||||
|
`auth.test.js expected fixed port ${TEST_PORT}, got ${msg.port}; fixed-port tests must not run through fallback`
|
||||||
|
);
|
||||||
|
return msg;
|
||||||
|
}
|
||||||
|
|
||||||
async function runTests() {
|
async function runTests() {
|
||||||
cleanup();
|
cleanup();
|
||||||
fs.mkdirSync(CONTENT_DIR, { recursive: true });
|
fs.mkdirSync(CONTENT_DIR, { recursive: true });
|
||||||
@@ -116,7 +132,6 @@ async function runTests() {
|
|||||||
const server = startServer();
|
const server = startServer();
|
||||||
let stdoutAccum = '';
|
let stdoutAccum = '';
|
||||||
server.stdout.on('data', (d) => { stdoutAccum += d.toString(); });
|
server.stdout.on('data', (d) => { stdoutAccum += d.toString(); });
|
||||||
const { stdout: initialStdout } = await waitForServer(server);
|
|
||||||
|
|
||||||
let passed = 0, failed = 0;
|
let passed = 0, failed = 0;
|
||||||
async function test(name, fn) {
|
async function test(name, fn) {
|
||||||
@@ -125,10 +140,13 @@ async function runTests() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
const { stdout: initialStdout } = await waitForServer(server);
|
||||||
|
assertStartedOnExpectedPort(initialStdout);
|
||||||
|
|
||||||
console.log('\n--- Startup URL ---');
|
console.log('\n--- Startup URL ---');
|
||||||
|
|
||||||
await test('server-started url includes the session key', () => {
|
await test('server-started url includes the session key', () => {
|
||||||
const msg = JSON.parse(initialStdout.trim());
|
const msg = serverStartedMessage(initialStdout);
|
||||||
assert(msg.url.includes(`key=${TOKEN}`), `url should carry the key, got: ${msg.url}`);
|
assert(msg.url.includes(`key=${TOKEN}`), `url should carry the key, got: ${msg.url}`);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -48,6 +48,7 @@ make_fake_uname "$TEST_DIR/fake-bin"
|
|||||||
cat > "$TEST_DIR/fake-bin/node" <<'EOF'
|
cat > "$TEST_DIR/fake-bin/node" <<'EOF'
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
echo "CAPTURED_OWNER_PID=${BRAINSTORM_OWNER_PID:-__UNSET__}"
|
echo "CAPTURED_OWNER_PID=${BRAINSTORM_OWNER_PID:-__UNSET__}"
|
||||||
|
echo "CAPTURED_ARGV=$*"
|
||||||
exit 0
|
exit 0
|
||||||
EOF
|
EOF
|
||||||
chmod +x "$TEST_DIR/fake-bin/node"
|
chmod +x "$TEST_DIR/fake-bin/node"
|
||||||
@@ -66,6 +67,26 @@ else
|
|||||||
"expected empty or unset, got '$owner_pid_value'"
|
"expected empty or unset, got '$owner_pid_value'"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
captured_argv=$(echo "$captured" | grep "CAPTURED_ARGV=" | head -1 | sed 's/CAPTURED_ARGV=//')
|
||||||
|
if echo "$captured_argv" | grep -Eq -- '--brainstorm-server-id=[A-Za-z0-9_-]{32,64}'; then
|
||||||
|
pass "passes shell-safe server instance id argv"
|
||||||
|
else
|
||||||
|
fail "passes shell-safe server instance id argv" \
|
||||||
|
"expected --brainstorm-server-id=<safe id>, got: $captured_argv"
|
||||||
|
fi
|
||||||
|
|
||||||
|
server_id_file=$(find "$TEST_DIR/project/.superpowers/brainstorm" -name server-instance-id -print 2>/dev/null | head -1)
|
||||||
|
server_id_value=""
|
||||||
|
if [[ -n "$server_id_file" ]]; then
|
||||||
|
server_id_value="$(tr -d '\r\n' < "$server_id_file")"
|
||||||
|
fi
|
||||||
|
if [[ "$server_id_value" =~ ^[A-Za-z0-9_-]{32,64}$ ]]; then
|
||||||
|
pass "writes shell-safe server-instance-id state file"
|
||||||
|
else
|
||||||
|
fail "writes shell-safe server-instance-id state file" \
|
||||||
|
"expected valid id in state, got '$server_id_value'"
|
||||||
|
fi
|
||||||
|
|
||||||
rm -rf "$TEST_DIR/project"/*
|
rm -rf "$TEST_DIR/project"/*
|
||||||
|
|
||||||
cat > "$TEST_DIR/fake-bin/node" <<'EOF'
|
cat > "$TEST_DIR/fake-bin/node" <<'EOF'
|
||||||
|
|||||||
@@ -162,6 +162,7 @@ if [[ "$is_windows" == "true" ]]; then
|
|||||||
cat > "$FAKE_NODE_DIR/node" <<'FAKENODE'
|
cat > "$FAKE_NODE_DIR/node" <<'FAKENODE'
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
echo "CAPTURED_OWNER_PID=${BRAINSTORM_OWNER_PID:-__UNSET__}"
|
echo "CAPTURED_OWNER_PID=${BRAINSTORM_OWNER_PID:-__UNSET__}"
|
||||||
|
echo "CAPTURED_ARGV=$*"
|
||||||
exit 0
|
exit 0
|
||||||
FAKENODE
|
FAKENODE
|
||||||
chmod +x "$FAKE_NODE_DIR/node"
|
chmod +x "$FAKE_NODE_DIR/node"
|
||||||
@@ -176,6 +177,14 @@ FAKENODE
|
|||||||
"Expected empty or unset, got '$owner_pid_value'"
|
"Expected empty or unset, got '$owner_pid_value'"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
captured_argv=$(echo "$captured" | grep "CAPTURED_ARGV=" | head -1 | sed 's/CAPTURED_ARGV=//')
|
||||||
|
if echo "$captured_argv" | grep -Eq -- '--brainstorm-server-id=[A-Za-z0-9_-]{32,64}'; then
|
||||||
|
pass "start-server.sh passes server instance id argv on Windows"
|
||||||
|
else
|
||||||
|
fail "start-server.sh passes server instance id argv on Windows" \
|
||||||
|
"Expected --brainstorm-server-id=<safe id>, output: $captured"
|
||||||
|
fi
|
||||||
|
|
||||||
rm -rf "$FAKE_NODE_DIR" "$TEST_DIR/session"
|
rm -rf "$FAKE_NODE_DIR" "$TEST_DIR/session"
|
||||||
else
|
else
|
||||||
skip "start-server.sh passes empty BRAINSTORM_OWNER_PID" "not on Windows"
|
skip "start-server.sh passes empty BRAINSTORM_OWNER_PID" "not on Windows"
|
||||||
|
|||||||
Reference in New Issue
Block a user