public async Task Process_BadCommand_500Response() { Mocks mocks = new Mocks(); mocks.ConnectionChannel.Setup(c => c.ReadLineAsync()).ReturnsAsync("BADCOMMAND").Callback(() => mocks.Connection.Object.CloseConnectionAsync().Wait()); Connection connection = new Connection(mocks.Server.Object, mocks.ConnectionChannel.Object, mocks.VerbMap.Object); await connection.ProcessAsync(); mocks.ConnectionChannel.Verify(cc => cc.WriteLineAsync(It.IsRegex("500 .*", RegexOptions.IgnoreCase))); }
public async Task Process_GreetingWritten() { Mocks mocks = new Mocks(); mocks.ConnectionChannel.Setup(c => c.WriteLineAsync(It.IsAny<string>())).Callback(() => mocks.Connection.Object.CloseConnectionAsync().Wait()); Connection connection = new Connection(mocks.Server.Object, mocks.ConnectionChannel.Object, mocks.VerbMap.Object); await connection.ProcessAsync(); mocks.ConnectionChannel.Verify(cc => cc.WriteLineAsync(It.IsRegex("220 .*", RegexOptions.IgnoreCase))); }
public async Task Process_GreetingWritten() { Mocks mocks = new Mocks(); mocks.ConnectionChannel.Setup(c => c.WriteLineAsync(It.IsAny <string>())).Callback(() => mocks.Connection.Object.CloseConnectionAsync().Wait()); Connection connection = new Connection(mocks.Server.Object, mocks.ConnectionChannel.Object, mocks.VerbMap.Object); await connection.ProcessAsync(); mocks.ConnectionChannel.Verify(cc => cc.WriteLineAsync(It.IsRegex("220 .*", RegexOptions.IgnoreCase))); }
public async Task Process_EmptyCommand_NoResponse() { Mocks mocks = new Mocks(); mocks.ConnectionChannel.Setup(c => c.ReadLineAsync()).ReturnsAsync("").Callback(() => mocks.Connection.Object.CloseConnectionAsync().Wait()); Connection connection = new Connection(mocks.Server.Object, mocks.ConnectionChannel.Object, mocks.VerbMap.Object); await connection.ProcessAsync(); //Should only print service ready message mocks.ConnectionChannel.Verify(cc => cc.WriteLineAsync(It.Is<string>(s => !s.StartsWith("220 "))), Times.Never()); }
public async Task Process_EmptyCommand_NoResponse() { Mocks mocks = new Mocks(); mocks.ConnectionChannel.Setup(c => c.ReadLineAsync()).ReturnsAsync("").Callback(() => mocks.Connection.Object.CloseConnectionAsync().Wait()); Connection connection = new Connection(mocks.Server.Object, mocks.ConnectionChannel.Object, mocks.VerbMap.Object); await connection.ProcessAsync(); //Should only print service ready message mocks.ConnectionChannel.Verify(cc => cc.WriteLineAsync(It.Is <string>(s => !s.StartsWith("220 "))), Times.Never()); }
public async Task Process_GoodCommand_Processed() { Mocks mocks = new Mocks(); Mock<IVerb> mockVerb = new Mock<IVerb>(); mocks.VerbMap.Setup(v => v.GetVerbProcessor(It.IsAny<string>())).Returns(mockVerb.Object).Callback(() => mocks.Connection.Object.CloseConnectionAsync().Wait()); mocks.ConnectionChannel.Setup(c => c.ReadLineAsync()).ReturnsAsync("GOODCOMMAND"); Connection connection = new Connection(mocks.Server.Object, mocks.ConnectionChannel.Object, mocks.VerbMap.Object); await connection.ProcessAsync(); mockVerb.Verify(v => v.ProcessAsync(It.IsAny<IConnection>(), It.IsAny<SmtpCommand>())); }
public async Task Process_EmptyCommand_NoResponse() { TestMocks mocks = new TestMocks(); mocks.ConnectionChannel.Setup(c => c.ReadLine()).ReturnsAsync("").Callback(() => mocks.Connection.Object.CloseConnection().Wait()); Connection connection = await Connection.Create(mocks.Server.Object, mocks.ConnectionChannel.Object, mocks.VerbMap.Object).ConfigureAwait(false); await connection.ProcessAsync().ConfigureAwait(false); // Should only print service ready message mocks.ConnectionChannel.Verify(cc => cc.WriteLine(It.Is <string>(s => !s.StartsWith("220 ", StringComparison.OrdinalIgnoreCase))), Times.Never()); }
public async Task Process_SmtpServerExceptionThrow_ResponseWritten() { Mocks mocks = new Mocks(); Mock<IVerb> mockVerb = new Mock<IVerb>(); mocks.VerbMap.Setup(v => v.GetVerbProcessor(It.IsAny<string>())).Returns(mockVerb.Object); mockVerb.Setup(v => v.ProcessAsync(It.IsAny<IConnection>(), It.IsAny<SmtpCommand>())).Returns(Task.FromException(new SmtpServerException(new SmtpResponse(500, "error")))); mocks.ConnectionChannel.Setup(c => c.ReadLineAsync()).ReturnsAsync("GOODCOMMAND").Callback(() => mocks.Connection.Object.CloseConnectionAsync().Wait()); Connection connection = new Connection(mocks.Server.Object, mocks.ConnectionChannel.Object, mocks.VerbMap.Object); await connection.ProcessAsync(); mocks.ConnectionChannel.Verify(cc => cc.WriteLineAsync(It.IsRegex("500 error", RegexOptions.IgnoreCase))); }
public async Task Process_TooManyBadCommands_Disconnected() { Mocks mocks = new Mocks(); mocks.ServerBehaviour.SetupGet(b => b.MaximumNumberOfSequentialBadCommands).Returns(2); mocks.ConnectionChannel.Setup(c => c.ReadLineAsync()).ReturnsAsync("BADCOMMAND"); Connection connection = new Connection(mocks.Server.Object, mocks.ConnectionChannel.Object, mocks.VerbMap.Object); await connection.ProcessAsync(); mocks.ConnectionChannel.Verify(c => c.ReadLineAsync(), Times.Exactly(2)); mocks.ConnectionChannel.Verify(cc => cc.WriteLineAsync(It.IsRegex("221 .*", RegexOptions.IgnoreCase))); }
public async Task Process_GoodCommand_Processed() { Mocks mocks = new Mocks(); Mock <IVerb> mockVerb = new Mock <IVerb>(); mocks.VerbMap.Setup(v => v.GetVerbProcessor(It.IsAny <string>())).Returns(mockVerb.Object).Callback(() => mocks.Connection.Object.CloseConnectionAsync().Wait()); mocks.ConnectionChannel.Setup(c => c.ReadLineAsync()).ReturnsAsync("GOODCOMMAND"); Connection connection = new Connection(mocks.Server.Object, mocks.ConnectionChannel.Object, mocks.VerbMap.Object); await connection.ProcessAsync(); mockVerb.Verify(v => v.ProcessAsync(It.IsAny <IConnection>(), It.IsAny <SmtpCommand>())); }
public async Task Process_SmtpServerExceptionThrow_ResponseWritten() { Mocks mocks = new Mocks(); Mock <IVerb> mockVerb = new Mock <IVerb>(); mocks.VerbMap.Setup(v => v.GetVerbProcessor(It.IsAny <string>())).Returns(mockVerb.Object); mockVerb.Setup(v => v.ProcessAsync(It.IsAny <IConnection>(), It.IsAny <SmtpCommand>())).Returns(Task.FromException(new SmtpServerException(new SmtpResponse(500, "error")))); mocks.ConnectionChannel.Setup(c => c.ReadLineAsync()).ReturnsAsync("GOODCOMMAND").Callback(() => mocks.Connection.Object.CloseConnectionAsync().Wait()); Connection connection = new Connection(mocks.Server.Object, mocks.ConnectionChannel.Object, mocks.VerbMap.Object); await connection.ProcessAsync(); mocks.ConnectionChannel.Verify(cc => cc.WriteLineAsync(It.IsRegex("500 error", RegexOptions.IgnoreCase))); }