146 lines
4.1 KiB
Python
146 lines
4.1 KiB
Python
|
|
"""
|
||
|
|
视频流模块单元测试
|
||
|
|
"""
|
||
|
|
|
||
|
|
import unittest
|
||
|
|
from unittest.mock import MagicMock, patch, PropertyMock
|
||
|
|
from datetime import datetime
|
||
|
|
import sys
|
||
|
|
import os
|
||
|
|
import time
|
||
|
|
|
||
|
|
sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
||
|
|
|
||
|
|
|
||
|
|
class TestVideoFrame(unittest.TestCase):
|
||
|
|
"""测试视频帧类"""
|
||
|
|
|
||
|
|
def test_video_frame_creation(self):
|
||
|
|
"""测试视频帧创建"""
|
||
|
|
from core.video_stream import VideoFrame
|
||
|
|
import numpy as np
|
||
|
|
|
||
|
|
frame = VideoFrame(
|
||
|
|
frame_id="frame001",
|
||
|
|
camera_id="cam001",
|
||
|
|
image=np.zeros((480, 640, 3), dtype=np.uint8),
|
||
|
|
timestamp=datetime.now(),
|
||
|
|
frame_number=1,
|
||
|
|
width=640,
|
||
|
|
height=480,
|
||
|
|
fps=5.0
|
||
|
|
)
|
||
|
|
|
||
|
|
self.assertEqual(frame.frame_id, "frame001")
|
||
|
|
self.assertEqual(frame.camera_id, "cam001")
|
||
|
|
self.assertEqual(frame.width, 640)
|
||
|
|
self.assertEqual(frame.height, 480)
|
||
|
|
|
||
|
|
def test_video_frame_to_dict(self):
|
||
|
|
"""测试转换为字典"""
|
||
|
|
from core.video_stream import VideoFrame
|
||
|
|
import numpy as np
|
||
|
|
|
||
|
|
frame = VideoFrame(
|
||
|
|
frame_id="frame001",
|
||
|
|
camera_id="cam001",
|
||
|
|
image=np.zeros((480, 640, 3), dtype=np.uint8),
|
||
|
|
timestamp=datetime.now(),
|
||
|
|
frame_number=1,
|
||
|
|
width=640,
|
||
|
|
height=480,
|
||
|
|
fps=5.0
|
||
|
|
)
|
||
|
|
|
||
|
|
result = frame.to_dict()
|
||
|
|
|
||
|
|
self.assertEqual(result["frame_id"], "frame001")
|
||
|
|
self.assertEqual(result["camera_id"], "cam001")
|
||
|
|
self.assertEqual(result["frame_number"], 1)
|
||
|
|
|
||
|
|
|
||
|
|
class TestRTSPStreamReader(unittest.TestCase):
|
||
|
|
"""测试RTSP流读取器"""
|
||
|
|
|
||
|
|
def test_stream_reader_creation(self):
|
||
|
|
"""测试读取器创建"""
|
||
|
|
from core.video_stream import RTSPStreamReader
|
||
|
|
|
||
|
|
reader = RTSPStreamReader(
|
||
|
|
camera_id="cam001",
|
||
|
|
rtsp_url="rtsp://192.168.1.1:554/stream1",
|
||
|
|
target_fps=5
|
||
|
|
)
|
||
|
|
|
||
|
|
self.assertEqual(reader.camera_id, "cam001")
|
||
|
|
self.assertEqual(reader.target_fps, 5)
|
||
|
|
self.assertFalse(reader.is_connected)
|
||
|
|
self.assertFalse(reader.is_running)
|
||
|
|
|
||
|
|
def test_stream_status(self):
|
||
|
|
"""测试流状态"""
|
||
|
|
from core.video_stream import StreamStatus
|
||
|
|
|
||
|
|
status = StreamStatus(
|
||
|
|
camera_id="cam001",
|
||
|
|
is_connected=True,
|
||
|
|
is_running=True,
|
||
|
|
last_frame_time=datetime.now(),
|
||
|
|
frame_count=100,
|
||
|
|
reconnect_attempts=0,
|
||
|
|
error_message=None
|
||
|
|
)
|
||
|
|
|
||
|
|
self.assertEqual(status.camera_id, "cam001")
|
||
|
|
self.assertTrue(status.is_connected)
|
||
|
|
self.assertTrue(status.is_running)
|
||
|
|
self.assertEqual(status.frame_count, 100)
|
||
|
|
|
||
|
|
|
||
|
|
class TestMultiStreamManager(unittest.TestCase):
|
||
|
|
"""测试多流管理器"""
|
||
|
|
|
||
|
|
def test_manager_creation(self):
|
||
|
|
"""测试管理器创建"""
|
||
|
|
from core.video_stream import MultiStreamManager
|
||
|
|
|
||
|
|
manager = MultiStreamManager()
|
||
|
|
|
||
|
|
self.assertEqual(len(manager.get_all_streams()), 0)
|
||
|
|
|
||
|
|
def test_add_remove_stream(self):
|
||
|
|
"""测试添加和移除流"""
|
||
|
|
from core.video_stream import MultiStreamManager
|
||
|
|
|
||
|
|
manager = MultiStreamManager()
|
||
|
|
|
||
|
|
reader = manager.add_stream(
|
||
|
|
camera_id="cam001",
|
||
|
|
rtsp_url="rtsp://192.168.1.1:554/stream1"
|
||
|
|
)
|
||
|
|
|
||
|
|
self.assertEqual(len(manager.get_all_streams()), 1)
|
||
|
|
|
||
|
|
manager.remove_stream("cam001")
|
||
|
|
|
||
|
|
self.assertEqual(len(manager.get_all_streams()), 0)
|
||
|
|
|
||
|
|
def test_get_statistics(self):
|
||
|
|
"""测试获取统计"""
|
||
|
|
from core.video_stream import MultiStreamManager
|
||
|
|
|
||
|
|
manager = MultiStreamManager()
|
||
|
|
manager.add_stream(
|
||
|
|
camera_id="cam001",
|
||
|
|
rtsp_url="rtsp://192.168.1.1:554/stream1"
|
||
|
|
)
|
||
|
|
|
||
|
|
stats = manager.get_statistics()
|
||
|
|
|
||
|
|
self.assertEqual(stats["total_streams"], 1)
|
||
|
|
self.assertIn("streams", stats)
|
||
|
|
|
||
|
|
|
||
|
|
if __name__ == "__main__":
|
||
|
|
unittest.main()
|