public void TestPeerClientCreation()
        {
            var fakeLogger    = new FakeLogging();
            var socketFactory = new SocketFactory(fakeLogger, 10);

            using var fakeDiscoverer = new FakeDiscoverer();
            var source = new CancellationTokenSource();

            using IPeerServices peerServices = new PeerServices(_messageTag, 0, "UnitTest", "unit", 4096, fakeLogger, fakeDiscoverer, socketFactory, 10, 40);
            peerServices.WithCancellationTokenSource(source);
            Assert.IsNotNull(peerServices);
            Assert.IsNull(fakeLogger.LastLog);
            var peerClient = peerServices.GetClient("localhost", 80);

            Assert.IsNotNull(peerClient);
            Assert.IsNull(fakeLogger.LastLog);
            var knownNodes  = peerServices.KnownNodes;
            var peerClient2 = knownNodes.GetClient("test2");

            Assert.IsNull(peerClient2);
            Assert.IsNull(fakeLogger.LastLog);
            Assert.AreEqual(false, knownNodes.IsKnown("test2"));
            knownNodes.Add("test3", "localhost", 80);
            var peerClient3 = knownNodes.GetClient("test3");

            Assert.AreEqual(true, knownNodes.IsKnown("test3"));
            Assert.IsNotNull(peerClient3);
            Assert.IsNull(fakeLogger.LastLog);
            knownNodes.Add("test4", peerClient3);
            Assert.AreEqual(true, knownNodes.IsKnown("test4"));
            Assert.AreEqual(peerClient3, knownNodes.GetClient("test4"));
            Assert.AreEqual(peerClient3, peerServices.GetClient("test4"));
        }
        public void TestPeerServicesCreation()
        {
            var fakeLogger     = new FakeLogging();
            var socketFactory  = new SocketFactory(fakeLogger, 10);
            var fakeDiscoverer = new FakeDiscoverer();

            using INodeSink fakeNodeSink = new FakeNodeSink(_messageTag, 2003, 10, 40);
            Assert.ThrowsException <ArgumentException>(() => new PeerServices(_messageTag, 0, "UnitTest", "unit", 4096, null, fakeDiscoverer, socketFactory, 10, 40));
            Assert.ThrowsException <ArgumentException>(() => new PeerServices(_messageTag, 0, "UnitTest", "unit", 4096, fakeLogger, null, socketFactory, 10, 40));
            Assert.ThrowsException <ArgumentException>(() => new PeerServices(_messageTag, 0, "UnitTest", "unit", 4096, fakeLogger, fakeDiscoverer, null, 10, 40));
            Assert.ThrowsException <ArgumentException>(() => new PeerServices(_messageTag, _messageTag, "UnitTest", "unit", 4096, fakeLogger, fakeDiscoverer, null, 10, 40));
            IPeerServices peerServices = new PeerServices(_messageTag, 0, "UnitTest", "unit", 4096, fakeLogger, fakeDiscoverer, socketFactory, 10, 40);

            Assert.IsNotNull(peerServices);
            Assert.IsNotNull(peerServices.ProxyingServices);
            Assert.IsNotNull(peerServices.KnownNodes);
            Assert.IsNull(fakeLogger.LastLog);
            Assert.IsNull(peerServices.GetClient("localhost", 80));
            Assert.IsNotNull(fakeLogger.LastLog);
            Assert.ThrowsException <InvalidOperationException>(() => peerServices.CreateListenerFor(fakeNodeSink));
            Assert.ThrowsException <ArgumentException>(() => peerServices.WithCancellationTokenSource(null));
            peerServices.WithCancellationTokenSource(new CancellationTokenSource());
            Assert.IsNotNull(peerServices.Source);
            var client = peerServices.GetClient("localhost", 80);

            Assert.IsNotNull(client);
        }
        public void TestPeerServicesDisposal()
        {
            var fakeLogger     = new FakeLogging();
            var socketFactory  = new SocketFactory(fakeLogger, 10);
            var fakeDiscoverer = new FakeDiscoverer();
            var source         = new CancellationTokenSource();

            using IPeerServices peerServices = new PeerServices(_messageTag, 0, "UnitTest", "unit", 4096, fakeLogger, fakeDiscoverer, socketFactory, 10, 40);
            peerServices.WithCancellationTokenSource(source);
            Assert.IsNotNull(peerServices);
            Assert.IsNull(fakeLogger.LastLog);
            INodeSink fakeNodeSink = new FakeNodeSink(_messageTag, 2004, 10, 40);

            peerServices.KnownNodes.Add("nodeToForget", "localhost", 80);
            Assert.IsTrue(peerServices.KnownNodes.IsKnown("nodeToForget"));
            peerServices.Dispose();
            Assert.IsFalse(peerServices.KnownNodes.IsKnown("nodeToForget"));
            var peerListener = peerServices.CreateListenerFor(fakeNodeSink);

            Assert.IsNull(peerListener);
            Assert.IsNull(fakeLogger.LastLog);
            var peerClient = peerServices.GetClient("localhost", 80);

            Assert.IsNull(peerClient);
            Assert.IsNull(fakeLogger.LastLog);
            peerServices.KnownNodes.Add("test2", "localhost", 80);
            Assert.IsFalse(peerServices.KnownNodes.IsKnown("test2"));
            var peerClient2 = peerServices.KnownNodes.GetClient("test2");

            Assert.IsNull(peerClient2);
            Assert.IsNull(fakeLogger.LastLog);
        }