|
1 | 1 | using System; |
2 | 2 | using System.Collections.Generic; |
| 3 | +using System.Linq; |
3 | 4 | using System.Net.Mail; |
4 | 5 | using System.Threading; |
5 | 6 | using System.Threading.Tasks; |
@@ -275,6 +276,47 @@ public async Task MessageExpired_IsRaised_WhenMessageHasExpired() |
275 | 276 | client.Verify(c => c.SendAsync(It.IsAny<ISmtpMessage>(), It.IsAny<CancellationToken>()), Times.Never); |
276 | 277 | } |
277 | 278 |
|
| 279 | + [Fact] |
| 280 | + public async Task MessageExpired_IsRaised_FromCleanupSweep_PerReturnedMessage() |
| 281 | + { |
| 282 | + Mock<IRelayMessage> first = new(); |
| 283 | + first.SetupGet(m => m.QueueId).Returns("queue-1"); |
| 284 | + Mock<IRelayMessage> second = new(); |
| 285 | + second.SetupGet(m => m.QueueId).Returns("queue-2"); |
| 286 | + |
| 287 | + Mock<IRelayQueue> queue = new(); |
| 288 | + queue.Setup(q => q.ClearExpiredAsync(It.IsAny<CancellationToken>())) |
| 289 | + .ReturnsAsync(new List<IRelayMessage> { first.Object, second.Object }); |
| 290 | + |
| 291 | + RelayService service = new(CreateConfiguration(), queue.Object, logger: null); |
| 292 | + |
| 293 | + List<RelayDeliveryEventArgs> raised = new(); |
| 294 | + service.MessageExpired += (_, e) => raised.Add(e); |
| 295 | + |
| 296 | + await service.SweepExpiredMessagesAsync(CancellationToken.None); |
| 297 | + |
| 298 | + Assert.Equal(2, raised.Count); |
| 299 | + Assert.Equal(new[] { "queue-1", "queue-2" }, raised.Select(r => r.QueueId).ToArray()); |
| 300 | + Assert.All(raised, r => Assert.Equal("Message expired", r.Error)); |
| 301 | + } |
| 302 | + |
| 303 | + [Fact] |
| 304 | + public async Task MessageExpired_NotRaised_WhenSweepFindsNothing() |
| 305 | + { |
| 306 | + Mock<IRelayQueue> queue = new(); |
| 307 | + queue.Setup(q => q.ClearExpiredAsync(It.IsAny<CancellationToken>())) |
| 308 | + .ReturnsAsync(Array.Empty<IRelayMessage>()); |
| 309 | + |
| 310 | + RelayService service = new(CreateConfiguration(), queue.Object, logger: null); |
| 311 | + |
| 312 | + bool raised = false; |
| 313 | + service.MessageExpired += (_, _) => raised = true; |
| 314 | + |
| 315 | + await service.SweepExpiredMessagesAsync(CancellationToken.None); |
| 316 | + |
| 317 | + Assert.False(raised); |
| 318 | + } |
| 319 | + |
278 | 320 | [Fact] |
279 | 321 | public async Task EventHandlerException_DoesNotPropagate() |
280 | 322 | { |
|
0 commit comments