Skip to main content
Glama
grafana

Grafana

Official
by grafana
asserts_test.go4.01 kB
//go:build unit // +build unit package tools import ( "context" "encoding/json" "net/http" "net/http/httptest" "testing" "time" mcpgrafana "github.com/grafana/mcp-grafana" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) func setupMockAssertsServer(handler http.HandlerFunc) (*httptest.Server, context.Context) { server := httptest.NewServer(handler) config := mcpgrafana.GrafanaConfig{ URL: server.URL, APIKey: "test-api-key", } ctx := mcpgrafana.WithGrafanaConfig(context.Background(), config) return server, ctx } func TestAssertTools(t *testing.T) { t.Run("get assertions", func(t *testing.T) { startTime := time.Date(2025, 4, 23, 10, 0, 0, 0, time.UTC) endTime := time.Date(2025, 4, 23, 11, 0, 0, 0, time.UTC) server, ctx := setupMockAssertsServer(func(w http.ResponseWriter, r *http.Request) { require.Equal(t, "/api/plugins/grafana-asserts-app/resources/asserts/api-server/v1/assertions/llm-summary", r.URL.Path) require.Equal(t, "Bearer test-api-key", r.Header.Get("Authorization")) var requestBody map[string]interface{} err := json.NewDecoder(r.Body).Decode(&requestBody) require.NoError(t, err) expectedBody := map[string]interface{}{ "startTime": float64(startTime.UnixMilli()), "endTime": float64(endTime.UnixMilli()), "entityKeys": []interface{}{ map[string]interface{}{ "type": "Service", "name": "mongodb", "scope": map[string]interface{}{ "env": "asserts-demo", "site": "app", "namespace": "robot-shop", }, }, }, "suggestionSrcEntities": []interface{}{}, "alertCategories": []interface{}{"saturation", "amend", "anomaly", "failure", "error"}, } require.Equal(t, expectedBody, requestBody) w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) _, err = w.Write([]byte(`{"summary": "test summary"}`)) require.NoError(t, err) }) defer server.Close() result, err := getAssertions(ctx, GetAssertionsParams{ StartTime: startTime, EndTime: endTime, EntityType: "Service", EntityName: "mongodb", Env: "asserts-demo", Site: "app", Namespace: "robot-shop", }) require.NoError(t, err) assert.NotNil(t, result) assert.Equal(t, `{"summary": "test summary"}`, result) }) t.Run("get assertions with no site and namespace", func(t *testing.T) { startTime := time.Date(2025, 4, 23, 10, 0, 0, 0, time.UTC) endTime := time.Date(2025, 4, 23, 11, 0, 0, 0, time.UTC) server, ctx := setupMockAssertsServer(func(w http.ResponseWriter, r *http.Request) { require.Equal(t, "/api/plugins/grafana-asserts-app/resources/asserts/api-server/v1/assertions/llm-summary", r.URL.Path) require.Equal(t, "Bearer test-api-key", r.Header.Get("Authorization")) var requestBody map[string]interface{} err := json.NewDecoder(r.Body).Decode(&requestBody) require.NoError(t, err) expectedBody := map[string]interface{}{ "startTime": float64(startTime.UnixMilli()), "endTime": float64(endTime.UnixMilli()), "entityKeys": []interface{}{ map[string]interface{}{ "type": "Service", "name": "mongodb", "scope": map[string]interface{}{ "env": "asserts-demo", }, }, }, "suggestionSrcEntities": []interface{}{}, "alertCategories": []interface{}{"saturation", "amend", "anomaly", "failure", "error"}, } require.Equal(t, expectedBody, requestBody) w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) _, err = w.Write([]byte(`{"summary": "test summary"}`)) require.NoError(t, err) }) defer server.Close() result, err := getAssertions(ctx, GetAssertionsParams{ StartTime: startTime, EndTime: endTime, EntityType: "Service", EntityName: "mongodb", Env: "asserts-demo", }) require.NoError(t, err) assert.NotNil(t, result) assert.Equal(t, `{"summary": "test summary"}`, result) }) }

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/grafana/mcp-grafana'

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