コード例 #1
0
        public void CommitSuccessTest()
        {
            var connection            = Substitute.For <IPersistentConnection>();
            var deviceAuthenticator   = Substitute.For <IDeviceAuthenticator>();
            var deviceOperations      = Substitute.For <IDeviceOperations>();
            var dateTimeProvider      = Substitute.For <IDateTimeProvider>();
            var outgoingMessageReader = Substitute.For <IMessagingOperations>();

            dateTimeProvider.UtcNow.Returns(DateTime.UtcNow);
            var pusherRegistry     = new PusherRegistry(dateTimeProvider);
            var connectionRegistry = new ConnectionRegistry(pusherRegistry, null);

            var deviceId = Identity.Next();

            connection.ConnectionId.Returns(Guid.NewGuid());
            deviceAuthenticator.Authenticate(null).ReturnsForAnyArgs(true);
            deviceOperations.Get(null).ReturnsForAnyArgs(TestDataCreator.Device(deviceId, "1234", "2345", "3456", "4567", 1));

            connectionRegistry.RegisterInitiatedConnection(connection);

            var commandExecutor = new CommandExecutor(pusherRegistry, connectionRegistry, outgoingMessageReader, deviceAuthenticator, deviceOperations, null, null);

            commandExecutor.Execute(connection, new LoginCommand(deviceId + " " + Identity.Next()));

            commandExecutor.Execute(connection, new SubscribeCommand("peekandcommit"));

            dateTimeProvider.UtcNow.Returns(DateTime.UtcNow);
            pusherRegistry.SetAsCommitNeededConnections(new[] { connection });

            outgoingMessageReader.Commit((long)0).ReturnsForAnyArgs(OutgoingState.Ok);

            Assert.IsTrue(pusherRegistry.IsCommitable(deviceId));

            commandExecutor.Execute(connection, new CommitCommand());

            Assert.IsFalse(pusherRegistry.IsCommitable(deviceId));

            commandExecutor.Execute(connection, new CommitCommand());
        }