예제 #1
0
        public void Detach_WhenStateIsFailed_ThrowsError()
        {
            // Arrange
            Mock <IConnectionManager> manager = new Mock <IConnectionManager>();

            Realtime.Channel target = new Realtime.Channel("test", "client", manager.Object);
            manager.Raise(c => c.MessageReceived += null, new ProtocolMessage(ProtocolMessage.MessageAction.Error));

            // Act
            Assert.Throws <AblyException>(() => target.Detach());
        }
예제 #2
0
        public void Detach_IgnoresSubsequentDetaches()
        {
            // Arrange
            Mock <IConnectionManager> manager = new Mock <IConnectionManager>();

            manager.SetupGet(c => c.IsActive).Returns(true);
            manager.Setup(c => c.Send(It.Is <ProtocolMessage>(m => m.Action == ProtocolMessage.MessageAction.Attach), null))
            .Raises(c => c.MessageReceived += null, new ProtocolMessage(ProtocolMessage.MessageAction.Attached));
            Realtime.Channel    target = new Realtime.Channel("test", "client", manager.Object);
            List <ChannelState> states = new List <ChannelState>();

            target.Attach();
            target.ChannelStateChanged += (s, e) => states.Add(e.NewState);

            // Act
            target.Detach();
            target.Detach();

            // Assert
            Assert.Single <ChannelState>(states, c => c == ChannelState.Detaching);
        }
예제 #3
0
        public void Detach_SendsDetachMessage()
        {
            // Arrange
            Mock <IConnectionManager> manager = new Mock <IConnectionManager>();

            manager.SetupGet(c => c.IsActive).Returns(true);
            manager.Setup(c => c.Send(It.Is <ProtocolMessage>(m => m.Action == ProtocolMessage.MessageAction.Attach), null))
            .Raises(c => c.MessageReceived += null, new ProtocolMessage(ProtocolMessage.MessageAction.Attached));
            Realtime.Channel target = new Realtime.Channel("test", "client", manager.Object);
            target.Attach();

            // Act
            target.Detach();

            // Assert
            manager.Verify(c => c.Send(It.Is <ProtocolMessage>(message => message.Action == ProtocolMessage.MessageAction.Detach &&
                                                               message.Channel == target.Name), null), Times.Once());
        }
예제 #4
0
        public void Detach_DetachesSuccessfuly_WhenMessageDetachReceived()
        {
            // Arrange
            Mock <IConnectionManager> manager = new Mock <IConnectionManager>();

            manager.SetupGet(c => c.IsActive).Returns(true);
            manager.Setup(c => c.Send(It.Is <ProtocolMessage>(m => m.Action == ProtocolMessage.MessageAction.Attach), null))
            .Raises(c => c.MessageReceived += null, new ProtocolMessage(ProtocolMessage.MessageAction.Attached));
            manager.Setup(c => c.Send(It.Is <ProtocolMessage>(m => m.Action == ProtocolMessage.MessageAction.Detach), null))
            .Raises(c => c.MessageReceived += null, new ProtocolMessage(ProtocolMessage.MessageAction.Detached));
            Realtime.Channel target = new Realtime.Channel("test", "client", manager.Object);
            target.Attach();

            // Act
            target.Detach();

            // Assert
            Assert.Equal(ChannelState.Detached, target.State);
        }
예제 #5
0
        public void Detach_WhenAttaching_MovesStraightToDetaching()
        {
            // Arrange
            Mock <IConnectionManager> manager = new Mock <IConnectionManager>();

            manager.SetupGet(c => c.IsActive).Returns(true);
            Task attachingTask = null;

            manager.Setup(c => c.Send(It.Is <ProtocolMessage>(m => m.Action == ProtocolMessage.MessageAction.Detach), null))
            .Raises(c => c.MessageReceived += null, new ProtocolMessage(ProtocolMessage.MessageAction.Detached));
            manager.Setup(c => c.Send(It.Is <ProtocolMessage>(m => m.Action == ProtocolMessage.MessageAction.Attach), null))
            .Callback(() => attachingTask = Task.Factory.StartNew(() => Thread.Sleep(50)).ContinueWith(c => manager.Raise(cc => cc.MessageReceived += null, new ProtocolMessage(ProtocolMessage.MessageAction.Attached))));
            Realtime.Channel target = new Realtime.Channel("test", "client", manager.Object);
            target.Attach();

            // Act
            target.Detach();
            attachingTask.Wait();

            // Assert
            Assert.Equal(ChannelState.Detached, target.State);
        }