Beispiel #1
0
        public void serviceコマンドによる起動停止(InetKind inetKind)
        {
            //setUp
            var cl       = CreateClient(inetKind);
            var expected = "{\"code\":200,\"message\":\"start service [control]\"}";

            //exercise
            cl.Send(Encoding.ASCII.GetBytes("PUT /mail/control?service=start HTTP/1.1\n\n"));
            var str  = Encoding.UTF8.GetString(cl.Recv(3000, 10, this));
            var json = str.Substring(str.IndexOf("\r\n\r\n") + 4);

            dynamic d = JsonConvert.DeserializeObject(json);
            //dynamic data = d.data;
            //var actual = data.Count;
            var actual = (string)json;

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();

            //メールボックスの初期化
            MailBoxSetup();
        }
Beispiel #2
0
        public void Deleteによるメール削除_limit指定(InetKind inetKind)
        {
            //setUp
            var cl       = CreateClient(inetKind);
            var expected = 4;

            //exercise
            cl.Send(Encoding.ASCII.GetBytes("DELETE /mail/message?limit=3 HTTP/1.1\n\n"));
            var res = cl.Recv(3000, 10, this);

            cl.Close();
            cl = CreateClient(inetKind);

            cl.Send(Encoding.ASCII.GetBytes("GET /mail/message HTTP/1.1\n\n"));
            var str  = Encoding.UTF8.GetString(cl.Recv(3000, 10, this));
            var json = str.Substring(str.IndexOf("\r\n\r\n") + 4);


            dynamic d      = JsonConvert.DeserializeObject(json);
            dynamic data   = d.data;
            var     actual = data.Count;

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();

            //メールボックスの初期化
            MailBoxSetup();
        }
Beispiel #3
0
        public void AUTH_LOGIN認証_正常(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);

            Ehlo(cl);


            var expected = "235 Authentication successful.\r\n";

            //exercise
            cl.StringSend("AUTH LOGIN");
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("334 VXNlcm5hbWU6\r\n"));

            cl.StringSend(Base64.Encode("user1")); //ユーザ名をBase64で送る
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("334 UGFzc3dvcmQ6\r\n"));

            cl.StringSend(Base64.Encode("user1"));//パスワードをBase64で送る
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();
        }
Beispiel #4
0
        public void AUTH_LOGIN認証_異常(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);

            Ehlo(cl);


            String expected = null;

            //exercise
            cl.StringSend("AUTH LOGIN");
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("334 VXNlcm5hbWU6\r\n"));

            cl.StringSend(Base64.Encode("user1")); //ユーザ名をBase64で送る
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("334 UGFzc3dvcmQ6\r\n"));

            cl.StringSend(Base64.Encode("user1") + "XXX");//パスワードをBase64で送る <=ゴミデータ追加
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();
        }
Beispiel #5
0
        public void AUTH_PLAIN認証_正常(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);

            Ehlo(cl);


            var expected = "235 Authentication successful.\r\n";

            //exercise
            cl.StringSend("AUTH PLAIN");
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("334 \r\n"));

            //UserID\0UserID\0Password」をBase64でエンコード
            var str = string.Format("user1\0user1\0user1");

            str = Base64.Encode(str);

            cl.StringSend(str);
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();
        }
Beispiel #6
0
        public void AUTH_PLAIN認証_異常(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);

            Ehlo(cl);


            //↓これは、後ほど仕様変更が必要
            var expected = "500 command not understood: dXNlcjEAdXNlcjEAdXNlcjFYWFg=\r\n";

            //exercise
            cl.StringSend("AUTH PLAIN");
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("334 \r\n"));

            //UserID\0UserID\0Password」をBase64でエンコード
            var str = string.Format("user1\0user1\0user1");

            str = Base64.Encode(str + "XXX"); //<=ゴミデータ追加

            cl.StringSend(str);
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();
        }
