Skip to content

Commit

Permalink
Improved MimeMessage unit test coverage
Browse files Browse the repository at this point in the history
  • Loading branch information
jstedfast committed Jun 30, 2015
1 parent 89f0dff commit c8eb186
Show file tree
Hide file tree
Showing 3 changed files with 57 additions and 18 deletions.
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@

| |Build Status|Code Coverage|Static Analysis|
|-------------|:----------:|:-----------:|:-------------:|
|**Linux/Mac**|[![Build Status](https://travis-ci.org/jstedfast/MimeKit.svg)](https://travis-ci.org/jstedfast/MimeKit)|[![Code Coverage](https://coveralls.io/repos/jstedfast/MimeKit/badge.svg?branch=master)](https://coveralls.io/r/jstedfast/MimeKit?branch=master)|[![Static Analysis](https://scan.coverity.com/projects/3201/badge.svg)](https://scan.coverity.com/projects/3201)|
|**Windows** |[![Build Status](https://ci.appveyor.com/api/projects/status/07h7cobihqficw3s/branch/master?svg=true)](https://ci.appveyor.com/project/jstedfast/mimekit/branch/master)|[![Code Coverage](https://coveralls.io/repos/jstedfast/MimeKit/badge.svg?branch=master)](https://coveralls.io/r/jstedfast/MimeKit?branch=master)|[![Static Analysis](https://scan.coverity.com/projects/3201/badge.svg)](https://scan.coverity.com/projects/3201)|
|**Linux/Mac**|[![Build Status](https://travis-ci.org/jstedfast/MimeKit.svg)](https://travis-ci.org/jstedfast/MimeKit)|[![Code Coverage](https://coveralls.io/repos/jstedfast/MimeKit/badge.svg?branch=HEAD)](https://coveralls.io/r/jstedfast/MimeKit?branch=HEAD)|[![Static Analysis](https://scan.coverity.com/projects/3201/badge.svg)](https://scan.coverity.com/projects/3201)|
|**Windows** |[![Build Status](https://ci.appveyor.com/api/projects/status/07h7cobihqficw3s/branch/master?svg=true)](https://ci.appveyor.com/project/jstedfast/mimekit/branch/master)|[![Code Coverage](https://coveralls.io/repos/jstedfast/MimeKit/badge.svg?branch=HEAD)](https://coveralls.io/r/jstedfast/MimeKit?branch=HEAD)|[![Static Analysis](https://scan.coverity.com/projects/3201/badge.svg)](https://scan.coverity.com/projects/3201)|

## What is MimeKit?

Expand Down
49 changes: 43 additions & 6 deletions UnitTests/MimeMessageTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -170,23 +170,33 @@ public void TestImportance ()

Assert.AreEqual (MessageImportance.Normal, message.Importance);

// Note: setting to normal should not change anything
message.Importance = MessageImportance.Normal;
Assert.AreEqual (-1, message.Headers.IndexOf (HeaderId.Importance));

message.Importance = MessageImportance.Low;
value = message.Headers[HeaderId.Importance];

Assert.AreEqual (MessageImportance.Low, message.Importance);
Assert.AreEqual ("low", value);

message.Importance = MessageImportance.High;
value = message.Headers[HeaderId.Importance];

Assert.AreEqual (MessageImportance.High, message.Importance);
Assert.AreEqual ("high", value);

message.Importance = MessageImportance.Normal;
value = message.Headers[HeaderId.Importance];

Assert.AreEqual (MessageImportance.Normal, message.Importance);
Assert.AreEqual ("normal", value);

message.Headers[HeaderId.Importance] = "high";
Assert.AreEqual (MessageImportance.High, message.Importance);

message.Headers[HeaderId.Importance] = "low";
Assert.AreEqual (MessageImportance.Low, message.Importance);

message.Headers.Remove (HeaderId.Importance);
Assert.AreEqual (MessageImportance.Normal, message.Importance);
}

[Test]
Expand All @@ -200,23 +210,33 @@ public void TestPriority ()

Assert.AreEqual (MessagePriority.Normal, message.Priority);

// Note: setting to normal should not change anything
message.Priority = MessagePriority.Normal;
Assert.AreEqual (-1, message.Headers.IndexOf (HeaderId.Priority));

message.Priority = MessagePriority.NonUrgent;
value = message.Headers[HeaderId.Priority];

Assert.AreEqual (MessagePriority.NonUrgent, message.Priority);
Assert.AreEqual ("non-urgent", value);

message.Priority = MessagePriority.Urgent;
value = message.Headers[HeaderId.Priority];

Assert.AreEqual (MessagePriority.Urgent, message.Priority);
Assert.AreEqual ("urgent", value);

message.Priority = MessagePriority.Normal;
value = message.Headers[HeaderId.Priority];

Assert.AreEqual (MessagePriority.Normal, message.Priority);
Assert.AreEqual ("normal", value);

message.Headers[HeaderId.Priority] = "non-urgent";
Assert.AreEqual (MessagePriority.NonUrgent, message.Priority);

message.Headers[HeaderId.Priority] = "urgent";
Assert.AreEqual (MessagePriority.Urgent, message.Priority);

message.Headers.Remove (HeaderId.Priority);
Assert.AreEqual (MessagePriority.Normal, message.Priority);
}

[Test]
Expand Down Expand Up @@ -269,6 +289,7 @@ public void TestChangeHeaders ()

foreach (var property in message.GetType ().GetProperties (BindingFlags.Instance | BindingFlags.Public)) {
var getter = property.GetGetMethod ();
var setter = property.GetSetMethod ();
DateTimeOffset date;
object value;
HeaderId id;
Expand Down Expand Up @@ -298,6 +319,11 @@ public void TestChangeHeaders ()

value = getter.Invoke (message, new object[0]);
Assert.AreEqual (mailbox2, value.ToString (), "Unexpected result when setting {0} to mailbox2", property.Name);

setter.Invoke (message, new object[] { null });
value = getter.Invoke (message, new object[0]);
Assert.IsNull (value, "Expected null value after setting {0} to null.", property.Name);
Assert.AreEqual (-1, message.Headers.IndexOf (id), "Expected {0} header to be removed after setting it to null.", property.Name);
break;
case "MimeKit.MessageIdList":
message.Headers[id] = references1;
Expand Down Expand Up @@ -335,6 +361,17 @@ public void TestChangeHeaders ()

value = getter.Invoke (message, new object[0]);
Assert.AreEqual (msgid2, value.ToString (), "Unexpected result when setting {0} to msgid2", property.Name);

setter.Invoke (message, new object[] { "<" + msgid1 + ">" });
value = getter.Invoke (message, new object[0]);
Assert.AreEqual (msgid1, value.ToString (), "Unexpected result when setting {0} to msgid1 via the setter.", property.Name);

if (id == HeaderId.InReplyTo) {
setter.Invoke (message, new object[] { null });
value = getter.Invoke (message, new object[0]);
Assert.IsNull (value, "Expected null value after setting {0} to null.", property.Name);
Assert.AreEqual (-1, message.Headers.IndexOf (id), "Expected {0} header to be removed after setting it to null.", property.Name);
}
break;
case HeaderId.Subject:
message.Headers[id] = "Subject #1";
Expand Down
22 changes: 12 additions & 10 deletions UnitTests/SecureMimeTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ public void TestSecureMimeSigning ()
message.Body = body;

using (var ctx = CreateContext ()) {
message.Sign (ctx, DigestAlgorithm.Sha1);
message.Sign (ctx);

Assert.IsInstanceOf<MultipartSigned> (message.Body, "The message body should be a multipart/signed.");

Expand Down Expand Up @@ -298,19 +298,21 @@ public void TestSecureMimeDecryptThunderbird ()
[Test]
public void TestSecureMimeSignAndEncrypt ()
{
var body = new TextPart ("plain") { Text = "This is some cleartext that we'll end up encrypting..." };
var self = new MailboxAddress ("MimeKit UnitTests", "mimekit@example.com");
var recipients = new List<MailboxAddress> ();
var message = new MimeMessage { Subject = "Test of S/MIME encryption..." };
ApplicationPkcs7Mime encrypted;

// encrypt to ourselves...
recipients.Add (self);
message.From.Add (self);
message.To.Add (self);
message.Body = body;

var cleartext = new TextPart ("plain");
cleartext.Text = "This is some cleartext that we'll end up encrypting...";
using (var ctx = CreateContext ()) {
message.SignAndEncrypt (ctx);

ApplicationPkcs7Mime encrypted;
Assert.IsInstanceOf<ApplicationPkcs7Mime> (message.Body, "The message body should be an application/pkcs7-mime part.");

using (var ctx = CreateContext ()) {
encrypted = ApplicationPkcs7Mime.SignAndEncrypt (ctx, self, DigestAlgorithm.Sha1, recipients, cleartext);
encrypted = (ApplicationPkcs7Mime) message.Body;

Assert.AreEqual (SecureMimeType.EnvelopedData, encrypted.SecureMimeType, "S/MIME type did not match.");
}
Expand All @@ -326,7 +328,7 @@ public void TestSecureMimeSignAndEncrypt ()
Assert.IsInstanceOf<ApplicationPkcs7Signature> (signed[1], "Expected second part of the multipart/signed to be a pkcs7-signature.");

var extracted = (TextPart) signed[0];
Assert.AreEqual (cleartext.Text, extracted.Text, "The decrypted text part's text does not match the original.");
Assert.AreEqual (body.Text, extracted.Text, "The decrypted text part's text does not match the original.");

var signatures = signed.Verify (ctx);

Expand Down

0 comments on commit c8eb186

Please sign in to comment.