Files
StreamLens/test_tabbed_interface.py

96 lines
3.8 KiB
Python
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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)