96 lines
3.8 KiB
Python
96 lines
3.8 KiB
Python
#!/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) |