test: add isolated install verification scripts

- Dockerfile.test: Ubuntu 24.04 container for clean-room setup testing
- test_isolated.sh: mock-based test verifying auto-install URLs are called
This commit is contained in:
2026-05-31 18:50:30 +07:00
parent 52072a5e4c
commit 6aac2cb083
2 changed files with 113 additions and 0 deletions

81
test_isolated.sh Normal file
View File

@@ -0,0 +1,81 @@
#!/usr/bin/env bash
# test_isolated.sh — проверка логики автоустановки без реальных скачиваний
# Использует mock для curl, чтобы проверить, что скрипты вызывают правильные URL
set -euo pipefail
TMPDIR=$(mktemp -d)
trap 'rm -rf "$TMPDIR"' EXIT
# Генерируем скрипты из claude_setup.sh в изолированную директорию
BIN_DIR="$TMPDIR/bin"
mkdir -p "$BIN_DIR"
# Извлекаем claude_gpt
awk '/^cat > "\$BIN_DIR\/claude_gpt"/,/^GPTEOF/' claude_setup.sh | \
sed "s|\\\$BIN_DIR|$BIN_DIR|g" | bash
chmod +x "$BIN_DIR/claude_gpt"
# Извлекаем claude_kimi
awk '/^cat > "\$BIN_DIR\/claude_kimi"/,/^KIMIEOF/' claude_setup.sh | \
sed "s|\\\$BIN_DIR|$BIN_DIR|g" | bash
chmod +x "$BIN_DIR/claude_kimi"
echo "=== Test 1: claude_gpt calls codex install URL when missing ==="
MOCK_LOG="$TMPDIR/mock_curl.log"
# Создаём mock curl, который логирует вызовы
cat > "$TMPDIR/curl" << CURLEOF
#!/usr/bin/env bash
echo "\$@" >> "$MOCK_LOG"
# Притворяемся, что install.sh отработал (создаём фейковый codex)
if [[ "\$*" == *"chatgpt.com/codex/install.sh"* ]]; then
mkdir -p "\$HOME/.npm-global/bin"
echo '#!/usr/bin/env bash
echo "codex mock \$*"' > "\$HOME/.npm-global/bin/codex"
chmod +x "\$HOME/.npm-global/bin/codex"
fi
CURLEOF
chmod +x "$TMPDIR/curl"
# Запускаем claude_gpt с mock curl (чистый PATH, без системного codex)
HOME="$TMPDIR" PATH="$TMPDIR:/usr/bin:/bin" "$BIN_DIR/claude_gpt" --version 2>&1 || true
if grep -q "chatgpt.com/codex/install.sh" "$MOCK_LOG"; then
echo "[PASS] claude_gpt вызвал установку Codex"
else
echo "[FAIL] claude_gpt НЕ вызвал установку Codex"
echo "curl log:"
cat "$MOCK_LOG" 2>/dev/null || echo "(пусто)"
exit 1
fi
echo ""
echo "=== Test 2: claude_kimi calls kimi install URL when missing ==="
MOCK_LOG="$TMPDIR/mock_curl2.log"
cat > "$TMPDIR/curl" << CURLEOF
#!/usr/bin/env bash
echo "\$@" >> "$MOCK_LOG"
if [[ "\$*" == *"code.kimi.com/kimi-code/install.sh"* ]]; then
mkdir -p "\$HOME/.kimi-code/bin"
echo '#!/usr/bin/env bash
echo "kimi mock \$*"' > "\$HOME/.kimi-code/bin/kimi"
chmod +x "\$HOME/.kimi-code/bin/kimi"
fi
CURLEOF
chmod +x "$TMPDIR/curl"
HOME="$TMPDIR" PATH="$TMPDIR:/usr/bin:/bin" "$BIN_DIR/claude_kimi" --version 2>&1 || true
if grep -q "code.kimi.com/kimi-code/install.sh" "$MOCK_LOG"; then
echo "[PASS] claude_kimi вызвал установку Kimi"
else
echo "[FAIL] claude_kimi НЕ вызвал установку Kimi"
echo "curl log:"
cat "$MOCK_LOG" 2>/dev/null || echo "(пусто)"
exit 1
fi
echo ""
echo "=== All tests passed ==="