Beispiel #7
0
        //[TestCase(InetKind.V6)]
        public void 複数ログイン(InetKind inetKind)
        {
            //setUp
            var cl1      = CreateClient(inetKind);
            var cl2      = CreateClient(inetKind);
            var cl3      = CreateClient(inetKind);
            var expected = "+OK 2 message (633 octets)\r\n";

            //exercise
            Login("user1", "user1", 0, 0, cl1);
            Login("user2", "user2", 2, 633, cl2);
            Login("user3", "user3", 0, 0, cl3);
            cl2.StringSend("UIDL");
            var actual = cl2.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl1.StringSend("QUIT");
            cl1.Close();
            cl2.StringSend("QUIT");
            cl2.Close();
            cl3.StringSend("QUIT");
            cl3.Close();
        }
Beispiel #8
0
        public void DATAコマンド_正常_メールボックス確認(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);

            Helo(cl);

            cl.StringSend("MAIL From:1@1");
            var l0 = cl.StringRecv(5, this);

            cl.StringSend("RCPT To:[email protected]");
            var l1 = cl.StringRecv(5, this);

            cl.StringSend("DATA");
            var l2 = cl.StringRecv(5, this);

            cl.StringSend(".");
            var l3 = cl.StringRecv(5, this);

            var expected = 1;

            //exercise
            var actual = _testServer.GetDf("user1").Length;

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();
        }
Beispiel #9
0
        public void Dataの動作確認_Bodyの確認(InetKind inetKind)
        {
            //setUp
            var sut = CreateSmtpClient(inetKind);

            var mail1 = new Mail();

            mail1.Init2(Encoding.ASCII.GetBytes("1:1\r\n\r\nbody1\r\nbody2\r\n"));

            //exercise
            sut.Connect();
            sut.Helo();
            sut.Mail("1@1");
            sut.Rcpt("*****@*****.**");
            sut.Data(mail1);
            sut.Quit();

            //verify
            var mail2 = _testServer.GetMf("user1")[0];

            Assert.That(mail2.GetBody(), Is.EqualTo(mail1.GetBody()));

            //tearDown
            sut.Dispose();
        }
Beispiel #10
0
        public void 多重ログイン(InetKind inetKind)
        {
            //setUp
            var clDmy = CreateClient(inetKind);

            Login("user1", "user1", 0, 0, clDmy);
            var cl       = CreateClient(inetKind);
            var expected = "-ERR Double login\r\n";

            //exercise
            CheckBanner(cl.StringRecv(3, this));//バナーチェック
            cl.StringSend("user user1");
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("+OK Password required for user1.\r\n"));
            cl.StringSend("PASS user1");
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            clDmy.StringSend("QUIT");
            clDmy.Close();
            cl.StringSend("QUIT");
            cl.Close();
        }
Beispiel #11
0
        public void Deleteによるメール削除_limit指定(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            var expected = 4;

            //exercise
            cl.Send(Encoding.ASCII.GetBytes("DELETE /mail/message?limit=3 HTTP/1.1\n\n"));
            var res = cl.Recv(3000, 10, this);
            cl.Close();
            cl = CreateClient(inetKind);

            cl.Send(Encoding.ASCII.GetBytes("GET /mail/message HTTP/1.1\n\n"));
            var str = Encoding.UTF8.GetString(cl.Recv(3000, 10, this));
            var json = str.Substring(str.IndexOf("\r\n\r\n") + 4);

            dynamic d = JsonConvert.DeserializeObject(json);
            dynamic data = d.data;
            var actual = data.Count;
            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();

            //メールボックスの初期化
            MailBoxSetup();
        }
Beispiel #12
0
        public void 宛先にメールが到着していることを確認する(InetKind inetKind)
        {
            //setUp
            var sut = CreateSmtpClient(inetKind);

            //exercise
            sut.Connect();
            sut.Helo();
            sut.Mail("1@1");
            sut.Rcpt("*****@*****.**");
            sut.Rcpt("*****@*****.**");
            sut.Data(new Mail());
            sut.Quit();

            //verify
            //user1及びuser2に1通づつメールが到着していることを確認する
            var expected = 1;
            var actual   = _testServer.GetDf("user1").Count();

            Assert.That(actual, Is.EqualTo(expected));

            actual = _testServer.GetDf("user1").Count();
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            sut.Dispose();
        }
