fix bugs in tests
parent
c8054f8090
commit
1b9d2a4df9
|
@ -95,7 +95,7 @@ void server::stop() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_INFO("Stopping MCP server...");
|
LOG_INFO("Stopping MCP server on ", host_, ":", port_);
|
||||||
running_ = false;
|
running_ = false;
|
||||||
|
|
||||||
// 关闭维护线程
|
// 关闭维护线程
|
||||||
|
|
|
@ -93,9 +93,9 @@ TEST_F(MessageFormatTest, NotificationMessageFormat) {
|
||||||
EXPECT_TRUE(notification.is_notification());
|
EXPECT_TRUE(notification.is_notification());
|
||||||
}
|
}
|
||||||
|
|
||||||
// 测试生命周期
|
// 生命周期测试环境
|
||||||
class LifecycleTest : public ::testing::Test {
|
class LifecycleEnvironment : public ::testing::Environment {
|
||||||
protected:
|
public:
|
||||||
void SetUp() override {
|
void SetUp() override {
|
||||||
// 设置测试环境
|
// 设置测试环境
|
||||||
server_ = std::make_unique<server>("localhost", 8080);
|
server_ = std::make_unique<server>("localhost", 8080);
|
||||||
|
@ -111,7 +111,7 @@ protected:
|
||||||
server_->set_capabilities(server_capabilities);
|
server_->set_capabilities(server_capabilities);
|
||||||
|
|
||||||
// 注册初始化方法处理器
|
// 注册初始化方法处理器
|
||||||
server_->register_method("initialize", [this, server_capabilities](const json& params) -> json {
|
server_->register_method("initialize", [server_capabilities](const json& params) -> json {
|
||||||
// 验证初始化请求参数
|
// 验证初始化请求参数
|
||||||
EXPECT_EQ(params["protocolVersion"], MCP_VERSION);
|
EXPECT_EQ(params["protocolVersion"], MCP_VERSION);
|
||||||
EXPECT_TRUE(params.contains("capabilities"));
|
EXPECT_TRUE(params.contains("capabilities"));
|
||||||
|
@ -142,17 +142,43 @@ protected:
|
||||||
|
|
||||||
void TearDown() override {
|
void TearDown() override {
|
||||||
// 清理测试环境
|
// 清理测试环境
|
||||||
|
client_.reset();
|
||||||
server_->stop();
|
server_->stop();
|
||||||
server_.reset();
|
server_.reset();
|
||||||
client_.reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<server> server_;
|
static std::unique_ptr<server>& GetServer() {
|
||||||
std::unique_ptr<sse_client> client_;
|
return server_;
|
||||||
|
}
|
||||||
|
|
||||||
|
static std::unique_ptr<sse_client>& GetClient() {
|
||||||
|
return client_;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
static std::unique_ptr<server> server_;
|
||||||
|
static std::unique_ptr<sse_client> client_;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 静态成员变量定义
|
||||||
|
std::unique_ptr<server> LifecycleEnvironment::server_;
|
||||||
|
std::unique_ptr<sse_client> LifecycleEnvironment::client_;
|
||||||
|
|
||||||
|
// 测试生命周期
|
||||||
|
class LifecycleTest : public ::testing::Test {
|
||||||
|
protected:
|
||||||
|
void SetUp() override {
|
||||||
|
// 获取客户端指针
|
||||||
|
client_ = LifecycleEnvironment::GetClient().get();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 使用原始指针而不是引用
|
||||||
|
sse_client* client_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 测试初始化流程
|
// 测试初始化流程
|
||||||
TEST_F(LifecycleTest, InitializeProcess) {
|
TEST_F(LifecycleTest, InitializeProcess) {
|
||||||
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
||||||
// 执行初始化
|
// 执行初始化
|
||||||
bool init_result = client_->initialize("TestClient", "1.0.0");
|
bool init_result = client_->initialize("TestClient", "1.0.0");
|
||||||
|
|
||||||
|
@ -167,9 +193,9 @@ TEST_F(LifecycleTest, InitializeProcess) {
|
||||||
EXPECT_TRUE(server_capabilities.contains("tools"));
|
EXPECT_TRUE(server_capabilities.contains("tools"));
|
||||||
}
|
}
|
||||||
|
|
||||||
// 测试版本控制
|
// 版本控制测试环境
|
||||||
class VersioningTest : public ::testing::Test {
|
class VersioningEnvironment : public ::testing::Environment {
|
||||||
protected:
|
public:
|
||||||
void SetUp() override {
|
void SetUp() override {
|
||||||
// 设置测试环境
|
// 设置测试环境
|
||||||
server_ = std::make_unique<server>("localhost", 8081);
|
server_ = std::make_unique<server>("localhost", 8081);
|
||||||
|
@ -192,13 +218,38 @@ protected:
|
||||||
|
|
||||||
void TearDown() override {
|
void TearDown() override {
|
||||||
// 清理测试环境
|
// 清理测试环境
|
||||||
|
client_.reset();
|
||||||
server_->stop();
|
server_->stop();
|
||||||
server_.reset();
|
server_.reset();
|
||||||
client_.reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<server> server_;
|
static std::unique_ptr<server>& GetServer() {
|
||||||
std::unique_ptr<sse_client> client_;
|
return server_;
|
||||||
|
}
|
||||||
|
|
||||||
|
static std::unique_ptr<sse_client>& GetClient() {
|
||||||
|
return client_;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
static std::unique_ptr<server> server_;
|
||||||
|
static std::unique_ptr<sse_client> client_;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 静态成员变量定义
|
||||||
|
std::unique_ptr<server> VersioningEnvironment::server_;
|
||||||
|
std::unique_ptr<sse_client> VersioningEnvironment::client_;
|
||||||
|
|
||||||
|
// 测试版本控制
|
||||||
|
class VersioningTest : public ::testing::Test {
|
||||||
|
protected:
|
||||||
|
void SetUp() override {
|
||||||
|
// 获取客户端指针
|
||||||
|
client_ = VersioningEnvironment::GetClient().get();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 使用原始指针而不是引用
|
||||||
|
sse_client* client_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 测试支持的版本
|
// 测试支持的版本
|
||||||
|
@ -312,9 +363,9 @@ TEST_F(VersioningTest, UnsupportedVersion) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 测试Ping功能
|
// Ping测试环境
|
||||||
class PingTest : public ::testing::Test {
|
class PingEnvironment : public ::testing::Environment {
|
||||||
protected:
|
public:
|
||||||
void SetUp() override {
|
void SetUp() override {
|
||||||
// 设置测试环境
|
// 设置测试环境
|
||||||
server_ = std::make_unique<server>("localhost", 8082);
|
server_ = std::make_unique<server>("localhost", 8082);
|
||||||
|
@ -333,13 +384,38 @@ protected:
|
||||||
|
|
||||||
void TearDown() override {
|
void TearDown() override {
|
||||||
// 清理测试环境
|
// 清理测试环境
|
||||||
|
client_.reset();
|
||||||
server_->stop();
|
server_->stop();
|
||||||
server_.reset();
|
server_.reset();
|
||||||
client_.reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<server> server_;
|
static std::unique_ptr<server>& GetServer() {
|
||||||
std::unique_ptr<sse_client> client_;
|
return server_;
|
||||||
|
}
|
||||||
|
|
||||||
|
static std::unique_ptr<sse_client>& GetClient() {
|
||||||
|
return client_;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
static std::unique_ptr<server> server_;
|
||||||
|
static std::unique_ptr<sse_client> client_;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 静态成员变量定义
|
||||||
|
std::unique_ptr<server> PingEnvironment::server_;
|
||||||
|
std::unique_ptr<sse_client> PingEnvironment::client_;
|
||||||
|
|
||||||
|
// 测试Ping功能
|
||||||
|
class PingTest : public ::testing::Test {
|
||||||
|
protected:
|
||||||
|
void SetUp() override {
|
||||||
|
// 获取客户端指针
|
||||||
|
client_ = PingEnvironment::GetClient().get();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 使用原始指针而不是引用
|
||||||
|
sse_client* client_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 测试Ping请求
|
// 测试Ping请求
|
||||||
|
@ -351,6 +427,7 @@ TEST_F(PingTest, PingRequest) {
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(PingTest, DirectPing) {
|
TEST_F(PingTest, DirectPing) {
|
||||||
|
std::this_thread::sleep_for(std::chrono::milliseconds(100));
|
||||||
try {
|
try {
|
||||||
// 使用 httplib::Client 发送不支持的版本请求
|
// 使用 httplib::Client 发送不支持的版本请求
|
||||||
std::unique_ptr<httplib::Client> sse_client = std::make_unique<httplib::Client>("localhost", 8082);
|
std::unique_ptr<httplib::Client> sse_client = std::make_unique<httplib::Client>("localhost", 8082);
|
||||||
|
@ -448,9 +525,9 @@ TEST_F(PingTest, DirectPing) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 测试工具功能
|
// 工具测试环境
|
||||||
class ToolsTest : public ::testing::Test {
|
class ToolsEnvironment : public ::testing::Environment {
|
||||||
protected:
|
public:
|
||||||
void SetUp() override {
|
void SetUp() override {
|
||||||
// 设置测试环境
|
// 设置测试环境
|
||||||
server_ = std::make_unique<server>("localhost", 8083);
|
server_ = std::make_unique<server>("localhost", 8083);
|
||||||
|
@ -486,7 +563,7 @@ protected:
|
||||||
});
|
});
|
||||||
|
|
||||||
// 注册工具列表方法
|
// 注册工具列表方法
|
||||||
server_->register_method("tools/list", [this](const json& params) -> json {
|
server_->register_method("tools/list", [](const json& params) -> json {
|
||||||
return {
|
return {
|
||||||
{"tools", json::array({
|
{"tools", json::array({
|
||||||
{
|
{
|
||||||
|
@ -509,7 +586,7 @@ protected:
|
||||||
});
|
});
|
||||||
|
|
||||||
// 注册工具调用方法
|
// 注册工具调用方法
|
||||||
server_->register_method("tools/call", [this](const json& params) -> json {
|
server_->register_method("tools/call", [](const json& params) -> json {
|
||||||
// 验证参数
|
// 验证参数
|
||||||
EXPECT_EQ(params["name"], "get_weather");
|
EXPECT_EQ(params["name"], "get_weather");
|
||||||
EXPECT_EQ(params["arguments"]["location"], "New York");
|
EXPECT_EQ(params["arguments"]["location"], "New York");
|
||||||
|
@ -541,13 +618,38 @@ protected:
|
||||||
|
|
||||||
void TearDown() override {
|
void TearDown() override {
|
||||||
// 清理测试环境
|
// 清理测试环境
|
||||||
|
client_.reset();
|
||||||
server_->stop();
|
server_->stop();
|
||||||
server_.reset();
|
server_.reset();
|
||||||
client_.reset();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::unique_ptr<server> server_;
|
static std::unique_ptr<server>& GetServer() {
|
||||||
std::unique_ptr<sse_client> client_;
|
return server_;
|
||||||
|
}
|
||||||
|
|
||||||
|
static std::unique_ptr<sse_client>& GetClient() {
|
||||||
|
return client_;
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
static std::unique_ptr<server> server_;
|
||||||
|
static std::unique_ptr<sse_client> client_;
|
||||||
|
};
|
||||||
|
|
||||||
|
// 静态成员变量定义
|
||||||
|
std::unique_ptr<server> ToolsEnvironment::server_;
|
||||||
|
std::unique_ptr<sse_client> ToolsEnvironment::client_;
|
||||||
|
|
||||||
|
// 测试工具功能
|
||||||
|
class ToolsTest : public ::testing::Test {
|
||||||
|
protected:
|
||||||
|
void SetUp() override {
|
||||||
|
// 获取客户端指针
|
||||||
|
client_ = ToolsEnvironment::GetClient().get();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 使用原始指针而不是引用
|
||||||
|
sse_client* client_;
|
||||||
};
|
};
|
||||||
|
|
||||||
// 测试列出工具
|
// 测试列出工具
|
||||||
|
@ -579,5 +681,12 @@ TEST_F(ToolsTest, CallTool) {
|
||||||
|
|
||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
::testing::InitGoogleTest(&argc, argv);
|
::testing::InitGoogleTest(&argc, argv);
|
||||||
|
|
||||||
|
// 添加全局测试环境
|
||||||
|
::testing::AddGlobalTestEnvironment(new LifecycleEnvironment());
|
||||||
|
::testing::AddGlobalTestEnvironment(new VersioningEnvironment());
|
||||||
|
::testing::AddGlobalTestEnvironment(new PingEnvironment());
|
||||||
|
::testing::AddGlobalTestEnvironment(new ToolsEnvironment());
|
||||||
|
|
||||||
return RUN_ALL_TESTS();
|
return RUN_ALL_TESTS();
|
||||||
}
|
}
|
Loading…
Reference in New Issue