Skip to content

Commit

Permalink
Add unit tests for the SMTP X-EXPS extension
Browse files Browse the repository at this point in the history
  • Loading branch information
jstedfast committed Jan 16, 2024
1 parent e76ef93 commit 4ceafb7
Show file tree
Hide file tree
Showing 2 changed files with 105 additions and 0 deletions.
7 changes: 7 additions & 0 deletions UnitTests/Net/Smtp/Resources/comcast-ehlo+x-exps.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
250-omta06.westchester.pa.mail.comcast.net hello [127.0.0.1], pleased to meet you
250-HELP
250-X-EXPS LOGIN PLAIN
250-SIZE 36700160
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 STARTTLS
98 changes: 98 additions & 0 deletions UnitTests/Net/Smtp/SmtpClientTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2268,6 +2268,104 @@ public async Task TestBasicFunctionalityAsync ()
}
}

static List<SmtpReplayCommand> CreateXEXPSExtensionCommands ()
{
return new List<SmtpReplayCommand> {
new SmtpReplayCommand ("", "comcast-greeting.txt"),
new SmtpReplayCommand ("EHLO unit-tests.mimekit.org\r\n", "comcast-ehlo+x-exps.txt"),
new SmtpReplayCommand ("QUIT\r\n", "comcast-quit.txt")
};
}

[Test]
public void TestXEXPSExtension ()
{
var commands = CreateXEXPSExtensionCommands ();

using (var client = new SmtpClient ()) {
client.LocalDomain = "unit-tests.mimekit.org";

try {
client.Connect (new SmtpReplayStream (commands, false), "localhost", 25, SecureSocketOptions.None);
} catch (Exception ex) {
Assert.Fail ($"Did not expect an exception in Connect: {ex}");
}

Assert.That (client.IsConnected, Is.True, "Client failed to connect.");
Assert.That (client.IsSecure, Is.False, "IsSecure should be false.");

Assert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, "Failed to detect AUTH extension");
Assert.That (client.AuthenticationMechanisms.Contains ("LOGIN"), Is.True, "Failed to detect the LOGIN auth mechanism");
Assert.That (client.AuthenticationMechanisms.Contains ("PLAIN"), Is.True, "Failed to detect the PLAIN auth mechanism");

Assert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, "Failed to detect 8BITMIME extension");

Assert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, "Failed to detect ENHANCEDSTATUSCODES extension");

Assert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, "Failed to detect SIZE extension");
Assert.That (client.MaxSize, Is.EqualTo (36700160), "Failed to parse SIZE correctly");

Assert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, "Failed to detect STARTTLS extension");

Assert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);

Assert.That (client.Timeout, Is.EqualTo (120000), "Timeout");

try {
client.Disconnect (true);
} catch (Exception ex) {
Assert.Fail ($"Did not expect an exception in Disconnect: {ex}");
}

Assert.That (client.IsConnected, Is.False, "Failed to disconnect");
}
}

[Test]
public async Task TestXEXPSExtensionAsync ()
{
var commands = CreateXEXPSExtensionCommands ();

using (var client = new SmtpClient ()) {
client.LocalDomain = "unit-tests.mimekit.org";

try {
await client.ConnectAsync (new SmtpReplayStream (commands, true), "localhost", 25, SecureSocketOptions.None);
} catch (Exception ex) {
Assert.Fail ($"Did not expect an exception in Connect: {ex}");
}

Assert.That (client.IsConnected, Is.True, "Client failed to connect.");
Assert.That (client.IsSecure, Is.False, "IsSecure should be false.");

Assert.That (client.Capabilities.HasFlag (SmtpCapabilities.Authentication), Is.True, "Failed to detect AUTH extension");
Assert.That (client.AuthenticationMechanisms.Contains ("LOGIN"), Is.True, "Failed to detect the LOGIN auth mechanism");
Assert.That (client.AuthenticationMechanisms.Contains ("PLAIN"), Is.True, "Failed to detect the PLAIN auth mechanism");

Assert.That (client.Capabilities.HasFlag (SmtpCapabilities.EightBitMime), Is.True, "Failed to detect 8BITMIME extension");

Assert.That (client.Capabilities.HasFlag (SmtpCapabilities.EnhancedStatusCodes), Is.True, "Failed to detect ENHANCEDSTATUSCODES extension");

Assert.That (client.Capabilities.HasFlag (SmtpCapabilities.Size), Is.True, "Failed to detect SIZE extension");
Assert.That (client.MaxSize, Is.EqualTo (36700160), "Failed to parse SIZE correctly");

Assert.That (client.Capabilities.HasFlag (SmtpCapabilities.StartTLS), Is.True, "Failed to detect STARTTLS extension");

Assert.Throws<ArgumentException> (() => client.Capabilities |= SmtpCapabilities.UTF8);

Assert.That (client.Timeout, Is.EqualTo (120000), "Timeout");
client.Timeout *= 2;

try {
await client.DisconnectAsync (true);
} catch (Exception ex) {
Assert.Fail ($"Did not expect an exception in Disconnect: {ex}");
}

Assert.That (client.IsConnected, Is.False, "Failed to disconnect");
}
}

static List<SmtpReplayCommand> CreateResendCommands ()
{
return new List<SmtpReplayCommand> {
Expand Down

0 comments on commit 4ceafb7

Please sign in to comment.