Beispiel #13
0
        public void DATAコマンド_正常_メールボックス確認(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            Helo(cl);

            cl.StringSend("MAIL From:1@1");
            var l0 = cl.StringRecv(5, this);
            cl.StringSend("RCPT To:[email protected]");
            var l1 = cl.StringRecv(5, this);

            cl.StringSend("DATA");
            var l2 = cl.StringRecv(5, this);

            cl.StringSend(".");
            var l3 = cl.StringRecv(5, this);

            var expected = 1;

            //exercise
            var actual = _testServer.GetDf("user1").Length;

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();
        }
Beispiel #14
0
        public void Dataの動作確認_Bodyの確認_最後が改行で終わらない(InetKind inetKind)
        {
            //setUp
            var sut = CreateSmtpClient(inetKind);

            var mail1 = new Mail();

            mail1.Init2(Encoding.ASCII.GetBytes("1:1\r\n\r\nbody1\r\nbody2\r\n123"));

            //exercise
            sut.Connect();
            sut.Helo();
            sut.Mail("1@1");
            sut.Rcpt("*****@*****.**");
            sut.Data(mail1);
            sut.Quit();

            //verify
            var mail2    = _testServer.GetMf("user1")[0];
            var actual   = mail2.GetBody().Length;
            var expected = mail1.GetBody().Length + 2;//\r\nが追加される

            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            sut.Dispose();
        }
Beispiel #15
0
        public void APOP認証成功(InetKind inetKind)
        {
            //setUp
            var cl       = CreateClient(inetKind);
            var expected = "+OK user1 has 0 message (0 octets).\r\n";

            //exercise
            var challengeStr = Inet.TrimCrlf(cl.StringRecv(3, this)).Split(' ')[5];
            var result       = (new MD5CryptoServiceProvider()).ComputeHash(Encoding.ASCII.GetBytes(challengeStr + "user1"));
            var sb           = new StringBuilder();

            for (int i = 0; i < 16; i++)
            {
                sb.Append(string.Format("{0:x2}", result[i]));
            }
            cl.StringSend("APOP user1 " + sb.ToString());
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));



            //tearDown
            cl.StringSend("QUIT");
            cl.Close();
        }
Beispiel #16
0
        public void DATAコマンド_正常_送信(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);

            Helo(cl);
            //MAIL
            cl.StringSend("MAIL From:1@1");
            cl.StringRecv(3, this);
            //RCPT
            cl.StringSend("RCPT To:[email protected]");
            cl.StringRecv(3, this);

            cl.StringSend("DATA");
            cl.StringRecv(3, this);


            var expected = "250 OK\r\n";

            //exercise
            cl.StringSend(".");
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();
        }
Beispiel #17
0
        public void Dataの動作確認_Bodyの確認_最後が改行で終わらない(InetKind inetKind)
        {
            //setUp
            var sut = CreateSmtpClient(inetKind);

            var mail1 = new Mail();
            mail1.Init2(Encoding.ASCII.GetBytes("1:1\r\n\r\nbody1\r\nbody2\r\n123"));

            //exercise
            sut.Connect();
            sut.Helo();
            sut.Mail("1@1");
            sut.Rcpt("*****@*****.**");
            sut.Data(mail1);
            sut.Quit();

            //verify
            var mail2 = _testServer.GetMf("user1")[0];
            var actual = mail2.GetBody().Length;
            var expected = mail1.GetBody().Length + 2;//\r\nが追加される
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            sut.Dispose();
        }
Beispiel #18
0
 public String ToString(InetKind inetKind)
 {
     if (inetKind == InetKind.V4)
     {
         return(_v4Sv.ToString());
     }
     return(_v6Sv.ToString());
 }
Beispiel #19
0
 private SmtpClient CreateSmtpClient(InetKind inetKind)
 {
     if (inetKind == InetKind.V4)
     {
         return(new SmtpClient(new Ip(IpKind.V4Localhost), 9025, 3, this));
     }
     return(new SmtpClient(new Ip(IpKind.V6Localhost), 9025, 3, this));
 }
