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:
32
Dockerfile.test
Normal file
32
Dockerfile.test
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
FROM ubuntu:24.04
|
||||||
|
|
||||||
|
# Avoid interactive prompts during package installation
|
||||||
|
ENV DEBIAN_FRONTEND=noninteractive
|
||||||
|
|
||||||
|
# Install basic dependencies
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
curl \
|
||||||
|
bash \
|
||||||
|
python3 \
|
||||||
|
python3-pip \
|
||||||
|
git \
|
||||||
|
sudo \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Install Node.js 22.x
|
||||||
|
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
|
||||||
|
&& apt-get install -y nodejs \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Create a non-root user (setup script refuses to run as root)
|
||||||
|
RUN useradd -m -s /bin/bash tester
|
||||||
|
|
||||||
|
# Switch to tester user
|
||||||
|
USER tester
|
||||||
|
WORKDIR /home/tester
|
||||||
|
|
||||||
|
# Copy project files
|
||||||
|
COPY --chown=tester:tester . /home/tester/project/
|
||||||
|
|
||||||
|
# Run setup script
|
||||||
|
CMD ["bash", "/home/tester/project/claude_setup.sh"]
|
||||||
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