Audit protocol types (#892)
This commit is contained in:
parent
66c084c795
commit
121929da36
1 changed files with 262 additions and 168 deletions
|
|
@ -16,7 +16,11 @@ public class McpServerExtensionsTests
|
|||
var server = new Mock<IMcpServer>(MockBehavior.Strict).Object;
|
||||
|
||||
var ex = await Assert.ThrowsAsync<InvalidOperationException>(async () => await server.SampleAsync(
|
||||
new CreateMessageRequestParams { Messages = [new SamplingMessage { Role = Role.User, Content = new TextContentBlock { Text = "hi" } }] },
|
||||
new CreateMessageRequestParams
|
||||
{
|
||||
Messages = [new SamplingMessage { Role = Role.User, Content = new TextContentBlock { Text = "hi" } }],
|
||||
MaxTokens = 1000
|
||||
},
|
||||
TestContext.Current.CancellationToken));
|
||||
Assert.Contains("Prefer using 'McpServer.SampleAsync' instead", ex.Message);
|
||||
}
|
||||
|
|
@ -90,6 +94,7 @@ public class McpServerExtensionsTests
|
|||
.Setup(s => s.SendRequestAsync(It.IsAny<JsonRpcRequest>(), It.IsAny<CancellationToken>()))
|
||||
.ReturnsAsync(new JsonRpcResponse
|
||||
{
|
||||
Id = default,
|
||||
Result = JsonSerializer.SerializeToNode(resultPayload, McpJsonUtilities.DefaultOptions),
|
||||
});
|
||||
|
||||
|
|
@ -97,7 +102,8 @@ public class McpServerExtensionsTests
|
|||
|
||||
var result = await server.SampleAsync(new CreateMessageRequestParams
|
||||
{
|
||||
Messages = [new SamplingMessage { Role = Role.User, Content = new TextContentBlock { Text = "hi" } }]
|
||||
Messages = [new SamplingMessage { Role = Role.User, Content = new TextContentBlock { Text = "hi" } }],
|
||||
MaxTokens = 1000
|
||||
}, TestContext.Current.CancellationToken);
|
||||
|
||||
Assert.Equal("test-model", result.Model);
|
||||
|
|
@ -119,14 +125,28 @@ public class McpServerExtensionsTests
|
|||
StopReason = "endTurn",
|
||||
};
|
||||
|
||||
const int CustomMaxSamplingOutputTokens = 500;
|
||||
|
||||
mockServer
|
||||
.Setup(s => s.ClientCapabilities)
|
||||
.Returns(new ClientCapabilities() { Sampling = new() });
|
||||
|
||||
mockServer
|
||||
.Setup(s => s.ServerOptions)
|
||||
.Returns(new McpServerOptions { MaxSamplingOutputTokens = CustomMaxSamplingOutputTokens });
|
||||
|
||||
CreateMessageRequestParams? capturedRequest = null;
|
||||
mockServer
|
||||
.Setup(s => s.SendRequestAsync(It.IsAny<JsonRpcRequest>(), It.IsAny<CancellationToken>()))
|
||||
.Callback<JsonRpcRequest, CancellationToken>((request, _) =>
|
||||
{
|
||||
capturedRequest = JsonSerializer.Deserialize<CreateMessageRequestParams>(
|
||||
request.Params ?? throw new InvalidOperationException(),
|
||||
McpJsonUtilities.DefaultOptions);
|
||||
})
|
||||
.ReturnsAsync(new JsonRpcResponse
|
||||
{
|
||||
Id = default,
|
||||
Result = JsonSerializer.SerializeToNode(resultPayload, McpJsonUtilities.DefaultOptions),
|
||||
});
|
||||
|
||||
|
|
@ -139,6 +159,10 @@ public class McpServerExtensionsTests
|
|||
Assert.Equal(ChatRole.Assistant, last.Role);
|
||||
Assert.Equal("resp", last.Text);
|
||||
mockServer.Verify(s => s.SendRequestAsync(It.IsAny<JsonRpcRequest>(), It.IsAny<CancellationToken>()), Times.Once);
|
||||
|
||||
// Verify that the default value was used
|
||||
Assert.NotNull(capturedRequest);
|
||||
Assert.Equal(CustomMaxSamplingOutputTokens, capturedRequest.MaxTokens);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
|
@ -156,6 +180,7 @@ public class McpServerExtensionsTests
|
|||
.Setup(s => s.SendRequestAsync(It.IsAny<JsonRpcRequest>(), It.IsAny<CancellationToken>()))
|
||||
.ReturnsAsync(new JsonRpcResponse
|
||||
{
|
||||
Id = default,
|
||||
Result = JsonSerializer.SerializeToNode(resultPayload, McpJsonUtilities.DefaultOptions),
|
||||
});
|
||||
|
||||
|
|
@ -182,6 +207,7 @@ public class McpServerExtensionsTests
|
|||
.Setup(s => s.SendRequestAsync(It.IsAny<JsonRpcRequest>(), It.IsAny<CancellationToken>()))
|
||||
.ReturnsAsync(new JsonRpcResponse
|
||||
{
|
||||
Id = default,
|
||||
Result = JsonSerializer.SerializeToNode(resultPayload, McpJsonUtilities.DefaultOptions),
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue