Exemple #1
0
        public async Task NullStateReset()
        {
            var channel = new MockSmtpChannel();
            var builder = new MockMailBuilder();
            var command = new ResetCommand(channel, builder);

            command.Initialize("");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.Okay);
            Assert.Null(builder.PendingMail);
        }
Exemple #2
0
        public async Task ResetAfterMailCommand()
        {
            var channel = new MockSmtpChannel();
            var builder = new MockMailBuilder {
                PendingMail = new SmtpMailMessage(new SmtpPath("*****@*****.**"))
            };
            var command = new ResetCommand(channel, builder);

            command.Initialize("");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.Okay);
            Assert.Null(builder.PendingMail);
        }
Exemple #3
0
        public async Task TooManyArguments()
        {
            var auth = new MockIndex <string, IAuthenticationSession>
            {
                { "PLAIN", new MockPlainTextAuth(MockPlainTextAuth.Action.Null) }
            };
            var channel         = new MockSmtpChannel();
            var mockMailBuilder = new MockMailBuilder();
            var command         = new AuthenticateCommand(auth, channel, mockMailBuilder);

            command.Initialize("MECH INITIAL");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.InvalidArguments);
            Assert.Null(channel.AuthenticatedUser);
        }
Exemple #4
0
        public async Task BadSequenceNoMail()
        {
            var channel = new MockSmtpChannel();
            var builder = new MockMailBuilder();
            var command = new RecipientCommand(
                builder,
                channel,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    new[] { new SmtpAcceptDomain("test.vaettir.net") })
                );

            command.Initialize("TO:<*****@*****.**>");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.BadSequence);
            Assert.Null(builder.PendingMail);
        }
Exemple #5
0
        public async Task SuccessfulAuth()
        {
            var auth = new MockIndex <string, IAuthenticationSession>
            {
                { "PLAIN", new MockPlainTextAuth(MockPlainTextAuth.Action.Return) }
            };

            var channel         = new MockSmtpChannel();
            var mockMailBuilder = new MockMailBuilder();
            var command         = new AuthenticateCommand(auth, channel, mockMailBuilder);

            command.Initialize("PLAIN");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.AuthenticationComplete);
            Assert.NotNull(channel.AuthenticatedUser);
            Assert.Equal(MockPlainTextAuth.UserMailbox, channel.AuthenticatedUser.Mailbox);
        }
        public async Task InvalidDomainRejected()
        {
            var channel = new MockSmtpChannel();
            var builder = new MockMailBuilder();
            var user    = new MockUserStore(false);
            var command = new MailCommand(
                channel,
                builder,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    new[] { new SmtpAcceptDomain("test.vaettir.net") }),
                user);

            command.Initialize("FROM:!!!!");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.InvalidArguments);
            Assert.Null(builder.PendingMail);
        }
Exemple #7
0
        public async Task DuringMailSession()
        {
            var auth = new MockIndex <string, IAuthenticationSession>
            {
                { "PLAIN", new MockPlainTextAuth(MockPlainTextAuth.Action.Null) }
            };

            var channel         = new MockSmtpChannel();
            var mockMailBuilder = new MockMailBuilder {
                PendingMail = new SmtpMailMessage(new SmtpPath("*****@*****.**"))
            };
            var command = new AuthenticateCommand(auth, channel, mockMailBuilder);

            command.Initialize("PLAIN");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.BadSequence);
            Assert.Null(channel.AuthenticatedUser);
        }
        private static (MockMailQueue, MockMailBuilder, MockSmtpChannel, DataCommand) Prepare(
            string content         = "",
            AgentSettings settings = null)
        {
            var queue = new MockMailQueue();

            settings = settings ?? TestHelpers.MakeSettings();
            var builder = new MockMailBuilder();
            var channel = new MockSmtpChannel();
            var command = new DataCommand(
                queue,
                settings,
                TestHelpers.GetReader(content),
                new ConnectionInformation("local", "remote"),
                builder,
                channel
                );

            return(queue, builder, channel, command);
        }
Exemple #9
0
        public async Task AlreadyAuthed()
        {
            var auth = new MockIndex <string, IAuthenticationSession>
            {
                { "PLAIN", new MockPlainTextAuth(MockPlainTextAuth.Action.Null) }
            };

            var user    = new UserData("*****@*****.**");
            var channel = new MockSmtpChannel {
                AuthenticatedUser = user
            };
            var mockMailBuilder = new MockMailBuilder();
            var command         = new AuthenticateCommand(auth, channel, mockMailBuilder);

            command.Initialize("PLAIN");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.BadSequence);
            Assert.Same(user, channel.AuthenticatedUser);
        }
