#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Тестовый скрипт для проверки новой системы авторизации LogBoard+ Автор: Сергей Антропов Сайт: https://devops.org.ru """ import requests import json import sys from datetime import datetime # Настройки BASE_URL = "http://localhost:9001" USERNAME = "admin" PASSWORD = "admin123" def test_login(): """Тест входа в систему""" print("🔐 Тестирование входа в систему...") try: response = requests.post( f"{BASE_URL}/api/auth/login", json={ "username": USERNAME, "password": PASSWORD }, headers={"Content-Type": "application/json"} ) if response.status_code == 200: data = response.json() print(f"✅ Успешный вход! Получен токен: {data['access_token'][:20]}...") return data['access_token'] else: print(f"❌ Ошибка входа: {response.status_code} - {response.text}") return None except Exception as e: print(f"❌ Ошибка соединения: {e}") return None def test_protected_endpoint(token): """Тест защищенного эндпоинта""" print("\n🔒 Тестирование защищенного эндпоинта...") try: response = requests.get( f"{BASE_URL}/api/auth/me", headers={"Authorization": f"Bearer {token}"} ) if response.status_code == 200: data = response.json() print(f"✅ Доступ к защищенному эндпоинту: {data}") return True else: print(f"❌ Ошибка доступа: {response.status_code} - {response.text}") return False except Exception as e: print(f"❌ Ошибка соединения: {e}") return False def test_projects_api(token): """Тест API проектов""" print("\n📋 Тестирование API проектов...") try: response = requests.get( f"{BASE_URL}/api/projects", headers={"Authorization": f"Bearer {token}"} ) if response.status_code == 200: projects = response.json() print(f"✅ Получен список проектов: {projects}") return True else: print(f"❌ Ошибка получения проектов: {response.status_code} - {response.text}") return False except Exception as e: print(f"❌ Ошибка соединения: {e}") return False def test_services_api(token): """Тест API сервисов""" print("\n🐳 Тестирование API сервисов...") try: response = requests.get( f"{BASE_URL}/api/services", headers={"Authorization": f"Bearer {token}"} ) if response.status_code == 200: services = response.json() print(f"✅ Получен список сервисов: {len(services)} контейнеров") return True else: print(f"❌ Ошибка получения сервисов: {response.status_code} - {response.text}") return False except Exception as e: print(f"❌ Ошибка соединения: {e}") return False def test_logout(token): """Тест выхода из системы""" print("\n🚪 Тестирование выхода из системы...") try: response = requests.post( f"{BASE_URL}/api/auth/logout", headers={"Authorization": f"Bearer {token}"} ) if response.status_code == 200: print("✅ Успешный выход из системы") return True else: print(f"❌ Ошибка выхода: {response.status_code} - {response.text}") return False except Exception as e: print(f"❌ Ошибка соединения: {e}") return False def test_unauthorized_access(): """Тест доступа без авторизации""" print("\n🚫 Тестирование доступа без авторизации...") try: response = requests.get(f"{BASE_URL}/api/projects") if response.status_code == 401: print("✅ Правильно отклонен доступ без авторизации") return True else: print(f"❌ Неожиданный ответ: {response.status_code} - {response.text}") return False except Exception as e: print(f"❌ Ошибка соединения: {e}") return False def main(): """Основная функция тестирования""" print("🧪 Тестирование новой системы авторизации LogBoard+") print("=" * 60) print(f"📅 Время тестирования: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}") print(f"🌐 URL: {BASE_URL}") print(f"👤 Пользователь: {USERNAME}") print("=" * 60) # Проверяем доступность сервера try: response = requests.get(f"{BASE_URL}/healthz") if response.status_code != 200: print("❌ Сервер недоступен") sys.exit(1) print("✅ Сервер доступен") except Exception as e: print(f"❌ Сервер недоступен: {e}") sys.exit(1) # Тестируем вход token = test_login() if not token: print("❌ Тест провален: не удалось войти в систему") sys.exit(1) # Тестируем защищенные эндпоинты success = True success &= test_protected_endpoint(token) success &= test_projects_api(token) success &= test_services_api(token) # Тестируем выход success &= test_logout(token) # Тестируем доступ без авторизации success &= test_unauthorized_access() print("\n" + "=" * 60) if success: print("🎉 Все тесты пройдены успешно!") print("✅ Новая система авторизации работает корректно") else: print("❌ Некоторые тесты провалились") print("🔧 Проверьте настройки и логи сервера") print("=" * 60) if __name__ == "__main__": main()