Beispiel #20
0
 private PopClient CreatePopClient(InetKind inetKind)
 {
     if (inetKind == InetKind.V4)
     {
         return(new PopClient(new Kernel(), new Ip(IpKind.V4Localhost), 9110, 3, this));
     }
     return(new PopClient(new Kernel(), new Ip(IpKind.V6Localhost), 9110, 3, this));
 }
Beispiel #21
0
        //クライアントの生成
        SockTcp CreateClient(InetKind inetKind)
        {
            const int port = 8825; //ウイルススキャンにかかるため25を避ける

            if (inetKind == InetKind.V4)
            {
                return(Inet.Connect(new Kernel(), new Ip(IpKind.V4Localhost), port, 10, null));
            }
            return(Inet.Connect(new Kernel(), new Ip(IpKind.V6Localhost), port, 10, null));
        }
Beispiel #22
0
        //クライアントの生成
        SockTcp CreateClient(InetKind inetKind)
        {
            int port = 8110;

            if (inetKind == InetKind.V4)
            {
                return(Inet.Connect(new Kernel(), new Ip(IpKind.V4Localhost), port, 10, null));
            }
            return(Inet.Connect(new Kernel(), new Ip(IpKind.V6Localhost), port, 10, null));
        }
Beispiel #23
0
        public void EHLOコマンド(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);

            //exercise verify
            Ehlo(cl);

            //tearDown
            cl.Close();
        }
Beispiel #24
0
        public void パスワード認証失敗_無効パスワード(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);

            //exercise verify
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("+OK \r\n"));
            cl.StringSend("user user1");
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("+OK Password required for user1.\r\n"));
            cl.StringSend("PASS xxxx");
            Assert.That(cl.StringRecv(3, this), Is.EqualTo(null));

            //tearDown
            cl.Close();
        }
Beispiel #25
0
        public void ログイン成功(InetKind inetKind)
        {
            //setUp
            var sut      = CreatePopClient(inetKind);
            var expected = true;

            //exercise
            sut.Connect();
            var actual = sut.Login("user1", "user1");

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            sut.Dispose();
        }
Beispiel #26
0
        public void 接続失敗_アドレス間違い(InetKind inetKind, String addr)
        {
            //setUp
            var sut      = new PopClient(new Kernel(), new Ip(addr), 9110, 3, this);
            var expected = false;

            //exercise
            var actual = sut.Connect();

            //verify
            Assert.That(actual, Is.EqualTo(expected));
            Assert.That(sut.GetLastError(), Is.EqualTo("Faild in PopClient Connect()"));

            //tearDown
            sut.Dispose();
        }
Beispiel #27
0
        public void 複数行にわたるReceived行_TAB_に対応(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);

            Helo(cl);

            cl.StringSend("MAIL From:1@1");
            var l0 = cl.StringRecv(5, this);

            cl.StringSend("RCPT To:[email protected]");
            var l1 = cl.StringRecv(5, this);

            cl.StringSend("DATA");
            var l2 = cl.StringRecv(5, this);

            cl.StringSend("Received: from mail.testdomain.co.jp (unknown [127.0.0.1]) by");
            cl.StringRecv(5, this);

            cl.StringSend(" IMSVA (Postfix) with ESMTP id 1F5C5D0037 for <*****@*****.**>;");
            cl.StringRecv(5, this);

            cl.StringSend(" Tue, 24 Feb 2015 16:28:44 +0900 (JST)");
            cl.StringRecv(5, this);

            cl.StringSend("");
            cl.StringRecv(5, this);

            cl.StringSend("BODY");
            cl.StringRecv(5, this);

            cl.StringSend(".");
            cl.StringRecv(5, this);

            var expected = 1; //本文は1行になる

            //exercise
            var mail   = _testServer.GetMf("user1")[0];
            var lines  = Inet.GetLines(mail.GetBody());
            var actual = lines.Count;//本分の行数を取得

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();
        }
