Skip to content

Commit 0d1ada2

Browse files
committed
test: add remote self-update integration test
1 parent f528d75 commit 0d1ada2

1 file changed

Lines changed: 50 additions & 0 deletions

File tree

tests/01_core.bats

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,56 @@ EOF
4545
[ "$(grep -oE 'PHPVM_VERSION="[0-9]+\.[0-9]+\.[0-9]+"' "$target_file")" = "PHPVM_VERSION=\"1.12.2\"" ]
4646
}
4747

48+
@test "phpvm self-update downloads from remote URL and updates script" {
49+
if ! command -v python3 > /dev/null 2>&1; then
50+
skip "python3 is required for remote self-update integration test"
51+
fi
52+
53+
local server_root="$TEST_DIR/http-server"
54+
local server_log="$TEST_DIR/http-server.log"
55+
local target_file="$TEST_DIR/phpvm-self-update-http-target.sh"
56+
mkdir -p "$server_root"
57+
58+
cat > "$server_root/phpvm.sh" <<'EOF'
59+
#!/bin/bash
60+
PHPVM_VERSION="1.12.3"
61+
EOF
62+
chmod +x "$server_root/phpvm.sh"
63+
64+
python3 - "$server_root" <<'PY' > "$server_log" 2>&1 &
65+
import http.server
66+
import socketserver
67+
import os
68+
import sys
69+
70+
os.chdir(sys.argv[1])
71+
with socketserver.TCPServer(("127.0.0.1", 0), http.server.SimpleHTTPRequestHandler) as httpd:
72+
print(httpd.server_address[1], flush=True)
73+
sys.stdout.flush()
74+
httpd.serve_forever()
75+
PY
76+
local server_pid=$!
77+
sleep 1
78+
79+
local port
80+
port=$(head -n 1 "$server_log" | tr -d '[:space:]')
81+
if [ -z "$port" ]; then
82+
kill "$server_pid" > /dev/null 2>&1 || true
83+
wait "$server_pid" 2>/dev/null || true
84+
echo "Failed to start local HTTP server" >&2
85+
return 1
86+
fi
87+
88+
touch "$target_file"
89+
90+
trap 'kill "$server_pid" > /dev/null 2>&1 || true; wait "$server_pid" 2>/dev/null || true' RETURN
91+
92+
run env PHPVM_TEST_MODE=true PHPVM_SELF_UPDATE_URL="http://127.0.0.1:$port/phpvm.sh" PHPVM_SELF_UPDATE_DEST="$target_file" bash "$BATS_TEST_DIRNAME/../phpvm.sh" self-update
93+
[ "$status" -eq 0 ]
94+
[[ "$output" =~ "phpvm successfully updated to the latest version: v1.12.3." ]]
95+
[ "$(grep -oE 'PHPVM_VERSION="[0-9]+\.[0-9]+\.[0-9]+"' "$target_file")" = "PHPVM_VERSION=\"1.12.3\"" ]
96+
}
97+
4898
@test "sanitize_input rejects dangerous characters" {
4999
run sanitize_input "8.1; rm -rf /"
50100
[ "$status" -ne 0 ]

0 commit comments

Comments
 (0)