public async Task VerifyRemoteGreetingAsync_not_matching_expected_NodeType()
        {
            using (var mem = new MemoryStream())
                using (var socket = new TestStreamSocket(mem))
                {
                    var negotiator = new NodeGreetingMessageStreamSocketNegotiator(socket);

                    var message = new NodeGreetingMessage(NodeType.Responder);
                    mem.Write(message.Serialize(), 0, message.Serialize().Length);
                    mem.Position = 0;

                    try
                    {
                        await negotiator.VerifyRemoteGreetingAsync(new HashSet <NodeType> {
                            NodeType.Requester
                        }, CancellationToken.None);

                        Assert.Fail();
                    }
                    catch (RedFoxProtocolException)
                    {
                        Assert.Pass();
                    }
                }
        }
        public void WriteGreetingAsync_writes_full_NodeGreetingMessage()
        {
            using (var mem = new MemoryStream())
                using (var socket = new TestStreamSocket(mem))
                {
                    var negotiator = new NodeGreetingMessageStreamSocketNegotiator(socket);

                    var message = new NodeGreetingMessage(NodeType.Responder);
                    negotiator.WriteGreetingAsync(message, CancellationToken.None).Wait();

                    Assert.AreEqual(message.Serialize(), mem.ToArray());
                }
        }
        public void WriteGreetingAsync_writes_full_NodeGreetingMessage()
        {
            using (var mem = new MemoryStream())
            using (var socket = new TestStreamSocket(mem))
            {
                var negotiator = new NodeGreetingMessageStreamSocketNegotiator(socket);

                var message = new NodeGreetingMessage(NodeType.Responder);
                negotiator.WriteGreetingAsync(message, CancellationToken.None).Wait();

                Assert.AreEqual(message.Serialize(), mem.ToArray());
            }
        }
        public void VerifyRemoteGreeting_not_matching_expected_NodeType()
        {
            using (var mem = new MemoryStream())
            using (var socket = new TestStreamSocket(mem))
            {
                var negotiator = new NodeGreetingMessageStreamSocketNegotiator(socket);

                var message = new NodeGreetingMessage(NodeType.Responder);
                mem.Write(message.Serialize(), 0, message.Serialize().Length);
                mem.Position = 0;

                Assert.Throws<RedFoxProtocolException>(() => negotiator.VerifyRemoteGreeting(new HashSet<NodeType> { NodeType.Requester }));
            }
        }
        public void VerifyRemoteGreeting_matching_expected_NodeType()
        {
            using (var mem = new MemoryStream())
            using (var socket = new TestStreamSocket(mem))
            {
                var negotiator = new NodeGreetingMessageStreamSocketNegotiator(socket);

                var message = new NodeGreetingMessage(NodeType.Responder);
                mem.Write(message.Serialize(), 0, message.Serialize().Length);
                mem.Position = 0;

                negotiator.VerifyRemoteGreeting(new HashSet<NodeType> { NodeType.Responder });
            }
        }
        public void VerifyRemoteGreetingAsync_matching_expected_NodeType()
        {
            using (var mem = new MemoryStream())
                using (var socket = new TestStreamSocket(mem))
                {
                    var negotiator = new NodeGreetingMessageStreamSocketNegotiator(socket);

                    var message = new NodeGreetingMessage(NodeType.Responder);
                    mem.Write(message.Serialize(), 0, message.Serialize().Length);
                    mem.Position = 0;

                    negotiator.VerifyRemoteGreetingAsync(new HashSet <NodeType> {
                        NodeType.Responder
                    }, CancellationToken.None).Wait();
                }
        }
        public void VerifyRemoteGreeting_not_matching_expected_NodeType()
        {
            using (var mem = new MemoryStream())
                using (var socket = new TestStreamSocket(mem))
                {
                    var negotiator = new NodeGreetingMessageStreamSocketNegotiator(socket);

                    var message = new NodeGreetingMessage(NodeType.Responder);
                    mem.Write(message.Serialize(), 0, message.Serialize().Length);
                    mem.Position = 0;

                    Assert.Throws <RedFoxProtocolException>(() => negotiator.VerifyRemoteGreeting(new HashSet <NodeType> {
                        NodeType.Requester
                    }));
                }
        }
        public async Task VerifyRemoteGreetingAsync_not_matching_expected_NodeType()
        {
            using (var mem = new MemoryStream())
            using (var socket = new TestStreamSocket(mem))
            {
                var negotiator = new NodeGreetingMessageStreamSocketNegotiator(socket);

                var message = new NodeGreetingMessage(NodeType.Responder);
                mem.Write(message.Serialize(), 0, message.Serialize().Length);
                mem.Position = 0;

                try
                {
                    await negotiator.VerifyRemoteGreetingAsync(new HashSet<NodeType> { NodeType.Requester }, CancellationToken.None);
                    Assert.Fail();
                }
                catch (RedFoxProtocolException)
                {
                    Assert.Pass();
                }
            }
        }