Skip to content

Commit dadabc1

Browse files
committed
Use LoggedTest base class everywhere an ILoggerFactory is used
1 parent 8b31095 commit dadabc1

File tree

5 files changed

+53
-55
lines changed

5 files changed

+53
-55
lines changed
Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
using ModelContextProtocol.Protocol.Transport;
22
using ModelContextProtocol.Protocol.Types;
33
using ModelContextProtocol.Server;
4-
using Microsoft.Extensions.Logging.Abstractions;
4+
using ModelContextProtocol.Tests.Utils;
55
using Moq;
66

77
namespace ModelContextProtocol.Tests.Server;
88

9-
public class McpServerFactoryTests
9+
public class McpServerFactoryTests : LoggedTest
1010
{
1111
private readonly Mock<IServerTransport> _serverTransport;
1212
private readonly McpServerOptions _options;
13-
private readonly IServiceProvider _serviceProvider;
1413

15-
public McpServerFactoryTests()
14+
public McpServerFactoryTests(ITestOutputHelper testOutputHelper)
15+
: base(testOutputHelper)
1616
{
1717
_serverTransport = new Mock<IServerTransport>();
1818
_options = new McpServerOptions
@@ -21,14 +21,13 @@ public McpServerFactoryTests()
2121
ProtocolVersion = "1.0",
2222
InitializationTimeout = TimeSpan.FromSeconds(30)
2323
};
24-
_serviceProvider = new Mock<IServiceProvider>().Object;
2524
}
2625

2726
[Fact]
2827
public async Task Create_Should_Initialize_With_Valid_Parameters()
2928
{
3029
// Arrange & Act
31-
await using IMcpServer server = McpServerFactory.Create(_serverTransport.Object, _options, NullLoggerFactory.Instance);
30+
await using IMcpServer server = McpServerFactory.Create(_serverTransport.Object, _options, LoggerFactory);
3231

3332
// Assert
3433
Assert.NotNull(server);
@@ -38,13 +37,13 @@ public async Task Create_Should_Initialize_With_Valid_Parameters()
3837
public void Constructor_Throws_For_Null_ServerTransport()
3938
{
4039
// Arrange, Act & Assert
41-
Assert.Throws<ArgumentNullException>("serverTransport", () => McpServerFactory.Create(null!, _options, NullLoggerFactory.Instance));
40+
Assert.Throws<ArgumentNullException>("serverTransport", () => McpServerFactory.Create(null!, _options, LoggerFactory));
4241
}
4342

4443
[Fact]
4544
public void Constructor_Throws_For_Null_Options()
4645
{
4746
// Arrange, Act & Assert
48-
Assert.Throws<ArgumentNullException>("serverOptions", () => McpServerFactory.Create(_serverTransport.Object, null!, NullLoggerFactory.Instance));
47+
Assert.Throws<ArgumentNullException>("serverOptions", () => McpServerFactory.Create(_serverTransport.Object, null!, LoggerFactory));
4948
}
5049
}

tests/ModelContextProtocol.Tests/Server/McpServerTests.cs

Lines changed: 18 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,18 @@
1111

1212
namespace ModelContextProtocol.Tests.Server;
1313