Exemple #10
0
        public async Task VailToInternal()
        {
            var channel = new MockSmtpChannel();
            var builder = new MockMailBuilder();
            var user    = new MockUserStore(true);
            var command = new MailCommand(
                channel,
                builder,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    new[] { new SmtpAcceptDomain("test.vaettir.net") }),
                user);

            command.Initialize("FROM:<>");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.Okay);
            Assert.NotNull(builder.PendingMail);
            Assert.Equal("", builder.PendingMail.FromPath.Mailbox);
        }
Exemple #11
0
        public async Task FromWrongMailboxRejected()
        {
            var channel = new MockSmtpChannel {
                AuthenticatedUser = new UserData("*****@*****.**")
            };
            var builder = new MockMailBuilder();
            var user    = new MockUserStore(false);
            var command = new MailCommand(
                channel,
                builder,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    new[] { new SmtpAcceptDomain("test.vaettir.net") }),
                user);

            command.Initialize("FROM:<*****@*****.**>");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.MailboxUnavailable);
            Assert.Null(builder.PendingMail);
        }
Exemple #12
0
        public async Task RejectInvalidMailbox()
        {
            var channel = new MockSmtpChannel();
            var mail    = new SmtpMailMessage(new SmtpPath("*****@*****.**"));
            var builder = new MockMailBuilder {
                PendingMail = mail
            };
            var command = new RecipientCommand(
                builder,
                channel,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    new[] { new SmtpAcceptDomain("test.vaettir.net") })
                );

            command.Initialize("TO:<no-at>");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.InvalidArguments);
            Assert.Same(mail, builder.PendingMail);
        }
Exemple #13
0
        public async Task VailMailAcceptedWithReturnPathRejected()
        {
            var channel = new MockSmtpChannel {
                AuthenticatedUser = new UserData("*****@*****.**")
            };
            var builder = new MockMailBuilder();
            var user    = new MockUserStore(true);
            var command = new MailCommand(
                channel,
                builder,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    new[] { new SmtpAcceptDomain("test.vaettir.net") }),
                user);

            command.Initialize("FROM:<@other:[email protected]>");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.InvalidArguments);
            Assert.Null(builder.PendingMail);
        }
Exemple #14
0
        public async Task VailMailWithUnknownRejected()
        {
            var channel = new MockSmtpChannel {
                AuthenticatedUser = new UserData("*****@*****.**")
            };
            var builder = new MockMailBuilder();
            var user    = new MockUserStore(true);
            var command = new MailCommand(
                channel,
                builder,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    new[] { new SmtpAcceptDomain("test.vaettir.net") }),
                user);

            command.Initialize("FROM:<*****@*****.**> EVIL=FAIL");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.ParameterNotImplemented);
            Assert.Null(builder.PendingMail);
        }
Exemple #15
0
        public async Task VailMailWithParametersAccepted()
        {
            var channel = new MockSmtpChannel {
                AuthenticatedUser = new UserData("*****@*****.**")
            };
            var builder = new MockMailBuilder();
            var user    = new MockUserStore(true);
            var command = new MailCommand(
                channel,
                builder,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    new[] { new SmtpAcceptDomain("test.vaettir.net") }),
                user);

            command.Initialize("FROM:<*****@*****.**> BODY=7BIT");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.Okay);
            Assert.NotNull(builder.PendingMail);
            Assert.Equal("*****@*****.**", builder.PendingMail.FromPath.Mailbox);
        }
Exemple #16
0
        public async Task AcceptRelayDomain()
        {
            var channel = new MockSmtpChannel();
            var mail    = new SmtpMailMessage(new SmtpPath("*****@*****.**"));
            var builder = new MockMailBuilder {
                PendingMail = mail
            };
            var command = new RecipientCommand(
                builder,
                channel,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    relayDomains: new[] { new SmtpRelayDomain("test.vaettir.net", "elsewhere.vaettir.net") })
                );

            command.Initialize("TO:<*****@*****.**>");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.Okay);
            Assert.Same(mail, builder.PendingMail);
            Assert.Single(mail.Recipents);
            Assert.Equal("*****@*****.**", mail.Recipents[0]);
        }
Exemple #17
0
        public async Task MailInProgressRejected()
        {
            var channel = new MockSmtpChannel();
            var message = new SmtpMailMessage(new SmtpPath(null));
            var builder = new MockMailBuilder
            {
                PendingMail = message
            };
            var user    = new MockUserStore(false);
            var command = new MailCommand(
                channel,
                builder,
                TestHelpers.MakeSettings(
                    "test.vaettir.net",
                    new[] { new SmtpAcceptDomain("test.vaettir.net") }),
                user);

            command.Initialize("FROM:<*****@*****.**>");
            await command.ExecuteAsync(CancellationToken.None);

            SmtpTestHelper.AssertResponse(channel, SmtpReplyCode.BadSequence);
            Assert.Same(message, builder.PendingMail);
        }