CollisionAvoidance/tests/HTTPDataSourceTest.cpp

88 lines
2.9 KiB
C++

#include <gtest/gtest.h>
#include <gmock/gmock.h>
#include "network/HTTPDataSource.h"
class HTTPDataSourceTest : public ::testing::Test {
protected:
std::unique_ptr<HTTPDataSource> source;
void SetUp() override {
DataSourceConfig config;
config.host = "localhost";
config.port = 8080;
config.aircraft_path = "/api/getCurrentFlightPositions";
config.vehicle_path = "/api/getCurrentVehiclePositions";
source = std::make_unique<HTTPDataSource>(config);
}
void TearDown() override {
source.reset();
}
};
TEST_F(HTTPDataSourceTest, ConnectTest) {
EXPECT_FALSE(source->isAvailable()); // 初始状态应该是未连接
EXPECT_TRUE(source->connect()); // 连接应该成功
EXPECT_TRUE(source->isAvailable()); // 连接后应该可用
}
TEST_F(HTTPDataSourceTest, DisconnectTest) {
source->connect();
EXPECT_TRUE(source->isAvailable());
source->disconnect();
EXPECT_FALSE(source->isAvailable());
}
TEST_F(HTTPDataSourceTest, FetchAircraftDataTest) {
std::vector<Aircraft> aircraft;
source->connect();
EXPECT_TRUE(source->fetchAircraftData(aircraft));
// 注意:这里的具体数据验证取决于你的测试环境和模拟数据
}
TEST_F(HTTPDataSourceTest, FetchVehicleDataTest) {
std::vector<Vehicle> vehicles;
source->connect();
EXPECT_TRUE(source->fetchVehicleData(vehicles));
// 注意:这里的具体数据验证取决于你的测试环境和模拟数据
}
TEST_F(HTTPDataSourceTest, CustomPathTest) {
// 测试使用自定义路径创建数据源
DataSourceConfig config;
config.host = "localhost";
config.port = 8080;
config.aircraft_path = "/custom/path";
auto customSource = std::make_unique<HTTPDataSource>(config);
EXPECT_TRUE(customSource->connect());
EXPECT_TRUE(customSource->isAvailable());
}
TEST_F(HTTPDataSourceTest, ConnectionFailureTest) {
// 测试连接到不存在的服务器
DataSourceConfig config;
config.host = "invalid-host";
config.port = 9999;
auto invalidSource = std::make_unique<HTTPDataSource>(config);
EXPECT_FALSE(invalidSource->connect());
EXPECT_FALSE(invalidSource->isAvailable());
}
TEST_F(HTTPDataSourceTest, FetchDataWithoutConnectionTest) {
// 测试在未连接状态下获取数据
std::vector<Aircraft> aircraft;
std::vector<Vehicle> vehicles;
EXPECT_FALSE(source->fetchAircraftData(aircraft));
EXPECT_FALSE(source->fetchVehicleData(vehicles));
}
// 如果你的环境支持模拟网络响应,可以添加更多测试
TEST_F(HTTPDataSourceTest, InvalidResponseTest) {
// 这个测试需要模拟无效的服务器响应
// 你可能需要使用 mock 对象或者设置一个返回无效数据的测试服务器
source->connect();
std::vector<Aircraft> aircraft;
// 假设服务器返回无效的 JSON 数据
// EXPECT_FALSE(source->fetchAircraftData(aircraft));
}