public void TestCreateSessionAppropriateMechanismNotFound() { using (var server = new ImapPseudoServer()) { server.Start(); var credential = new NetworkCredential("user", "pass"); var requestUri = new Uri(string.Format("imap://{0}/", server.HostPort)); var request = WebRequest.Create(requestUri) as ImapWebRequest; request.Credentials = credential; request.UseTlsIfAvailable = true; request.KeepAlive = false; request.Timeout = 1000; // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY response server.EnqueueResponse("* CAPABILITY IMAP4rev1 LOGINDISABLED\r\n" + "0000 OK done\r\n"); try { using (var response = request.GetResponse()) { } } catch (WebException ex) { WebExceptionAssertion(WebExceptionStatus.RequestCanceled, ex); } server.DequeueRequest(); // CAPABILITY } }
public void TestAuthenticateInsecureLoginDisallowed() { using (var server = new ImapPseudoServer()) { server.Start(); var prof = new Profile(new NetworkCredential("user", "pass"), "user;auth=*", server.HostPort); prof.UsingSaslMechanisms = new[] {"LOGIN", "PLAIN", "CRAM-MD5"}; prof.AllowInsecureLogin = false; // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY response server.EnqueueResponse("* CAPABILITY IMAP4rev1 AUTH=X-UNKNOWN AUTH=DIGEST-MD5 AUTH=CRAM-MD5 AUTH=NTLM AUTH=PLAIN AUTH=LOGIN\r\n" + "0000 OK done\r\n"); // AUTHENTICATE CRAM-MD5 response server.EnqueueResponse("+ PDQwMDEzNDQxMTIxNDM1OTQuMTI3MjQ5OTU1MEBsb2NhbGhvc3Q+\r\n"); server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); using (var session = ImapSessionCreator.CreateSession(prof, null, null)) { Assert.AreEqual(ImapSessionState.Authenticated, session.State); Assert.AreEqual(prof.Authority, session.Authority); } server.DequeueRequest(); // CAPABILITY StringAssert.Contains("AUTHENTICATE CRAM-MD5", server.DequeueRequest()); } }
public void TestGetResponseStreamResponseHasNoStream() { using (var server = new ImapPseudoServer()) { server.Start(); var request = WebRequest.Create(string.Format("imap://{0}/", server.HostPort)) as ImapWebRequest; request.Timeout = 1000; request.Method = ImapWebRequestMethods.NoOp; request.KeepAlive = false; // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); // LOGIN server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); // NOOP server.EnqueueResponse("0002 OK done\r\n"); // LOGOUT server.EnqueueResponse("* BYE logging out\r\n" + "0003 OK done\r\n"); using (var response = request.GetResponse()) { try { response.GetResponseStream(); Assert.Fail("InvalidOperationException not thrown"); } catch (InvalidOperationException) { } } } }
public void TestAuthenticateAnonymousMechanismSpecified() { using (var server = new ImapPseudoServer()) { server.Start(); var prof = new Profile(null, "user%40imap.example.net;auth=anonymous", server.HostPort); // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY response server.EnqueueResponse("* CAPABILITY IMAP4rev1 AUTH=ANONYMOUS\r\n" + "0000 OK done\r\n"); // AUTHENTICATE response server.EnqueueResponse("+ \r\n"); server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); using (var session = ImapSessionCreator.CreateSession(prof, null, null)) { Assert.AreEqual(ImapSessionState.Authenticated, session.State); Assert.AreEqual(prof.Authority, session.Authority); } server.DequeueRequest(); // CAPABILITY StringAssert.Contains("AUTHENTICATE ANONYMOUS", server.DequeueRequest()); StringAssert.Contains("*****@*****.**", Base64.GetDecodedString(server.DequeueRequest())); } }
public void TestAuthenticateAnonymousMechanismSpecifiedAuthenticationFailure() { using (var server = new ImapPseudoServer()) { server.Start(); var prof = new Profile(null, "user%40imap.example.net;auth=anonymous", server.HostPort); // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY response server.EnqueueResponse("* CAPABILITY IMAP4rev1 AUTH=ANONYMOUS\r\n" + "0000 OK done\r\n"); // AUTHENTICATE response server.EnqueueResponse("+ \r\n"); server.EnqueueResponse("0001 NO done\r\n"); try { Assert.IsNull(ImapSessionCreator.CreateSession(prof, null, null)); Assert.Fail("ImapAuthenticationException not thrown"); } catch (ImapAuthenticationException ex) { Assert.IsNull(ex.InnerException); Assert.IsNotNull(ex.Result); Assert.AreEqual(Protocol.Client.ImapCommandResultCode.No, ex.Result.Code); } server.DequeueRequest(); // CAPABILITY StringAssert.Contains("AUTHENTICATE ANONYMOUS", server.DequeueRequest()); StringAssert.Contains("*****@*****.**", Base64.GetDecodedString(server.DequeueRequest())); } }
public void TestBeginGetResponse() { using (var server = new ImapPseudoServer()) { server.Start(); var request = WebRequest.Create(string.Format("imap://{0}/", server.HostPort)) as ImapWebRequest; request.Method = "NOOP"; request.KeepAlive = false; // greeting server.EnqueueResponse("* OK [CAPABILITY IMAP4rev1] ready\r\n"); // LOGIN server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); // NOOP server.EnqueueResponse("0001 OK done\r\n"); // LOGOUT server.EnqueueResponse("* BYE logging out\r\n" + "0002 OK done\r\n"); var asyncState = "async state"; var asyncResult = request.BeginGetResponse(null, asyncState); Assert.IsNotNull(asyncResult); Assert.AreEqual(asyncResult.AsyncState, asyncState); using (var response = request.EndGetResponse(asyncResult)) { } StringAssert.Contains("LOGIN", server.DequeueRequest()); StringAssert.Contains("NOOP", server.DequeueRequest()); StringAssert.Contains("LOGOUT", server.DequeueRequest()); } }
public void TestGetCopyResponseCreateDestinationMailboxFailure() { using (var server = new ImapPseudoServer()) { var methodResponses = new[] { // UID SEARCH "* SEARCH 3 4 5\r\n" + "0003 OK done\r\n", // UID COPY "0004 NO [TRYCREATE] failed\r\n", // CREATE "0005 NO failed\r\n", }; var presetRequest = (Action<ImapWebRequest>)delegate(ImapWebRequest req) { req.AllowCreateMailbox = true; req.DestinationUri = new Uri(req.RequestUri.GetLeftPart(UriPartial.Path) + "/コピー先メールボックス"); }; Request(server, ImapWebRequestMethods.Copy, new[] {"IMAP4REV1"}, "?UNSEEN", methodResponses, presetRequest, delegate(ImapWebRequest request, ImapWebResponse response) { Assert.AreEqual(request.RequestUri, response.ResponseUri); Assert.IsNotNull(response); Assert.IsNotNull(response.Result); Assert.IsTrue(response.Result.Failed); }); StringAssert.EndsWith("UID SEARCH UNSEEN\r\n", server.DequeueRequest()); StringAssert.EndsWith("UID COPY 3,4,5 \"INBOX/&MLMw1DD8UUgw4TD8MOsw3DDDMK8wuQ-\"\r\n", server.DequeueRequest()); StringAssert.EndsWith("CREATE \"INBOX/&MLMw1DD8UUgw4TD8MOsw3DDDMK8wuQ-\"\r\n", server.DequeueRequest()); } }
public void TestGetCopyResponseCopyUidResponseExists() { using (var server = new ImapPseudoServer()) { var methodResponses = new[] { // UID SEARCH "* SEARCH 3 4 5\r\n" + "0003 OK done\r\n", // UID COPY "0004 OK [COPYUID 38505 3,4,5 3956:3958] done\r\n" }; var presetRequest = (Action<ImapWebRequest>)delegate(ImapWebRequest req) { req.AllowCreateMailbox = false; req.DestinationUri = new Uri(req.RequestUri.GetLeftPart(UriPartial.Path) + "/コピー先メールボックス"); }; Request(server, ImapWebRequestMethods.Copy, new[] {"IMAP4rev1"}, "?UNSEEN", methodResponses, presetRequest, delegate(ImapWebRequest request, ImapWebResponse response) { Assert.AreEqual(new Uri(string.Format("{0}/INBOX/コピー先メールボックス;UIDVALIDITY=38505?UID 3956:3958", request.RequestUri.GetLeftPart(UriPartial.Authority))), response.ResponseUri); Assert.IsNotNull(response); Assert.IsNotNull(response.Result); Assert.IsTrue(response.Result.Succeeded); Assert.IsNotNull(response.Mailboxes); Assert.AreEqual(0, response.Mailboxes.Length); }); StringAssert.EndsWith("UID SEARCH UNSEEN\r\n", server.DequeueRequest()); StringAssert.EndsWith("UID COPY 3,4,5 \"INBOX/&MLMw1DD8UUgw4TD8MOsw3DDDMK8wuQ-\"\r\n", server.DequeueRequest()); } }
public void TestCreateSessionInternalError() { using (var server = new ImapPseudoServer()) { server.Start(); var credential = new NetworkCredential("user", "pass"); var request = WebRequest.Create(string.Format("imap://{0};auth=digest-md5@{1}/", credential.UserName, server.HostPort)) as ImapWebRequest; request.Credentials = credential; request.KeepAlive = false; request.UsingSaslMechanisms = new[] {"DIGEST-MD5"}; request.Timeout = 1000; // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY response server.EnqueueResponse("* CAPABILITY IMAP4rev1 AUTH=DIGEST-MD5 AUTH=CRAM-MD5 AUTH=NTLM AUTH=PLAIN AUTH=LOGIN\r\n" + "0000 OK done\r\n"); // AUTHENTICATE DIGEST-MD5 response server.EnqueueResponse("+ xxx-invalid-response-xxx\r\n"); try { using (var response = request.GetResponse()) { } } catch (WebException ex) { WebExceptionAssertion(WebExceptionStatus.UnknownError, ex); Assert.IsInstanceOfType(typeof(ImapException), ex.InnerException); } } }
public void TestGetCopyResponseDestinationUriNotSet() { using (var server = new ImapPseudoServer()) { var methodResponses = new string[] {}; Request(server, ImapWebRequestMethods.Copy, methodResponses, delegate(ImapWebRequest request, ImapWebResponse response) { Assert.Fail("InvalidOperationException not thrown"); }); } }
public void Setup() { server = new ImapPseudoServer(); server.Start(); host = server.ServerEndPoint.Address.ToString(); port = server.ServerEndPoint.Port; credential = new NetworkCredential(username, password, host); uri = new Uri(string.Format("{0}://{1}@{2}:{3}", ImapUri.UriSchemeImap, username, host, port)); }
public void TestBeginGetRequestStreamCallback() { using (var server = new ImapPseudoServer()) { server.Start(); // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); // LOGIN server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); // APPEND server.EnqueueResponse("+ continue\r\n"); server.EnqueueResponse(string.Empty); var request = WebRequest.Create(string.Format("imap://{0}/INBOX", server.HostPort)) as ImapWebRequest; request.Method = "APPEND"; request.Timeout = 3000; request.ReadWriteTimeout = 3000; request.AllowInsecureLogin = true; var asyncResult = request.BeginGetRequestStream((AsyncCallback)BeginGetRequestStreamCallbackProc, request); Thread.Sleep(100); // XXX if (!asyncResult.AsyncWaitHandle.WaitOne(5000)) Assert.Fail("wait time out"); server.EnqueueResponse("0002 OK done\r\n"); using (var response = request.GetResponse()) { } server.DequeueRequest(); // CAPABILITY server.DequeueRequest(); // LOGIN var appendCommand = server.DequeueAll(); StringAssert.StartsWith("0002 APPEND \"INBOX\" ", appendCommand); StringAssert.EndsWith(" {12}\r\ntest message\r\n", appendCommand); } }
public void TestCreateSessionConnectFailure() { using (var server = new ImapPseudoServer()) { server.Start(); var credential = new NetworkCredential("user", "pass"); var request = WebRequest.Create(string.Format("imap://{0}@{1}/", credential.UserName, server.HostPort)) as ImapWebRequest; request.Timeout = 500; server.Stop(); try { using (var response = request.GetResponse()) { } } catch (WebException ex) { WebExceptionAssertion(WebExceptionStatus.ConnectFailure, ex); } } }
public void TestBeginGetResponseCallback() { using (var server = new ImapPseudoServer()) { server.Start(); var request = WebRequest.Create(string.Format("imap://{0}/", server.HostPort)) as ImapWebRequest; request.Method = "NOOP"; request.KeepAlive = false; // greeting server.EnqueueResponse("* OK [CAPABILITY IMAP4rev1] ready\r\n"); // LOGIN server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); var asyncResult = request.BeginGetResponse(BeginGetResponseCallbackProc, request); Assert.IsNotNull(asyncResult); Assert.AreEqual(asyncResult.AsyncState, request); Thread.Sleep(1000); StringAssert.Contains("LOGIN", server.DequeueRequest()); // NOOP server.EnqueueResponse("0001 OK done\r\n"); // LOGOUT server.EnqueueResponse("* BYE logging out\r\n" + "0002 OK done\r\n"); if (!asyncResult.AsyncWaitHandle.WaitOne(5000)) Assert.Fail("not completed"); StringAssert.Contains("NOOP", server.DequeueRequest()); StringAssert.Contains("LOGOUT", server.DequeueRequest()); } }
public void TestGetXListResponse() { using (var server = new ImapPseudoServer()) { var methodResponse = "* XLIST (\\HasNoChildren \\Starred) \"/\" \"[Gmail]/&MLkwvzD8TtgwTQ-\"\r\n" + "0002 OK done\r\n"; Request(server, ImapWebRequestMethods.XList, new[] {"IMAP4rev1", "XLIST"}, methodResponse, delegate(ImapWebRequest request, ImapWebResponse response) { Assert.IsNotNull(response); Assert.AreEqual(response.ResponseUri, request.RequestUri); Assert.IsNotNull(response.Result); Assert.IsTrue(response.Result.Succeeded); Assert.IsNotNull(response.Mailboxes); Assert.AreEqual(1, response.Mailboxes.Length); Assert.AreEqual(new Uri(request.RequestUri, "[Gmail]/スター付き"), response.Mailboxes[0].Url); }); StringAssert.Contains("XLIST \"\" *", server.DequeueRequest()); } }
public void TestBeginConnectException() { using (var server = new ImapPseudoServer()) { server.Start(); using (var client = new ImapClient(server.Host, server.Port, "user")) { client.Profile.Timeout = 250; Assert.IsFalse(client.IsConnected); var asyncResult = client.BeginConnect("pass"); try { client.EndConnect(asyncResult); Assert.Fail("ImapConnectionException not thrown"); } catch (ImapConnectionException) { Assert.IsNull((client.Profile as IImapSessionProfile).Credentials); } Assert.IsFalse(client.IsConnected); } } }
private void KeepAliveAndDisconnected(bool disconnectFromServer) { using (var server = new ImapPseudoServer()) { for (var req = 0; req < 2; req++) { server.Start(); /* * request/response */ var request = WebRequest.Create(string.Format("imap://{0}/", server.HostPort)) as ImapWebRequest; request.Timeout = 1000; request.Method = "NOOP"; request.KeepAlive = true; // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); // LOGIN server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); // NOOP server.EnqueueResponse("0002 OK done\r\n"); using (var response = request.GetResponse()) { } server.DequeueRequest(); // CAPABILITY server.DequeueRequest(); // LOGIN StringAssert.Contains("NOOP", server.DequeueRequest(), "request #{0}", req); if (disconnectFromServer) { server.Stop(); } else { // LOGOUT server.EnqueueResponse("* BYE logging out\r\n" + "0003 OK done\r\n"); ImapSessionManager.DisconnectFrom(request.RequestUri); server.DequeueRequest(); // LOGOUT server.Stop(); } } } }
public void TestGetResponseOk() { using (var server = new ImapPseudoServer()) { server.Start(); var request = WebRequest.Create(string.Format("imap://{0}/", server.HostPort)) as ImapWebRequest; request.Timeout = 1000; request.Method = "NOOP"; request.KeepAlive = false; // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); // LOGIN server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); // NOOP server.EnqueueResponse("0002 OK done\r\n"); // LOGOUT server.EnqueueResponse("* BYE logging out\r\n" + "0003 OK done\r\n"); using (var response = request.GetResponse()) { Assert.IsNotNull(response); Assert.IsInstanceOfType(typeof(ImapWebResponse), response); var r = response as ImapWebResponse; Assert.IsNotNull(r.Result); } server.DequeueRequest(); // CAPABILITY server.DequeueRequest(); // LOGIN StringAssert.Contains("NOOP", server.DequeueRequest()); } }
public void TestGetResponseNoWithUnxpectedResponseCode() { using (var server = new ImapPseudoServer()) { server.Start(); var request = WebRequest.Create(string.Format("imap://{0}/INBOX", server.HostPort)) as ImapWebRequest; request.Timeout = 1000; request.Method = "SELECT"; request.ExpectedErrorResponseCodes = new[] {ImapResponseCode.PrivacyRequired}; request.KeepAlive = false; // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); // LOGIN server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); // SELECT server.EnqueueResponse("0002 NO [NOPERM] failed\r\n"); // LOGOUT server.EnqueueResponse("* BYE logging out\r\n" + "0003 OK done\r\n"); try { using (var response = request.GetResponse() as ImapWebResponse) { Assert.Fail("WebException not thrown"); } } catch (WebException ex) { Assert.AreEqual(WebExceptionStatus.ProtocolError, ex.Status); var response = ex.Response as ImapWebResponse; Assert.IsNotNull(response); Assert.AreEqual(response.ResponseCode, ImapResponseCode.NoPerm); } server.DequeueRequest(); // CAPABILITY server.DequeueRequest(); // LOGIN StringAssert.EndsWith("SELECT \"INBOX\"\r\n", server.DequeueRequest()); } }
public void TestGetResponseNoWithExpectedResponseCode() { using (var server = new ImapPseudoServer()) { server.Start(); var request = WebRequest.Create(string.Format("imap://{0}/INBOX", server.HostPort)) as ImapWebRequest; request.Timeout = 1000; request.Method = "SELECT"; request.ExpectedErrorResponseCodes = new[] {ImapResponseCode.PrivacyRequired}; request.KeepAlive = false; // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); // LOGIN server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); // SELECT server.EnqueueResponse("0002 NO [PRIVACYREQUIRED] failed\r\n"); // LOGOUT server.EnqueueResponse("* BYE logging out\r\n" + "0003 OK done\r\n"); using (var response = request.GetResponse() as ImapWebResponse) { Assert.IsTrue(response.Result.Failed); } server.DequeueRequest(); // CAPABILITY server.DequeueRequest(); // LOGIN StringAssert.EndsWith("SELECT \"INBOX\"\r\n", server.DequeueRequest()); } }
public void TestGetResponseNo() { using (var server = new ImapPseudoServer()) { server.Start(); var request = WebRequest.Create(string.Format("imap://{0}/INBOX", server.HostPort)) as ImapWebRequest; request.Timeout = 1000; request.Method = "SUBSCRIBE"; request.KeepAlive = false; // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); // LOGIN server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); // SUBSCRIBE server.EnqueueResponse("0002 NO failure\r\n"); // LOGOUT server.EnqueueResponse("* BYE logging out\r\n" + "0003 OK done\r\n"); try { using (var response = request.GetResponse()) { } } catch (WebException ex) { Assert.AreEqual(WebExceptionStatus.ProtocolError, ex.Status); Assert.IsNotNull(ex.Response); Assert.IsInstanceOfType(typeof(ImapWebResponse),ex.Response); var r = ex.Response as ImapWebResponse; Assert.IsNotNull(r.Result); } server.DequeueRequest(); // CAPABILITY server.DequeueRequest(); // LOGIN StringAssert.Contains("SUBSCRIBE", server.DequeueRequest()); } }
public void TestGetResponseKeepAliveTrue() { using (var server = new ImapPseudoServer()) { server.Start(); for (var req = 0; req < 3; req++) { /* * request/response */ var request = WebRequest.Create(string.Format("imap://{0}/", server.HostPort)) as ImapWebRequest; request.Timeout = 1000; request.Method = "NOOP"; request.KeepAlive = true; if (req == 0) { // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); // LOGIN server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); // NOOP server.EnqueueResponse("0002 OK done\r\n"); } else if (req == 1) { // NOOP server.EnqueueResponse("0003 OK done\r\n"); } else if (req == 2) { // NOOP server.EnqueueResponse("0004 OK done\r\n"); } using (var response = request.GetResponse()) { } if (req == 0) { server.DequeueRequest(); // CAPABILITY server.DequeueRequest(); // LOGIN } StringAssert.Contains("NOOP", server.DequeueRequest(), "request #{0}", req); } } }
public void TestGetResponseKeepAliveFalse() { using (var server = new ImapPseudoServer()) { for (var req = 0; req < 3; req++) { server.Start(); /* * request/response */ var request = WebRequest.Create(string.Format("imap://{0}/", server.HostPort)) as ImapWebRequest; request.Timeout = 1000; request.Method = "NOOP"; request.KeepAlive = false; // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); // LOGIN server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); // NOOP server.EnqueueResponse("0002 OK done\r\n"); // LOGOUT server.EnqueueResponse("* BYE logging out\r\n" + "0003 OK done\r\n"); using (var response = request.GetResponse()) { } server.DequeueRequest(); // CAPABILITY server.DequeueRequest(); // LOGIN StringAssert.Contains("NOOP", server.DequeueRequest(), "request #{0}", req); StringAssert.Contains("LOGOUT", server.DequeueRequest(), "request #{0}", req); server.Stop(); } } }
public void TestEndGetResponseInvalidAsyncResult() { using (var server = new ImapPseudoServer()) { server.Start(); var request1 = WebRequest.Create(string.Format("imap://{0}/", server.HostPort)) as ImapWebRequest; var request2 = WebRequest.Create(string.Format("imap://{0}/", server.HostPort)) as ImapWebRequest; var asyncResult1 = request1.BeginGetResponse(null, null); var asyncResult2 = request2.BeginGetResponse(null, null); request1.EndGetResponse(asyncResult2); } }
public void TestCloseMailboxFailure() { using (var server = new ImapPseudoServer()) { server.Start(); var credential = new NetworkCredential("user", "pass"); var request1 = WebRequest.Create(string.Format("imap://{0}@{1}/INBOX", credential.UserName, server.HostPort)) as ImapWebRequest; request1.Credentials = credential; request1.Timeout = 1000; request1.Method = "CHECK"; request1.KeepAlive = true; request1.AllowInsecureLogin = true; // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); // LOGIN server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); // SELECT server.EnqueueResponse("0002 OK [READ-WRITE] done\r\n"); // CHECK server.EnqueueResponse("0003 OK done\r\n"); using (var response = request1.GetResponse()) { Assert.AreEqual(response.ResponseUri, request1.RequestUri); } server.DequeueRequest(); // CAPABILITY server.DequeueRequest(); // LOGIN StringAssert.Contains("SELECT \"INBOX\"", server.DequeueRequest()); // SELECT server.DequeueRequest(); // CHECK var request2 = WebRequest.Create(string.Format("imap://{0}@{1}/INBOX/child", credential.UserName, server.HostPort)) as ImapWebRequest; request2.Credentials = credential; request2.Timeout = 1000; request2.Method = "CHECK"; request2.KeepAlive = false; // NOOP server.EnqueueResponse("0004 OK done\r\n"); // CLOSE server.EnqueueResponse("0005 OK done\r\n"); // SELECT server.EnqueueResponse("0006 OK [READ-WRITE] done\r\n"); // CHECK server.EnqueueResponse("0007 OK done\r\n"); // CLOSE server.EnqueueResponse("0008 BAD invalid argument\r\n"); try { using (var response = request2.GetResponse()) { Assert.AreEqual(response.ResponseUri, request2.RequestUri); } } catch (WebException ex) { Assert.AreEqual(WebExceptionStatus.ProtocolError, ex); } server.DequeueRequest(); // NOOP StringAssert.Contains("CLOSE", server.DequeueRequest()); } }
private void UsingAsyncStartedRequest(Action<ImapWebRequest> action) { using (var server = new ImapPseudoServer()) { server.Start(); var request = WebRequest.Create(string.Format("imap://{0}/", server.HostPort)) as ImapWebRequest; request.Method = "NOOP"; request.KeepAlive = false; var asyncResult = request.BeginGetResponse(null, null); Assert.IsNotNull(asyncResult); action(request); using (var response = request.EndGetResponse(asyncResult)) { } } }
private void TestExceptionWhileCloseSession(string test) { using (var server = new ImapPseudoServer()) { server.Start(); var request = WebRequest.Create(string.Format("imap://{0}/", server.HostPort)) as ImapWebRequest; request.Timeout = 3000; request.ReadWriteTimeout = 3000; request.Method = ImapWebRequestMethods.NoOp; request.KeepAlive = false; // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); // LOGIN server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); // NOOP server.EnqueueResponse("0002 OK done\r\n"); var asyncResult = request.BeginGetResponse(null, null); Thread.Sleep(500); server.DequeueRequest(); // CAPABILITY server.DequeueRequest(); // LOGIN StringAssert.Contains("NOOP", server.DequeueRequest()); if (test == "not responding") // not respond to LOGOUT ; else if (test == "disconnected") server.Stop(); using (var response = request.EndGetResponse(asyncResult) as ImapWebResponse) { Assert.IsTrue(response.Result.Succeeded); } } }
private void SelectRequestMailboxReselect(bool readOnlyFirst) { using (var server = new ImapPseudoServer()) { server.Start(); var credential = new NetworkCredential("user", "pass"); var firstRequest = WebRequest.Create(string.Format("imap://{0}@{1}/INBOX", credential.UserName, server.HostPort)) as ImapWebRequest; firstRequest.Credentials = credential; firstRequest.Timeout = 1000; firstRequest.Method = "CHECK"; firstRequest.KeepAlive = true; firstRequest.ReadOnly = readOnlyFirst; firstRequest.AllowInsecureLogin = true; // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); // LOGIN server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); // SELECT/EXAMINE if (readOnlyFirst) server.EnqueueResponse("0002 OK [READ-ONLY] done\r\n"); else server.EnqueueResponse("0002 OK [READ-WRITE] done\r\n"); // CHECK server.EnqueueResponse("0003 OK done\r\n"); using (var response = firstRequest.GetResponse()) { Assert.AreEqual(response.ResponseUri, firstRequest.RequestUri); } server.DequeueRequest(); // CAPABILITY StringAssert.Contains("LOGIN", server.DequeueRequest()); if (readOnlyFirst) StringAssert.Contains("EXAMINE \"INBOX\"", server.DequeueRequest()); else StringAssert.Contains("SELECT \"INBOX\"", server.DequeueRequest()); StringAssert.Contains("CHECK", server.DequeueRequest()); var secondRequest = WebRequest.Create(firstRequest.RequestUri) as ImapWebRequest; secondRequest.Credentials = credential; secondRequest.Timeout = 1000; secondRequest.Method = "CHECK"; secondRequest.KeepAlive = false; secondRequest.ReadOnly = !readOnlyFirst; // NOOP server.EnqueueResponse("0004 OK done\r\n"); // CLOSE server.EnqueueResponse("0005 OK done\r\n"); // SELECT/EXAMINE if (readOnlyFirst) server.EnqueueResponse("0006 OK [READ-WRITE] done\r\n"); else server.EnqueueResponse("0006 OK [READ-ONLY] done\r\n"); // CHECK server.EnqueueResponse("0007 OK done\r\n"); // CLOSE server.EnqueueResponse("0008 OK done\r\n"); // LOGOUT server.EnqueueResponse("* BYE logging out\r\n" + "0009 OK done\r\n"); using (var response = secondRequest.GetResponse()) { Assert.AreEqual(response.ResponseUri, secondRequest.RequestUri); } server.DequeueRequest(); // NOOP StringAssert.Contains("CLOSE", server.DequeueRequest()); if (readOnlyFirst) StringAssert.Contains("SELECT \"INBOX\"", server.DequeueRequest()); else StringAssert.Contains("EXAMINE \"INBOX\"", server.DequeueRequest()); StringAssert.Contains("CHECK", server.DequeueRequest()); } }
private void SelectRequestMailboxFailure(bool readOnly) { using (var server = new ImapPseudoServer()) { server.Start(); var credential = new NetworkCredential("user", "pass"); var request = WebRequest.Create(string.Format("imap://{0}@{1}/INBOX", credential.UserName, server.HostPort)) as ImapWebRequest; request.Credentials = credential; request.Timeout = 1000; request.Method = "CHECK"; request.KeepAlive = false; request.ReadOnly = readOnly; request.AllowInsecureLogin = true; // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); // LOGIN server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); // SELECT/EXAMINE server.EnqueueResponse("0002 NO can't select\r\n"); // LOGOUT server.EnqueueResponse("* BYE logging out\r\n" + "0003 OK done\r\n"); try { using (var response = request.GetResponse()) { Assert.AreEqual(response.ResponseUri, request.RequestUri); } } catch (WebException ex) { Assert.AreEqual(WebExceptionStatus.ProtocolError, ex.Status); } server.DequeueRequest(); // CAPABILITY server.DequeueRequest(); // LOGIN if (readOnly) StringAssert.Contains("EXAMINE \"INBOX\"", server.DequeueRequest()); else StringAssert.Contains("SELECT \"INBOX\"", server.DequeueRequest()); } }
private void GetResponseTimeout(int timeout, int readWriteTimeout) { using (var server = new ImapPseudoServer()) { server.Start(); var request = WebRequest.Create(string.Format("imap://{0}/", server.HostPort)) as ImapWebRequest; request.Timeout = timeout; request.ReadWriteTimeout = readWriteTimeout; request.Method = "NOOP"; // greeting server.EnqueueResponse("* OK ready\r\n"); // CAPABILITY server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0000 OK done\r\n"); // LOGIN server.EnqueueResponse("* CAPABILITY IMAP4rev1\r\n" + "0001 OK done\r\n"); // not respond to NOOP try { using (var response = request.GetResponse()) { } } catch (WebException ex) { Assert.AreEqual(WebExceptionStatus.Timeout, ex.Status); } server.DequeueRequest(); // CAPABILITY server.DequeueRequest(); // LOGIN StringAssert.Contains("NOOP", server.DequeueRequest()); } }