]> git.proxmox.com Git - pmg-api.git/blame - src/tests/test_greylist.pl
typo fixes all over the place
[pmg-api.git] / src / tests / test_greylist.pl
CommitLineData
a75bd17b
DM
1#!/usr/bin/perl
2
3use strict;
4use warnings;
7f0a6c36
DM
5use lib '..';
6
a75bd17b
DM
7use Socket;
8use IO::Socket::INET;
9use DBI;
10
11use PVE::SafeSyslog;
12
13use PMG::DBTools;
14use PMG::RuleDB;
15
16my $greylist_delay = 3*60;
17my $greylist_lifetime = 3600*24*2; #retry window
18my $greylist_awlifetime = 3600*24*36;
19
20initlog($0, 'mail');
21
7e293a63
TL
22my $testdb = 'Proxmox_testdb';
23my $testport = 10122;
24my $testpidfn = "greylist-test-$$.pid";
a75bd17b 25
7e293a63 26system ("perl -I.. ../bin/pmgpolicy -d $testdb -t --port $testport --pidfile '$testpidfn'");
a75bd17b 27
fbe17229
SI
28sub exit_test_pmgpolicy {
29 my $pid = PVE::Tools::file_read_firstline($testpidfn);
30 die "could not read pidfile: $!\n" if !$pid;
31
32 die "could not find pid in pidfile\n" if $pid !~ m/^(\d+)$/;
33 $pid = $1;
34
35 kill ('TERM', $pid);
36 unlink($testpidfn);
37}
38
a75bd17b 39sub reset_gldb {
7e293a63 40 my $dbh = PMG::DBTools::open_ruledb($testdb);
a75bd17b
DM
41 $dbh->do ("DELETE FROM CGreylist");
42 $dbh->disconnect();
43}
44
45reset_gldb();
46
47my $sock = IO::Socket::INET->new(
7e293a63
TL
48 PeerAddr => '127.0.0.1',
49 PeerPort => $testport) ||
a75bd17b
DM
50 die "unable to open socket - $!";
51
52$/ = "\n\n";
53
54my $testtime = 1;
55my $starttime = $testtime;
56
57my $icount = 0;
58
59sub gltest {
60 my ($data, $ttime, $eres) = @_;
7e293a63 61
a75bd17b
DM
62 $icount++;
63
64 print $sock "testtime=$ttime\ninstance=$icount\n$data\n";
65 $sock->flush;
66 my $res = <$sock>;
67 chomp $res;
e68a3b47
SI
68 if ($res !~ m/^action=$eres(\s.*)?/) {
69 my $timediff = $ttime - $starttime;
fbe17229 70 exit_test_pmgpolicy();
e68a3b47
SI
71 die "unexpected result at time $timediff: $res != $eres\n$data"
72 }
a75bd17b
DM
73}
74
75# a normal record
76
77my $data = <<_EOD;
78request=smtpd_access_policy
79protocol_state=RCPT
80protocol_name=SMTP
81client_address=1.2.3.4
82client_name=test.domain.tld
83helo_name=test.domain.tld
84sender=test1\@test.domain.tld
85recipient=test1\@proxmox.com
86_EOD
87
88# time 0
89reset_gldb ();
90gltest ($data, $testtime, 'defer');
91gltest ($data, $testtime+$greylist_delay-3, 'defer');
92gltest ($data, $testtime+$greylist_delay-1, 'defer');
93gltest ($data, $testtime+$greylist_lifetime-1, 'dunno');
94gltest ($data, $testtime+$greylist_lifetime-1+$greylist_awlifetime-1, 'dunno');
95gltest ($data, $testtime+$greylist_lifetime-1+$greylist_awlifetime-1+$greylist_awlifetime, 'defer');
96
97# time 0
98reset_gldb ();
99gltest ($data, $testtime, 'defer');
100gltest ($data, $testtime+$greylist_delay-3, 'defer');
101gltest ($data, $testtime+$greylist_delay-1, 'defer');
102gltest ($data, $testtime+$greylist_lifetime+1, 'defer');
103gltest ($data, $testtime+$greylist_lifetime+1+$greylist_delay-1, 'defer');
104gltest ($data, $testtime+$greylist_lifetime+1+$greylist_delay+1, 'dunno');
105gltest ($data, $testtime+$greylist_lifetime+1+$greylist_delay+1+$greylist_awlifetime-1, 'dunno');
106gltest ($data, $testtime+$greylist_lifetime+1+$greylist_delay+1+$greylist_awlifetime-1+$greylist_awlifetime, 'defer');
107
108# a record with sender = <> (bounce)
109
110$data = <<_EOD;
111request=smtpd_access_policy
112protocol_state=RCPT
113protocol_name=SMTP
114client_address=1.2.3.4
115client_name=test.domain.tld
116helo_name=test.domain.tld
117sender=
118recipient=test1\@proxmox.com
119_EOD
120
121# time 0
122reset_gldb ();
123
124gltest ($data, $testtime, 'defer');
125gltest ($data, $testtime+$greylist_delay-3, 'defer');
126gltest ($data, $testtime+$greylist_delay-1, 'defer');
127gltest ($data, $testtime+$greylist_lifetime-1, 'dunno');
128gltest ($data, $testtime+$greylist_lifetime+1, 'defer');
129
130# time 0
131reset_gldb ();
132
133gltest ($data, $testtime, 'defer');
134gltest ($data, $testtime+$greylist_delay-3, 'defer');
135gltest ($data, $testtime+$greylist_delay-1, 'defer');
136gltest ($data, $testtime+$greylist_lifetime+1, 'defer');
137gltest ($data, $testtime+$greylist_lifetime+1+$greylist_delay-1, 'defer');
138gltest ($data, $testtime+$greylist_lifetime+1+$greylist_delay+1, 'dunno');
139gltest ($data, $testtime+$greylist_lifetime+1+$greylist_delay+2, 'defer');
140
951a5ed9
SI
141# greylist ipv6
142my $data6 = <<_EOD;
143request=smtpd_access_policy
144protocol_state=RCPT
145protocol_name=SMTP
146client_address=2001:db8::1
147client_name=test.domain.tld
148helo_name=test.domain.tld
149sender=test1\@test.domain.tld
150recipient=test1\@proxmox.com
151_EOD
152
153# time 0
154reset_gldb ();
155gltest ($data6, $testtime, 'defer');
156gltest ($data6, $testtime+$greylist_delay-3, 'defer');
157gltest ($data6, $testtime+$greylist_delay-1, 'defer');
158gltest ($data6, $testtime+$greylist_lifetime-1, 'dunno');
159gltest ($data6, $testtime+$greylist_lifetime-1+$greylist_awlifetime-1, 'dunno');
160gltest ($data6, $testtime+$greylist_lifetime-1+$greylist_awlifetime-1+$greylist_awlifetime, 'defer');
161
162# time 0
163reset_gldb ();
164gltest ($data6, $testtime, 'defer');
165gltest ($data6, $testtime+$greylist_delay-3, 'defer');
166gltest ($data6, $testtime+$greylist_delay-1, 'defer');
167gltest ($data6, $testtime+$greylist_lifetime+1, 'defer');
168gltest ($data6, $testtime+$greylist_lifetime+1+$greylist_delay-1, 'defer');
169gltest ($data6, $testtime+$greylist_lifetime+1+$greylist_delay+1, 'dunno');
170gltest ($data6, $testtime+$greylist_lifetime+1+$greylist_delay+1+$greylist_awlifetime-1, 'dunno');
171gltest ($data6, $testtime+$greylist_lifetime+1+$greylist_delay+1+$greylist_awlifetime-1+$greylist_awlifetime, 'defer');
172
a75bd17b
DM
173
174my $testdomain = "interspar.at";
175my $testipok = "68.232.133.35";
176my $testipfail = "1.2.3.4";
177
178my $data_ok = <<_EOD;
179request=smtpd_access_policy
180protocol_state=RCPT
181protocol_name=SMTP
182client_address=$testipok
183helo_name=$testdomain
184sender=xyz\@$testdomain
185recipient=testspf\@maurer-it.com
186_EOD
187
188gltest ($data_ok, $testtime, 'prepend'); # helo pass
189
190$data_ok = <<_EOD;
191request=smtpd_access_policy
192protocol_state=RCPT
193protocol_name=SMTP
194client_address=$testipok
195helo_name=
196sender=xyz\@$testdomain
197recipient=testspf\@proxmox.com
198_EOD
199
200gltest ($data_ok, $testtime, 'prepend'); # mform pass
201
202$data_ok = <<_EOD;
203request=smtpd_access_policy
204protocol_state=RCPT
205protocol_name=SMTP
206client_address=88.198.105.243
207helo_name=
208sender=xyz\@$testdomain
209recipient=testspf\@maurer-it.com
210_EOD
211
1359baef 212# we currently hav no backup mx, so we can't test this
a75bd17b
DM
213#gltest ($data_ok, $testtime, 'dunno'); # mail from backup mx
214
215$testdomain = "openspf.org"; # rejects everything
216
217my $data_fail = <<_EOD;
218request=smtpd_access_policy
219protocol_state=RCPT
220protocol_name=SMTP
221client_address=$testipfail
222helo_name=$testdomain
223sender=xyz\@$testdomain
224recipient=testspf\@maurer-it.com
225_EOD
226
227gltest ($data_fail, $testtime, 'reject');
228
fbe17229 229exit_test_pmgpolicy();
a75bd17b
DM
230
231print "ALL TESTS OK\n";
232
7e293a63 233$sock->close();
b1060628 234
a75bd17b 235exit (0);