public void EvaluateChallenge_NonEmptyServerResponse_Exception()
        {
            var client = new CramMD5Client(new SaslCramMd5Request(AuthId, Password));

            Assert.False(client.IsComplete);

            // Step 1: State.Initial => State.CramMd5ResponseSent
            var response = client.EvaluateChallenge(Challenge);

            Assert.False(client.IsComplete);
            Assert.Equal((IEnumerable <byte>)ExpectedResponse, response);

            // Step 2: State.CramMd5ResponseSent => State.InvalidServerResponse
            Assert.Throws <SaslException>(() => client.EvaluateChallenge(new byte[] { 0x00 }));
            Assert.True(client.IsComplete);
        }
        public void EvaluateChallenge_Disposed_Exception()
        {
            var client = new CramMD5Client(new SaslCramMd5Request(AuthId, Password));

            Assert.False(client.IsComplete);
            client.Dispose();
            Assert.True(client.IsComplete);
            Assert.Throws <SaslException>(() => client.EvaluateChallenge(Challenge));
            Assert.True(client.IsComplete);
        }
        public void EvaluateChallenge_Success()
        {
            var client = new CramMD5Client(new SaslCramMd5Request(AuthId, Password));

            Assert.False(client.IsComplete);

            // Step 1: State.Initial => State.CramMd5ResponseSent
            var response = client.EvaluateChallenge(Challenge);

            Assert.False(client.IsComplete);
            Assert.Equal((IEnumerable <byte>)ExpectedResponse, response);

            // Step 2: State.CramMd5ResponseSent => State.ValidServerResponse
            client.EvaluateChallenge(Array.Empty <byte>());
            Assert.True(client.IsComplete);

            // Step 3: State.ValidServerResponse => Exception
            Assert.Throws <SaslException>(() => client.EvaluateChallenge(Array.Empty <byte>()));
        }