test-deployment.sh
Обзор
test-deployment.sh — это скрипт на Bash, предназначенный для автоматизированного тестирования критически важных компонентов развертывания сетевой инфраструктуры и связанных сервисов через Docker Compose. Скрипт проверяет корректность генерации конфигураций, запуска контейнеров, доступность RPC-интерфейсов (Anvil и Anvil Settlement), успешность деплоя смарт-контрактов и базовую функциональность (создание задачи). В случае успешного тестирования он предлагает пользователю оставить развертывание активным или выполнить очистку.
Скрипт обеспечивает быстрый и наглядный способ проверки, что проект готов к развертыванию с базовым уровнем работоспособности, а также помогает выявить узкие места или ошибки на ранних этапах.
Подробное описание функций
print_status
print_status() {
echo -e "${GREEN}[INFO]${NC} $1"
}
Описание: Выводит информационное сообщение зеленым цветом.
Параметры:
$1— текст сообщения.
Возвращаемое значение: Нет.
Пример использования:
print_status "Сервис запущен успешно"
print_warning
print_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
Описание: Выводит предупреждающее сообщение желтым цветом.
Параметры:
$1— текст сообщения.
Возвращаемое значение: Нет.
print_error
print_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
Описание: Выводит сообщение об ошибке красным цветом.
Параметры:
$1— текст сообщения.
Возвращаемое значение: Нет.
print_header
print_header() {
echo -e "${BLUE}================================${NC}"
echo -e "${BLUE}$1${NC}"
echo -e "${BLUE}================================${NC}"
}
Описание: Выводит заголовок с синим цветом, выделяя секцию.
Параметры:
$1— текст заголовка.
Возвращаемое значение: Нет.
test_basic_deployment
test_basic_deployment() {
...
}
Описание: Основная функция, которая тестирует базовое развертывание проекта.
Логика работы включает:
Очистку старого развертывания (если есть).
Генерацию конфигурации сети вызовом
./generate_network.shс интерактивными параметрами.Запуск Docker Compose сервисов в директории
temp-network.Проверку доступности RPC-интерфейсов Anvil (
http://localhost:8545) и Anvil Settlement (http://localhost:8546), используя командуcast client.Ожидание создания маркеров файлов
deployment-complete.markerиgenesis-complete.markerс таймаутом 120 секунд, сигнализирующих об успешном завершении деплоя и генерации генезиса.Пробное создание задачи через смарт-контракт с помощью вызова
cast send.Вывод итогового статуса и списка запущенных контейнеров.
Параметры: отсутствуют.
Возвращаемое значение:
0— если все тесты прошли успешно.1— если возникла ошибка на любом этапе.
Использование:
Вызов из
mainили напрямую для проверки базового развертывания.
cleanup_deployment
cleanup_deployment() {
...
}
Описание: Останавливает и удаляет Docker Compose развертывание, а также удаляет папку
temp-network.Параметры: отсутствуют.
Возвращаемое значение: Нет.
Использование: Вызывается для очистки после тестирования или при выходе из скрипта.
main
main() {
...
}
Описание: Главная функция, управляющая запуском теста и последующей очисткой.
Логика:
Выводит заголовок.
Запускает
test_basic_deployment.При успешном тесте предлагает пользователю оставить развертывание или выполнить очистку.
При провале запускает очистку и выводит ошибку.
Параметры: принимает аргументы командной строки (не используется).
Возвращаемое значение:
0при успешном завершении.1при ошибках.
Использование: Запускается в конце файла.
Важные детали реализации
Используется
set -eдля немедленного выхода при ошибках, что обеспечивает надёжность и предотвращает дальнейшее выполнение при сбоях.Цветовая маркировка сообщений для удобства визуального восприятия статуса.
Для генерации конфигурации используется внешний скрипт
./generate_network.shс передачей параметров черезprintf.Для проверки доступности RPC-сервисов применяется утилита
cast clientс указанием URL.Для проверки завершения деплоя и генерации генезиса используются маркерные файлы (
deployment-complete.markerиgenesis-complete.marker), которые создаются, предположительно, другими сервисами.Таймауты ожидания выставлены в 120 секунд с проверками каждые 5 секунд.
При ошибках выводятся логи проблемных сервисов для упрощения диагностики.
Используется
trapдля вызоваcleanup_deploymentпри выходе из скрипта, что гарантирует очистку ресурсов.Пользовательский ввод используется для решения оставить ли развертывание запущенным после успешного тестирования.
Взаимодействие с другими частями системы
Скрипт зависит от внешнего скрипта
generate_network.shдля генерации сетевой конфигурации.Использует Docker Compose для управления контейнерами, которые должны быть описаны в
temp-network/docker-compose.yml.Пользуется инструментом
cast(явно из экосистемы Ethereum/Foundry) для взаимодействия с RPC-интерфейсами и смарт-контрактами.Предполагает наличие сервисов
anvil,anvil-settlement,deployerиgenesis-generatorв Docker Compose конфигурации.Обеспечивает проверку, что смарт-контракты развернуты и функционируют (через создание задачи).
Является вспомогательным скриптом для CI/CD пайплайнов или локального тестирования перед деплоем.
Диаграмма структуры функций и их взаимодействий
flowchart TD
main --> test_basic_deployment
main --> cleanup_deployment
test_basic_deployment --> print_header
test_basic_deployment --> print_status
test_basic_deployment --> print_error
test_basic_deployment --> print_warning
test_basic_deployment --> docker_compose_down["docker compose down -v"]
test_basic_deployment --> docker_compose_up["docker compose up -d"]
test_basic_deployment --> cast_client["cast client --rpc-url"]
test_basic_deployment --> cast_send["cast send createTask"]
cleanup_deployment --> print_header
cleanup_deployment --> print_status
cleanup_deployment --> docker_compose_down
main --> read_user_input[/"Prompt user: keep running?"/]
read_user_input -->|No| cleanup_deployment
Пример использования
Запуск скрипта из консоли:
./test-deployment.sh
Скрипт проведет тесты и в конце спросит, оставить ли запущенное развертывание.
Для прерывания и очистки — выбрать "N".
Для сохранения — выбрать "Y".
Итог
test-deployment.sh — надежный и информативный инструмент для проверки базовой работоспособности ключевых компонентов развертывания проекта. Он облегчает диагностику, упрощает контроль над состоянием сервисов и помогает убедиться в готовности к полноценному деплою.
Если нужны дополнительные детали или интеграция с CI/CD, скрипт можно расширять, добавляя новые проверки или логику обработки ошибок.