Files
StreamLens/test_tabbed_interface.py

96 lines
3.8 KiB
Python
Raw Permalink Normal View History

2025-07-30 23:48:32 -04:00
#!/usr/bin/env python3
"""
Test the tabbed interface integration
"""
import sys
sys.path.append('.')
from analyzer.analysis import EthernetAnalyzer
from analyzer.analysis.background_analyzer import BackgroundAnalyzer
import time
def test_tabbed_interface():
"""Test that the tabbed interface can detect frame types"""
print("=== Testing Tabbed Interface Frame Type Detection ===")
# Create analyzer
analyzer = EthernetAnalyzer(enable_realtime=False, outlier_threshold_sigma=3.0)
# Process the PCAP file
bg_analyzer = BackgroundAnalyzer(analyzer, num_threads=1)
bg_analyzer.start_parsing("1 PTPGM.pcapng")
# Wait for completion
start_time = time.time()
while bg_analyzer.is_parsing:
time.sleep(0.1)
if time.time() - start_time > 30:
break
bg_analyzer.cleanup()
# Analyze detected frame types
print(f"\\n📊 Flow Analysis Results:")
print(f" Total flows: {len(analyzer.flows)}")
all_frame_types = set()
flow_frame_type_summary = {}
for i, (flow_key, flow) in enumerate(analyzer.flows.items()):
print(f"\\n🔍 Flow {i+1}: {flow.src_ip}:{flow.src_port}{flow.dst_ip}:{flow.dst_port}")
print(f" Transport: {flow.transport_protocol}")
print(f" Total packets: {flow.frame_count}")
if flow.frame_types:
print(f" Frame types ({len(flow.frame_types)}):")
for frame_type, ft_stats in sorted(flow.frame_types.items(), key=lambda x: x[1].count, reverse=True):
all_frame_types.add(frame_type)
# Track frame type usage
if frame_type not in flow_frame_type_summary:
flow_frame_type_summary[frame_type] = {"flows": 0, "total_packets": 0}
flow_frame_type_summary[frame_type]["flows"] += 1
flow_frame_type_summary[frame_type]["total_packets"] += ft_stats.count
# Show frame type details
avg_delta = f"{ft_stats.avg_inter_arrival * 1000:.1f}ms" if ft_stats.avg_inter_arrival > 0 else "N/A"
outliers = len(ft_stats.outlier_frames)
print(f" - {frame_type}: {ft_stats.count} packets, avg Δt: {avg_delta}, outliers: {outliers}")
else:
print(f" No frame types detected")
# Summary for tabbed interface
print(f"\\n📋 Tabbed Interface Summary:")
print(f" Detected frame types: {len(all_frame_types)}")
print(f" Tabs needed: Overview + {len(all_frame_types)} frame-specific tabs")
print(f"\\n🏷 Frame Type Distribution:")
for frame_type, stats in sorted(flow_frame_type_summary.items(), key=lambda x: x[1]["total_packets"], reverse=True):
print(f" {frame_type}: {stats['flows']} flows, {stats['total_packets']:,} packets")
# Recommend tab structure
print(f"\\n📑 Recommended Tab Structure:")
print(f" 1. Overview Tab: All flows summary")
tab_num = 2
for frame_type in sorted(all_frame_types):
stats = flow_frame_type_summary[frame_type]
print(f" {tab_num}. {frame_type} Tab: {stats['flows']} flows, {stats['total_packets']:,} packets")
tab_num += 1
print(f"\\n✅ Tabbed interface test completed!")
print(f"📊 Expected behavior:")
print(f" - Overview tab shows all flows with mixed frame types")
print(f" - Each frame-specific tab shows flows filtered to that frame type")
print(f" - Frame-specific tabs show detailed statistics for that frame type")
return len(all_frame_types) > 0
if __name__ == "__main__":
success = test_tabbed_interface()
if success:
print("\\n🎉 Test passed - Frame types detected!")
else:
print("\\n❌ Test failed - No frame types detected")
sys.exit(1)