diff --git a/deploy/values.yaml b/deploy/values.yaml index 4e553be..405eadf 100644 --- a/deploy/values.yaml +++ b/deploy/values.yaml @@ -30,15 +30,22 @@ image: # addr: адрес в формате host:port (внутренний K8s DNS или внешний IP) # user: Redis-пользователь (по умолчанию "default" — стандартный встроенный пользователь Redis) redis: - addr: "your-redis-host:6379" + addr: "rfrm-redisk8s.54467f74-67f5-4ca7-9b4a-bdd50e8c23d6.svc:6379" user: "default" password: "your-redis-password" +# Ingress — домен и TLS сертификат +ingress: + enabled: true + host: "qu.kube5s.ru" + tls: + enabled: true + issuer: "letsencrypt-prod" + # Токен для административного API (/admin/*). # Используется для создания тенантов и управления ими. -# Придумайте любую строку, например: openssl rand -hex 20 admin: - token: "your-admin-token" + token: "sqs-admin-7a7d8bd0c060a75c198d48680f34077a" # Создать demo-тенанта при первом старте (удобно для проверки работы). # В продакшне можно поставить false. @@ -53,32 +60,13 @@ resources: memory: "256Mi" cpu: "500m" -# Ingress — открывает сервис наружу по домену. -# host: ваш домен, должен указывать на IP ingress-контроллера кластера. -# После деплоя cert-manager автоматически выпустит TLS-сертификат. -ingress: - enabled: true - className: nginx - host: "sqs.your-domain.com" - annotations: - cert-manager.io/cluster-issuer: letsencrypt-prod - nginx.ingress.kubernetes.io/proxy-body-size: "10m" - nginx.ingress.kubernetes.io/proxy-read-timeout: "30" - nginx.ingress.kubernetes.io/proxy-send-timeout: "30" - tls: - enabled: true - secretName: shared-sqs-tls - -# Биллинг — запись статистики по всем SQS-операциям в PostgreSQL. -# Если PostgreSQL нет — поставьте enabled: false, остальное игнорируется. +# PostgreSQL — для биллинга billing: - enabled: false + enabled: true postgres: - host: "your-postgres-host" - port: "5432" - # База данных должна существовать заранее (CREATE DATABASE sqsdb) + host: "postgresqlk8s-master.dc5db45d-f8b4-4fd0-ad33-ec4dd017f2d5.svc.cluster.local" + port: 5432 database: "sqsdb" - user: "postgres" - password: "your-postgres-password" - # disable — если PostgreSQL без SSL (например локальный) + user: "super" sslmode: "require" + password: "your-postgres-password" diff --git a/tests-deploy/quick.sh b/tests-deploy/quick.sh index e913566..3880d73 100755 --- a/tests-deploy/quick.sh +++ b/tests-deploy/quick.sh @@ -1,12 +1,5 @@ #!/bin/bash -# quick.sh — Только быстрые тесты (31 проверка, ~1 минута) -set -e -SCRIPT_DIR="\$(cd \"\$(dirname \"\${BASH_SOURCE[0]}\")\" && pwd)" -REPO_ROOT="\$(dirname \"\$SCRIPT_DIR\")" -VALUES_FILE=\${REPO_ROOT}/deploy/values.yaml -INGRESS_HOST=\$(grep -A5 \"^ingress:\" \"\$VALUES_FILE\" | grep \"host:\" | awk -F" '{print \$2}') -ADMIN_TOKEN=\$(grep \"token:\" \"\$VALUES_FILE\" | head -1 | awk -F" '{print \$2}') -BASE_URL=\"https://\${INGRESS_HOST}\" -[ -f \"\$SCRIPT_DIR/.env.local\" ] && source \"\$SCRIPT_DIR/.env.local\" -cd \"\$REPO_ROOT\" -BASE_URL=\"\$BASE_URL\" ADMIN_TOKEN=\"\$ADMIN_TOKEN\" bash tests/quick_test.sh +# quick.sh — запуск быстрых тестов (7 основных операций SQS) + +REPO_ROOT="$(dirname "$(cd "$(dirname "$0")" && pwd)")" +"$REPO_ROOT/tests-deploy/run.sh" 2>&1 diff --git a/tests-deploy/run.sh b/tests-deploy/run.sh index cf01db7..7d7385b 100755 --- a/tests-deploy/run.sh +++ b/tests-deploy/run.sh @@ -1,71 +1,82 @@ #!/bin/bash -# run.sh — Запуск тестов shared-SQS с параметрами из values.yaml +# run.sh — запуск тестов shared-sqs для verification деплоя +# 2026-04-13 — автоматическое извлечение параметров из deploy/values.yaml + set -e -RED='\\033[0;31m' -GREEN='\\033[0;32m' -YELLOW='\\033[1;33m' -NC='\\033[0m' +echo "shared-sqs Тесты" +echo -SCRIPT_DIR="\$(cd \"\$(dirname \"\${BASH_SOURCE[0]}\")\" && pwd)" -REPO_ROOT="\$(dirname \"\$SCRIPT_DIR\")" -VALUES_FILE="\${REPO_ROOT}/deploy/values.yaml" +# Переход в корневую папку репозитория (parent от tests-deploy/) +REPO_ROOT="$(dirname "$(cd "$(dirname "$0")" && pwd)")" +VALUES_FILE="$REPO_ROOT/deploy/values.yaml" +QUICK_TEST="$REPO_ROOT/quick_test.sh" +ENV_LOCAL="$REPO_ROOT/tests-deploy/.env.local" -echo -e "\${GREEN}╔════════════════════════════════════════════╗\${NC}" -echo -e "\${GREEN}║ shared-sqs Тесты (из values.yaml) ║\${NC}" -echo -e "\${GREEN}╚════════════════════════════════════════════╝\${NC}" -echo "" +# Функция для извлечения параметров из YAML +extract_param() { + local file="$1" + local key="$2" + grep "$key:" "$file" | head -1 | sed -n "s/.*$key: \"\([^\"]*\).*/\1/p" +} -if [ ! -f "\$VALUES_FILE" ]; then - echo -e "\${RED}❌ Файл не найден: \$VALUES_FILE\${NC}" - echo " Убедись что находишься в корне репозитория shared-SQS" +# Функция для извлечения nested параметров (ingress.host) +extract_nested() { + local file="$1" + local section="$2" + local key="$3" + grep -A5 "^$section:" "$file" | grep "$key:" | sed -n "s/.*$key: \"\([^\"]*\).*/\1/p" +} + +# Проверка наличия файлов +if [ ! -f "$VALUES_FILE" ]; then + echo "❌ Ошибка: не найден $VALUES_FILE" exit 1 fi -echo -e "\${YELLOW}📄 Читаю параметры из deploy/values.yaml...\${NC}" - -INGRESS_HOST=\$(grep -A5 \"^ingress:\" \"\$VALUES_FILE\" | grep \"host:\" | awk -F" '{print \$2}') -ADMIN_TOKEN=\$(grep \"token:\" \"\$VALUES_FILE\" | head -1 | awk -F" '{print \$2}') - -if [ -z \"\$INGRESS_HOST\" ] || [ -z \"\$ADMIN_TOKEN\" ]; then - echo -e \"\${RED}❌ Не удалось прочитать параметры\${NC}\" +if [ ! -f "$QUICK_TEST" ]; then + echo "❌ Ошибка: не найден $QUICK_TEST" + echo " Ожидался: $QUICK_TEST" exit 1 fi -BASE_URL=\"https://\${INGRESS_HOST}\" +echo "Читаю параметры из deploy/values.yaml..." -if [ -f \"\$SCRIPT_DIR/.env.local\" ]; then - source \"\$SCRIPT_DIR/.env.local\" +# Извлечение параметров +INGRESS_HOST=$(extract_nested "$VALUES_FILE" "ingress" "host") +ADMIN_TOKEN=$(extract_param "$VALUES_FILE" "token") + +# Demo credentials — для ознакомительного тестирования +AWS_ACCESS_KEY_ID="SSAK-demo-shared-sqs" +AWS_SECRET_ACCESS_KEY="demo-secret-key-shared-sqs-ngcloud-2026" +AWS_DEFAULT_REGION="us-east-1" +BASE_URL="https://$INGRESS_HOST" + +# Override из .env.local (если существует) +if [ -f "$ENV_LOCAL" ]; then + echo " → Загружу override из .env.local" + # shellcheck disable=SC1090 + source "$ENV_LOCAL" fi -echo \"\" -echo -e \"\${GREEN}✅ Параметры загружены:\${NC}\" -echo \" BASE_URL: \$BASE_URL\" -echo \" ADMIN_TOKEN: \${ADMIN_TOKEN:0:20}...\" -echo \"\" +echo "✅ Параметры загружены:" +echo " BASE_URL: $BASE_URL" +echo " ADMIN_TOKEN: ${ADMIN_TOKEN:0:20}..." +echo -echo -e \"\${YELLOW}🔍 Проверяю доступность...\${NC}\" -if curl -sf --max-time 5 \"\${BASE_URL}/health\" > /dev/null 2>&1; then - echo -e \"\${GREEN}✅ Сервис доступен\${NC}\" -else - echo -e \"\${RED}❌ Сервис НЕ доступен: \$BASE_URL\${NC}\" +# Проверка доступности сервиса +echo "🔍 Проверяю доступность..." +if ! curl -sf "$BASE_URL/health" > /dev/null 2>&1; then + echo "❌ Сервис недоступен по $BASE_URL" exit 1 fi +echo "✅ Сервис доступен" +echo -echo \"\" -echo -e \"\${GREEN}════════════════════════════════════════════\${NC}\" -echo -e \"\${GREEN}🚀 Запускаю quick_test.sh...\${NC}\" -echo -e \"\${GREEN}════════════════════════════════════════════\${NC}\" -echo \"\" +# Запуск тестов +echo "════════════════════════════════════════════" +echo "🚀 Запускаю quick_test.sh..." +echo "════════════════════════════════════════════" -cd \"\$REPO_ROOT\" -if BASE_URL=\"\$BASE_URL\" ADMIN_TOKEN=\"\$ADMIN_TOKEN\" bash tests/quick_test.sh; then - QUICK_RESULT=0 - echo -e \"\${GREEN}✅ quick_test.sh PASSED\${NC}\" -else - QUICK_RESULT=1 - echo -e \"\${RED}❌ quick_test.sh FAILED\${NC}\" -fi - -echo \"\" -exit \$QUICK_RESULT +export BASE_URL ADMIN_TOKEN AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION +bash "$QUICK_TEST" diff --git a/tests-deploy/stress.sh b/tests-deploy/stress.sh index 45cc491..b075787 100755 --- a/tests-deploy/stress.sh +++ b/tests-deploy/stress.sh @@ -1,12 +1,42 @@ #!/bin/bash -# stress.sh — Стресс-тесты (23 проверки, ~7 минут) -set -e -SCRIPT_DIR="\$(cd \"\$(dirname \"\${BASH_SOURCE[0]}\")\" && pwd)" -REPO_ROOT="\$(dirname \"\$SCRIPT_DIR\")" -VALUES_FILE=\${REPO_ROOT}/deploy/values.yaml -INGRESS_HOST=\$(grep -A5 \"^ingress:\" \"\$VALUES_FILE\" | grep \"host:\" | awk -F" '{print \$2}') -ADMIN_TOKEN=\$(grep \"token:\" \"\$VALUES_FILE\" | head -1 | awk -F" '{print \$2}') -BASE_URL=\"https://\${INGRESS_HOST}\" -[ -f \"\$SCRIPT_DIR/.env.local\" ] && source \"\$SCRIPT_DIR/.env.local\" -cd \"\$REPO_ROOT\" -BASE_URL=\"\$BASE_URL\" ADMIN_TOKEN=\"\$ADMIN_TOKEN\" bash tests/stress_test.sh +# stress.sh — запуск полного набора тестов (18+ операций, batch operations, visibility change) + +REPO_ROOT="$(dirname "$(cd "$(dirname "$0")" && pwd)")" +VALUES_FILE="$REPO_ROOT/deploy/values.yaml" +HARDCORE_TEST="$REPO_ROOT/hardcore_test.sh" + +# Извлечение параметров (скопировано из run.sh) +extract_param() { + local file="$1" + local key="$2" + grep "$key:" "$file" | head -1 | sed -n "s/.*$key: \"\([^\"]*\).*/\1/p" +} + +extract_nested() { + local file="$1" + local section="$2" + local key="$3" + grep -A5 "^$section:" "$file" | grep "$key:" | sed -n "s/.*$key: \"\([^\"]*\).*/\1/p" +} + +INGRESS_HOST=$(extract_nested "$VALUES_FILE" "ingress" "host") +ADMIN_TOKEN=$(extract_param "$VALUES_FILE" "token") + +AWS_ACCESS_KEY_ID="SSAK-demo-shared-sqs" +AWS_SECRET_ACCESS_KEY="demo-secret-key-shared-sqs-ngcloud-2026" +AWS_DEFAULT_REGION="us-east-1" +BASE_URL="https://$INGRESS_HOST" + +# Override из .env.local +ENV_LOCAL="$REPO_ROOT/tests-deploy/.env.local" +if [ -f "$ENV_LOCAL" ]; then + source "$ENV_LOCAL" +fi + +echo "════════════════════════════════════════════" +echo "🧪 Полный набор тестов (stress)" +echo "════════════════════════════════════════════" +echo + +export BASE_URL ADMIN_TOKEN AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY AWS_DEFAULT_REGION +bash "$HARDCORE_TEST"