--- a/t/00-basic.t Sat Jun 04 22:08:13 2016 +0200
+++ b/t/00-basic.t Sat Jun 04 23:05:29 2016 +0200
@@ -6,19 +6,33 @@
use_ok 'Exim::Grey' => qw(unseen seen) or BAIL_OUT;
-my $db = File::Temp->new();
+subtest 'simple' => sub {
+ my $db = File::Temp->new();
+ is seen('a->x', 0, "$db"), 'no' => 'not seen a->x';
+ is unseen('a->b', 0, "$db"), 'yes' => 'unseen a->b';
+ is unseen('a->b', 600, "$db"), 'yes' => 'unseen a->b with 600s delay';
+ is unseen('a->b', 0, "$db"), 'no' => 'not unseen a->b';
+ is seen('a->b', 600, "$db"), 'no' => 'not seen a->b with 600s delay';
+};
-is seen('a->x', 1, "$db"), 'no' => 'not seen a->x';
-is unseen('a->b', 1, "$db"), 'yes' => 'unseen a->b';
-is unseen('a->b', 1, "$db"), 'yes' => 'unseen a->b';
+subtest 'whitelist' => sub {
+ my $db = File::Temp->new();
+ is unseen('x->y/1.1.1.1', 1, "$db"), 'yes' => 'unseen x->y/1.1.1.1';
+ is unseen('x->y/1.1.1.1', 1, "$db"), 'yes' => 'unseen x->y/1.1.1.1';
-is unseen('x->y/1.1.1.1', 1, "$db"), 'yes' => 'unseen x->y/1.1.1.1';
-is unseen('x->y/1.1.1.1', 1, "$db"), 'yes' => 'unseen x->y/1.1.1.1';
+ is unseen('x->y/1.1.1.1', 0, "$db"), 'no' => 'not unseen x->y/1.1.1.1';
+ is unseen('x->z/1.1.1.1', 0, "$db"), 'no' => 'not unseen x->z/1.1.1.1';
+ is seen('x->z/1.1.1.1', 0, "$db"), 'yes' => 'seen x->z/1.1.1.1';
+
+};
-is unseen('a->b', 0, "$db"), 'no' => 'not unseen a->b';
-is unseen('x->y/1.1.1.1', 0, "$db"), 'no' => 'not unseen x->y/1.1.1.1';
-is unseen('x->z/1.1.1.1', 0, "$db"), 'no' => 'not unseen x->z/1.1.1.1';
-is seen('x->z/1.1.1.1', 0, "$db"), 'yes' => 'seen x->z/1.1.1.1';
+subtest 'whitelist multiple subkeys' => sub {
+ my $db = File::Temp->new();
-is unseen('a->b', 600, "$db"), 'yes' => 'unseen a->b with 600s delay';
-is seen('a->b', 600, "$db"), 'no' => 'not seen a->b with 600s delay';
+ is unseen('x->y/1.1.1.1', 0, "$db"), 'yes' => 'unseen x->y/1.1.1.1';
+ is unseen('x->y/2.2.2.2', 0, "$db"), 'no' => 'not unseen x->y/2.2.2.2';
+
+ is unseen('a->b/1.1.1.1', 0, "$db"), 'no' => 'not unseen (whitelisted source)';
+ is unseen('a->c/2.2.2.2', 0, "$db"), 'no' => 'not unseen (whitelisted source)';
+ is unseen('x->y/3.3.3.3', 0, "$db"), 'no' => 'not unseen x->y/3.3.3.3 (known key)';
+};