Beispiel #28
0
        public void EHLOのパラメータ不足(InetKind inetKind)
        {
            //setUp
            var cl       = CreateClient(inetKind);
            var banner   = cl.StringRecv(3, this);
            var expected = "501 EHLO requires domain address\r\n";

            //exercise
            cl.StringSend("EHLO");
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();
        }
Beispiel #29
0
        public void HELOの前にMAILコマンド(InetKind inetKind)
        {
            //setUp
            var sut = CreateSmtpClient(inetKind);

            //exercise
            Assert.That(sut.Connect(), Is.EqualTo(true));
            //Assert.That(sut.Helo(), Is.EqualTo(true));
            Assert.That(sut.Mail("1@1"), Is.EqualTo(false));

            var expected = "Mail() Status != Transaction";
            var actual = sut.GetLastError();
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            sut.Dispose();
        }
Beispiel #30
0
        public void 正常系(InetKind inetKind)
        {
            //setUp
            var sut = CreateSmtpClient(inetKind);

            //exercise
            Assert.That(sut.Connect(), Is.EqualTo(true));
            Assert.That(sut.Helo(), Is.EqualTo(true));
            Assert.That(sut.Mail("1@1"), Is.EqualTo(true));
            Assert.That(sut.Rcpt("*****@*****.**"), Is.EqualTo(true));
            Assert.That(sut.Data(new Mail()), Is.EqualTo(true));

            Assert.That(sut.Quit(), Is.EqualTo(true));

            //tearDown
            sut.Dispose();
        }
Beispiel #31
0
        public void パスワード認証成功(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);

            //exercise verify
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("+OK \r\n"));
            cl.StringSend("user user1");
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("+OK Password required for user1.\r\n"));
            cl.StringSend("PASS user1");
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("+OK user1 has 0 message (0 octets).\r\n"));
            cl.StringSend("QUIT");
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("+OK Pop Server at localhost signing off.\r\n"));

            //tearDown
            cl.Close();
        }
Beispiel #32
0
        public void ログイン失敗_パスワードの間違い(InetKind inetKind)
        {
            //setUp
            var sut      = CreatePopClient(inetKind);
            var expected = false;

            //exercise
            sut.Connect();
            var actual = sut.Login("user1", "xxx");

            //verify
            Assert.That(actual, Is.EqualTo(expected));
            Assert.That(sut.GetLastError(), Is.EqualTo("Timeout in PopClient RecvStatus()"));

            //tearDown
            sut.Dispose();
        }
Beispiel #33
0
        public void USERの前にPASSコマンドを送るとエラーが返る(InetKind inetKind)
        {
            //setUp
            var cl       = CreateClient(inetKind);
            var expected = "-ERR Invalid command.\r\n";

            //exercise
            CheckBanner(cl.StringRecv(3, this));//バナーチェック
            cl.StringSend("PASS user1");
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));
            //tearDown
            cl.StringSend("QUIT");
            cl.Close();
        }
Beispiel #34
0
        public void 正常系(InetKind inetKind, SmtpClientAuthKind kind)
        {
            //setUp
            var sut = CreateSmtpClient(inetKind);

            //exercise
            Assert.That(sut.Connect(), Is.EqualTo(true));
            Assert.That(sut.Helo(), Is.EqualTo(true));
            Assert.That(sut.Auth(kind, "user1", "user1"), Is.EqualTo(true));
            Assert.That(sut.Mail("1@1"), Is.EqualTo(true));
            Assert.That(sut.Rcpt("*****@*****.**"), Is.EqualTo(true));
            Assert.That(sut.Data(new Mail()), Is.EqualTo(true));

            Assert.That(sut.Quit(), Is.EqualTo(true));

            //tearDown
            sut.Dispose();
        }
Beispiel #35
0
        public void CHPSによるパスワード変更_文字数不足による失敗(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            var expected = "-ERR The number of letter is not enough.\r\n";

            //exercise
            Login("user1", "user1", 0, 0, cl);
            cl.StringSend("CHPS abc");
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.StringSend("QUIT");
            cl.Close();
        }
