rtsp_tensorrt/tests/test_rtsp_writer.cpp
sladro e13cb3659c feat: 初始化项目结构
- 创建基本项目结构和目录
- 添加CMake构建系统
- 实现基础的配置解析功能
- 添加YOLO推理框架支持
- 集成RTSP和视频流处理功能
- 添加性能监控和日志系统
2024-12-24 16:25:03 +08:00

153 lines
4.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#include <gtest/gtest.h>
#include <filesystem>
#include "../pipeline/output/rtsp_writer.hpp"
#include "../pipeline/common/config_parser.hpp"
namespace pipeline {
namespace test {
class RtspWriterTest : public ::testing::Test {
protected:
void SetUp() override {
// 创建测试帧
test_frame_ = cv::Mat(480, 640, CV_8UC3, cv::Scalar(0, 255, 0));
cv::putText(test_frame_, "Test Frame", cv::Point(50, 50),
cv::FONT_HERSHEY_SIMPLEX, 1.0, cv::Scalar(255, 255, 255), 2);
}
// 创建基本配置
OutputTargetConfig createConfig(const std::string& name,
const std::string& codec = "h264") {
OutputTargetConfig config;
config.type = "rtsp";
config.name = name;
config.path = "mock://test/" + name; // 使用mock URL
config.fps = 30;
config.codec = codec;
config.bitrate = 4000000;
return config;
}
cv::Mat test_frame_;
};
// 基本功能测试
TEST_F(RtspWriterTest, BasicFunctionality) {
RtspWriter writer;
auto config = createConfig("test_basic");
// 测试初始化
EXPECT_TRUE(writer.init(config));
EXPECT_FALSE(writer.isOpened());
EXPECT_EQ(writer.getName(), "test_basic");
// 测试重复初始化
EXPECT_TRUE(writer.init(config));
}
// 配置验证测试
TEST_F(RtspWriterTest, ConfigValidation) {
RtspWriter writer;
// 测试空名称
{
auto config = createConfig("");
EXPECT_FALSE(writer.init(config));
}
// 测试空路径
{
auto config = createConfig("test_empty_path");
config.path = "";
EXPECT_FALSE(writer.init(config));
}
// 测试无效帧率
{
auto config = createConfig("test_invalid_fps");
config.fps = 0;
EXPECT_FALSE(writer.init(config));
}
}
// 编码器测试
TEST_F(RtspWriterTest, CodecValidation) {
// 测试有效编码器
{
RtspWriter writer;
auto config = createConfig("test_h264", "h264");
EXPECT_TRUE(writer.init(config));
}
// 测试无效编码器
{
RtspWriter writer;
auto config = createConfig("test_invalid", "invalid_codec");
EXPECT_FALSE(writer.init(config));
std::string error_msg;
EXPECT_FALSE(writer.getStatus(error_msg));
EXPECT_TRUE(error_msg.find("Unsupported codec") != std::string::npos);
}
}
// 错误处理测试
TEST_F(RtspWriterTest, ErrorHandling) {
RtspWriter writer;
// 测试未初始化写入
EXPECT_FALSE(writer.write(test_frame_));
// 测试写入空帧
auto config = createConfig("test_error");
EXPECT_TRUE(writer.init(config));
cv::Mat empty_frame;
EXPECT_FALSE(writer.write(empty_frame));
// 测试状态获取
std::string error_msg;
EXPECT_FALSE(writer.getStatus(error_msg));
EXPECT_FALSE(error_msg.empty());
}
// 资源管理测试
TEST_F(RtspWriterTest, ResourceManagement) {
// 测试自动释放
{
RtspWriter writer;
auto config = createConfig("test_auto_cleanup");
EXPECT_TRUE(writer.init(config));
// writer在这里会自动释放
}
// 测试手动释放
{
RtspWriter writer;
auto config = createConfig("test_manual_cleanup");
EXPECT_TRUE(writer.init(config));
writer.release();
EXPECT_FALSE(writer.isOpened());
}
}
// 集成测试需要实际RTSP服务器
TEST_F(RtspWriterTest, DISABLED_Integration) {
RtspWriter writer;
auto config = createConfig("test_integration");
config.path = "rtsp://localhost:8554/test"; // 使用实际RTSP服务器
ASSERT_TRUE(writer.init(config));
EXPECT_FALSE(writer.isOpened());
EXPECT_TRUE(writer.write(test_frame_));
EXPECT_TRUE(writer.isOpened());
for (int i = 0; i < 10; ++i) {
EXPECT_TRUE(writer.write(test_frame_));
}
writer.release();
EXPECT_FALSE(writer.isOpened());
}
} // namespace test
} // namespace pipeline