|
45 | 45 | [ "$(grep -oE 'PHPVM_VERSION="[0-9]+\.[0-9]+\.[0-9]+"' "$target_file")" = "PHPVM_VERSION=\"1.12.2\"" ] |
46 | 46 | } |
47 | 47 |
|
| 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 | + |
48 | 98 | @test "sanitize_input rejects dangerous characters" { |
49 | 99 | run sanitize_input "8.1; rm -rf /" |
50 | 100 | [ "$status" -ne 0 ] |
|
0 commit comments