CollisionAvoidance/tests/HTTPDataSourceTest.cpp

106 lines
2.9 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");
// 不检查高度,因为接口不返回高度信息
}
}
// 测试获取车辆数据
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());
// 不检查 trackNumber因为接口不返回该字段
// 检查位置在合理范围内
EXPECT_GE(a.position.x, 0.0);
EXPECT_GE(a.position.y, 0.0);
}
}
// 获取并检查车辆数据
{
std::vector<Vehicle> vehicles;
ASSERT_TRUE(source->fetchVehicleData(vehicles));
for (const auto& v : vehicles) {
// 检查基本字段
EXPECT_FALSE(v.vehicleNo.empty());
// 检查位置在合理范围内
EXPECT_GE(v.position.x, 0.0);
EXPECT_GE(v.position.y, 0.0);
}
}
}