Add initial task extension conformance coverage (#1734)

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Copilot-Session: 7c99928c-a943-49f4-9a63-8b04a0e4d18b
This commit is contained in:
Pranav Senthilnathan 2026-07-24 17:16:20 -07:00 • committed by GitHub
commit 83523b0a42
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -8,6 +8,7 @@ using System.Net;
using System.Net.ServerSentEvents;
using System.Text;
using System.Text.Json;
using System.Text.Json.Nodes;
namespace ModelContextProtocol.AspNetCore.Tests;
@ -32,6 +33,18 @@ public class HttpHeaderConformanceTests(ITestOutputHelper outputHelper) : Kestre
Name = nameof(HttpHeaderConformanceTests),
Version = "1.0",
};
#pragma warning disable MCPEXP002
options.RequestHandlers =
[
new McpServerRequestHandler
{
Method = "extension/get",
RoutingNameParameter = "itemId",
Handler = static (_, _) => new ValueTask<JsonNode?>(
new JsonObject { ["resultType"] = "complete" }),
},
];
#pragma warning restore MCPEXP002
}).WithTools(Tools).WithHttpTransport();
_app = Builder.Build();
@ -110,6 +123,23 @@ public class HttpHeaderConformanceTests(ITestOutputHelper outputHelper) : Kestre
#region Server-side validation tests
[Fact]
public async Task Server_UsesCustomHandlerRoutingNameMetadata()
{
await StartAsync();
await ProbeWithJuly2026ProtocolVersionAsync();
using var request = new HttpRequestMessage(HttpMethod.Post, "");
request.Content = JsonContent(
"""{"jsonrpc":"2.0","id":2,"method":"extension/get","params":{"itemId":"item-42","_meta":{"io.modelcontextprotocol/protocolVersion":"2026-07-28","io.modelcontextprotocol/clientInfo":{"name":"TestClient","version":"1.0"},"io.modelcontextprotocol/clientCapabilities":{}}}}""");
request.Headers.Add(McpHttpHeaders.ProtocolVersion, "2026-07-28");
request.Headers.Add(McpHttpHeaders.Method, "extension/get");
request.Headers.Add(McpHttpHeaders.Name, "item-42");
using var response = await HttpClient.SendAsync(request, TestContext.Current.CancellationToken);
Assert.Equal(HttpStatusCode.OK, response.StatusCode);
}
[Fact]
public async Task Server_AcceptsUnionIntegerCanonicalForm()
{