public async Task TestAttachChannel_AttachesSuccessfuly(Protocol protocol) { // Arrange var client = await GetRealtimeClient(protocol); Semaphore signal = new Semaphore(0, 2); var args = new List <ChannelStateChange>(); IRealtimeChannel target = client.Channels.Get("test"); target.StateChanged += (s, e) => { args.Add(e); signal.Release(); }; // Act target.Attach(); // Assert signal.WaitOne(10000); args.Count.ShouldBeEquivalentTo(1); args[0].Current.ShouldBeEquivalentTo(ChannelState.Attaching); args[0].Error.ShouldBeEquivalentTo(null); target.State.ShouldBeEquivalentTo(ChannelState.Attaching); signal.WaitOne(10000); args.Count.ShouldBeEquivalentTo(2); args[1].Current.ShouldBeEquivalentTo(ChannelState.Attached); args[1].Error.ShouldBeEquivalentTo(null); target.State.ShouldBeEquivalentTo(ChannelState.Attached); }
public async Task WhenAttachingOrAttached_ShouldDoNothing(ChannelState state) { await SetState(state); bool stateChanged = false; ChannelState newState = ChannelState.Initialized; _channel.On((args) => { newState = args.Current; stateChanged = true; }); _channel.Attach(); await Task.Delay(100); stateChanged.Should().BeFalse("This should not happen. State changed to: " + newState); }
public async Task TestAttachChannel_Sending3Messages_EchoesItBack(Protocol protocol) { Logger.LogLevel = LogLevel.Debug; ; // Arrange var client = await GetRealtimeClient(protocol); await client.WaitForState(ConnectionState.Connected); ManualResetEvent resetEvent = new ManualResetEvent(false); IRealtimeChannel target = client.Channels.Get("test" + protocol); target.Attach(); await target.WaitForState(ChannelState.Attached); ConcurrentQueue <Message> messagesReceived = new ConcurrentQueue <Message>(); int count = 0; target.Subscribe(message => { messagesReceived.Enqueue(message); count++; if (count == 3) { resetEvent.Set(); } }); // Act target.Publish("test1", "test 12"); target.Publish("test2", "test 123"); target.Publish("test3", "test 321"); bool result = resetEvent.WaitOne(8000); await Task.Delay(100); result.Should().BeTrue(); // Assert messagesReceived.Count.ShouldBeEquivalentTo(3); var messages = messagesReceived.ToList(); messages[0].Name.ShouldBeEquivalentTo("test1"); messages[0].Data.ShouldBeEquivalentTo("test 12"); messages[1].Name.ShouldBeEquivalentTo("test2"); messages[1].Data.ShouldBeEquivalentTo("test 123"); messages[2].Name.ShouldBeEquivalentTo("test3"); messages[2].Data.ShouldBeEquivalentTo("test 321"); }
public async Task TestAttachChannel_Sending3Messages_EchoesItBack(Protocol protocol) { // Arrange var client = await GetRealtimeClient(protocol); ManualResetEvent resetEvent = new ManualResetEvent(false); IRealtimeChannel target = client.Channels.Get("test" + protocol); target.Attach(); List <Message> messagesReceived = new List <Message>(); int count = 0; target.Subscribe(message => { messagesReceived.Add(message); count++; if (count == 3) { resetEvent.Set(); } }); // Act target.Publish("test1", "test 12"); target.Publish("test2", "test 123"); target.Publish("test3", "test 321"); bool result = resetEvent.WaitOne(8000); result.Should().BeTrue(); // Assert messagesReceived.Count.ShouldBeEquivalentTo(3); messagesReceived[0].Name.ShouldBeEquivalentTo("test1"); messagesReceived[0].Data.ShouldBeEquivalentTo("test 12"); messagesReceived[1].Name.ShouldBeEquivalentTo("test2"); messagesReceived[1].Data.ShouldBeEquivalentTo("test 123"); messagesReceived[2].Name.ShouldBeEquivalentTo("test3"); messagesReceived[2].Data.ShouldBeEquivalentTo("test 321"); }