Skip to content
Snippets Groups Projects
Commit eed8e51d authored by Stephan Bosch's avatar Stephan Bosch
Browse files

test suite: mime extension: Improved header test cases to catch header...

test suite: mime extension: Improved header test cases to catch header trimming and folding problems.
parent aecb32fe
No related branches found
No related tags found
No related merge requests found
require "vnd.dovecot.testsuite"; require "vnd.dovecot.testsuite";
require "variables"; require "variables";
require "foreverypart";
require "mime"; require "mime";
/* /*
...@@ -69,6 +70,63 @@ test "Basic functionality" { ...@@ -69,6 +70,63 @@ test "Basic functionality" {
} }
} }
/*
* Basic functionality - foreverypart
*/
test "Basic functionality - foreverypart" {
foreverypart {
/* Must match */
if not header :mime :anychild :contains ["Subject", "Comments"] "Frobnitzm" {
test_fail "failed to match header (1)";
}
if not header :mime :anychild :contains ["Subject", "Comments"] "nonsense" {
test_fail "failed to match header(2)";
}
if not header :mime :anychild :matches "Keywords" "*, strange, *" {
test_fail "failed to match header (3)";
}
if not header :mime :anychild :is "Comments" "This is nonsense." {
test_fail "failed to match header (4)";
}
/* Must not match */
if header :mime :anychild ["subject", "comments", "keywords"] "idiotic" {
test_fail "matched nonsense";
}
/* Match first key */
if not header :mime :anychild :contains ["keywords"] ["strange", "snot", "vreemd"] {
test_fail "failed to match first key";
}
/* Match second key */
if not header :mime :anychild :contains ["keywords"] ["raar", "strange", "vreemd"] {
test_fail "failed to match second key";
}
/* Match last key */
if not header :mime :anychild :contains ["keywords"] ["raar", "snot", "strange"] {
test_fail "failed to match last key";
}
/* First header */
if not header :mime :anychild :contains ["keywords", "subject"]
["raar", "strange", "vreemd"] {
test_fail "failed to match first header";
}
/* Second header */
if not header :mime :anychild :contains ["subject", "keywords"]
["raar", "strange", "vreemd"] {
test_fail "failed to match second header";
}
}
}
/* /*
* Matching empty key * Matching empty key
*/ */
...@@ -102,6 +160,30 @@ test "Matching empty key" { ...@@ -102,6 +160,30 @@ test "Matching empty key" {
} }
} }
/*
* Matching empty key - foreverypart
*/
test "Matching empty key - foreverypart" {
foreverypart {
if header :mime :anychild :is "X-Caffeine" "" {
test_fail ":is-matched non-empty header with empty string";
}
if not header :mime :anychild :contains "X-Caffeine" "" {
test_fail "failed to match existing header with empty string";
}
if not header :mime :anychild :is "comments" "" {
test_fail "failed to match empty header :mime :anychild with empty string";
}
if header :mime :anychild :contains "X-Nonsense" "" {
test_fail ":contains-matched non-existent header with empty string";
}
}
}
/* /*
* Ignoring whitespace * Ignoring whitespace
*/ */
...@@ -140,6 +222,35 @@ test "Ignoring whitespace" { ...@@ -140,6 +222,35 @@ test "Ignoring whitespace" {
} }
} }
/*
* Ignoring whitespace - foreverypart
*/
test "Ignoring whitespace - foreverypart" {
foreverypart {
if not header :mime :anychild :is "x-a" "Text" {
if header :mime :anychild :matches "x-a" "*" {
set "header" "${1}";
}
test_fail "header :mime :anychild test does not strip leading whitespace (header=`${header}`)";
}
if not header :mime :anychild :is "x-b" "Text" {
if header :mime :anychild :matches "x-b" "*" {
set "header" "${1}";
}
test_fail "header :mime :anychild test does not strip trailing whitespace (header=`${header}`)";
}
if not header :mime :anychild :is "subject" "Help" {
if header :mime :anychild :matches "subject" "*" {
set "header" "${1}";
}
test_fail "header :mime :anychild test does not strip both leading and trailing whitespace (header=`${header}`)";
}
}
}
/* /*
* Absent or empty header * Absent or empty header
*/ */
...@@ -169,6 +280,27 @@ test "Absent or empty header" { ...@@ -169,6 +280,27 @@ test "Absent or empty header" {
} }
} }
/*
* Absent or empty header - foreverypart
*/
test "Absent or empty header - foreverypart" {
foreverypart {
if not header :mime :anychild :matches "Cc" "?*" {
test_fail "CC header is not absent or empty";
}
if header :mime :anychild :matches "Subject" "?*" {
test_fail "Subject header is empty, but matched otherwise";
}
if header :mime :anychild :matches "Comment" "?*" {
test_fail "Comment header is empty, but matched otherwise";
}
}
}
/* /*
* Invalid header name * Invalid header name
*/ */
...@@ -196,12 +328,23 @@ test "Invalid header name" { ...@@ -196,12 +328,23 @@ test "Invalid header name" {
} }
/* /*
* Folded headers * Invalid header name - foreverypart
*/ */
/* "Header lines are unfolded as described in [RFC 2822] section 2.2.3. test "Invalid header name - foreverypart" {
* ... foreverypart {
* " if header :mime :anychild :contains "subject:" "" {
test_fail "matched invalid header name";
}
if header :mime :anychild :contains "to!" "" {
test_fail "matched invalid header name";
}
}
}
/*
* Folded headers
*/ */
test_set "message" text: test_set "message" text:
...@@ -216,9 +359,24 @@ Text ...@@ -216,9 +359,24 @@ Text
. .
; ;
test "Folded header" { test "Folded headers" {
if not header :mime :anychild :is "x-multiline" if not header :mime :anychild :is "x-multiline"
"This is a multi-line header body, which should be unfolded correctly." { "This is a multi-line header body, which should be unfolded correctly." {
test_fail "failed to properly unfold folded header."; test_fail "failed to properly unfold folded header.";
} }
} }
/*
* Folded headers - foreverypart
*/
test "Folded headers - foreverypart" {
foreverypart {
if not header :mime :anychild :is "x-multiline"
"This is a multi-line header body, which should be unfolded correctly." {
test_fail "failed to properly unfold folded header.";
}
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment

Consent

On this website, we use the web analytics service Matomo to analyze and review the use of our website. Through the collected statistics, we can improve our offerings and make them more appealing for you. Here, you can decide whether to allow us to process your data and set corresponding cookies for these purposes, in addition to technically necessary cookies. Further information on data protection—especially regarding "cookies" and "Matomo"—can be found in our privacy policy. You can withdraw your consent at any time.