()
| 558 | } |
| 559 | |
| 560 | func testFrontend() (*MCPServer, func(t *testing.T, req mcp.CallToolRequest, handler func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error), expected expectedResult)) { |
| 561 | var lastRequest *http.Request |
| 562 | |
| 563 | // Mock search handler that returns a successful response and stores the request |
| 564 | mockHandler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
| 565 | lastRequest = r |
| 566 | w.WriteHeader(http.StatusOK) |
| 567 | }) |
| 568 | |
| 569 | server := &MCPServer{ |
| 570 | frontend: &QueryFrontend{ |
| 571 | SearchHandler: mockHandler, |
| 572 | TraceByIDHandlerV2: mockHandler, |
| 573 | SearchTagsV2Handler: mockHandler, |
| 574 | SearchTagsValuesV2Handler: mockHandler, |
| 575 | MetricsQueryInstantHandler: mockHandler, |
| 576 | MetricsQueryRangeHandler: mockHandler, |
| 577 | }, |
| 578 | logger: log.NewNopLogger(), |
| 579 | pathPrefix: "", |
| 580 | } |
| 581 | |
| 582 | callAndTestResults := func(t *testing.T, req mcp.CallToolRequest, handler func(ctx context.Context, request mcp.CallToolRequest) (*mcp.CallToolResult, error), expected expectedResult) { |
| 583 | ctx := context.Background() |
| 584 | result, err := handler(ctx, req) |
| 585 | |
| 586 | require.NoError(t, err) |
| 587 | require.NotNil(t, result) |
| 588 | |
| 589 | if expected.meta != nil { |
| 590 | require.Equal(t, expected.meta, result.Meta.AdditionalFields) |
| 591 | } |
| 592 | |
| 593 | if expected.err != "" { |
| 594 | // Check if the result contains an error |
| 595 | require.True(t, result.IsError) |
| 596 | require.Len(t, result.Content, 1) |
| 597 | textContent, ok := result.Content[0].(mcp.TextContent) |
| 598 | require.True(t, ok) |
| 599 | require.Equal(t, expected.err, textContent.Text) |
| 600 | return |
| 601 | } |
| 602 | |
| 603 | // For successful cases, verify we have text content |
| 604 | require.False(t, result.IsError) |
| 605 | require.NotEmpty(t, result.Content) |
| 606 | |
| 607 | // Parse and verify the request URL |
| 608 | require.Equal(t, expected.path, lastRequest.URL.Path) |
| 609 | |
| 610 | actualParams := lastRequest.URL.Query() |
| 611 | for key, expectedValue := range expected.params { |
| 612 | require.Equal(t, expectedValue, actualParams.Get(key), "parameter %s", key) |
| 613 | } |
| 614 | } |
| 615 | |
| 616 | return server, callAndTestResults |
| 617 | } |
no test coverage detected