commit bcbeb98b32118d1c36cb465fa67b5eb153c127ff
parent 8ac0c1ad0e34eeb47d021e61f37dadd2e75656fd
Author: Iain Parris <ipv2.vcs@parris.org>
Date: Wed, 15 Jul 2020 20:19:20 +0100
tests: add a case for an embedded message
Diffstat:
2 files changed, 67 insertions(+), 0 deletions(-)
diff --git a/test/fixtures/embedded-message.eml b/test/fixtures/embedded-message.eml
@@ -0,0 +1,34 @@
+Return-Path: <return@example.com>
+From: Sender <sender@example.com>
+To: <recipient@example.invalid>
+Subject: Email with embedded message
+MIME-Version: 1.0
+Content-Type: multipart/mixed; boundary="----------=_4F506AC2.EE281DC4"
+Message-Id: <9181f493-df49-4af5-8ad2-e1a8eb692a98>
+Date: Wed, 15 Jul 2020 19:48:41 +0100
+
+This is a multi-part message in MIME format.
+
+------------=_4F506AC2.EE281DC4
+Content-Type: text/plain; charset=iso-8859-1
+Content-Disposition: inline
+Content-Transfer-Encoding: 8bit
+
+Example outer message.
+Example second line.
+
+
+------------=_4F506AC2.EE281DC4
+Content-Type: message/rfc822; x-spam-type=original
+Content-Transfer-Encoding: 8bit
+
+From: "Embed sender" <embed@example.com>
+To: <rcpt2@example.invalid>
+Subject: Embedded subject line
+Date: Wed, 15 Jul 2020 12:34:56 +0000
+
+Example embedded message.
+Second line.
+
+------------=_4F506AC2.EE281DC4--
+
diff --git a/test/test_message.rb b/test/test_message.rb
@@ -271,6 +271,39 @@ class TestMessage < Minitest::Test
assert_equal("This is a spam.", chunks[2].lines[0])
end
+ def test_embedded_message
+ source = DummySource.new("sup-test://test_embedded_message")
+ source.messages = [ fixture_path("embedded-message.eml") ]
+ source_info = 0
+
+ sup_message = Message.build_from_source(source, source_info)
+
+ chunks = sup_message.load_from_source!
+ assert_equal(3, chunks.length)
+
+ assert_equal("sender@example.com", sup_message.from.email)
+ assert_equal("Sender", sup_message.from.name)
+ assert_equal(1, sup_message.to.length)
+ assert_equal("recipient@example.invalid", sup_message.to[0].email)
+ assert_equal("recipient", sup_message.to[0].name)
+ assert_equal("Email with embedded message", sup_message.subj)
+
+ assert(chunks[0].is_a? Redwood::Chunk::Text)
+ assert_equal("Example outer message.", chunks[0].lines[0])
+ assert_equal("Example second line.", chunks[0].lines[1])
+
+ assert(chunks[1].is_a? Redwood::Chunk::EnclosedMessage)
+ assert_equal(4, chunks[1].lines.length)
+ assert_equal("From: Embed sender <embed@example.com>", chunks[1].lines[0])
+ assert_equal("To: rcpt2 <rcpt2@example.invalid>", chunks[1].lines[1])
+ assert_equal("Subject: Embedded subject line", chunks[1].lines[3])
+
+ assert(chunks[2].is_a? Redwood::Chunk::Text)
+ assert_equal(2, chunks[2].lines.length)
+ assert_equal("Example embedded message.", chunks[2].lines[0])
+ assert_equal("Second line.", chunks[2].lines[1])
+ end
+
def test_malicious_attachment_names
source = DummySource.new("sup-test://test_blank_header_lines")
source.messages = [ fixture_path('malicious-attachment-names.eml') ]