public void TestWithSomePeersToSend()
        {
            PeerExchangeMessage sentMessage = new PeerExchangeMessage();
            var messageHandler = new PeerExchangeMessageHandler(Mock.Of <ILogger <PeerExchangeMessageHandler> >(), Mock.Of <ITcpTransportProtocol>());

            var context = new Mock <IExtensionProtocolMessageReceivedContext>();

            context.Setup(x => x.Message).Returns(MockMessage());
            context.Setup(x => x.Peers).Returns(MockPeers());
            context.Setup(x => x.SendMessage(It.IsAny <IExtensionProtocolMessage>())).Callback <IExtensionProtocolMessage>(message => sentMessage = (PeerExchangeMessage)message);

            var metadata = new PeerExchangeMetadata
            {
                ConnectedPeersSnapshot = new List <string>
                {
                    "192.168.1.20:8080",
                    "192.168.1.21:8080",
                    "192.168.1.25:8080",
                },
            };

            context.Setup(x => x.GetValue <PeerExchangeMetadata>(PeerExchangeMetadata.Key)).Returns(metadata);

            messageHandler.MessageReceived(context.Object);

            context.Verify(x => x.Message, Times.Once);
            context.Verify(x => x.PeersAvailable(It.IsAny <IEnumerable <ITransportStream> >()), Times.Once);
            context.Verify(x => x.GetValue <PeerExchangeMetadata>(PeerExchangeMetadata.Key), Times.Once);
            context.Verify(x => x.Peers, Times.Once);
            context.Verify(x => x.SendMessage(It.IsAny <PeerExchangeMessage>()), Times.Once);
            context.Verify(x => x.SetValue(PeerExchangeMetadata.Key, It.IsAny <PeerExchangeMetadata>()), Times.Once);
            context.VerifyNoOtherCalls();

            var expectedSentMessage = new PeerExchangeMessage
            {
                Added = new List <IPEndPoint>
                {
                    new IPEndPoint(new IPAddress(new byte[] { 192, 168, 1, 22 }), 8080),
                    new IPEndPoint(new IPAddress(new byte[] { 192, 168, 1, 23 }), 8080),
                },
                Dropped = new List <IPEndPoint>
                {
                    new IPEndPoint(new IPAddress(new byte[] { 192, 168, 1, 25 }), 8080),
                },
            };

            sentMessage.Should().BeEquivalentTo(expectedSentMessage);
        }