annotate mail_proxy_timeout.t @ 1982:fb25cbe9d4ec

Tests: explicit Valgrind support. Valgrind logging is done to a separate file, as it is not able to follow stderr redirection within nginx or append to a file without corrupting it. Further, Valgrind logging seems to interfere with error suppression in tests, and catches various startup errors and warnings, so the log is additionally filtered. Since startup under Valgrind can be really slow, timeout in waitforfile() was changed to 10 seconds. Prodded by Robert Mueller.
author Maxim Dounin <mdounin@mdounin.ru>
date Fri, 31 May 2024 06:23:00 +0300
parents 79753dd514e6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1978
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
1 #!/usr/bin/perl
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
2
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
3 # (C) Maxim Dounin
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
4
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
5 # Tests for nginx mail module, timeout and proxy_timeout directives.
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
6
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
7 ###############################################################################
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
8
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
9 use warnings;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
10 use strict;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
11
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
12 use Test::More;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
13
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
14 BEGIN { use FindBin; chdir($FindBin::Bin); }
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
15
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
16 use lib 'lib';
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
17 use Test::Nginx;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
18 use Test::Nginx::IMAP;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
19
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
20 ###############################################################################
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
21
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
22 select STDERR; $| = 1;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
23 select STDOUT; $| = 1;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
24
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
25 local $SIG{PIPE} = 'IGNORE';
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
26
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
27 my $t = Test::Nginx->new()->has(qw/mail imap http map rewrite/)
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
28 ->write_file_expand('nginx.conf', <<'EOF');
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
29
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
30 %%TEST_GLOBALS%%
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
31
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
32 daemon off;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
33
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
34 events {
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
35 }
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
36
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
37 mail {
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
38 proxy_pass_error_message on;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
39 timeout 2s;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
40 proxy_timeout 2s;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
41 auth_http http://127.0.0.1:8080/mail/auth;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
42
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
43 server {
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
44 listen 127.0.0.1:8143;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
45 protocol imap;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
46 imap_auth plain cram-md5 external;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
47 }
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
48 }
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
49
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
50 http {
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
51 %%TEST_GLOBALS_HTTP%%
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
52
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
53 map $http_auth_pass $reply {
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
54 secret OK;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
55 default ERROR;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
56 }
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
57
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
58 server {
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
59 listen 127.0.0.1:8080;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
60 server_name localhost;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
61
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
62 location = /mail/auth {
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
63 add_header Auth-Status $reply;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
64 add_header Auth-Server 127.0.0.1;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
65 add_header Auth-Port %%PORT_8144%%;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
66 add_header Auth-Pass "";
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
67 add_header Auth-Wait 1;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
68 return 204;
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
69 }
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
70 }
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
71 }
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
72
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
73 EOF
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
74
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
75 $t->run_daemon(\&Test::Nginx::IMAP::imap_test_daemon);
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
76 $t->run()->plan(8);
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
77
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
78 $t->waitforsocket('127.0.0.1:' . port(8144));
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
79
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
80 ###############################################################################
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
81
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
82 # check proxy timeout
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
83
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
84 my $s = Test::Nginx::IMAP->new();
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
85 $s->read();
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
86
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
87 # Each of these will wait 1 second before response
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
88
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
89 $s->send('a01 LOGIN test@example.com bad');
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
90 $s->check(qr/^a01 NO/, 'login with bad password');
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
91
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
92 $s->send('a01 LOGIN test@example.com bad');
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
93 $s->check(qr/^a01 NO/, 'login with bad password');
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
94
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
95 sleep(1);
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
96
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
97 # Total timeout is 2 seconds, so connection should have been closed
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
98
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
99 my @ready = $s->can_read(0);
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
100 is(scalar @ready, 1, "ready for reading");
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
101 ok($s->eof(), "session closed");
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
102
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
103
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
104 $s = Test::Nginx::IMAP->new();
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
105 $s->read();
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
106
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
107 $s->send('a01 LOGIN test@example.com secret');
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
108 $s->ok('login');
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
109
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
110 @ready = $s->can_read(0.1);
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
111 is(scalar @ready, 0, "nothing to read after login");
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
112
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
113 sleep(3);
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
114
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
115 # Total timeout is 2 seconds, so connection should have been closed
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
116
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
117 @ready = $s->can_read(0);
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
118 is(scalar @ready, 1, "ready for reading");
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
119 ok($s->eof(), "session closed");
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
120
79753dd514e6 Tests: added test for mail proxy timeout.
Rob Mueller <robm@fastmailteam.com>
parents:
diff changeset
121 ###############################################################################