Example #1
0
        public async Task CloseOnRemovingAllLinksTest()
        {
            // Arrange
            var deviceListener = new Mock <IDeviceListener>();

            deviceListener.Setup(d => d.CloseAsync()).Returns(Task.CompletedTask);
            deviceListener.Setup(d => d.BindDeviceProxy(It.IsAny <IDeviceProxy>()));

            var identity           = Mock.Of <IIdentity>(i => i.Id == "d1/m1");
            var connectionProvider = Mock.Of <IConnectionProvider>(c => c.GetDeviceListenerAsync(identity, Option.None <string>()) == Task.FromResult(deviceListener.Object));
            var amqpConnection     = new AmqpTestConnection();

            var connectionHandler = new ClientConnectionHandler(identity, connectionProvider, amqpConnection);

            var    eventsLinkHandler         = Mock.Of <ILinkHandler>(l => l.Type == LinkType.Events);
            string twinCorrelationId         = Guid.NewGuid().ToString();
            var    twinReceivingLinkHander   = Mock.Of <ILinkHandler>(l => l.Type == LinkType.TwinReceiving && l.CorrelationId == twinCorrelationId);
            var    twinSendingLinkHandler    = Mock.Of <ILinkHandler>(l => l.Type == LinkType.TwinSending && l.CorrelationId == twinCorrelationId);
            string methodCorrelationId       = Guid.NewGuid().ToString();
            var    methodReceivingLinkHander = Mock.Of <ILinkHandler>(l => l.Type == LinkType.MethodReceiving && l.CorrelationId == methodCorrelationId);
            var    methodSendingLinkHandler  = Mock.Of <ILinkHandler>(l => l.Type == LinkType.MethodSending && l.CorrelationId == methodCorrelationId);

            // Act
            await connectionHandler.GetDeviceListener();

            await connectionHandler.RegisterLinkHandler(eventsLinkHandler);

            await connectionHandler.RegisterLinkHandler(twinReceivingLinkHander);

            await connectionHandler.RegisterLinkHandler(twinSendingLinkHandler);

            await connectionHandler.RegisterLinkHandler(methodSendingLinkHandler);

            await connectionHandler.RegisterLinkHandler(methodReceivingLinkHander);

            await connectionHandler.RemoveLinkHandler(eventsLinkHandler);

            await connectionHandler.RemoveLinkHandler(twinReceivingLinkHander);

            await connectionHandler.RemoveLinkHandler(twinSendingLinkHandler);

            await connectionHandler.RemoveLinkHandler(methodSendingLinkHandler);

            // Assert
            deviceListener.Verify(d => d.CloseAsync(), Times.Never);

            // Act
            await connectionHandler.RemoveLinkHandler(methodReceivingLinkHander);

            // Assert
            deviceListener.Verify(d => d.CloseAsync(), Times.Once);
            Assert.True(amqpConnection.CloseCalled);

            // Act
            await connectionHandler.GetDeviceListener();

            // Assert
            deviceListener.Verify(d => d.BindDeviceProxy(It.IsAny <IDeviceProxy>()), Times.Exactly(2));
        }