public void DisconnectAsyncCallsDisconnectCompleteEventWithEventData()
        {
            var are = new AutoResetEvent(false);
            var eventData = "Test data";
            var moqSocket = new MoqSocket();
            var client = new MqttClientProtocol(new LogCompositor(), moqSocket);

            client.SendMessageComplete += (sender, args) =>
            {
                Assert.AreSame(eventData, args.EventData);
                Assert.IsTrue(moqSocket.SentMessages.Contains(MessageType.Disconnect));
                are.Set();
            };

            client.DisconnectAsync(eventData, null);

            if (!are.WaitOne(5000))
            {
                Assert.Fail("DisconnectComplete event not fired.");
            }
        }
        public void ConnectDisconnectConnectSequenceDoesNotThrow()
        {
            var areConnect = new AutoResetEvent(false);
            var areDisconnect = new AutoResetEvent(false);
            var ip = "1.1.1.1";
            var port = 1883;
            var eventData = "Test data";
            var moqSocket = new MoqSocket();
            var client = new MqttClientProtocol(new LogCompositor(), moqSocket);
            var bldr = new MqttConnectMessageBuilder
            {
                ClientId = "UnitTest"
            };

            client.ConnectComplete += (sender, args) =>
            {
                Assert.AreSame(eventData, args.EventData);
                Assert.IsTrue(moqSocket.SentMessages.Contains(MessageType.Connect));
                areConnect.Set();
            };

            client.SendMessageComplete += (sender, args) =>
            {
                Assert.AreSame(eventData, args.EventData);
                Assert.IsTrue(moqSocket.SentMessages.Contains(MessageType.Disconnect));
                areDisconnect.Set();
            };

            client.ConnectAsync(bldr, ip, port, SocketEncryption.None, eventData);
            if (!areConnect.WaitOne(5000))
            {
                Assert.Fail("First ConnectComplete event did not fire.");
            }

            client.DisconnectAsync(eventData, null);
            if (!areDisconnect.WaitOne(5000))
            {
                Assert.Fail("First DisconnectComplete event did not fire.");
            }

            client.ConnectAsync(bldr, ip, port, SocketEncryption.None, eventData);
            if (!areConnect.WaitOne(5000))
            {
                Assert.Fail("Second ConnectComplete event did not fire.");
            }
        }