14-
public class McpServerTests
14+
public class McpServerTests : LoggedTest
1515
{
1616
private readonly Mock<IServerTransport> _serverTransport;
17-
private readonly Mock<ILoggerFactory> _loggerFactory;
1817
private readonly Mock<ILogger> _logger;
1918
private readonly McpServerOptions _options;
2019
private readonly IServiceProvider _serviceProvider;
2120

22-
public McpServerTests()
21+
public McpServerTests(ITestOutputHelper testOutputHelper)
22+
: base(testOutputHelper)
2323
{
2424
_serverTransport = new Mock<IServerTransport>();
25-
_loggerFactory = new Mock<ILoggerFactory>();
2625
_logger = new Mock<ILogger>();
27-
_loggerFactory.Setup(f => f.CreateLogger(It.IsAny<string>())).Returns(_logger.Object);
2826
_options = CreateOptions();
2927
_serviceProvider = new Mock<IServiceProvider>().Object;
3028
}
@@ -44,7 +42,7 @@ private static McpServerOptions CreateOptions(ServerCapabilities? capabilities =
4442
public async Task Constructor_Should_Initialize_With_Valid_Parameters()
4543
{
4644
// Arrange & Act
47-
await using var server = McpServerFactory.Create(_serverTransport.Object, _options, _loggerFactory.Object, _serviceProvider);
45+
await using var server = McpServerFactory.Create(_serverTransport.Object, _options, LoggerFactory, _serviceProvider);
4846

4947
// Assert
5048
Assert.NotNull(server);
@@ -54,14 +52,14 @@ public async Task Constructor_Should_Initialize_With_Valid_Parameters()
5452
public void Constructor_Throws_For_Null_Transport()
5553
{
5654
// Arrange, Act & Assert
57-
Assert.Throws<ArgumentNullException>(() => McpServerFactory.Create(null!, _options, _loggerFactory.Object, _serviceProvider));
55+
Assert.Throws<ArgumentNullException>(() => McpServerFactory.Create(null!, _options, LoggerFactory, _serviceProvider));
5856
}
5957

6058
[Fact]
6159
public void Constructor_Throws_For_Null_Options()
6260
{
6361
// Arrange, Act & Assert
64-
Assert.Throws<ArgumentNullException>(() => McpServerFactory.Create(_serverTransport.Object, null!, _loggerFactory.Object, _serviceProvider));
62+
Assert.Throws<ArgumentNullException>(() => McpServerFactory.Create(_serverTransport.Object, null!, LoggerFactory, _serviceProvider));
6563
}
6664

6765
[Fact]
@@ -78,7 +76,7 @@ public async Task Constructor_Does_Not_Throw_For_Null_Logger()
7876
public async Task Constructor_Does_Not_Throw_For_Null_ServiceProvider()
7977
{
8078
// Arrange & Act
81-
await using var server = McpServerFactory.Create(_serverTransport.Object, _options, _loggerFactory.Object, null);
79+
await using var server = McpServerFactory.Create(_serverTransport.Object, _options, LoggerFactory, null);
8280

8381
// Assert
8482
Assert.NotNull(server);
@@ -88,7 +86,7 @@ public async Task Constructor_Does_Not_Throw_For_Null_ServiceProvider()
8886
public async Task StartAsync_Should_Throw_InvalidOperationException_If_Already_Initializing()
8987
{
9088
// Arrange
91-
await using var server = McpServerFactory.Create(_serverTransport.Object, _options, _loggerFactory.Object, _serviceProvider);
89+
await using var server = McpServerFactory.Create(_serverTransport.Object, _options, LoggerFactory, _serviceProvider);
9290
var task = server.StartAsync(TestContext.Current.CancellationToken);
9391

9492
// Act & Assert
@@ -101,7 +99,7 @@ public async Task StartAsync_Should_Throw_InvalidOperationException_If_Already_I
10199
public async Task StartAsync_Should_Do_Nothing_If_Already_Initialized()
102100
{
103101
// Arrange
104-
await using var server = McpServerFactory.Create(_serverTransport.Object, _options, _loggerFactory.Object, _serviceProvider);
102+
await using var server = McpServerFactory.Create(_serverTransport.Object, _options, LoggerFactory, _serviceProvider);
105103
SetInitialized(server, true);
106104

107105
await server.StartAsync(TestContext.Current.CancellationToken);
@@ -114,7 +112,7 @@ public async Task StartAsync_Should_Do_Nothing_If_Already_Initialized()
114112
public async Task StartAsync_ShouldStartListening()
115113
{
116114
// Arrange
117-
await using var server = McpServerFactory.Create(_serverTransport.Object, _options, _loggerFactory.Object, _serviceProvider);
115+
await using var server = McpServerFactory.Create(_serverTransport.Object, _options, LoggerFactory, _serviceProvider);
118116

119117
// Act
120118
await server.StartAsync(TestContext.Current.CancellationToken);
@@ -127,7 +125,7 @@ public async Task StartAsync_ShouldStartListening()
127125
public async Task StartAsync_Sets_Initialized_After_Transport_Responses_Initialized_Notification()
128126
{
129127
await using var transport = new TestServerTransport();
130-
await using var server = McpServerFactory.Create(transport, _options, _loggerFactory.Object, _serviceProvider);
128+
await using var server = McpServerFactory.Create(transport, _options, LoggerFactory, _serviceProvider);
131129

132130
await server.StartAsync(TestContext.Current.CancellationToken);
133131

@@ -147,7 +145,7 @@ await transport.SendMessageAsync(new JsonRpcNotification
147145
public async Task RequestSamplingAsync_Should_Throw_McpServerException_If_Client_Does_Not_Support_Sampling()
148146
{
149147
// Arrange
150-
await using var server = McpServerFactory.Create(_serverTransport.Object, _options, _loggerFactory.Object, _serviceProvider);
148+
await using var server = McpServerFactory.Create(_serverTransport.Object, _options, LoggerFactory, _serviceProvider);
151149
SetClientCapabilities(server, new ClientCapabilities());
152150

153151
var action = () => server.RequestSamplingAsync(new CreateMessageRequestParams { Messages = [] }, CancellationToken.None);
@@ -161,7 +159,7 @@ public async Task RequestSamplingAsync_Should_SendRequest()
161159
{
162160
// Arrange
163161
await using var transport = new TestServerTransport();
164-
await using var server = McpServerFactory.Create(transport, _options, _loggerFactory.Object, _serviceProvider);
162+
await using var server = McpServerFactory.Create(transport, _options, LoggerFactory, _serviceProvider);
165163
SetClientCapabilities(server, new ClientCapabilities { Sampling = new SamplingCapability() });
166164

167165
await server.StartAsync(TestContext.Current.CancellationToken);
@@ -179,7 +177,7 @@ public async Task RequestSamplingAsync_Should_SendRequest()
179177
public async Task RequestRootsAsync_Should_Throw_McpServerException_If_Client_Does_Not_Support_Roots()
180178
{
181179
// Arrange
182-
await using var server = McpServerFactory.Create(_serverTransport.Object, _options, _loggerFactory.Object, _serviceProvider);
180+
await using var server = McpServerFactory.Create(_serverTransport.Object, _options, LoggerFactory, _serviceProvider);
183181
SetClientCapabilities(server, new ClientCapabilities());
184182

185183
// Act & Assert
@@ -191,7 +189,7 @@ public async Task RequestRootsAsync_Should_SendRequest()
191189
{
192190
// Arrange
193191
await using var transport = new TestServerTransport();
194-
await using var server = McpServerFactory.Create(transport, _options, _loggerFactory.Object, _serviceProvider);
192+
await using var server = McpServerFactory.Create(transport, _options, LoggerFactory, _serviceProvider);
195193
SetClientCapabilities(server, new ClientCapabilities { Roots = new RootsCapability() });
196194
await server.StartAsync(TestContext.Current.CancellationToken);
197195

@@ -208,7 +206,7 @@ public async Task RequestRootsAsync_Should_SendRequest()
208206
[Fact]
209207
public async Task Throws_Exception_If_Not_Connected()
210208
{
211-
await using var server = McpServerFactory.Create(_serverTransport.Object, _options, _loggerFactory.Object, _serviceProvider);
209+
await using var server = McpServerFactory.Create(_serverTransport.Object, _options, LoggerFactory, _serviceProvider);
212210
SetClientCapabilities(server, new ClientCapabilities { Roots = new RootsCapability() });
213211
_serverTransport.SetupGet(t => t.IsConnected).Returns(false);
214212

@@ -555,7 +553,7 @@ private async Task Can_Handle_Requests(ServerCapabilities? serverCapabilities, s
555553
var options = CreateOptions(serverCapabilities);
556554
configureOptions?.Invoke(options);
557555

558-
await using var server = McpServerFactory.Create(transport, options, _loggerFactory.Object, _serviceProvider);
556+
await using var server = McpServerFactory.Create(transport, options, LoggerFactory, _serviceProvider);
559557

560558
await server.StartAsync();
561559

@@ -587,7 +585,7 @@ private async Task Throws_Exception_If_No_Handler_Assigned(ServerCapabilities se
587585
await using var transport = new TestServerTransport();
588586
var options = CreateOptions(serverCapabilities);
589587

590-
Assert.Throws<McpServerException>(() => McpServerFactory.Create(transport, options, _loggerFactory.Object, _serviceProvider));
588+
Assert.Throws<McpServerException>(() => McpServerFactory.Create(transport, options, LoggerFactory, _serviceProvider));
591589
}
592590

593591
[Fact]

tests/ModelContextProtocol.Tests/SseServerIntegrationTests.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ public class SseServerIntegrationTests : LoggedTest, IClassFixture<SseServerInte
88
{
99
private readonly SseServerIntegrationTestFixture _fixture;
1010

11-
public SseServerIntegrationTests(SseServerIntegrationTestFixture fixture, ITestOutputHelper output)
12-
: base(output)
11+
public SseServerIntegrationTests(SseServerIntegrationTestFixture fixture, ITestOutputHelper testOutputHelper)
12+
: base(testOutputHelper)
1313
{
1414
_fixture = fixture;
15-
_fixture.Initialize(output);
15+
_fixture.Initialize(testOutputHelper);
1616
}
1717

1818
private Task<IMcpClient> GetClientAsync(McpClientOptions? options = null)

tests/ModelContextProtocol.Tests/Transport/SseClientTransportTests.cs

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
using Microsoft.Extensions.Logging.Abstractions;
2-
using ModelContextProtocol.Configuration;
1+
using ModelContextProtocol.Configuration;
32
using ModelContextProtocol.Protocol.Messages;
43
using ModelContextProtocol.Protocol.Transport;
54
using ModelContextProtocol.Tests.Utils;
@@ -8,12 +7,13 @@
87

98
namespace ModelContextProtocol.Tests.Transport;
109

11-
public class SseClientTransportTests
10+
public class SseClientTransportTests : LoggedTest
1211
{
1312
private readonly McpServerConfig _serverConfig;
1413
private readonly SseClientTransportOptions _transportOptions;
1514

16-
public SseClientTransportTests()
15+
public SseClientTransportTests(ITestOutputHelper testOutputHelper)
16+
: base(testOutputHelper)
1717
{
1818
_serverConfig = new McpServerConfig
1919
{
@@ -39,7 +39,7 @@ public SseClientTransportTests()
3939
public async Task Constructor_Should_Initialize_With_Valid_Parameters()
4040
{
4141
// Act
42-
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, NullLoggerFactory.Instance);
42+
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, LoggerFactory);
4343

4444
// Assert
4545
Assert.NotNull(transport);
@@ -58,21 +58,21 @@ public async Task Constructor_Should_Initialize_With_Valid_Parameters()
5858
[Fact]
5959
public void Constructor_Throws_For_Null_Options()
6060
{
61-
var exception = Assert.Throws<ArgumentNullException>(() => new SseClientTransport(null!, _serverConfig, NullLoggerFactory.Instance));
61+
var exception = Assert.Throws<ArgumentNullException>(() => new SseClientTransport(null!, _serverConfig, LoggerFactory));
6262
Assert.Equal("transportOptions", exception.ParamName);
6363
}
6464

6565
[Fact]
6666
public void Constructor_Throws_For_Null_Config()
6767
{
68-
var exception = Assert.Throws<ArgumentNullException>(() => new SseClientTransport(_transportOptions, null!, NullLoggerFactory.Instance));
68+
var exception = Assert.Throws<ArgumentNullException>(() => new SseClientTransport(_transportOptions, null!, LoggerFactory));
6969
Assert.Equal("serverConfig", exception.ParamName);
7070
}
7171

7272
[Fact]
7373
public void Constructor_Throws_For_Null_HttpClientg()
7474
{
75-
var exception = Assert.Throws<ArgumentNullException>(() => new SseClientTransport(_transportOptions, _serverConfig, null!, NullLoggerFactory.Instance));
75+
var exception = Assert.Throws<ArgumentNullException>(() => new SseClientTransport(_transportOptions, _serverConfig, null!, LoggerFactory));
7676
Assert.Equal("httpClient", exception.ParamName);
7777
}
7878

@@ -81,7 +81,7 @@ public async Task ConnectAsync_Should_Connect_Successfully()
8181
{
8282
using var mockHttpHandler = new MockHttpHandler();
8383
using var httpClient = new HttpClient(mockHttpHandler);
84-
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, httpClient, NullLoggerFactory.Instance);
84+
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, httpClient, LoggerFactory);
8585

8686
bool firstCall = true;
8787

@@ -109,7 +109,7 @@ public async Task ConnectAsync_Throws_If_Already_Connected()
109109
{
110110
using var mockHttpHandler = new MockHttpHandler();
111111
using var httpClient = new HttpClient(mockHttpHandler);
112-
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, httpClient, NullLoggerFactory.Instance);
112+
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, httpClient, LoggerFactory);
113113
var tcsConnected = new TaskCompletionSource();
114114
var tcsDone = new TaskCompletionSource(TaskCreationOptions.RunContinuationsAsynchronously);
115115
var callIndex = 0;
@@ -157,7 +157,7 @@ public async Task ConnectAsync_Throws_Exception_On_Failure()
157157
{
158158
using var mockHttpHandler = new MockHttpHandler();
159159
using var httpClient = new HttpClient(mockHttpHandler);
160-
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, httpClient, NullLoggerFactory.Instance);
160+
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, httpClient, LoggerFactory);
161161

162162
var retries = 0;
163163
mockHttpHandler.RequestHandler = (request) =>
@@ -177,7 +177,7 @@ public async Task ConnectAsync_Throws_Exception_On_Failure()
177177
[Fact]
178178
public async Task SendMessageAsync_Throws_Exception_If_MessageEndpoint_Not_Set()
179179
{
180-
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, NullLoggerFactory.Instance);
180+
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, LoggerFactory);
181181

182182
// Assert
183183
await Assert.ThrowsAsync<InvalidOperationException>(() => transport.SendMessageAsync(new JsonRpcRequest() { Method = "test" }, CancellationToken.None));
@@ -188,7 +188,7 @@ public async Task SendMessageAsync_Handles_Accepted_Response()
188188
{
189189
using var mockHttpHandler = new MockHttpHandler();
190190
using var httpClient = new HttpClient(mockHttpHandler);
191-
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, httpClient, NullLoggerFactory.Instance);
191+
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, httpClient, LoggerFactory);
192192

193193
var firstCall = true;
194194
mockHttpHandler.RequestHandler = (request) =>
@@ -227,7 +227,7 @@ public async Task SendMessageAsync_Handles_Accepted_Json_RPC_Response()
227227
{
228228
using var mockHttpHandler = new MockHttpHandler();
229229
using var httpClient = new HttpClient(mockHttpHandler);
230-
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, httpClient, NullLoggerFactory.Instance);
230+
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, httpClient, LoggerFactory);
231231

232232
var firstCall = true;
233233
mockHttpHandler.RequestHandler = (request) =>
@@ -266,7 +266,7 @@ public async Task ReceiveMessagesAsync_Handles_Messages()
266266
{
267267
using var mockHttpHandler = new MockHttpHandler();
268268
using var httpClient = new HttpClient(mockHttpHandler);
269-
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, httpClient, NullLoggerFactory.Instance);
269+
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, httpClient, LoggerFactory);
270270

271271
var callIndex = 0;
272272
mockHttpHandler.RequestHandler = (request) =>
@@ -303,7 +303,7 @@ public async Task ReceiveMessagesAsync_Handles_Messages()
303303
[Fact]
304304
public async Task CloseAsync_Should_Dispose_Resources()
305305
{
306-
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, NullLoggerFactory.Instance);
306+
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, LoggerFactory);
307307

308308
await transport.CloseAsync();
309309

@@ -313,7 +313,7 @@ public async Task CloseAsync_Should_Dispose_Resources()
313313
[Fact]
314314
public async Task DisposeAsync_Should_Dispose_Resources()
315315
{
316-
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, NullLoggerFactory.Instance);
316+
await using var transport = new SseClientTransport(_transportOptions, _serverConfig, LoggerFactory);
317317

318318
await transport.DisposeAsync();
319319

0 commit comments

Comments
 (0)