コード例 #1
0
        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);
        }