Skip to main content
Glama
protocol_test.go2.51 kB
package protocol import ( "bufio" "bytes" "context" "encoding/json" "fmt" "io" "log" "os" "strings" "testing" ) func TestJSONRPCMessageUnmarshal(t *testing.T) { raw := `{"jsonrpc":"2.0","id":1,"result":{"ok":true}}` var msg JSONRPCMessage if err := json.Unmarshal([]byte(raw), &msg); err != nil { t.Fatalf("unmarshal: %v", err) } if msg.ID == nil || msg.JSONRPC != "2.0" { t.Fatalf("unexpected message %#v", msg) } if err := msg.ParseResult(&struct{}{}); err != nil { t.Fatalf("parse result: %v", err) } } func TestJSONRPCParseResultErrors(t *testing.T) { msg := JSONRPCMessage{} if err := msg.ParseResult(&struct{}{}); err == nil { t.Fatal("expected error for missing result") } msg = JSONRPCMessage{ Error: &JSONRPCError{Code: -32000, Message: "boom"}, } if err := msg.ParseResult(&struct{}{}); err == nil || !strings.Contains(err.Error(), "boom") { t.Fatalf("unexpected error %v", err) } } func TestTransportReceiveLogsMessages(t *testing.T) { t.Cleanup(func() { log.SetOutput(os.Stderr) }) var buf bytes.Buffer log.SetOutput(&buf) body := `{"jsonrpc":"2.0","id":1,"result":{"ok":true}}` var wire bytes.Buffer fmt.Fprintf(&wire, "Content-Length: %d\r\n\r\n%s", len(body), body) tr := NewTransport(bufio.NewReader(&wire), io.Discard) msg, err := tr.ReceiveMessage(context.Background()) if err != nil { t.Fatalf("receive: %v", err) } if msg == nil { t.Fatal("expected message") } if !strings.Contains(buf.String(), "📥 response message received") { t.Fatalf("expected log line, got %q", buf.String()) } } func TestProgressNotificationHelpers(t *testing.T) { payload, err := NewProgressNotification("token", 1.5, "done") if err != nil { t.Fatalf("new progress: %v", err) } if payload.Progress != 1 { t.Fatalf("expected capped progress, got %f", payload.Progress) } msg, err := BuildProgressMessage("token", 0.25, "quarter") if err != nil { t.Fatalf("build message: %v", err) } parsed, err := ParseProgressNotification(msg) if err != nil { t.Fatalf("parse: %v", err) } if parsed.Message != "quarter" || parsed.Progress != 0.25 { t.Fatalf("unexpected payload %#v", parsed) } if _, err := NewProgressNotification(nil, 0, ""); err == nil { t.Fatal("expected error for nil token") } if _, err := ParseProgressNotification(&JSONRPCMessage{Method: "other"}); err == nil { t.Fatal("expected method mismatch error") } if _, err := ParseProgressNotification(nil); err == nil { t.Fatal("expected nil message error") } }

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/hloiseaufcms/mcp-gopls'

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