コード例 #1
0
ファイル: PopWebRequest.cs プロジェクト: pengyancai/cs-util
        public void TestBeginGetResponseCallback()
        {
            using (var server = new PopPseudoServer()) {
            server.Start();

            var request = WebRequest.Create(string.Format("pop://{0}/", server.HostPort)) as PopWebRequest;

            request.Method = "NOOP";
            request.KeepAlive = false;

            // greeting
            server.EnqueueResponse("+OK\r\n");
            // CAPA
            server.EnqueueResponse("+OK\r\n" +
                               ".\r\n");
            // USER
            server.EnqueueResponse("+OK\r\n");
            // PASS
            server.EnqueueResponse("+OK\r\n");

            var asyncResult = request.BeginGetResponse(BeginGetResponseCallbackProc, request);

            Assert.IsNotNull(asyncResult);
            Assert.AreEqual(asyncResult.AsyncState, request);

            Thread.Sleep(1000);

            StringAssert.StartsWith("CAPA", server.DequeueRequest());
            StringAssert.StartsWith("USER", server.DequeueRequest());
            StringAssert.StartsWith("PASS", server.DequeueRequest());

            // NOOP
            server.EnqueueResponse("+OK\r\n");
            // QUIT
            server.EnqueueResponse("+OK\r\n");

            if (!asyncResult.AsyncWaitHandle.WaitOne(5000))
              Assert.Fail("not completed");

            StringAssert.StartsWith("NOOP", server.DequeueRequest());
            StringAssert.StartsWith("QUIT", server.DequeueRequest());
              }
        }
コード例 #2
0
ファイル: PopWebResponse.cs プロジェクト: pengyancai/cs-util
        public void TestGetResponseStreamResponseHasNoStream()
        {
            using (var server = new PopPseudoServer()) {
            server.Start();

            var request = WebRequest.Create(string.Format("pop://{0}/", server.HostPort)) as PopWebRequest;

            request.Timeout = 1000;
            request.Method = PopWebRequestMethods.NoOp;
            request.KeepAlive = false;

            // greeting
            server.EnqueueResponse("+OK\r\n");
            // CAPA
            server.EnqueueResponse("+OK\r\n" +
                               ".\r\n");
            // USER
            server.EnqueueResponse("+OK\r\n");
            // PASS
            server.EnqueueResponse("+OK\r\n");
            // NOOP
            server.EnqueueResponse("+OK\r\n");
            // QUIT
            server.EnqueueResponse("+OK\r\n");

            using (var response = request.GetResponse()) {
              try {
            response.GetResponseStream();
            Assert.Fail("InvalidOperationException not thrown");
              }
              catch (InvalidOperationException) {
              }
            }
              }
        }
