Skip to content

Commit 5ba4632

Browse files
Copilotdrewnoakes
andcommitted
Add test demonstrating INetMQMonitor mockability
Co-authored-by: drewnoakes <350947+drewnoakes@users.noreply.github.com>
1 parent f1757e8 commit 5ba4632

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

src/NetMQ.Tests/NetMQMonitorTests.cs

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,5 +188,86 @@ public void ConvertArgThrowsForInvalidType()
188188
MonitorEvent monitorEvent = new MonitorEvent(SocketEvents.All, addr: "", arg: socket!);
189189
Assert.Throws<ArgumentException>(() => monitorEvent.ConvertArg<int>());
190190
}
191+
192+
[Fact]
193+
public void INetMQMonitorCanBeMocked()
194+
{
195+
// This test demonstrates that INetMQMonitor can be mocked for testing
196+
var mockMonitor = new MockNetMQMonitor();
197+
198+
// Verify the mock implements the interface
199+
INetMQMonitor monitor = mockMonitor;
200+
201+
Assert.NotNull(monitor);
202+
Assert.Equal("mock://endpoint", monitor.Endpoint);
203+
Assert.False(monitor.IsRunning);
204+
205+
// Verify we can subscribe to events
206+
var eventReceived = false;
207+
monitor.EventReceived += (s, e) => { eventReceived = true; };
208+
209+
// Trigger the event
210+
mockMonitor.RaiseEventReceived();
211+
212+
Assert.True(eventReceived);
213+
}
214+
215+
// Simple mock implementation to demonstrate INetMQMonitor is mockable
216+
private class MockNetMQMonitor : INetMQMonitor
217+
{
218+
public string Endpoint => "mock://endpoint";
219+
public bool IsRunning { get; private set; }
220+
public TimeSpan Timeout { get; set; }
221+
222+
public event EventHandler<NetMQMonitorEventArgs>? EventReceived;
223+
#pragma warning disable CS0067 // Event is never used - these are part of the interface contract
224+
public event EventHandler<NetMQMonitorSocketEventArgs>? Connected;
225+
public event EventHandler<NetMQMonitorErrorEventArgs>? ConnectDelayed;
226+
public event EventHandler<NetMQMonitorIntervalEventArgs>? ConnectRetried;
227+
public event EventHandler<NetMQMonitorSocketEventArgs>? Listening;
228+
public event EventHandler<NetMQMonitorErrorEventArgs>? BindFailed;
229+
public event EventHandler<NetMQMonitorSocketEventArgs>? Accepted;
230+
public event EventHandler<NetMQMonitorErrorEventArgs>? AcceptFailed;
231+
public event EventHandler<NetMQMonitorSocketEventArgs>? Closed;
232+
public event EventHandler<NetMQMonitorErrorEventArgs>? CloseFailed;
233+
public event EventHandler<NetMQMonitorSocketEventArgs>? Disconnected;
234+
#pragma warning restore CS0067
235+
236+
public void AttachToPoller<T>(T poller) where T : INetMQPoller
237+
{
238+
IsRunning = true;
239+
}
240+
241+
public void DetachFromPoller()
242+
{
243+
IsRunning = false;
244+
}
245+
246+
public void Start()
247+
{
248+
IsRunning = true;
249+
}
250+
251+
public Task StartAsync()
252+
{
253+
IsRunning = true;
254+
return Task.CompletedTask;
255+
}
256+
257+
public void Stop()
258+
{
259+
IsRunning = false;
260+
}
261+
262+
public void Dispose()
263+
{
264+
IsRunning = false;
265+
}
266+
267+
public void RaiseEventReceived()
268+
{
269+
EventReceived?.Invoke(this, new NetMQMonitorSocketEventArgs(null!, "test", null!, SocketEvents.Connected));
270+
}
271+
}
191272
}
192273
}

0 commit comments

Comments
 (0)