Beispiel #36
0
        public void RETRによるメール受信(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);

            //exercise
            Login("user2", "user2", 2, 633, cl);
            cl.StringSend("RETR 1");
            var actual = Inet.RecvLines(cl, 3, this);

            //verify
            Assert.That(actual.Count, Is.EqualTo(13));
            Assert.That(actual[0], Is.EqualTo("+OK 317 octets"));

            //tearDown
            cl.StringSend("QUIT");
            cl.Close();
        }
Beispiel #37
0
        public void DELEによるメール削除_失敗(InetKind inetKind)
        {
            //setUp
            var sut = CreatePopClient(inetKind);
            var expected = false;

            //exercise
            sut.Connect();
            sut.Login("user1", "user1");

            //verify
            var actual = sut.Dele(0);
            Assert.That(actual,Is.EqualTo(expected));
            Assert.That(sut.GetLastError(), Is.EqualTo("Not Found +OK in PopClient RecvStatus()"));

            //tearDown
            sut.Quit();
            sut.Dispose();
        }
Beispiel #38
0
        public void RETRによるメール取得(InetKind inetKind)
        {
            //setUp
            var sut = CreatePopClient(inetKind);
            var expected = true;

            //exercise
            sut.Connect();
            sut.Login("user2", "user2");

            var mail = new Mail();
            var actual = sut.Retr(0,mail);

            //verify
            Assert.That(actual, Is.EqualTo(expected));
            Assert.That(mail.GetBytes().Length, Is.EqualTo(308));
            //tearDown
            sut.Dispose();
        }
Beispiel #39
0
        public void Test(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            var expected = "{\"code\":500,\"message\":\"Not Implemented []\"}";

            //exercise
            cl.Send(Encoding.ASCII.GetBytes("GET / HTTP/1.1\n\n"));

            var buf = cl.Recv(3000, 3, this);

            var str = Encoding.UTF8.GetString(buf);
            var actual = str.Substring(str.IndexOf("\r\n\r\n") + 4);
            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();
        }
Beispiel #40
0
        public void DELEによるメール削除(InetKind inetKind)
        {
            //setUp
            var sut = CreatePopClient(inetKind);
            //var expected = true;

            //exercise
            sut.Connect();
            sut.Login("user2", "user2");

            //verify
            sut.Dele(0);//1通削除
            Assert.That(CountMail("user2"), Is.EqualTo(2));//QUIT前は2通

            sut.Quit();
            Assert.That(CountMail("user2"), Is.EqualTo(1));//QUIT後は1通

            //tearDown
            sut.Dispose();
        }
Beispiel #41
0
        public void AUTH_CRAM_MD5認証_異常(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            Ehlo(cl);

            String expected = null;

            //exercise
            cl.StringSend("AUTH CRAM-MD5");
            var recvStr = cl.StringRecv(3, this);
            recvStr = Inet.TrimCrlf(recvStr);
            Assert.That(recvStr.Substring(0, 3), Is.EqualTo("334"));
            var hash = Md5.Hash("user1", Base64.Decode(recvStr.Substring(4)));
            cl.StringSend(Base64.Encode(string.Format("user1 {0}", hash))+"XXX"); //<=ゴミデータ追加
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));
        }
Beispiel #42
0
        public void APOP認証失敗(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            string expected = null;

            //exercise
            var challengeStr = Inet.TrimCrlf(cl.StringRecv(3, this)).Split(' ')[5];
            var result = (new MD5CryptoServiceProvider()).ComputeHash(Encoding.ASCII.GetBytes(challengeStr + "user1"));
            var sb = new StringBuilder();
            for (int i = 0; i < 16; i++) {
                sb.Append(string.Format("{0:x2}", result[i]));
            }
            cl.StringSend("APOP user2 " + sb.ToString());
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();
        }
Beispiel #43
0
        public void Dataの動作確認_Bodyの確認_ドットのみの行を含む(InetKind inetKind)
        {
            //setUp
            var sut = CreateSmtpClient(inetKind);

            var mail1 = new Mail();
            mail1.Init2(Encoding.ASCII.GetBytes("1:1\r\n\r\nbody1\r\nbody2\r\n.\r\n"));

            //exercise
            sut.Connect();
            sut.Helo();
            sut.Mail("1@1");
            sut.Rcpt("*****@*****.**");
            sut.Data(mail1);
            sut.Quit();

            //verify
            var mail2 = _testServer.GetMf("user1")[0];
            Assert.That(mail2.GetBody(), Is.EqualTo(mail1.GetBody()));

            //tearDown
            sut.Dispose();
        }
