Esempio n. 1
0
        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);
        }
Esempio n. 2
0
            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);
            }
Esempio n. 3
0
        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");
        }
Esempio n. 4
0
        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");
        }