Exemplo n.º 1
0
        public void TestStartingConnectionWritesWelcome()
        {
            var netStream      = new MockNetworkStream();
            var smtpStream     = new SmtpServerStream(netStream);
            var smtpConnection = new DummySmtpServerConnection(smtpStream, new MailBag(), Substitute.For <IDummySmtpServerConnectionCollection>());

            smtpConnection.Start();
            var readData = ReadResponseLine(netStream);

            Assert.That(readData, Is.EqualTo(SmtpServerResponses.Welcome));
        }
Exemplo n.º 2
0
        public void TestSendingRecipientBeforeHello()
        {
            var netStream      = new MockNetworkStream();
            var smtpStream     = new SmtpServerStream(netStream);
            var smtpConnection = new DummySmtpServerConnection(smtpStream, new MailBag(), Substitute.For <IDummySmtpServerConnectionCollection>());

            smtpConnection.Start();
            ReadResponseLine(netStream);

            WriteRequest(netStream, SmtpServerRequests.Recipient);
            var mailResponse = ReadResponseLine(netStream);

            Assert.That(mailResponse, Is.EqualTo(SmtpServerResponses.BadCommandSequence));
        }
Exemplo n.º 3
0
        public void TestSendingHelloWritesGreeting()
        {
            var netStream      = new MockNetworkStream();
            var smtpStream     = new SmtpServerStream(netStream);
            var smtpConnection = new DummySmtpServerConnection(smtpStream, new MailBag(), Substitute.For <IDummySmtpServerConnectionCollection>());

            smtpConnection.Start();
            ReadResponseLine(netStream);

            WriteRequest(netStream, SmtpServerRequests.Hello);
            var helloResponse = ReadResponseLine(netStream);

            Assert.That(helloResponse, Is.EqualTo(SmtpServerResponses.Greeting("unit-test")));
        }
Exemplo n.º 4
0
        private void TestWriteToStream(string expectedOutput_, SmtpStreamAction action_)
        {
            var memStream  = new MemoryStream();
            var smtpStream = new SmtpServerStream(memStream);

            using (smtpStream)
            {
                action_(smtpStream);
                var buffer = new byte[100];
                memStream.Seek(0, SeekOrigin.Begin);
                var readCount = memStream.Read(buffer, 0, buffer.Length);
                var welcome   = Encoding.ASCII.GetString(buffer, 0, readCount);
                Assert.That(welcome, Is.EqualTo(expectedOutput_));
            }
        }
Exemplo n.º 5
0
        public void TestSendingDataBeforeMail()
        {
            var netStream      = new MockNetworkStream();
            var smtpStream     = new SmtpServerStream(netStream);
            var smtpConnection = new DummySmtpServerConnection(smtpStream, new MailBag(), Substitute.For <IDummySmtpServerConnectionCollection>());

            smtpConnection.Start();
            ReadResponseLine(netStream); // Welcome

            WriteRequest(netStream, SmtpServerRequests.Hello);
            ReadResponseLine(netStream); // Greeting to hello

            WriteRequest(netStream, SmtpServerRequests.Data);
            var dataResponse = ReadResponseLine(netStream);

            Assert.That(dataResponse, Is.EqualTo(SmtpServerResponses.BadCommandSequence));
        }
Exemplo n.º 6
0
        public void TestReadCommandAsync()
        {
            var memStream  = new MemoryStream();
            var smtpStream = new SmtpServerStream(memStream);

            using (smtpStream)
            {
                var          readTask      = smtpStream.ReadCommandAsync();
                const string issuedCommand = "EHLO bar.com\r\n";
                var          bytes         = Encoding.ASCII.GetBytes(issuedCommand);
                memStream.Write(bytes, 0, bytes.Length);
                memStream.Seek(0, SeekOrigin.Begin);
                readTask.Wait();
                var command = readTask.Result;
                Assert.That(command, Is.EqualTo(issuedCommand));
            }
        }
Exemplo n.º 7
0
        private void TestReadMailData(string[] lines_)
        {
            var memStream  = new MemoryStream();
            var smtpStream = new SmtpServerStream(memStream);

            using (smtpStream)
            {
                var expectedData = new StringBuilder();
                foreach (var line in lines_)
                {
                    expectedData.Append(line);
                    var bytes = Encoding.ASCII.GetBytes(line);
                    memStream.Write(bytes, 0, bytes.Length);
                }

                expectedData.Replace("\r\n.\r\n", string.Empty); // Remove the terminator. We don't expect to get this as part of the message
                memStream.Seek(0, SeekOrigin.Begin);
                var readTask = smtpStream.ReadDataAsync();
                readTask.Wait();
                var data = readTask.Result;
                Assert.That(data, Is.EqualTo(expectedData.ToString()));
            }
        }
Exemplo n.º 8
0
        public void TestReadMailDataWhenTerminatorSplitAcrossPackets()
        {
            var lines = new[]
            {
                "Date: Thu, 21 May 1998 05:33:29 -0700\r\n",
                "From: John Q. Public <*****@*****.**>\r\n",
                "Subject:  The Next Meeting of the Board\r\n",
                "To: [email protected]\r\n",
                "\r\n",
                "Bill:\r\n",
                "The next meeting of the board of directors will be\r\n",
                "on Tuesday.\r\n",
                "\r\n",
                ".",
                "\r\n"
            };
            var netStream  = new MockNetworkStream();
            var smtpStream = new SmtpServerStream(netStream);

            using (smtpStream)
            {
                var readTask = smtpStream.ReadDataAsync();

                var expectedData = new StringBuilder();
                foreach (var line in lines)
                {
                    expectedData.Append(line);
                    var bytes = Encoding.ASCII.GetBytes(line);
                    netStream.WriteRequest(bytes, 0, bytes.Length);
                }

                expectedData.Replace("\r\n.\r\n", string.Empty);
                readTask.Wait();
                var data = readTask.Result;
                Assert.That(data, Is.EqualTo(expectedData.ToString()));
            }
        }
Exemplo n.º 9
0
        public void TestSendingMail()
        {
            var netStream      = new MockNetworkStream();
            var smtpStream     = new SmtpServerStream(netStream);
            var smtpConnection = new DummySmtpServerConnection(smtpStream, new MailBag(), Substitute.For <IDummySmtpServerConnectionCollection>());

            smtpConnection.Start();
            ReadResponseLine(netStream); // Welcome

            WriteRequest(netStream, SmtpServerRequests.Hello);
            ReadResponseLine(netStream); // Greeting to hello

            WriteRequest(netStream, SmtpServerRequests.Mail);
            var mailResponse = ReadResponseLine(netStream);

            Assert.That(mailResponse, Is.EqualTo(SmtpServerResponses.Ok));

            WriteRequest(netStream, SmtpServerRequests.Recipient);
            var recipientResponse = ReadResponseLine(netStream);

            Assert.That(recipientResponse, Is.EqualTo(SmtpServerResponses.Ok));

            WriteRequest(netStream, SmtpServerRequests.AdditionalRecipient);
            recipientResponse = ReadResponseLine(netStream);
            Assert.That(recipientResponse, Is.EqualTo(SmtpServerResponses.Ok));

            WriteRequest(netStream, SmtpServerRequests.Data);
            var dataResponse = ReadResponseLine(netStream);

            Assert.That(dataResponse, Is.EqualTo(SmtpServerResponses.StartMailInput));

            WriteRequest(netStream, SmtpServerRequests.MailBody);
            var mailBodyResponse = ReadResponseLine(netStream);

            Assert.That(mailBodyResponse, Is.EqualTo(SmtpServerResponses.Ok));
        }