Beispiel #44
0
        public void AUTH_LOGIN認証_正常(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            Ehlo(cl);

            var expected = "235 Authentication successful.\r\n";

            //exercise
            cl.StringSend("AUTH LOGIN");
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("334 VXNlcm5hbWU6\r\n"));

            cl.StringSend(Base64.Encode("user1")); //ユーザ名をBase64で送る
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("334 UGFzc3dvcmQ6\r\n"));

            cl.StringSend(Base64.Encode("user1"));//パスワードをBase64で送る
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();
        }
Beispiel #45
0
        public void DATAコマンド_正常(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            Helo(cl);
            //MAIL
            cl.StringSend("MAIL From:1@1");
            cl.StringRecv(3, this);
            //RCPT
            cl.StringSend("RCPT To:[email protected]");
            cl.StringRecv(3, this);

            var expected = "354 Enter mail,end with \".\" on a line by ltself\r\n";

            //exercise
            cl.StringSend("DATA");
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();
        }
Beispiel #46
0
        public void パスワード認証成功(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);

            //exercise verify
            CheckBanner(cl.StringRecv(10, this));//バナーチェック
            cl.StringSend("user user1");
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("+OK Password required for user1.\r\n"));
            cl.StringSend("PASS user1");
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("+OK user1 has 0 message (0 octets).\r\n"));
            cl.StringSend("QUIT");
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("+OK Pop Server at localhost signing off.\r\n"));

            //tearDown
            cl.Close();
        }
Beispiel #47
0
        public void パスワード認証失敗(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            string expected = null;

            //exercise
            CheckBanner(cl.StringRecv(3, this));//バナーチェック
            cl.StringSend("user user1");
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("+OK Password required for user1.\r\n"));
            cl.StringSend("PASS xxx");
            var actual = cl.StringRecv(3, this);

            //verify
            //パスワードに誤りがある場合、ブルートフォース対策のためしばらくレスポンスが無い
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.Close();
        }
Beispiel #48
0
        public void UIDLコマンドの確認(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            var expected = "+OK 2 message (633 octets)\r\n";

            //exercise
            Login("user2", "user2", 2, 633, cl);
            cl.StringSend("UIDL");
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.StringSend("QUIT");
            cl.Close();
        }
Beispiel #49
0
        public void UIDL_無効パラメータ_無効データ(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            var expected = "-ERR Message 3 does not exist.\r\n";

            //exercise
            Login("user2", "user2", 2, 633, cl);
            cl.StringSend("UIDL 3");
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.StringSend("QUIT");
            cl.Close();
        }
Beispiel #50
0
        public void 空行を送るとエラーが返る(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            var expected = "-ERR Invalid command.\r\n";

            //exercise
            Login("user1", "user1", 0, 0, cl);
            cl.StringSend("");
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.StringSend("QUIT");
            cl.Close();
        }
Beispiel #51
0
        public void STAT_パラメータ有りの場合の確認(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            var expected = "+OK 2 633\r\n";

            //exercise
            Login("user2", "user2", 2, 633, cl);
            cl.StringSend("STAT 2");
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.StringSend("QUIT");
            cl.Close();
        }
Beispiel #52
0
        public void RETRによるメール受信(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);

            //exercise
            Login("user2", "user2", 2, 633, cl);
            cl.StringSend("RETR 1");
            var actual = Inet.RecvLines(cl, 3, this);

            //verify
            Assert.That(actual.Count, Is.EqualTo(13));
            Assert.That(actual[0], Is.EqualTo("+OK 317 octets"));

            //tearDown
            cl.StringSend("QUIT");
            cl.Close();
        }
