public void StartStopWithReceiveAndForgetProcessingElementTest() { var outgoingMessageReader = Substitute.For <IMessagingOperations>(); var persistentConnection = Substitute.For <IPersistentConnection>(); var dateTimeProvider = Substitute.For <IDateTimeProvider>(); dateTimeProvider.UtcNow.Returns(DateTime.UtcNow); var batchParameters = Substitute.For <IBatchParameters>(); batchParameters.PersistentConnectionMessageReceiveAndForgetCollectionTime.Returns( TimeSpan.FromMilliseconds(100)); batchParameters.PersistentConnectionMessageReceiveAndForgetCollectionBatch.Returns(100); var pusherRegistry = new PusherRegistry(dateTimeProvider); persistentConnection.DeviceId = "1234"; persistentConnection.NumericDeviceId = 1; persistentConnection.ConnectionState = ConnectionState.LoggedIn | ConnectionState.Subscribed; persistentConnection.SubscriptionType = SubscriptionType.ReceiveAndForget; persistentConnection.LastHeartbeat.Returns(DateTime.UtcNow); outgoingMessageReader.ReceiveAndForgetMany(null) .ReturnsForAnyArgs(new Dictionary <long, OutgoingMessageToStoreWithState>() { { 1, new OutgoingMessageToStoreWithState(new OutgoingMessageToStore(1, Encoding.UTF8.GetBytes("{}"), 1, DateTime.UtcNow, "sender"), OutgoingState.Ok) } }); pusherRegistry.AddConnection(persistentConnection); persistentConnection.NextReceiveAndForgetTime = DateTime.UtcNow.AddSeconds(-2); var persistentConnectionWorker = new PersistentConnectionReceiveAndForgetWorker(pusherRegistry, outgoingMessageReader, batchParameters); persistentConnectionWorker.Start(); bool ok = false; for (int i = 0; i < 30; i++) { try { persistentConnection.ReceivedWithAnyArgs().SendMessage(null); ok = true; break; } catch (ReceivedCallsException) { Thread.Sleep(100); } } persistentConnectionWorker.Stop(); Assert.IsTrue(ok); }