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:
81
test_isolated.sh
Normal file
81
test_isolated.sh
Normal 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 ==="
|
||||
Reference in New Issue
Block a user