Beispiel #53
0
        public void LISTコマンドの有効パラメータの場合のレスポンス確認(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            var expected = "+OK 1 317\r\n";

            //exercise
            Login("user2", "user2", 2, 633, cl);
            cl.StringSend("LIST 1");
            var actual = cl.StringRecv(3, this);
            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.StringSend("QUIT");
            cl.Close();
        }
Beispiel #54
0
        public void 多重ログイン(InetKind inetKind)
        {
            //setUp
            var clDmy = CreateClient(inetKind);
            Login("user1", "user1", 0, 0, clDmy);
            var cl = CreateClient(inetKind);
            var expected = "-ERR Double login\r\n";

            //exercise
            CheckBanner(cl.StringRecv(3, this));//バナーチェック
            cl.StringSend("user user1");
            Assert.That(cl.StringRecv(3, this), Is.EqualTo("+OK Password required for user1.\r\n"));
            cl.StringSend("PASS user1");
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            clDmy.StringSend("QUIT");
            clDmy.Close();
            cl.StringSend("QUIT");
            cl.Close();
        }
Beispiel #55
0
        public void 無効なコマンドでエラーが返る(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            var expected = "-ERR Invalid command.\r\n";

            //exercise
            CheckBanner(cl.StringRecv(3, this));//バナーチェック
            cl.StringSend("xxx");
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.StringSend("QUIT");
            cl.Close();
        }
Beispiel #56
0
        public void TOP_有効パラメータによるデータ取得(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);

            //exercise
            Login("user2", "user2", 2, 633, cl);
            cl.StringSend("TOP 1 2");
            var actual = Inet.RecvLines(cl, 3, this);

            //verify
            Assert.That(actual.Count, Is.EqualTo(13));
            Assert.That(actual[0], Is.EqualTo("+OK 317 octets"));
            Assert.That(actual[5], Is.EqualTo("Message-ID: <*****@*****.**>"));
            Assert.That(actual[6], Is.EqualTo("From: <1@1>"));
            Assert.That(actual[12], Is.EqualTo("."));

            //tearDown
            cl.StringSend("QUIT");
            cl.Close();
        }
Beispiel #57
0
        public void 複数ログイン(InetKind inetKind)
        {
            //setUp
            var cl1 = CreateClient(inetKind);
            var cl2 = CreateClient(inetKind);
            var cl3 = CreateClient(inetKind);
            var expected = "+OK 2 message (633 octets)\r\n";

            //exercise
            Login("user1", "user1", 0, 0, cl1);
            Login("user2", "user2", 2, 633, cl2);
            Login("user3", "user3", 0, 0, cl3);
            cl2.StringSend("UIDL");
            var actual = cl2.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl1.StringSend("QUIT");
            cl1.Close();
            cl2.StringSend("QUIT");
            cl2.Close();
            cl3.StringSend("QUIT");
            cl3.Close();
        }
Beispiel #58
0
        public void TOP_無効パラメータの確認(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            var expected = "-ERR Too few arguments for the TOP 1 command.\r\n";

            //exercise
            Login("user2", "user2", 2, 633, cl);
            cl.StringSend("TOP 1");
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.StringSend("QUIT");
            cl.Close();
        }
Beispiel #59
0
 //クライアントの生成
 SockTcp CreateClient(InetKind inetKind)
 {
     int port = 9110;
     if (inetKind == InetKind.V4) {
         return Inet.Connect(new Kernel(), new Ip(IpKind.V4Localhost), port, 10, null);
     }
     return Inet.Connect(new Kernel(), new Ip(IpKind.V6Localhost), port, 10, null);
 }
Beispiel #60
0
        public void UIDL_パラメータ有り(InetKind inetKind)
        {
            //setUp
            var cl = CreateClient(inetKind);
            var expected = "+OK 1 bjd.00635026511425808252.000\r\n";

            //exercise
            Login("user2", "user2", 2, 633, cl);
            cl.StringSend("UIDL 1");
            var actual = cl.StringRecv(3, this);

            //verify
            Assert.That(actual, Is.EqualTo(expected));

            //tearDown
            cl.StringSend("QUIT");
            cl.Close();
        }