protected override async Task When() { var overallConcurrentHandlerLimit = Math.Min(Instance.Configuration.ConcurrentHandlerLimit.Value, Instance.Configuration.GlobalConcurrentHandlerLimit.Value); _totalCommandsToSend = overallConcurrentHandlerLimit * 2; _expectedNumberOfCommandsToBeSeenBeforeTheBusStops = overallConcurrentHandlerLimit; SlowCommandHandler.Reset(); await Enumerable.Range(0, _totalCommandsToSend) .Select(i => Bus.Send(new SlowCommand())) .WhenAll(); await TimeSpan.FromSeconds(TimeoutSeconds) .WaitUntil(() => MethodCallCounter.AllReceivedMessages.OfType <SlowCommand>().Count() >= _expectedNumberOfCommandsToBeSeenBeforeTheBusStops); _messagesReceivedBeforeTheBusWasStopped = MethodCallCounter.AllReceivedMessages.OfType <SlowCommand>().Count(); await Bus.Stop(); MethodCallCounter.Clear(); SlowCommandHandler.HandlerSemaphore.Release(_totalCommandsToSend); await Task.Delay(TimeSpan.FromSeconds(0.25)); _messagesReceivedAfterTheBusWasStopped = MethodCallCounter.AllReceivedMessages.OfType <SlowCommand>().Count(); }
protected override async Task <LongRunningTaskWrapper> Given() { _slowCommand = new SlowCommand(); _handler = new SlowCommandHandler(); _brokeredMessage = new BrokeredMessage(_slowCommand); _clock = new SystemClock(); _logger = new ConsoleLogger(); _defaultMessageLockDuration = new DefaultMessageLockDurationSetting(); _taskFactory = new NimbusTaskFactory(new MaximumThreadPoolThreadsSetting(), new MinimumThreadPoolThreadsSetting(), _logger); _renewLockCalled = false; _handlerTask = _handler.Handle(_slowCommand); LongRunningTaskWrapperBase.RenewLockStrategy = async m => { _renewLockCalled = true; _lockedUntil = _clock.UtcNow.AddSeconds(1); _handler.PretendToBeWorkingSemaphore.Release(); }; LongRunningTaskWrapperBase.LockedUntilUtcStrategy = m => _lockedUntil; _lockedUntil = DateTimeOffset.UtcNow.AddSeconds(1); return(new LongRunningTaskWrapper(_handlerTask, _handler, _brokeredMessage, _clock, _logger, _defaultMessageLockDuration, _taskFactory)); }