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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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]); }
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); }