public void TryLoginSameDeviceTwiceTest() { var connection = Substitute.For <IPersistentConnection>(); var connection2 = Substitute.For <IPersistentConnection>(); var deviceAuthenticator = Substitute.For <IDeviceAuthenticator>(); var deviceOperations = Substitute.For <IDeviceOperations>(); var connectionRegistry = new ConnectionRegistry(new PusherRegistry(new DateTimeProvider()), null); connection.ConnectionId.Returns(Guid.NewGuid()); connection2.ConnectionId.Returns(Guid.NewGuid()); deviceAuthenticator.Authenticate(null).ReturnsForAnyArgs(true); var deviceId = Identity.Next(); deviceOperations.Get(null).ReturnsForAnyArgs(TestDataCreator.Device(deviceId, "1234", "2345", "3456", "4567", 1)); connectionRegistry.RegisterInitiatedConnection(connection); connectionRegistry.RegisterInitiatedConnection(connection2); var commandExecutor = new CommandExecutor(null, connectionRegistry, null, deviceAuthenticator, deviceOperations, null, null); commandExecutor.Execute(connection, new LoginCommand(deviceId + " " + Identity.Next())); commandExecutor.Execute(connection2, new LoginCommand(deviceId + " " + Identity.Next())); connection.Received().Reply("login ack"); connection2.Received().Reply("login badcommand"); Assert.AreEqual(ConnectionState.LoggedIn, connection.ConnectionState); Assert.AreEqual(1, connection.NumericDeviceId); }
public void TryRegisterInitiatingConnectionTwiceTest() { var connectionRegistry = new ConnectionRegistry(new PusherRegistry(new DateTimeProvider()), new DateTimeProvider()); var persistentConnection = Substitute.For <IPersistentConnection>(); persistentConnection.ConnectionId.Returns(Guid.NewGuid()); connectionRegistry.RegisterInitiatedConnection(persistentConnection); connectionRegistry.RegisterInitiatedConnection(persistentConnection); }
public void GetPeekConnectionHeartbeatTooEarlyTest() { var dateTimeProvider = Substitute.For <IDateTimeProvider>(); dateTimeProvider.UtcNow.Returns(DateTime.UtcNow); var pusherRegistry = new PusherRegistry(dateTimeProvider); var connectionRegistry = new ConnectionRegistry(pusherRegistry, null); var persistentConnection = Substitute.For <IPersistentConnection>(); persistentConnection.ConnectionId.Returns(Guid.NewGuid()); connectionRegistry.RegisterInitiatedConnection(persistentConnection); connectionRegistry.PromoteToLoggedInConnection(persistentConnection, Identity.Next(), 1); connectionRegistry.PromoteToSubscribedConnection(persistentConnection.DeviceId, SubscriptionType.PeekAndCommit); persistentConnection.LastHeartbeat.Returns(DateTime.UtcNow.AddSeconds(-20.0)); persistentConnection.NextPeekTime.Returns(DateTime.UtcNow.AddSeconds(0.1)); var nothing = pusherRegistry.GetPeekConnection(); Assert.IsNull(nothing); }
public void GetReceiveAndForgetConnectionNotYetSubscribedTest() { var dateTimeProvider = Substitute.For <IDateTimeProvider>(); dateTimeProvider.UtcNow.Returns(DateTime.UtcNow); var pusherRegistry = new PusherRegistry(dateTimeProvider); var connectionRegistry = new ConnectionRegistry(pusherRegistry, null); var persistentConnection = Substitute.For <IPersistentConnection>(); persistentConnection.ConnectionId.Returns(Guid.NewGuid()); connectionRegistry.RegisterInitiatedConnection(persistentConnection); connectionRegistry.PromoteToLoggedInConnection(persistentConnection, Identity.Next(), 1); connectionRegistry.PromoteToSubscribedConnection(persistentConnection.DeviceId, SubscriptionType.ReceiveAndForget); connectionRegistry.UnsubscribeConnection(persistentConnection.DeviceId); persistentConnection.LastHeartbeat.Returns(DateTime.UtcNow.AddMinutes(-10.1)); var nothing = pusherRegistry.GetReceiveAndForgetConnection(); Assert.IsNull(nothing); }
public void HeartbeatTest() { var connection = Substitute.For <IPersistentConnection>(); var deviceAuthenticator = Substitute.For <IDeviceAuthenticator>(); var deviceOperations = Substitute.For <IDeviceOperations>(); var connectionRegistry = new ConnectionRegistry(new PusherRegistry(new DateTimeProvider()), null); connection.ConnectionId.Returns(Guid.NewGuid()); deviceAuthenticator.Authenticate(null).ReturnsForAnyArgs(true); deviceOperations.Get(null).ReturnsForAnyArgs(TestDataCreator.Device("1234", "1234", "2345", "3456", "4567", 1)); connectionRegistry.RegisterInitiatedConnection(connection); var commandExecutor = new CommandExecutor(null, connectionRegistry, null, deviceAuthenticator, deviceOperations, null, null); commandExecutor.Execute(connection, new LoginCommand(Identity.Next() + " " + Identity.Next())); commandExecutor.Execute(connection, new SubscribeCommand("receiveandforget")); commandExecutor.Execute(connection, new HeartbeatCommand()); Assert.AreEqual(ConnectionState.LoggedIn | ConnectionState.Subscribed, connection.ConnectionState); connection.Received().Heartbeat(); }
public void CommitNotLoggedInTest() { 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); dateTimeProvider.UtcNow.Returns(DateTime.UtcNow); pusherRegistry.SetAsCommitNeededConnections(new[] { connection }); outgoingMessageReader.Commit((long)0).ReturnsForAnyArgs(OutgoingState.Ok); connection.ClearReceivedCalls(); commandExecutor.Execute(connection, new CommitCommand()); connection.DidNotReceive().Heartbeat(); }
public void TelemetryDataLoginRequiredTest() { var connection = Substitute.For <IPersistentConnection>(); var deviceAuthenticator = Substitute.For <IDeviceAuthenticator>(); var deviceOperations = Substitute.For <IDeviceOperations>(); var dateTimeProvider = Substitute.For <IDateTimeProvider>(); var telemetryDataSinkResolver = Substitute.For <ITelemetryDataSinkResolver>(); 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); telemetryDataSinkResolver.ResolveIncoming(null).ReturnsForAnyArgs(new List <ITelemetryDataSink>()); var telemetryDataService = new DirectTelemetryDataService(telemetryDataSinkResolver); var commandExecutor = new CommandExecutor(pusherRegistry, connectionRegistry, null, deviceAuthenticator, deviceOperations, null, telemetryDataService); dateTimeProvider.UtcNow.Returns(DateTime.UtcNow); commandExecutor.Execute(connection, new TelemetryDataCommand("{\"Temperature\": 24, \"Time\":" + DateTime.UtcNow.Ticks + "}")); connection.Received(1).Reply("telemetrydata unauthorized"); }
public void CollectDeadLoggedinConnectionTest() { var connectionRegistry = new ConnectionRegistry(new PusherRegistry(new DateTimeProvider()), new DateTimeProvider()); var persistentConnection = Substitute.For <IPersistentConnection>(); persistentConnection.ConnectionId.Returns(Guid.NewGuid()); persistentConnection.LastHeartbeat.Returns(new DateTime(2014, 1, 1)); connectionRegistry.RegisterInitiatedConnection(persistentConnection); connectionRegistry.PromoteToLoggedInConnection(persistentConnection, "1234", 1); connectionRegistry.Start(); int rounds = 0; while (persistentConnection.ConnectionState != ConnectionState.None && rounds < 100) { Thread.Sleep(10); rounds++; } connectionRegistry.Stop(); persistentConnection.Received().Close(); Assert.AreEqual(ConnectionState.None, persistentConnection.ConnectionState); }
public void SendToErrorTest() { var connection = Substitute.For <IPersistentConnection>(); var deviceAuthenticator = Substitute.For <IDeviceAuthenticator>(); var deviceOperations = Substitute.For <IDeviceOperations>(); var dateTimeProvider = Substitute.For <IDateTimeProvider>(); 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, null, deviceAuthenticator, deviceOperations, null, null); commandExecutor.Execute(connection, new LoginCommand(deviceId + " " + Identity.Next())); dateTimeProvider.UtcNow.Returns(DateTime.UtcNow); commandExecutor.Execute(connection, new SendToCommand("{\"Temperature\": 24, \"Time\":" + DateTime.UtcNow.Ticks + "}")); connection.Received(1).Reply("sendto error"); }
public void GetReceiveAndForgetConnectionHeartbeatOkTest() { var dateTimeProvider = Substitute.For <IDateTimeProvider>(); dateTimeProvider.UtcNow.Returns(DateTime.UtcNow); var pusherRegistry = new PusherRegistry(dateTimeProvider); var connectionRegistry = new ConnectionRegistry(pusherRegistry, null); var persistentConnection = Substitute.For <IPersistentConnection>(); persistentConnection.ConnectionId.Returns(Guid.NewGuid()); connectionRegistry.RegisterInitiatedConnection(persistentConnection); connectionRegistry.PromoteToLoggedInConnection(persistentConnection, Identity.Next(), 1); connectionRegistry.PromoteToSubscribedConnection(persistentConnection.DeviceId, SubscriptionType.ReceiveAndForget); persistentConnection.LastHeartbeat.Returns(DateTime.UtcNow.AddSeconds(-20.0)); persistentConnection.NextReceiveAndForgetTime.Returns(DateTime.UtcNow.AddSeconds(-0.1)); var conn = pusherRegistry.GetReceiveAndForgetConnection(); Assert.AreEqual(persistentConnection, conn); persistentConnection.ReceivedWithAnyArgs().NextReceiveAndForgetTime = new DateTime(); }
public void GetPeekConnectionRequeueFromCommitToPeekTest() { var dateTimeProvider = Substitute.For <IDateTimeProvider>(); dateTimeProvider.UtcNow.Returns(DateTime.UtcNow); var pusherRegistry = new PusherRegistry(dateTimeProvider); var connectionRegistry = new ConnectionRegistry(pusherRegistry, null); var persistentConnection = Substitute.For <IPersistentConnection>(); persistentConnection.ConnectionId.Returns(Guid.NewGuid()); connectionRegistry.RegisterInitiatedConnection(persistentConnection); connectionRegistry.PromoteToLoggedInConnection(persistentConnection, Identity.Next(), 1); connectionRegistry.PromoteToSubscribedConnection(persistentConnection.DeviceId, SubscriptionType.PeekAndCommit); persistentConnection.LastHeartbeat.Returns(DateTime.UtcNow.AddSeconds(-20.0)); persistentConnection.NextPeekTime.Returns(DateTime.UtcNow.AddSeconds(-0.1)); var conn = pusherRegistry.GetPeekConnection(); pusherRegistry.SetAsCommitNeededConnections(new[] { conn }); persistentConnection.LastCommitTime = DateTime.UtcNow.AddSeconds(-20); dateTimeProvider.UtcNow.Returns(DateTime.UtcNow.AddMilliseconds(200)); pusherRegistry.GetPeekConnection(); }
public void TryPromoteToLoggedInConnectionNoDeviceIdTest() { var connectionRegistry = new ConnectionRegistry(new PusherRegistry(new DateTimeProvider()), new DateTimeProvider()); var persistentConnection = Substitute.For <IPersistentConnection>(); persistentConnection.ConnectionId.Returns(Guid.NewGuid()); connectionRegistry.RegisterInitiatedConnection(persistentConnection); connectionRegistry.PromoteToLoggedInConnection(persistentConnection, null, 1); }
public void RegisterInitiatingConnectionTest() { var connectionRegistry = new ConnectionRegistry(new PusherRegistry(new DateTimeProvider()), new DateTimeProvider()); var persistentConnection = Substitute.For <IPersistentConnection>(); persistentConnection.ConnectionId.Returns(Guid.NewGuid()); connectionRegistry.RegisterInitiatedConnection(persistentConnection); Assert.AreEqual(ConnectionState.Initiated, persistentConnection.ConnectionState); Assert.AreEqual(SubscriptionType.None, persistentConnection.SubscriptionType); }
public void TryPromoteToSubscribedConnectionNotLoggedInTest() { var connectionRegistry = new ConnectionRegistry(new PusherRegistry(new DateTimeProvider()), new DateTimeProvider()); var persistentConnection = Substitute.For <IPersistentConnection>(); persistentConnection.ConnectionId.Returns(Guid.NewGuid()); persistentConnection.DeviceId.Returns(Identity.Next()); connectionRegistry.RegisterInitiatedConnection(persistentConnection); connectionRegistry.PromoteToSubscribedConnection(persistentConnection.DeviceId, SubscriptionType.PeekAndCommit); }
public void TryUnsubscribeNonSubscribedConnectionTest() { var connectionRegistry = new ConnectionRegistry(new PusherRegistry(new DateTimeProvider()), new DateTimeProvider()); var persistentConnection = Substitute.For <IPersistentConnection>(); persistentConnection.ConnectionId.Returns(Guid.NewGuid()); connectionRegistry.RegisterInitiatedConnection(persistentConnection); connectionRegistry.PromoteToLoggedInConnection(persistentConnection, Identity.Next(), 1); connectionRegistry.UnsubscribeConnection(persistentConnection.DeviceId); }
public void PromoteToLoggedInConnectionTest() { var connectionRegistry = new ConnectionRegistry(new PusherRegistry(new DateTimeProvider()), new DateTimeProvider()); var persistentConnection = Substitute.For <IPersistentConnection>(); persistentConnection.ConnectionId.Returns(Guid.NewGuid()); connectionRegistry.RegisterInitiatedConnection(persistentConnection); connectionRegistry.PromoteToLoggedInConnection(persistentConnection, Identity.Next(), 1); Assert.IsNotNull(persistentConnection.DeviceId); Assert.AreEqual(ConnectionState.LoggedIn, persistentConnection.ConnectionState); Assert.AreEqual(SubscriptionType.None, persistentConnection.SubscriptionType); }
public void PromoteToSubscribedConnectionTest() { var connectionRegistry = new ConnectionRegistry(new PusherRegistry(new DateTimeProvider()), new DateTimeProvider()); var persistentConnection = Substitute.For <IPersistentConnection>(); persistentConnection.ConnectionId.Returns(Guid.NewGuid()); connectionRegistry.RegisterInitiatedConnection(persistentConnection); connectionRegistry.PromoteToLoggedInConnection(persistentConnection, Identity.Next(), 1); connectionRegistry.PromoteToSubscribedConnection(persistentConnection.DeviceId, SubscriptionType.PeekAndCommit); Assert.AreEqual(ConnectionState.LoggedIn | ConnectionState.Subscribed, persistentConnection.ConnectionState); Assert.AreEqual(SubscriptionType.PeekAndCommit, persistentConnection.SubscriptionType); persistentConnection.Received().Heartbeat(); }
public void CloseTest() { var connection = Substitute.For <IPersistentConnection>(); var connectionRegistry = new ConnectionRegistry(new PusherRegistry(new DateTimeProvider()), null); connection.ConnectionId.Returns(Guid.NewGuid()); connectionRegistry.RegisterInitiatedConnection(connection); var commandExecutor = new CommandExecutor(null, connectionRegistry, null, null, null, null, null); commandExecutor.Execute(connection, new CloseCommand()); Assert.AreEqual(ConnectionState.None, connection.ConnectionState); connection.Received().Close(); }
public void TryLoginUnauthorizedTest() { var connection = Substitute.For <IPersistentConnection>(); var deviceAuthenticator = Substitute.For <IDeviceAuthenticator>(); var connectionRegistry = new ConnectionRegistry(new PusherRegistry(new DateTimeProvider()), null); connection.ConnectionId.Returns(Guid.NewGuid()); deviceAuthenticator.Authenticate(null).ReturnsForAnyArgs(false); connectionRegistry.RegisterInitiatedConnection(connection); var commandExecutor = new CommandExecutor(null, connectionRegistry, null, deviceAuthenticator, null, null, null); commandExecutor.Execute(connection, new LoginCommand(Identity.Next() + " " + Identity.Next())); connection.Received().Reply("login unauthorized"); Assert.AreEqual(ConnectionState.Initiated, connection.ConnectionState); }
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()); }
public void TryUnSubscribeNotLoggedinTest() { var connection = Substitute.For <IPersistentConnection>(); var deviceAuthenticator = Substitute.For <IDeviceAuthenticator>(); var deviceOperations = Substitute.For <IDeviceOperations>(); var connectionRegistry = new ConnectionRegistry(new PusherRegistry(new DateTimeProvider()), null); connection.ConnectionId.Returns(Guid.NewGuid()); deviceAuthenticator.Authenticate(null).ReturnsForAnyArgs(true); deviceOperations.Get(null).ReturnsForAnyArgs(TestDataCreator.Device("1234", "1234", "2345", "3456", "4567", 1)); connectionRegistry.RegisterInitiatedConnection(connection); var commandExecutor = new CommandExecutor(null, connectionRegistry, null, deviceAuthenticator, deviceOperations, null, null); commandExecutor.Execute(connection, new UnsubscribeCommand()); connection.Received().Reply("unsubscribe unauthorized"); Assert.AreEqual(ConnectionState.Initiated, connection.ConnectionState); Assert.AreEqual(SubscriptionType.None, connection.SubscriptionType); }
public void CommitNotApplicableTest() { var connection = Substitute.For <IPersistentConnection>(); var deviceAuthenticator = Substitute.For <IDeviceAuthenticator>(); var deviceOperations = Substitute.For <IDeviceOperations>(); var dateTimeProvider = Substitute.For <IDateTimeProvider>(); var pusherRegistry = new PusherRegistry(dateTimeProvider); var connectionRegistry = new ConnectionRegistry(pusherRegistry, null); connection.ConnectionId.Returns(Guid.NewGuid()); deviceAuthenticator.Authenticate(null).ReturnsForAnyArgs(true); deviceOperations.Get(null).ReturnsForAnyArgs(TestDataCreator.Device("1234", "1234", "2345", "3456", "4567", 1)); connectionRegistry.RegisterInitiatedConnection(connection); var commandExecutor = new CommandExecutor(pusherRegistry, connectionRegistry, null, deviceAuthenticator, deviceOperations, null, null); commandExecutor.Execute(connection, new LoginCommand(Identity.Next() + " " + Identity.Next())); commandExecutor.Execute(connection, new SubscribeCommand("peekandcommit")); commandExecutor.Execute(connection, new CommitCommand()); }
public void RecordOutgoingAndPeekMessageRealTest() { var environmentFactory = EnvironmentFactoryFactory.Create(); MessagingWorkers.Start(new TestBatchParameters(), environmentFactory.MessagingEnvironment.MessagingServiceClient); var pltDeviceOperations = environmentFactory.ManagementEnvironment.ObjDeviceOperations; var messagingOperations = new MessagingOperations(); var dateTimeProvider = Substitute.For <IDateTimeProvider>(); dateTimeProvider.UtcNow.Returns(DateTime.UtcNow); var batchParameters = Substitute.For <IBatchParameters>(); batchParameters.PersistentConnectionMessagePeekCollectionTime.Returns( TimeSpan.FromMilliseconds(100)); batchParameters.PersistentConnectionMessagePeekCollectionBatch.Returns(100); var pusherRegistry = new PusherRegistry(dateTimeProvider); var persistentConnectionWorker = new PersistentConnectionPeekWorker(pusherRegistry, messagingOperations, batchParameters); persistentConnectionWorker.Start(); var messagingService = new MessagingService(messagingOperations, pltDeviceOperations); var success = messagingService.RecordOutgoingMessage(_deviceId, _deviceId, "32412341243"); Assert.AreEqual(OutgoingState.Ok, success); var connectionRegistry = new ConnectionRegistry(pusherRegistry, null); var connection = Substitute.For <IPersistentConnection>(); connectionRegistry.RegisterInitiatedConnection(connection); connection.LastHeartbeat.Returns(DateTime.UtcNow); var device = _deviceService.Get(_deviceId); connectionRegistry.PromoteToLoggedInConnection(connection, _deviceId, device.NumericId); connectionRegistry.PromoteToSubscribedConnection(_deviceId, SubscriptionType.PeekAndCommit); connection.NextPeekTime = DateTime.UtcNow.AddSeconds(-0.1); dateTimeProvider.UtcNow.Returns(DateTime.UtcNow); bool ok = false; for (int i = 0; i < 20; i++) { try { connection.ReceivedWithAnyArgs().SendMessage(null); ok = true; } catch (ReceivedCallsException) { Thread.Sleep(100); } } Assert.IsTrue(ok); persistentConnectionWorker.Stop(); MessagingWorkers.Stop(); }
protected override void OnSessionStarted() { ConnectionId = Guid.NewGuid(); _connectionRegistry.RegisterInitiatedConnection(this); }