#include #include #include "network/HTTPDataSource.h" #include "utils/Logger.h" class HTTPDataSourceTest : public ::testing::Test { protected: void SetUp() override { // 设置测试环境 source = std::make_unique("localhost", 8080); } void TearDown() override { source.reset(); } std::unique_ptr source; }; // 测试连接功能 TEST_F(HTTPDataSourceTest, ConnectionTest) { EXPECT_TRUE(source->connect()); EXPECT_TRUE(source->isAvailable()); source->disconnect(); EXPECT_FALSE(source->isAvailable()); } // 测试获取航空器数据 TEST_F(HTTPDataSourceTest, GetAircraftData) { ASSERT_TRUE(source->connect()); std::vector aircraft; EXPECT_TRUE(source->fetchAircraftData(aircraft)); EXPECT_FALSE(aircraft.empty()); // 检查第一个航空器的数据 if (!aircraft.empty()) { const auto& first = aircraft[0]; EXPECT_EQ(first.flightNo, "CES2501"); EXPECT_EQ(first.altitude, 5.0); // 不检查速度和航���,因为这些是由位置变化计算得出的 } } // 测试获取车辆数据 TEST_F(HTTPDataSourceTest, GetVehicleData) { ASSERT_TRUE(source->connect()); std::vector vehicles; EXPECT_TRUE(source->fetchVehicleData(vehicles)); EXPECT_FALSE(vehicles.empty()); // 检查第一个车辆的数据 if (!vehicles.empty()) { const auto& first = vehicles[0]; EXPECT_EQ(first.vehicleNo, "VEH001"); // 不检查速度和航向,因为这些是由位置变化计算得出的 } } // 测试错误处理 TEST_F(HTTPDataSourceTest, ErrorHandling) { // 测试错误的端口 auto badPortSource = std::make_unique("localhost", 9999); EXPECT_FALSE(badPortSource->connect()); // 测试无效的响应 ASSERT_TRUE(source->connect()); std::vector aircraft; source->disconnect(); // 断开连接后尝试获取数据 EXPECT_FALSE(source->fetchAircraftData(aircraft)); } // 测试数据解析 TEST_F(HTTPDataSourceTest, DataParsing) { ASSERT_TRUE(source->connect()); // 获取并检查航空器数据 { std::vector aircraft; ASSERT_TRUE(source->fetchAircraftData(aircraft)); for (const auto& a : aircraft) { // 检查基本字段 EXPECT_FALSE(a.flightNo.empty()); EXPECT_FALSE(a.trackNumber.empty()); EXPECT_GE(a.altitude, 0.0); // 检查位置在合理范围内 EXPECT_GE(a.geo.latitude, 35.0); // 青岛地区的大致范围 EXPECT_LE(a.geo.latitude, 37.0); EXPECT_GE(a.geo.longitude, 119.0); EXPECT_LE(a.geo.longitude, 121.0); } } // 获取并检查车辆数据 { std::vector vehicles; ASSERT_TRUE(source->fetchVehicleData(vehicles)); for (const auto& v : vehicles) { // 检查基本字段 EXPECT_FALSE(v.vehicleNo.empty()); // 检查位置在合理范围内 EXPECT_GE(v.geo.latitude, 35.0); EXPECT_LE(v.geo.latitude, 37.0); EXPECT_GE(v.geo.longitude, 119.0); EXPECT_LE(v.geo.longitude, 121.0); } } }