diff --git a/packages/a2a-server/src/http/app.ts b/packages/a2a-server/src/http/app.ts index 35ca48949f4..3b2e7443d04 100644 --- a/packages/a2a-server/src/http/app.ts +++ b/packages/a2a-server/src/http/app.ts @@ -326,6 +326,7 @@ export async function createApp() { error: 'Listing all task metadata is only supported when using InMemoryTaskStore.', }); + return; } try { const wrappers = agentExecutor.getAllTasks(); diff --git a/packages/a2a-server/src/http/endpoints.test.ts b/packages/a2a-server/src/http/endpoints.test.ts index ccde442f06a..355b2833965 100644 --- a/packages/a2a-server/src/http/endpoints.test.ts +++ b/packages/a2a-server/src/http/endpoints.test.ts @@ -24,6 +24,16 @@ vi.mock('../utils/logger.js', () => ({ logger: { info: vi.fn(), warn: vi.fn(), error: vi.fn() }, })); +// Mock @google-cloud/storage so GCSTaskStore can be instantiated without +// a real GCS connection. This is only exercised when GCS_BUCKET_NAME is set. +vi.mock('@google-cloud/storage', () => ({ + Storage: vi.fn().mockImplementation(() => ({ + getBuckets: vi + .fn() + .mockResolvedValue([[{ name: 'test-bucket-for-metadata' }]]), + })), +})); + // Mock Task.create to avoid its complex setup vi.mock('../agent/task.js', () => { class MockTask { @@ -160,3 +170,31 @@ describe('Agent Server Endpoints', () => { expect(response.body.url).toBe(`http://localhost:${port}/`); }); }); + +describe('Agent Server Endpoints (GCS Task Store)', () => { + let gcsApp: express.Express; + let gcsServer: Server; + + beforeAll(async () => { + vi.stubEnv('GCS_BUCKET_NAME', 'test-bucket-for-metadata'); + gcsApp = await createApp(); + await new Promise((resolve) => { + gcsServer = gcsApp.listen(0, () => resolve()); + }); + }); + + afterAll(async () => { + vi.unstubAllEnvs(); + if (gcsServer) { + await new Promise((resolve, reject) => { + gcsServer.close((err) => (err ? reject(err) : resolve())); + }); + } + }); + + it('should return 501 for GET /tasks/metadata when not using InMemoryTaskStore', async () => { + const response = await request(gcsApp).get('/tasks/metadata'); + expect(response.status).toBe(501); + expect(response.body.error).toContain('InMemoryTaskStore'); + }); +});