Files
Phantom/workspace/phantom-protocol-2025-release/tests/test-socks5-failsecure.sh

224 lines
8.4 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
#
# Тест fail-secure поведения SOCKS5 прокси
# Версия: 1.0
# Дата: 22 ноября 2025
#
# Этот скрипт тестирует, что SOCKS5 прокси корректно прерывает соединение
# при недоступности Phantom сети вместо установки прямого подключения.
#
set -e
# Цвета для вывода
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo "========================================="
echo "Тест Fail-Secure Поведения SOCKS5 Прокси"
echo "========================================="
echo ""
# Функция для вывода результата теста
test_result() {
local test_name="$1"
local result="$2"
if [ "$result" = "PASS" ]; then
echo -e "${GREEN}✅ PASS${NC}: $test_name"
elif [ "$result" = "FAIL" ]; then
echo -e "${RED}❌ FAIL${NC}: $test_name"
exit 1
else
echo -e "${YELLOW}⚠️ SKIP${NC}: $test_name"
fi
}
# Проверка наличия Python
echo "Проверка зависимостей..."
if ! command -v python3 &> /dev/null; then
echo -e "${RED}❌ Python3 не найден${NC}"
exit 1
fi
echo -e "${GREEN}✅ Python3 найден${NC}"
echo ""
# Проверка наличия файла прокси
PROXY_FILE="../examples/socks5-proxy.py"
if [ ! -f "$PROXY_FILE" ]; then
echo -e "${RED}❌ Файл $PROXY_FILE не найден${NC}"
exit 1
fi
echo -e "${GREEN}✅ Файл socks5-proxy.py найден${NC}"
echo ""
# Тест 1: Проверка отсутствия fallback кода
echo "Тест 1: Проверка отсутствия fallback механизма..."
if grep -q "Fallback: прямое подключение" "$PROXY_FILE"; then
test_result "Отсутствие fallback кода" "FAIL"
echo -e "${RED}Найден опасный fallback код!${NC}"
exit 1
else
test_result "Отсутствие fallback кода" "PASS"
fi
echo ""
# Тест 2: Проверка наличия fail-secure логики
echo "Тест 2: Проверка наличия fail-secure логики..."
if grep -q "Соединение прервано для обеспечения безопасности" "$PROXY_FILE"; then
test_result "Наличие fail-secure логики" "PASS"
else
test_result "Наличие fail-secure логики" "FAIL"
echo -e "${RED}Fail-secure логика не найдена!${NC}"
exit 1
fi
echo ""
# Тест 3: Проверка возврата False при ошибке
echo "Тест 3: Проверка возврата False при ошибке..."
FAIL_SECURE_COUNT=$(grep -c "return False" "$PROXY_FILE" || true)
if [ "$FAIL_SECURE_COUNT" -ge 2 ]; then
test_result "Возврат False при ошибке" "PASS"
echo " Найдено $FAIL_SECURE_COUNT точек возврата False"
else
test_result "Возврат False при ошибке" "FAIL"
echo -e "${RED}Недостаточно точек fail-secure!${NC}"
exit 1
fi
echo ""
# Тест 4: Проверка предупреждающих сообщений
echo "Тест 4: Проверка предупреждающих сообщений..."
if grep -q "ВНИМАНИЕ: Прямое подключение ЗАПРЕЩЕНО" "$PROXY_FILE"; then
test_result "Наличие предупреждений" "PASS"
else
test_result "Наличие предупреждений" "FAIL"
echo -e "${RED}Предупреждающие сообщения не найдены!${NC}"
exit 1
fi
echo ""
# Тест 5: Синтаксическая проверка Python кода
echo "Тест 5: Синтаксическая проверка Python кода..."
if python3 -m py_compile "$PROXY_FILE" 2>/dev/null; then
test_result "Синтаксис Python" "PASS"
else
test_result "Синтаксис Python" "FAIL"
echo -e "${RED}Синтаксические ошибки в коде!${NC}"
exit 1
fi
echo ""
# Тест 6: Проверка версии в документации
echo "Тест 6: Проверка обновления документации..."
DOC_FILE="../docs/user-guide-complete-ru.md"
if [ -f "$DOC_FILE" ]; then
if grep -q "Fail-Secure Поведение" "$DOC_FILE"; then
test_result "Обновление документации" "PASS"
else
test_result "Обновление документации" "FAIL"
echo -e "${RED}Документация не обновлена!${NC}"
exit 1
fi
else
test_result "Обновление документации" "SKIP"
echo " Файл документации не найден"
fi
echo ""
# Тест 7: Функциональный тест (симуляция)
echo "Тест 7: Функциональный тест (симуляция)..."
echo " Создание тестового скрипта..."
cat > /tmp/test_socks5_failsecure.py << 'EOF'
#!/usr/bin/env python3
import sys
import socket
# Симуляция теста: проверяем, что при ошибке подключения
# функция connect() возвращает False
class MockRoute:
def __init__(self):
self.nodes = [("127.0.0.1", 9999)] # Несуществующий узел
class TestPhantomConnection:
def __init__(self):
self.route = MockRoute()
self.socket = None
self.connected = False
def connect(self, target_host, target_port):
"""Упрощенная версия функции connect для теста"""
try:
if not self.route.nodes:
print("❌ Маршрут не построен")
return False
first_hop = self.route.nodes[0]
print(f"Попытка подключения к {first_hop[0]}:{first_hop[1]}...")
self.socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.socket.settimeout(2)
try:
self.socket.connect(first_hop)
except socket.error as e:
print(f"❌ Не удалось подключиться к первому хопу Phantom сети: {e}")
print(f"🔒 Соединение прервано для обеспечения безопасности")
print(f"⚠️ ВНИМАНИЕ: Прямое подключение ЗАПРЕЩЕНО для сохранения анонимности")
self.socket.close()
return False # FAIL-SECURE!
self.connected = True
return True
except Exception as e:
print(f"Ошибка подключения: {e}")
return False
# Запуск теста
print("Тест fail-secure поведения...")
conn = TestPhantomConnection()
result = conn.connect("example.com", 80)
if result == False and conn.connected == False:
print("\n✅ ТЕСТ ПРОЙДЕН: Соединение корректно прервано")
sys.exit(0)
else:
print("\n❌ ТЕСТ ПРОВАЛЕН: Соединение не было прервано!")
sys.exit(1)
EOF
chmod +x /tmp/test_socks5_failsecure.py
if python3 /tmp/test_socks5_failsecure.py 2>&1 | grep -q "ТЕСТ ПРОЙДЕН"; then
test_result "Функциональный тест" "PASS"
else
test_result "Функциональный тест" "FAIL"
echo -e "${RED}Функциональный тест не прошел!${NC}"
exit 1
fi
echo ""
# Итоговый результат
echo "========================================="
echo -e "${GREEN}ВСЕ ТЕСТЫ ПРОЙДЕНЫ УСПЕШНО!${NC}"
echo "========================================="
echo ""
echo "Результаты:"
echo " ✅ Fallback код удален"
echo " ✅ Fail-secure логика реализована"
echo " ✅ Возврат False при ошибках"
echo " ✅ Предупреждающие сообщения добавлены"
echo " ✅ Синтаксис Python корректен"
echo " ✅ Документация обновлена"
echo " ✅ Функциональный тест пройден"
echo ""
echo "SOCKS5 прокси готов к использованию! 🎉"
echo ""
exit 0