Exemple #1
0
        public void TestHandleResponseFailure(string errorMessage)
        {
            const string expectedData = "Test Data";

            using (ShimsContext.Create())
            {
                SMTPTransaction actualTransaction = null;
                string          decodedReponse    = null;
                var             authMethod        = new StubIAuthMethod
                {
                    ProcessResponseSMTPTransactionStringStringOut =
                        (SMTPTransaction transaction, string data, out string c) =>
                    {
                        actualTransaction = transaction;
                        decodedReponse    = data;

                        c = errorMessage;
                        return(false);
                    }
                };
                var response = AUTHHandler.HandleResponse(Transaction, expectedData, authMethod);

                Assert.Equal(SMTPStatusCode.AuthFailed, response.Code);
                if (errorMessage != null)
                {
                    Assert.Equal(1, response.Args.Length);
                    Assert.Equal(errorMessage, response.Args[0]);
                }
                Assert.Equal(Transaction, actualTransaction);
                Assert.Equal(expectedData, decodedReponse);
            }
        }
Exemple #2
0
        public void TestHandleResponseSuccess()
        {
            const string    expectedData      = "Test Data";
            SMTPTransaction actualTransaction = null;
            string          decodedReponse    = null;
            var             authenticated     = false;
            var             permanent         = false;

            using (ShimsContext.Create())
            {
                Transaction.SetPropertyStringObjectBoolean = (name, value, p) =>
                {
                    switch (name)
                    {
                    case "Authenticated":
                        authenticated = (bool)value;
                        permanent     = p;
                        break;

                    default:
                        throw new InvalidOperationException("The name is invalid.");
                    }
                };

                var authMethod = new StubIAuthMethod
                {
                    ProcessResponseSMTPTransactionStringStringOut =
                        (SMTPTransaction transaction, string data, out string challenge) =>
                    {
                        actualTransaction = transaction;
                        decodedReponse    = data;

                        challenge = null;
                        return(true);
                    }
                };

                var response = AUTHHandler.HandleResponse(Transaction, expectedData, authMethod);

                Assert.Equal(SMTPStatusCode.AuthSuccess, response.Code);
                Assert.Equal(Transaction, actualTransaction);
                Assert.Equal(expectedData, decodedReponse);
                Assert.True(authenticated);
                Assert.True(permanent);
            }
        }
Exemple #3
0
        public void TestHandleResponseChallenge()
        {
            const string expectedChallenge = "Test";
            const string expectedData      = "Test Data";
            var          encodedChallenge  = Convert.ToBase64String(Encoding.ASCII.GetBytes(expectedChallenge));

            var dataMode              = false;
            var dataHandlerCalled     = false;
            var dataLineHandlerCalled = false;
            Func <string, StringBuilder, bool> dataLineHandler = null;
            Func <string, SMTPResponse>        dataHandler     = null;

            using (ShimsContext.Create())
            {
                Transaction.StartDataModeFuncOfStringStringBuilderBooleanFuncOfStringSMTPResponse = (func, func1) =>
                {
                    dataMode        = true;
                    dataLineHandler = func;
                    dataHandler     = func1;
                };

                ShimAUTHHandler.DataHandlerSMTPTransactionStringIAuthMethod = (transaction, s, arg3) =>
                {
                    dataHandlerCalled = true;
                    return(null);
                };

                ShimAUTHHandler.DataLineHandlerStringStringBuilder = (s, builder) =>
                {
                    dataLineHandlerCalled = true;
                    return(false);
                };

                SMTPTransaction actualTransaction = null;
                string          decodedReponse    = null;
                var             authMethod        = new StubIAuthMethod
                {
                    ProcessResponseSMTPTransactionStringStringOut =
                        (SMTPTransaction transaction, string data, out string challenge) =>
                    {
                        actualTransaction = transaction;
                        decodedReponse    = data;

                        challenge = expectedChallenge;
                        return(true);
                    }
                };
                var response = AUTHHandler.HandleResponse(Transaction, expectedData, authMethod);

                if (dataHandler != null)
                {
                    dataHandler(null);
                }
                if (dataLineHandler != null)
                {
                    dataLineHandler(null, null);
                }

                Assert.Equal(SMTPStatusCode.AuthContinue, response.Code);
                Assert.Equal(1, response.Args.Length);
                Assert.Equal(encodedChallenge, response.Args[0]);
                Assert.Equal(Transaction, actualTransaction);
                Assert.Equal(expectedData, decodedReponse);
                Assert.True(dataMode);
                Assert.True(dataHandlerCalled);
                Assert.True(dataLineHandlerCalled);
            }
        }