yao/mcp/mcp_test.go
Max d5dd0f56c7 Add system model loading functionality for testing
- Introduced a new function `loadSystemModels` to load predefined system models for testing purposes, enhancing the test environment setup.
- Implemented error handling for model loading and migration, ensuring robust integration of system models.
- Updated the `Prepare` function to call `loadSystemModels`, streamlining the test preparation process.
2025-07-16 16:43:45 +08:00

129 lines
3.1 KiB
Go

package mcp
import (
"testing"
"github.com/stretchr/testify/assert"
"github.com/yaoapp/gou/mcp"
"github.com/yaoapp/yao/config"
"github.com/yaoapp/yao/test"
)
func TestLoad(t *testing.T) {
test.Prepare(t, config.Conf)
defer test.Clean()
err := Load(config.Conf)
// Load may fail due to configuration issues, but we should still check what was loaded
if err != nil {
t.Logf("Load returned error: %v", err)
}
check(t)
}
func check(t *testing.T) {
clients := mcp.ListClients()
clientMap := make(map[string]bool)
for _, id := range clients {
clientMap[id] = true
}
t.Logf("Loaded clients: %v", clients)
// Check if test MCP clients are loaded (they may fail to load due to configuration)
if clientMap["test"] {
assert.True(t, clientMap["test"], "test MCP client should be loaded")
// Verify clients can be selected
testClient, err := mcp.Select("test")
assert.Nil(t, err)
assert.NotNil(t, testClient)
// Check that clients exist
assert.True(t, mcp.Exists("test"))
t.Logf("test MCP client loaded successfully")
} else {
t.Logf("test MCP client not loaded (possibly due to configuration issues)")
}
if clientMap["http_test"] {
assert.True(t, clientMap["http_test"], "http_test MCP client should be loaded")
httpTestClient, err := mcp.Select("http_test")
assert.Nil(t, err)
assert.NotNil(t, httpTestClient)
assert.True(t, mcp.Exists("http_test"))
t.Logf("http_test MCP client loaded successfully")
} else {
t.Logf("http_test MCP client not loaded (possibly due to configuration issues)")
}
// This should always be false
assert.False(t, mcp.Exists("non_existent"))
}
func TestLoadWithError(t *testing.T) {
test.Prepare(t, config.Conf)
defer test.Clean()
// Test loading with invalid configuration
// This may fail due to configuration issues but shouldn't crash
err := Load(config.Conf)
if err != nil {
t.Logf("Load returned expected error: %v", err)
}
}
func TestGetClient(t *testing.T) {
test.Prepare(t, config.Conf)
defer test.Clean()
err := Load(config.Conf)
if err != nil {
t.Logf("Load returned error: %v", err)
}
// Test getting existing client (if it was loaded successfully)
if mcp.Exists("test") {
client := mcp.GetClient("test")
assert.NotNil(t, client)
t.Logf("GetClient test passed")
} else {
t.Logf("test client not loaded, skipping GetClient test")
}
// Test getting non-existent client should throw exception
assert.Panics(t, func() {
mcp.GetClient("non_existent")
})
}
func TestUnloadClient(t *testing.T) {
test.Prepare(t, config.Conf)
defer test.Clean()
err := Load(config.Conf)
if err != nil {
t.Logf("Load returned error: %v", err)
}
// Test unloading only if client was loaded
if mcp.Exists("test") {
// Verify client exists before unloading
assert.True(t, mcp.Exists("test"))
// Unload client
mcp.UnloadClient("test")
// Verify client no longer exists
assert.False(t, mcp.Exists("test"))
t.Logf("UnloadClient test passed")
} else {
t.Logf("test client not loaded, skipping UnloadClient test")
}
// Test that unloading non-existent client doesn't crash
mcp.UnloadClient("non_existent")
}