public void WithAutoConnectFalse_LeavesStateAsInitialized() { var client = GetClientWithFakeTransport(opts => opts.AutoConnect = false); client.ConnectionManager.ConnectionState.Should().Be(ConnectionState.Initialized); LastCreatedTransport.Should().BeNull("Transport shouldn't be created without calling connect when AutoConnect is false"); }
public void WhenTransportCloses_ShouldResumeConnection() { var client = SetupConnectedClient(); List <ConnectionState> states = new List <ConnectionState>(); var errors = new List <ErrorInfo>(); client.Connection.InternalStateChanged += (sender, args) => { if (args.HasError) { errors.Add(args.Reason); } states.Add(args.Current); if (args.Current == ConnectionState.Connecting) { client.FakeProtocolMessageReceived(new ProtocolMessage(ProtocolMessage.MessageAction.Connected)); } }; var firstTransport = LastCreatedTransport; var connectionKey = client.Connection.Key; var serial = client.Connection.Serial.Value; LastCreatedTransport.Listener.OnTransportEvent(TransportState.Closed); var urlParams = LastCreatedTransport.Parameters.GetParams(); urlParams.Should().ContainKey("resume") .WhichValue.Should().Be(connectionKey); urlParams.Should().ContainKey("connection_serial") .WhichValue.Should().Be(serial.ToString()); LastCreatedTransport.Should().NotBeSameAs(firstTransport); }
public async Task WhenClosingAConnection_ItShouldRaiseClosingAndClosedEvents() { var client = await GetConnectedClient(); var states = new List <ConnectionStateChange>(); client.Connection.On((args) => { // (TA1) Whenever the connection state changes, // a ConnectionStateChange object is emitted on the Connection object args.Should().BeOfType <ConnectionStateChange>(); states.Add(args); }); LastCreatedTransport.SetSendAction(message => { if (message.Original.Action == ProtocolMessage.MessageAction.Close) { LastCreatedTransport.Close(false); } }); client.Close(); await client.WaitForState(ConnectionState.Closed); states.Count.Should().Be(2); (from s in states select s.Current).Should().BeEquivalentTo(new[] { ConnectionState.Closing, ConnectionState.Closed }); states[1].Previous.Should().Be(ConnectionState.Closing); states[1].Current.Should().Be(ConnectionState.Closed); states[1].Event.Should().Be(ConnectionEvent.Closed); client.Connection.State.Should().Be(ConnectionState.Closed); }
public async Task ShouldCreateTransport() { // Arrange var client = GetClientWithFakeTransport(opts => opts.AutoConnect = false); LastCreatedTransport.Should().BeNull(); client.ExecuteCommand(SetConnectingStateCommand.Create()); await client.ProcessCommands(); // Assert LastCreatedTransport.Should().NotBeNull(); }
public async Task WhenTransportCloses_ShouldResumeConnection() { var client = await SetupConnectedClient(); var states = new List <ConnectionState>(); var errors = new List <ErrorInfo>(); client.Connection.On((args) => { if (args.HasError) { errors.Add(args.Reason); } states.Add(args.Current); if (args.Current == ConnectionState.Connecting) { client.FakeProtocolMessageReceived(new ProtocolMessage(ProtocolMessage.MessageAction.Connected)); } }); var firstTransport = LastCreatedTransport; var connectionKey = client.Connection.Key; Debug.Assert(client.Connection.Serial.HasValue, "Expected a serial number, got null"); var serial = client.Connection.Serial.Value; LastCreatedTransport.Listener.OnTransportEvent(LastCreatedTransport.Id, TransportState.Closed); await client.WaitForState(ConnectionState.Connecting); await client.ProcessCommands(); states.Should().NotBeEmpty(); errors.Should().NotBeEmpty(); var urlParams = LastCreatedTransport.Parameters.GetParams(); urlParams.Should().ContainKey("resume") .WhoseValue.Should().Be(connectionKey); urlParams.Should().ContainKey("connection_serial") .WhoseValue.Should().Be(serial.ToString()); LastCreatedTransport.Should().NotBeSameAs(firstTransport); }
public void WhenClosingAConnection_ItShouldRaiseClosingAndClosedEvents() { var client = GetClientWithFakeTransport(); //Start collecting events after the connection is open var states = new List <ConnectionState>(); client.Connection.InternalStateChanged += (sender, args) => { args.Should().BeOfType <ConnectionStateChange>(); states.Add(args.Current); }; LastCreatedTransport.SendAction = message => { if (message.Original.Action == ProtocolMessage.MessageAction.Close) { LastCreatedTransport.Close(false); } }; client.Close(); states.Should().BeEquivalentTo(new[] { ConnectionState.Closing, ConnectionState.Closed }); client.Connection.State.Should().Be(ConnectionState.Closed); }