File size: 5,213 Bytes
4f21d95
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#!/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()