Default draft protocol support: sessionless + handshake-less (SEP-2575 + SEP-2567) (#1610)

This commit is contained in:
Stephen Halter 2026-06-23 21:24:22 -07:00 • committed by GitHub
commit 6c323e783b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -35,4 +35,32 @@ public class RequestIdTests
Assert.Equal(id, JsonSerializer.Deserialize<RequestId>(JsonSerializer.Serialize(id, McpJsonUtilities.DefaultOptions), McpJsonUtilities.DefaultOptions));
}
[Fact]
public void Null_DeserializesAsDefault()
{
// Per JSON-RPC 2.0 §5.1, error responses produced before the request id can be determined
// MUST carry id=null. Deserialization needs to tolerate that shape so callers can handle
// such error envelopes (instead of throwing on the bare RequestId conversion).
var id = JsonSerializer.Deserialize<RequestId>("null", McpJsonUtilities.DefaultOptions);
Assert.Equal(default(RequestId), id);
Assert.Null(id.Id);
}
[Fact]
public void Null_SerializesAsJsonNull()
{
// The default RequestId (Id == null) is the id-less-error-response shape. It MUST serialize as
// JSON null — not "" — so the wire form is spec-conformant and round-trips losslessly.
Assert.Equal("null", JsonSerializer.Serialize(default(RequestId), McpJsonUtilities.DefaultOptions));
}
[Fact]
public void Null_Roundtrips()
{
var json = JsonSerializer.Serialize(default(RequestId), McpJsonUtilities.DefaultOptions);
var id = JsonSerializer.Deserialize<RequestId>(json, McpJsonUtilities.DefaultOptions);
Assert.Equal(default(RequestId), id);
Assert.Null(id.Id);
}
}