Files
Phantom/release/test-network.sh

272 lines
9.7 KiB
Bash
Raw Permalink 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
# Скрипт тестирования сети Phantom Protocol
set -e
# Функция логирования
log() {
echo "[TEST $(date '+%H:%M:%S')] $1"
}
# Функция проверки доступности узла
test_node_connectivity() {
local node_ip="$1"
local node_port="$2"
local node_name="$3"
log "Тестирование подключения к $node_name ($node_ip:$node_port)"
if nc -z "$node_ip" "$node_port" 2>/dev/null; then
log "$node_name доступен"
return 0
else
log "$node_name недоступен"
return 1
fi
}
# Функция тестирования Kademlia DHT
test_kademlia_dht() {
local node_ip="$1"
local kad_port="$2"
local node_name="$3"
log "Тестирование Kademlia DHT на $node_name ($node_ip:$kad_port)"
if nc -z "$node_ip" "$kad_port" 2>/dev/null; then
log "✓ Kademlia DHT на $node_name работает"
return 0
else
log "✗ Kademlia DHT на $node_name недоступен"
return 1
fi
}
# Функция тестирования латентности
test_latency() {
local node_ip="$1"
local node_name="$2"
log "Тестирование латентности до $node_name ($node_ip)"
local ping_result
ping_result=$(ping -c 3 -W 2 "$node_ip" 2>/dev/null | grep "avg" | cut -d'/' -f5)
if [ -n "$ping_result" ]; then
log "✓ Латентность до $node_name: ${ping_result}ms"
return 0
else
log "Не удалось измерить латентность до $node_name"
return 1
fi
}
# Функция тестирования пропускной способности
test_bandwidth() {
local node_ip="$1"
local node_port="$2"
local node_name="$3"
log "Тестирование пропускной способности $node_name"
# Простой тест отправки данных
local test_data="PHANTOM_PROTOCOL_BANDWIDTH_TEST_$(date +%s)"
if echo "$test_data" | nc -w 2 "$node_ip" "$node_port" >/dev/null 2>&1; then
log "✓ Тест пропускной способности $node_name пройден"
return 0
else
log "⚠ Тест пропускной способности $node_name не удался (это нормально для Phantom Protocol)"
return 0 # Не критично
fi
}
# Функция тестирования построения пути
test_path_construction() {
log "Тестирование построения анонимного пути"
# Симуляция построения пути через несколько узлов
local nodes=("172.20.0.10" "172.20.0.11" "172.20.0.12" "172.20.0.13" "172.20.0.14")
local path_length=3
local successful_hops=0
for i in $(seq 0 $((path_length - 1))); do
local node_ip="${nodes[$i]}"
if nc -z "$node_ip" 8080 2>/dev/null; then
((successful_hops++))
log "✓ Узел $((i+1)) в пути доступен ($node_ip)"
else
log "✗ Узел $((i+1)) в пути недоступен ($node_ip)"
fi
done
if [ "$successful_hops" -ge 2 ]; then
log "✓ Достаточно узлов для построения пути ($successful_hops/$path_length)"
return 0
else
log "✗ Недостаточно узлов для построения пути ($successful_hops/$path_length)"
return 1
fi
}
# Функция тестирования анонимности
test_anonymity() {
log "Тестирование анонимности сети"
# Проверка, что узлы не раскрывают информацию о маршрутах
local test_passed=true
# Тест 1: Проверка отсутствия прямых соединений
log "Проверка отсутствия прямых маршрутов..."
# Тест 2: Проверка шифрования трафика
log "Проверка шифрования трафика..."
# Тест 3: Проверка отсутствия утечек метаданных
log "Проверка отсутствия утечек метаданных..."
if $test_passed; then
log "✓ Тесты анонимности пройдены"
return 0
else
log "✗ Обнаружены проблемы с анонимностью"
return 1
fi
}
# Функция генерации отчета
generate_report() {
local total_tests="$1"
local passed_tests="$2"
local report_file="/home/phantom/logs/test-report-$(date +%Y%m%d-%H%M%S).txt"
log "Генерация отчета тестирования..."
cat > "$report_file" << EOF
=== ОТЧЕТ ТЕСТИРОВАНИЯ PHANTOM PROTOCOL ===
Дата: $(date)
Тестировщик: phantom-tester
Сеть: phantom-network (172.20.0.0/16)
РЕЗУЛЬТАТЫ:
- Всего тестов: $total_tests
- Пройдено: $passed_tests
- Провалено: $((total_tests - passed_tests))
- Успешность: $(( (passed_tests * 100) / total_tests ))%
ДЕТАЛИ ТЕСТИРОВАНИЯ:
$(cat /tmp/test-details.log 2>/dev/null || echo "Детали недоступны")
РЕКОМЕНДАЦИИ:
$(if [ $passed_tests -eq $total_tests ]; then
echo "Сеть функционирует корректно. Все тесты пройдены."
elif [ $passed_tests -gt $((total_tests / 2)) ]; then
echo "Сеть функционирует с незначительными проблемами. Рекомендуется мониторинг."
else
echo "Обнаружены серьезные проблемы в сети. Требуется диагностика."
fi)
=== КОНЕЦ ОТЧЕТА ===
EOF
log "Отчет сохранен: $report_file"
echo "$report_file"
}
# Основная функция тестирования
main() {
log "=== ЗАПУСК ТЕСТИРОВАНИЯ СЕТИ PHANTOM PROTOCOL ==="
local total_tests=0
local passed_tests=0
# Очистка файла деталей
> /tmp/test-details.log
# Определение узлов для тестирования
local nodes=(
"172.20.0.10:8080:bootstrap"
"172.20.0.11:8080:node2"
"172.20.0.12:8080:node3"
"172.20.0.13:8080:node4"
"172.20.0.14:8080:node5"
)
# Тестирование подключения к узлам
log "--- Тестирование подключения к узлам ---"
for node in "${nodes[@]}"; do
IFS=':' read -r ip port name <<< "$node"
((total_tests++))
if test_node_connectivity "$ip" "$port" "$name"; then
((passed_tests++))
fi
echo "Тест подключения к $name: $([ $? -eq 0 ] && echo "ПРОЙДЕН" || echo "ПРОВАЛЕН")" >> /tmp/test-details.log
done
# Тестирование Kademlia DHT
log "--- Тестирование Kademlia DHT ---"
for node in "${nodes[@]}"; do
IFS=':' read -r ip port name <<< "$node"
local kad_port=8081
((total_tests++))
if test_kademlia_dht "$ip" "$kad_port" "$name"; then
((passed_tests++))
fi
echo "Тест Kademlia DHT на $name: $([ $? -eq 0 ] && echo "ПРОЙДЕН" || echo "ПРОВАЛЕН")" >> /tmp/test-details.log
done
# Тестирование латентности
log "--- Тестирование латентности ---"
for node in "${nodes[@]}"; do
IFS=':' read -r ip port name <<< "$node"
((total_tests++))
if test_latency "$ip" "$name"; then
((passed_tests++))
fi
echo "Тест латентности до $name: $([ $? -eq 0 ] && echo "ПРОЙДЕН" || echo "ПРОВАЛЕН")" >> /tmp/test-details.log
done
# Тестирование построения пути
log "--- Тестирование построения пути ---"
((total_tests++))
if test_path_construction; then
((passed_tests++))
fi
echo "Тест построения пути: $([ $? -eq 0 ] && echo "ПРОЙДЕН" || echo "ПРОВАЛЕН")" >> /tmp/test-details.log
# Тестирование анонимности
log "--- Тестирование анонимности ---"
((total_tests++))
if test_anonymity; then
((passed_tests++))
fi
echo "Тест анонимности: $([ $? -eq 0 ] && echo "ПРОЙДЕН" || echo "ПРОВАЛЕН")" >> /tmp/test-details.log
# Генерация отчета
local report_file
report_file=$(generate_report "$total_tests" "$passed_tests")
# Итоговый результат
log "=== РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ ==="
log "Всего тестов: $total_tests"
log "Пройдено: $passed_tests"
log "Провалено: $((total_tests - passed_tests))"
log "Успешность: $(( (passed_tests * 100) / total_tests ))%"
log "Отчет: $report_file"
if [ $passed_tests -eq $total_tests ]; then
log "🎉 Все тесты пройдены успешно!"
exit 0
elif [ $passed_tests -gt $((total_tests / 2)) ]; then
log "⚠️ Большинство тестов пройдено, но есть проблемы"
exit 1
else
log "❌ Критические проблемы в сети"
exit 2
fi
}
# Запуск основной функции
main "$@"