From 165539607f595ce7200265dad98cc8925b6c227d Mon Sep 17 00:00:00 2001 From: Stephan Bosch <stephan@rename-it.nl> Date: Sun, 17 Aug 2008 23:37:10 +0200 Subject: [PATCH] Testsuite: restructured and extended tests for the relational extension. --- Makefile.am | 6 +- sieve/examples/relational.rfc5231.sieve | 33 +++++++++ ...ompile-examples.svtest => examples.svtest} | 6 ++ .../relational/basic.svtest} | 0 tests/extensions/relational/errors.svtest | 15 ++++ .../relational/errors/validation.sieve | 11 +++ tests/extensions/relational/rfc.svtest | 71 +++++++++++++++++++ 7 files changed, 140 insertions(+), 2 deletions(-) create mode 100644 sieve/examples/relational.rfc5231.sieve rename tests/compile/{compile-examples.svtest => examples.svtest} (86%) rename tests/{match-types/relational.svtest => extensions/relational/basic.svtest} (100%) create mode 100644 tests/extensions/relational/errors.svtest create mode 100644 tests/extensions/relational/errors/validation.sieve create mode 100644 tests/extensions/relational/rfc.svtest diff --git a/Makefile.am b/Makefile.am index 0582d8aad..b953e43ce 100644 --- a/Makefile.am +++ b/Makefile.am @@ -26,7 +26,6 @@ test_cases = \ tests/match-types/is.svtest \ tests/match-types/contains.svtest \ tests/match-types/matches.svtest \ - tests/match-types/relational.svtest \ tests/address-parts/subaddress.svtest \ tests/extensions/encoded-character.svtest \ tests/extensions/envelope.svtest \ @@ -45,8 +44,11 @@ test_cases = \ tests/extensions/body/match-values.svtest \ tests/extensions/regex/basic.svtest \ tests/extensions/regex/errors.svtest \ + tests/extensions/relational/basic.svtest \ + tests/extensions/relational/rfc.svtest \ + tests/extensions/relational/errors.svtest \ tests/compile/compile.svtest \ - tests/compile/compile-examples.svtest \ + tests/compile/examples.svtest \ tests/compile/errors.svtest $(test_cases): diff --git a/sieve/examples/relational.rfc5231.sieve b/sieve/examples/relational.rfc5231.sieve new file mode 100644 index 000000000..81c66d379 --- /dev/null +++ b/sieve/examples/relational.rfc5231.sieve @@ -0,0 +1,33 @@ +require ["relational", "comparator-i;ascii-numeric", "fileinto"]; + +if header :value "lt" :comparator "i;ascii-numeric" + ["x-priority"] ["3"] +{ + fileinto "Priority"; +} + +elsif address :count "gt" :comparator "i;ascii-numeric" + ["to"] ["5"] +{ + # everything with more than 5 recipients in the "to" field + # is considered SPAM + fileinto "SPAM"; +} + +elsif address :value "gt" :all :comparator "i;ascii-casemap" + ["from"] ["M"] +{ + fileinto "From N-Z"; +} else { + fileinto "From A-M"; +} + +if allof ( + address :count "eq" :comparator "i;ascii-numeric" + ["to", "cc"] ["1"] , + address :all :comparator "i;ascii-casemap" + ["to", "cc"] ["me@foo.example.com"] ) +{ + fileinto "Only me"; +} + diff --git a/tests/compile/compile-examples.svtest b/tests/compile/examples.svtest similarity index 86% rename from tests/compile/compile-examples.svtest rename to tests/compile/examples.svtest index b8ad19780..21d0742a8 100644 --- a/tests/compile/compile-examples.svtest +++ b/tests/compile/examples.svtest @@ -49,3 +49,9 @@ test "Sanjay example" { test_fail "could not compile"; } } + +test "Relational extension (RFC5231) example" { + if not test_compile "../../sieve/examples/relational.rfc5231.sieve" { + test_fail "could not compile"; + } +} diff --git a/tests/match-types/relational.svtest b/tests/extensions/relational/basic.svtest similarity index 100% rename from tests/match-types/relational.svtest rename to tests/extensions/relational/basic.svtest diff --git a/tests/extensions/relational/errors.svtest b/tests/extensions/relational/errors.svtest new file mode 100644 index 000000000..ed9f268ec --- /dev/null +++ b/tests/extensions/relational/errors.svtest @@ -0,0 +1,15 @@ +require "vnd.dovecot.testsuite"; + +# A bit awkward to test the extension with itself +require "relational"; +require "comparator-i;ascii-numeric"; + +test "Validation errors" { + if test_compile "errors/validation.sieve" { + test_fail "compile should have failed"; + } + + if test_error :count "ne" "3" { + test_fail "wrong number of errors reported"; + } +} diff --git a/tests/extensions/relational/errors/validation.sieve b/tests/extensions/relational/errors/validation.sieve new file mode 100644 index 000000000..e632a46f7 --- /dev/null +++ b/tests/extensions/relational/errors/validation.sieve @@ -0,0 +1,11 @@ +require "relational"; + +# Not a valid relation (1) +if header :value "gr" "from" "ah" { + keep; +} + +# Not a valid relation (1) +if header :count "lf" "from" "eek" { + keep; +} diff --git a/tests/extensions/relational/rfc.svtest b/tests/extensions/relational/rfc.svtest new file mode 100644 index 000000000..f09293193 --- /dev/null +++ b/tests/extensions/relational/rfc.svtest @@ -0,0 +1,71 @@ +require "vnd.dovecot.testsuite"; + +require "relational"; +require "comparator-i;ascii-numeric"; + +test_set "message" text: +Received: ... +Received: ... +Subject: example +To: foo@example.com, baz@example.com +CC: qux@example.com + +RFC Example +. +; + +test "Example 1" { + # The test: + + if not address :count "ge" :comparator "i;ascii-numeric" + ["to", "cc"] ["3"] { + + test_fail "should have counted three addresses"; + } + + # would evaluate to true, and the test + + if anyof ( + address :count "ge" :comparator "i;ascii-numeric" + ["to"] ["3"], + address :count "ge" :comparator "i;ascii-numeric" + ["cc"] ["3"] + ) { + + test_fail "should not have counted three addresses"; + } + + # would evaluate to false. + + # To check the number of received fields in the header, the following + # test may be used: + + if header :count "ge" :comparator "i;ascii-numeric" + ["received"] ["3"] { + + test_fail "should not have counted three received headers"; + } + + # This would evaluate to false. But + + if not header :count "ge" :comparator "i;ascii-numeric" + ["received", "subject"] ["3"] { + + test_fail "should have counted three headers"; + } + + # would evaluate to true. + + # The test: + + if header :count "ge" :comparator "i;ascii-numeric" + ["to", "cc"] ["3"] { + + test_fail "should not have counted three to or cc headers"; + } + + # will always evaluate to false on an RFC 2822 compliant message + # [RFC2822], since a message can have at most one "to" field and at + # most one "cc" field. This test counts the number of fields, not the + # number of addresses. +} -- GitLab