From 4e186f827cecf86df864db889cd984555b2008a9 Mon Sep 17 00:00:00 2001 From: Radu Popovici Date: Tue, 19 Jul 2022 17:13:29 +0300 Subject: [PATCH] fix start stop start (#232) Co-authored-by: Radu Popovici --- .../Internal/MessagingHost.cs | 4 +-- .../NBB.Messaging.Host.Tests/HostTests.cs | 32 +++++++++++++++++++ 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/Messaging/NBB.Messaging.Host/Internal/MessagingHost.cs b/src/Messaging/NBB.Messaging.Host/Internal/MessagingHost.cs index 88889313..ac58127f 100644 --- a/src/Messaging/NBB.Messaging.Host/Internal/MessagingHost.cs +++ b/src/Messaging/NBB.Messaging.Host/Internal/MessagingHost.cs @@ -70,9 +70,6 @@ public void ScheduleRestart(TimeSpan delay = default) ExecutionContext.SuppressFlow(); await TryStopAsync(); - - _stoppingSource = new CancellationTokenSource(); - await StartAsync(); } finally @@ -215,6 +212,7 @@ public async Task StopAsync(CancellationToken cancellationToken = default) finally { Interlocked.Exchange(ref _isStopping, 0); + _stoppingSource = new CancellationTokenSource(); } } diff --git a/test/UnitTests/Messaging/NBB.Messaging.Host.Tests/HostTests.cs b/test/UnitTests/Messaging/NBB.Messaging.Host.Tests/HostTests.cs index d2bcfd40..6142c684 100644 --- a/test/UnitTests/Messaging/NBB.Messaging.Host.Tests/HostTests.cs +++ b/test/UnitTests/Messaging/NBB.Messaging.Host.Tests/HostTests.cs @@ -250,6 +250,38 @@ public async Task Shoud_restart_even_if_stop_fails() Mock.Get(mockLogger).VerifyLogInformationWasCalled("Messaging host is starting", Times.Exactly(2), "Messaging host expected to re-start"); } + [Fact] + public async Task Start_Stop_Start_should_work() + { + //Arrange + var hostOptions = Mock.Of>(x => x.Value == new MessagingHostOptions + { + RestartDelaySeconds = 0, + StartRetryCount = 0, + }); + var configurator = new DelegateMessagingHostStartup(config => + config.AddSubscriberServices(s => s.FromTopic("TestTopic")).WithDefaultOptions().UsePipeline(p => { })); + + var mockedMessageBus = Mock.Of(); + Mock.Get(mockedMessageBus) + .Setup(x => x.SubscribeAsync(It.IsAny, Task>>(), + It.IsAny(), It.IsAny())) + .ReturnsAsync(Mock.Of()); + + var mockLogger = Mock.Of>(); + var mockedServiceProvider = GetMockedServiceProvider(mockedMessageBus); + var messageHost = new MessagingHost(mockLogger, new[] { configurator }, mockedServiceProvider, + Mock.Of(), Mock.Of(), Mock.Of(), hostOptions); + + //Act + await messageHost.StartAsync(); + await messageHost.StopAsync(); + await messageHost.StartAsync(); + + //Assert + Mock.Get(mockLogger).VerifyLogInformationWasCalled("Messaging host has started", Times.Exactly(2), "Messaging host expected to start twice"); + } + private IServiceProvider GetMockedServiceProvider(IMessageBus mockedMessageBus) {