コード例 #3
0
ファイル: PopWebRequest.cs プロジェクト: pengyancai/cs-util
        public void TestBeginGetResponse()
        {
            using (var server = new PopPseudoServer()) {
            server.Start();

            var request = WebRequest.Create(string.Format("pop://{0}/", server.HostPort)) as PopWebRequest;

            request.Method = "NOOP";
            request.KeepAlive = false;

            // greeting
            server.EnqueueResponse("+OK\r\n");
            // CAPA
            server.EnqueueResponse("+OK\r\n" +
                               ".\r\n");
            // USER
            server.EnqueueResponse("+OK\r\n");
            // PASS
            server.EnqueueResponse("+OK\r\n");
            // NOOP
            server.EnqueueResponse("+OK\r\n");
            // QUIT
            server.EnqueueResponse("+OK\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.StartsWith("CAPA", server.DequeueRequest());
            StringAssert.StartsWith("USER", server.DequeueRequest());
            StringAssert.StartsWith("PASS", server.DequeueRequest());
            StringAssert.StartsWith("NOOP", server.DequeueRequest());
            StringAssert.StartsWith("QUIT", server.DequeueRequest());
              }
        }
コード例 #4
0
ファイル: PopWebRequest.cs プロジェクト: pengyancai/cs-util
        private void TestExceptionWhileCloseSession(string test)
        {
            using (var server = new PopPseudoServer()) {
            server.Start();

            var request = WebRequest.Create(string.Format("pop://{0}/", server.HostPort)) as PopWebRequest;

            request.Timeout = 3000;
            request.ReadWriteTimeout = 3000;

            request.Method = PopWebRequestMethods.NoOp;
            request.KeepAlive = false;

            // greeting
            server.EnqueueResponse("+OK\r\n");
            // CAPA
            server.EnqueueResponse("+OK\r\n" +
                               ".\r\n");
            // USER
            server.EnqueueResponse("+OK\r\n");
            // PASS
            server.EnqueueResponse("+OK\r\n");
            // NOOP
            server.EnqueueResponse("+OK\r\n");

            var asyncResult = request.BeginGetResponse(null, null);

            Thread.Sleep(500);

            server.DequeueRequest(); // CAPA
            server.DequeueRequest(); // USER
            server.DequeueRequest(); // PASS
            StringAssert.StartsWith("NOOP", server.DequeueRequest());

            if (test == "not responding")
              // not respond to QUIT
              ;
            else if (test == "disconnected")
              server.Stop();

            using (var response = request.EndGetResponse(asyncResult) as PopWebResponse) {
              Assert.IsTrue(response.Result.Succeeded);
            }
              }
        }
コード例 #5
0
ファイル: PopWebRequest.cs プロジェクト: pengyancai/cs-util
        private void KeepAliveAndDisconnected(bool disconnectFromServer)
        {
            using (var server = new PopPseudoServer()) {
            for (var req = 0; req < 2; req++) {
              server.Start();

              /*
               * request/response
               */
              var request = WebRequest.Create(string.Format("pop://{0}/", server.HostPort)) as PopWebRequest;

              request.Timeout = 1000;
              request.Method = "NOOP";
              request.KeepAlive = true;

              // greeting
              server.EnqueueResponse("+OK\r\n");
              // CAPA
              server.EnqueueResponse("+OK\r\n" +
                                 ".\r\n");
              // USER
              server.EnqueueResponse("+OK\r\n");
              // PASS
              server.EnqueueResponse("+OK\r\n");
              // NOOP
              server.EnqueueResponse("+OK\r\n");

              using (var response = request.GetResponse()) {
              }

              server.DequeueRequest(); // CAPA
              server.DequeueRequest(); // USER
              server.DequeueRequest(); // PASS
              StringAssert.StartsWith("NOOP", server.DequeueRequest(), "request #{0}", req);

              if (disconnectFromServer) {
            server.Stop();
              }
              else {
            // QUIT
            server.EnqueueResponse("+OK\r\n");
            PopSessionManager.DisconnectFrom(request.RequestUri);

            server.DequeueRequest(); // QUIT

            server.Stop();
              }
            }
              }
        }
コード例 #6
0
ファイル: PopWebRequest.cs プロジェクト: pengyancai/cs-util
        private void GetResponseTimeout(int timeout, int readWriteTimeout)
        {
            using (var server = new PopPseudoServer()) {
            server.Start();

            var request = WebRequest.Create(string.Format("pop://{0}/", server.HostPort)) as PopWebRequest;

            request.Timeout = timeout;
            request.ReadWriteTimeout = readWriteTimeout;
            request.Method = "NOOP";

            // greeting
            server.EnqueueResponse("+OK\r\n");
            // CAPA
            server.EnqueueResponse("+OK\r\n" +
                               ".\r\n");
            // USER
            server.EnqueueResponse("+OK\r\n");
            // PASS
            server.EnqueueResponse("+OK\r\n");
            // not respond to NOOP

            try {
              using (var response = request.GetResponse()) {
              }
            }
            catch (WebException ex) {
              Assert.AreEqual(WebExceptionStatus.Timeout, ex.Status);
            }

            server.DequeueRequest(); // CAPA
            server.DequeueRequest(); // USER
            server.DequeueRequest(); // PASS
            StringAssert.StartsWith("NOOP", server.DequeueRequest());
              }
        }
コード例 #7
0
ファイル: PopWebRequest.cs プロジェクト: pengyancai/cs-util
        private void AuthenticateWithSpecifiedSaslMechanisms(string[] mechanisms)
        {
            using (var server = new PopPseudoServer()) {
            server.Start();

            var credential = new NetworkCredential("user", "pass");
            var request = WebRequest.Create(string.Format("pop://{0}@{1}/", credential.UserName, server.HostPort)) as PopWebRequest;

            request.UsingSaslMechanisms = mechanisms;
            request.Credentials = credential;
            request.Timeout = 1000;
            request.Method = "NOOP";
            request.KeepAlive = true;
            request.AllowInsecureLogin = true;

            // greeting
            server.EnqueueResponse("+OK\r\n");
            // CAPA
            server.EnqueueResponse("+OK\r\n" +
                               "SASL DIGEST-MD5 NTLM CRAM-MD5 PLAIN LOGIN\r\n" +
                               ".\r\n");
            // USER
            server.EnqueueResponse("+OK\r\n");
            // PASS
            server.EnqueueResponse("+OK\r\n");
            // NOOP
            server.EnqueueResponse("+OK\r\n");
            // QUIT
            server.EnqueueResponse("+OK\r\n");

            using (var response = request.GetResponse()) {
            }

            server.DequeueRequest(); // CAPA
            server.DequeueRequest(); // USER
            server.DequeueRequest(); // PASS
            StringAssert.StartsWith("NOOP", server.DequeueRequest());
              }
        }
コード例 #8
0
ファイル: PopWebRequest.cs プロジェクト: pengyancai/cs-util
        public void TestUsingSaslMechanismsNonEmpty()
        {
            using (var server = new PopPseudoServer()) {
            server.Start();

            var credential = new NetworkCredential("user", "pass");
            var request = WebRequest.Create(string.Format("pop://{0}@{1}/", credential.UserName, server.HostPort)) as PopWebRequest;

            request.UsingSaslMechanisms = new string[] {"X-UNKWNON-MECHANISM", "PLAIN", "login"};
            request.Credentials = credential;
            request.Timeout = 1000;
            request.Method = "NOOP";
            request.KeepAlive = true;
            request.AllowInsecureLogin = true;

            // greeting
            server.EnqueueResponse("+OK\r\n");
            // CAPA
            server.EnqueueResponse("+OK\r\n" +
                               "SASL DIGEST-MD5 PLAIN NTLM CRAM-MD5 LOGIN\r\n" +
                               ".\r\n");
            // AUTH PLAIN response
            server.EnqueueResponse("-ERR\r\n");
            // AUTH LOGIN response
            server.EnqueueResponse("+ \r\n");
            server.EnqueueResponse("-ERR\r\n");
            // USER response
            server.EnqueueResponse("-ERR\r\n");

            try {
              using (var response = request.GetResponse()) {
              }
            }
            catch (WebException ex) {
              Assert.AreEqual(WebExceptionStatus.ProtocolError, ex.Status);
            }

            server.DequeueRequest(); // CAPA
            StringAssert.StartsWith("AUTH PLAIN", server.DequeueRequest());
            StringAssert.StartsWith("AUTH LOGIN", server.DequeueRequest());
              }
        }
コード例 #9
0
ファイル: PopWebRequest.cs プロジェクト: pengyancai/cs-util
        public void TestGetResponseOk()
        {
            using (var server = new PopPseudoServer()) {
            server.Start();

            var request = WebRequest.Create(string.Format("pop://{0}/", server.HostPort)) as PopWebRequest;

            request.Timeout = 1000;
            request.Method = "NOOP";
            request.KeepAlive = false;

            // greeting
            server.EnqueueResponse("+OK\r\n");
            // CAPA
            server.EnqueueResponse("+OK\r\n" +
                               ".\r\n");
            // USER
            server.EnqueueResponse("+OK\r\n");
            // PASS
            server.EnqueueResponse("+OK\r\n");
            // NOOP
            server.EnqueueResponse("+OK\r\n");
            // QUIT
            server.EnqueueResponse("+OK\r\n");

            using (var response = request.GetResponse()) {
              Assert.IsNotNull(response);
              Assert.IsInstanceOfType(typeof(PopWebResponse), response);

              var r = response as PopWebResponse;

              Assert.IsNotNull(r.Result);
            }

            server.DequeueRequest(); // CAPA
            server.DequeueRequest(); // USER
            server.DequeueRequest(); // PASS
            StringAssert.StartsWith("NOOP", server.DequeueRequest());
              }
        }
コード例 #10
0
ファイル: PopWebRequest.cs プロジェクト: pengyancai/cs-util
        public void TestGetResponseKeepAliveTrue()
        {
            using (var server = new PopPseudoServer()) {
            server.Start();

            for (var req = 0; req < 3; req++) {
              /*
               * request/response
               */
              var request = WebRequest.Create(string.Format("pop://{0}/", server.HostPort)) as PopWebRequest;

              request.Timeout = 1000;
              request.Method = "NOOP";
              request.KeepAlive = true;

              if (req == 0) {
            // greeting
            server.EnqueueResponse("+OK\r\n");
            // CAPA
            server.EnqueueResponse("+OK\r\n" +
                                   ".\r\n");
            // USER
            server.EnqueueResponse("+OK\r\n");
            // PASS
            server.EnqueueResponse("+OK\r\n");
              }

              // NOOP
              server.EnqueueResponse("+OK\r\n");

              using (var response = request.GetResponse()) {
              }

              if (req == 0) {
            server.DequeueRequest(); // CAPA
            server.DequeueRequest(); // USER
            server.DequeueRequest(); // PASS
              }

              StringAssert.StartsWith("NOOP", server.DequeueRequest(), "request #{0}", req);
            }
              }
        }
コード例 #11
0
ファイル: PopWebRequest.cs プロジェクト: pengyancai/cs-util
        public void TestGetResponseErrWithUnxpectedResponseCode()
        {
            using (var server = new PopPseudoServer()) {
            server.Start();

            var request = WebRequest.Create(string.Format("pop://{0}/;MSG=1", server.HostPort)) as PopWebRequest;

            request.Timeout = 1000;
            request.Method = "DELE";
            request.ExpectedErrorResponseCodes = new[] {PopResponseCode.SysTemp};
            request.KeepAlive = false;

            // greeting
            server.EnqueueResponse("+OK\r\n");
            // CAPA
            server.EnqueueResponse("+OK\r\n" +
                               ".\r\n");
            // USER
            server.EnqueueResponse("+OK\r\n");
            // PASS
            server.EnqueueResponse("+OK\r\n");
            // DELE
            server.EnqueueResponse("-ERR [SYS/PERM]\r\n");
            // QUIT
            server.EnqueueResponse("+OK\r\n");

            try {
              using (var response = request.GetResponse()) {
            Assert.Fail("WebException not thrown");
              }
            }
            catch (WebException ex) {
              Assert.AreEqual(WebExceptionStatus.ProtocolError, ex.Status);

              var response = ex.Response as PopWebResponse;

              Assert.IsNotNull(response);
              Assert.AreEqual(response.ResponseCode, PopResponseCode.SysPerm);
            }

            server.DequeueRequest(); // CAPA
            server.DequeueRequest(); // USER
            server.DequeueRequest(); // PASS
            StringAssert.StartsWith("DELE", server.DequeueRequest());
              }
        }
コード例 #12
0
ファイル: PopWebRequest.cs プロジェクト: pengyancai/cs-util
        public void TestGetResponseErrWithExpectedResponseCode()
        {
            using (var server = new PopPseudoServer()) {
            server.Start();

            var request = WebRequest.Create(string.Format("pop://{0}/;MSG=1", server.HostPort)) as PopWebRequest;

            request.Timeout = 1000;
            request.Method = "DELE";
            request.ExpectedErrorResponseCodes = new[] {PopResponseCode.SysTemp};
            request.KeepAlive = false;

            // greeting
            server.EnqueueResponse("+OK\r\n");
            // CAPA
            server.EnqueueResponse("+OK\r\n" +
                               ".\r\n");
            // USER
            server.EnqueueResponse("+OK\r\n");
            // PASS
            server.EnqueueResponse("+OK\r\n");
            // DELE
            server.EnqueueResponse("-ERR [SYS/TEMP]\r\n");
            // QUIT
            server.EnqueueResponse("+OK\r\n");

            using (var response = request.GetResponse() as PopWebResponse) {
              Assert.IsTrue(response.Result.Failed);
            }

            server.DequeueRequest(); // CAPA
            server.DequeueRequest(); // USER
            server.DequeueRequest(); // PASS
            StringAssert.StartsWith("DELE", server.DequeueRequest());
              }
        }
コード例 #13
0
ファイル: PopWebRequest.cs プロジェクト: pengyancai/cs-util
        public void TestGetResponseErr()
        {
            using (var server = new PopPseudoServer()) {
            server.Start();

            var request = WebRequest.Create(string.Format("pop://{0}/;MSG=1", server.HostPort)) as PopWebRequest;

            request.Timeout = 1000;
            request.Method = "DELE";
            request.KeepAlive = false;

            // greeting
            server.EnqueueResponse("+OK\r\n");
            // CAPA
            server.EnqueueResponse("+OK\r\n" +
                               ".\r\n");
            // USER
            server.EnqueueResponse("+OK\r\n");
            // PASS
            server.EnqueueResponse("+OK\r\n");
            // DELE
            server.EnqueueResponse("-ERR\r\n");
            // QUIT
            server.EnqueueResponse("+OK\r\n");

            try {
              using (var response = request.GetResponse()) {
              }
            }
            catch (WebException ex) {
              Assert.AreEqual(WebExceptionStatus.ProtocolError, ex.Status);

              Assert.IsNotNull(ex.Response);
              Assert.IsInstanceOfType(typeof(PopWebResponse),ex.Response);

              var r = ex.Response as PopWebResponse;

              Assert.IsNotNull(r.Result);
            }

            server.DequeueRequest(); // CAPA
            server.DequeueRequest(); // USER
            server.DequeueRequest(); // PASS
            StringAssert.StartsWith("DELE", server.DequeueRequest());
              }
        }
コード例 #14
0
ファイル: WebClient.cs プロジェクト: pengyancai/cs-util
        private PopPseudoServer InitializeServer()
        {
            var server = new PopPseudoServer();

              server.Start();

              // greeting
              server.EnqueueResponse("+OK\r\n");
              // CAPA
              server.EnqueueResponse("+OK\r\n" +
                             ".\r\n");
              // USER
              server.EnqueueResponse("+OK\r\n");
              // PASS
              server.EnqueueResponse("+OK\r\n");
              // RETR
              server.EnqueueResponse("+OK\r\n" +
                             message +
                             ".\r\n");
              // QUIT
              server.EnqueueResponse("+OK\r\n");

              return server;
        }
コード例 #15
0
        private void Request(PopPseudoServer server, string method, string methodResponse, Action<PopWebRequest, PopWebResponse> responseAction)
        {
            server.Start();

              var request = WebRequest.Create(string.Format("pop://{0}/", server.HostPort)) as PopWebRequest;

              request.KeepAlive = false;
              request.Timeout = 1000;
              request.Method = method;

              // greeting
              server.EnqueueResponse("+OK\r\n");
              // CAPA
              server.EnqueueResponse("+OK\r\n" +
                             ".\r\n");
              // USER
              server.EnqueueResponse("+OK\r\n");
              // PASS
              server.EnqueueResponse("+OK\r\n");

              server.EnqueueResponse(methodResponse);

              // QUIT
              server.EnqueueResponse("+OK\r\n");

              try {
            using (var response = request.GetResponse() as PopWebResponse) {
              responseAction(request, response);
            }
              }
              catch (WebException ex) {
            if (ex.Status == WebExceptionStatus.ProtocolError)
              responseAction(request, ex.Response as PopWebResponse);
            else
              throw ex;
              }

              server.DequeueRequest(); // CAPA
              server.DequeueRequest(); // USER
              server.DequeueRequest(); // PASS
        }