CollisionAvoidance/tests/HTTPDataSourceTest.cpp

114 lines
3.3 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 <gmock/gmock.h>
#include "network/HTTPDataSource.h"
#include "utils/Logger.h"
class HTTPDataSourceTest : public ::testing::Test {
protected:
void SetUp() override {
// 设置测试环境
source = std::make_unique<HTTPDataSource>("localhost", 8080);
}
void TearDown() override {
source.reset();
}
std::unique_ptr<HTTPDataSource> 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> 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);
// 不检查速度和航<E5928C><E888AA><EFBFBD>因为这些是由位置变化计算得出的
}
}
// 测试获取车辆数据
TEST_F(HTTPDataSourceTest, GetVehicleData) {
ASSERT_TRUE(source->connect());
std::vector<Vehicle> 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<HTTPDataSource>("localhost", 9999);
EXPECT_FALSE(badPortSource->connect());
// 测试无效的响应
ASSERT_TRUE(source->connect());
std::vector<Aircraft> aircraft;
source->disconnect(); // 断开连接后尝试获取数据
EXPECT_FALSE(source->fetchAircraftData(aircraft));
}
// 测试数据解析
TEST_F(HTTPDataSourceTest, DataParsing) {
ASSERT_TRUE(source->connect());
// 获取并检查航空器数据
{
std::vector<Aircraft> 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<Vehicle> 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);
}
}
}