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); } }
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); } }
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); } }