114 lines
3.3 KiB
C++
114 lines
3.3 KiB
C++
#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);
|
||
}
|
||
}
|
||
}
|