VulnBuster / test_build.py
zjkarina's picture
Fix dependency conflicts between smolagents and semgrep
4f21d95
#!/usr/bin/env python3
"""
Простой тест для проверки импорта основных зависимостей после исправления конфликта
"""
import sys
def test_imports():
"""Проверяет что все основные зависимости импортируются без ошибок"""
print("🧪 Тестирование импорта зависимостей...")
errors = []
# Тестируем основные зависимости
test_packages = [
("gradio", "Gradio framework"),
("bandit", "Bandit security scanner"),
("detect_secrets", "Detect Secrets scanner"),
("semgrep", "Semgrep scanner"),
("smolagents", "SmolaAgents MCP framework"),
("agno", "Agno AI agent framework"),
("rich", "Rich text formatting"),
("fastapi", "FastAPI framework"),
("uvicorn", "Uvicorn ASGI server"),
("pandas", "Pandas data analysis"),
("numpy", "Numpy arrays"),
("pydantic", "Pydantic data validation"),
("aiohttp", "Async HTTP client"),
("requests", "HTTP requests library"),
("click", "Click CLI framework"),
("yaml", "PyYAML parser"),
("toml", "TOML parser"),
("dotenv", "Python dotenv")
]
success_count = 0
for package, description in test_packages:
try:
if package == "yaml":
import yaml
elif package == "dotenv":
from dotenv import load_dotenv
else:
__import__(package)
print(f"✅ {package}: {description}")
success_count += 1
except ImportError as e:
error_msg = f"❌ {package}: {description} - {str(e)}"
print(error_msg)
errors.append(error_msg)
except Exception as e:
error_msg = f"⚠️ {package}: {description} - Unexpected error: {str(e)}"
print(error_msg)
errors.append(error_msg)
print(f"\n📊 Результаты тестирования:")
print(f"✅ Успешно импортировано: {success_count}/{len(test_packages)}")
print(f"❌ Ошибок импорта: {len(errors)}")
if errors:
print(f"\n❌ Ошибки:")
for error in errors:
print(f" {error}")
return False
else:
print(f"\n🎉 Все зависимости импортируются корректно!")
return True
def test_rich_version():
"""Проверяет версию rich и совместимость с semgrep и smolagents"""
print("\n🔍 Проверка версии Rich...")
try:
import rich
# Пробуем получить версию через importlib.metadata (более надежный способ)
try:
from importlib.metadata import version
rich_version_str = version('rich')
except ImportError:
# Fallback для старых версий Python
import pkg_resources
rich_version_str = pkg_resources.get_distribution('rich').version
print(f"✅ Rich версия: {rich_version_str}")
# Проверяем что rich >= 13.9.4 (требование smolagents)
from packaging import version as pkg_version
rich_version = pkg_version.parse(rich_version_str)
min_required = pkg_version.parse("13.9.4")
if rich_version >= min_required:
print(f"✅ Rich версия {rich_version_str} соответствует требованиям smolagents (>=13.9.4)")
else:
print(f"⚠️ Rich версия {rich_version_str} может быть несовместима с smolagents (требуется >=13.9.4)")
return False
# Пробуем импортировать функции, которые используют semgrep и smolagents
from rich.console import Console
from rich.table import Table
print("✅ Rich Console и Table импортируются корректно")
return True
except Exception as e:
print(f"❌ Ошибка при проверке Rich: {str(e)}")
return False
def main():
"""Основная функция тестирования"""
print("🔒 Тест совместимости зависимостей VulnBuster")
print("=" * 60)
# Тестируем импорты
imports_ok = test_imports()
# Тестируем версию Rich
rich_ok = test_rich_version()
print("\n" + "=" * 60)
if imports_ok and rich_ok:
print("🎉 Все тесты пройдены успешно!")
print("💡 Теперь можно запустить: docker build -t vulnbuster .")
sys.exit(0)
else:
print("❌ Некоторые тесты не пройдены")
print("💡 Проверьте requirements.txt и Dockerfile")
sys.exit(1)
if __name__ == "__main__":
main()