Skip to main content
Glama
oceanbaseTest.test.ts4.63 kB
/** * OceanBase 连接测试 * 用于验证 OceanBase 向量搜索功能 */ import { oceanBaseClient } from '../../../services/providers/oceanbase/controller.js'; import { OceanBaseVectorEngine } from '../../../services/providers/oceanbase/vectorEngine.js'; import { getTextEmbedding } from '../../../utils/embedding.js'; import { MCPServerResponse } from '../../../types/index.js'; import { describe, test, expect, vi, beforeEach, afterEach } from 'vitest'; // 注意:logger 已在 setup.ts 中被模拟 vi.mock('../utils/logger.js', () => ({ __esModule: true, default: { info: vi.fn(), error: vi.fn(), debug: vi.fn(), warn: vi.fn(), }, })); /** * 测试数据 */ const testData: MCPServerResponse[] = [ { title: 'AI Assistant MCP Server', description: 'A powerful MCP server for AI assistants with advanced capabilities', sourceUrl: 'https://github.com/example/ai-assistant-mcp', similarity: 0, }, { title: 'Data Processing MCP Server', description: 'Process and transform data with this efficient MCP server', sourceUrl: 'https://github.com/example/data-processing-mcp', similarity: 0, }, { title: 'Vector Search Engine', description: 'High-performance vector search engine for similarity matching', sourceUrl: 'https://github.com/example/vector-search-engine', similarity: 0, }, ]; // 跳过实际数据库测试,除非明确启用 const ENABLE_DB_TESTS = process.env.ENABLE_DB_TESTS === 'true'; describe('OceanBase Integration', () => { // 如果数据库测试被禁用,则跳过所有测试 beforeAll(() => { if (!ENABLE_DB_TESTS) { console.log( 'Database tests are disabled. Set ENABLE_DB_TESTS=true to enable.', ); } }); describe('Connection Tests', () => { it('should connect to OceanBase successfully', async () => { if (!ENABLE_DB_TESTS) { return; } try { const client = oceanBaseClient; await client.connect(); expect(true).toBe(true); // 如果没有抛出异常,则测试通过 } catch (error) { // 如果连接失败,则测试失败 fail( `Connection test failed: ${error instanceof Error ? error.message : String(error)}`, ); } }); it('should initialize database schema', async () => { if (!ENABLE_DB_TESTS) { return; } try { const client = oceanBaseClient; await client.initDatabase(); expect(true).toBe(true); // 如果没有抛出异常,则测试通过 } catch (error) { fail( `Schema initialization failed: ${error instanceof Error ? error.message : String(error)}`, ); } }); }); describe('Vector Engine Tests', () => { it('should store and retrieve vectors', async () => { if (!ENABLE_DB_TESTS) { return; } try { // 创建向量引擎实例 const vectorEngine = new OceanBaseVectorEngine(); // 为测试数据生成嵌入向量 const embeddedData = await Promise.all( testData.map(async server => { const searchableText = `${server.title} ${server.description}`; const embedding = await getTextEmbedding(searchableText); return { ...server, vector: embedding, }; }), ); // 存储向量数据 for (const data of embeddedData) { await vectorEngine.addEntry( data.sourceUrl.split('/').pop() || 'unknown', data.vector, data, ); } // 测试相似度搜索 const queryText = 'AI assistant for data processing'; const queryEmbedding = await getTextEmbedding(queryText); const searchResults = await vectorEngine.search(queryEmbedding, 3); // 验证搜索结果 expect(searchResults).toBeDefined(); expect(Array.isArray(searchResults)).toBe(true); if (searchResults.length > 0) { // 验证结果格式 const firstResult = searchResults[0]; expect(firstResult).toHaveProperty('title'); expect(firstResult).toHaveProperty('description'); expect(firstResult).toHaveProperty('github_url'); expect(firstResult).toHaveProperty('similarity'); expect(typeof firstResult.similarity).toBe('number'); } } catch (error) { fail( `Vector engine test failed: ${error instanceof Error ? error.message : String(error)}`, ); } }); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/istarwyh/mcpadvisor'

If you have feedback or need assistance with the MCP directory API, please join our Discord server