SecurityIncidentAnalyzer / tests /test_analyzer.py
Debashis
Initial commit: Security Incident Analyzer with LLM integration
0355450
"""Tests for security analysis logic."""
import pytest
from src.analyzer import IncidentAnalyzer, RiskLevel, SecurityAnalysis
from src.llm import MockLLMProvider
@pytest.fixture
def analyzer():
"""Create analyzer with mock provider for tests."""
provider = MockLLMProvider()
return IncidentAnalyzer(provider)
@pytest.mark.asyncio
async def test_analyze_basic(analyzer):
"""Test basic analysis flow."""
log = "Failed authentication attempts from 192.168.1.100"
result = await analyzer.analyze(log)
assert isinstance(result, SecurityAnalysis)
assert result.summary
assert result.risk_level in RiskLevel
assert result.remediation
assert result.raw_response
def test_parse_response_critical(analyzer):
"""Test parsing of critical risk level."""
response = """
What Happened: Ransomware detected
Risk Level: CRITICAL
Suggested Actions:
- Isolate affected systems
"""
result = analyzer._parse_response(response)
assert result.risk_level == RiskLevel.CRITICAL
def test_parse_response_fallback_risk(analyzer):
"""Test risk level defaults to MEDIUM if not found."""
response = "This is a generic response with no risk level specified"
result = analyzer._parse_response(response)
assert result.risk_level == RiskLevel.MEDIUM
def test_parse_response_indicators(analyzer):
"""Test extraction of indicators."""
response = """What Happened: Suspicious activity
Risk Level: HIGH
Suggested Actions: Review logs
Indicators:
- Multiple failed logins
- Unusual IP address"""
result = analyzer._parse_response(response)
assert len(result.indicators) >= 2
assert any("failed" in ind.lower() for ind in result.indicators)