annotate proxy_cookie.t @ 289:cbd4f6eca676

Tests: check if started process is alive while starting nginx. This allows faster test execution in case of startup failures, e.g. due to configuration errors. Note that just adding waitpid() to waitforfile() causes hang on win32 in wait(). To fix this, wait() calls were changed to waitpid() with pid specified.
author Maxim Dounin <mdounin@mdounin.ru>
date Mon, 27 May 2013 17:15:17 +0400
parents 0ca8725e5958
children c28ecaef065f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
200
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
1 #!/usr/bin/perl
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
2
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
3 # (C) Maxim Dounin
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
4 # (C) Valentin Bartenev
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
5
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
6 # Tests for the proxy_cookie_domain and proxy_cookie_path directives.
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
7
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
8 ###############################################################################
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
9
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
10 use warnings;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
11 use strict;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
12
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
13 use Test::More;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
14
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
15 BEGIN { use FindBin; chdir($FindBin::Bin); }
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
16
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
17 use lib 'lib';
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
18 use Test::Nginx;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
19
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
20 ###############################################################################
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
21
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
22 select STDERR; $| = 1;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
23 select STDOUT; $| = 1;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
24
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
25 my $t = Test::Nginx->new()->has(qw/http proxy rewrite/);
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
26
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
27 $t->write_file_expand('nginx.conf', <<'EOF');
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
28
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
29 %%TEST_GLOBALS%%
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
30
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
31 daemon off;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
32
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
33 events {
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
34 }
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
35
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
36 http {
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
37 %%TEST_GLOBALS_HTTP%%
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
38
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
39 server {
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
40 listen 127.0.0.1:8080;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
41 server_name localhost;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
42
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
43 location / {
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
44 proxy_pass http://127.0.0.1:8081;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
45
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
46 proxy_cookie_domain www.example.org .example.com;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
47 proxy_cookie_domain .$server_name.com en.$server_name.org;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
48 proxy_cookie_domain ~^(.+)\.com$ $1.org;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
49
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
50 proxy_cookie_path /path/ /new/;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
51 proxy_cookie_path /$server_name/ /new/$server_name/;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
52 proxy_cookie_path ~^/regex/(.+)$ /$1;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
53 proxy_cookie_path ~*^/caseless/(.+)$ /$1;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
54 }
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
55 }
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
56
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
57 server {
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
58 listen 127.0.0.1:8081;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
59 server_name localhost;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
60
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
61 location / {
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
62 if ($arg_domain) {
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
63 set $sc_domain "; Domain=$arg_domain";
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
64 }
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
65 if ($arg_path) {
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
66 set $sc_path "; Path=$arg_path";
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
67 }
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
68 add_header Set-Cookie v=path=domain=$sc_domain$sc_path;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
69 return 200 OK;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
70 }
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
71 }
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
72 }
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
73
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
74 EOF
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
75
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
76 eval {
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
77 open OLDERR, ">&", \*STDERR; close STDERR;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
78 $t->run();
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
79 open STDERR, ">&", \*OLDERR;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
80 };
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
81 plan(skip_all => 'no proxy_cookie') if $@;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
82
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
83 $t->plan(8);
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
84
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
85 ###############################################################################
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
86
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
87 is(http_get_set_cookie('/?domain=www.Example.org'),
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
88 'v=path=domain=; Domain=example.com', 'domain rewrite');
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
89 is(http_get_set_cookie('/?domain=.LocalHost.com'),
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
90 'v=path=domain=; Domain=.en.localhost.org',
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
91 'domain rewrite with vars');
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
92 is(http_get_set_cookie('/?domain=www.example.COM'),
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
93 'v=path=domain=; Domain=www.example.org', 'domain regex rewrite');
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
94
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
95 is(http_get_set_cookie('/?path=/path/test.html'),
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
96 'v=path=domain=; Path=/new/test.html', 'path rewrite');
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
97 is(http_get_set_cookie('/?path=/localhost/test.html'),
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
98 'v=path=domain=; Path=/new/localhost/test.html',
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
99 'path rewrite with vars');
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
100 is(http_get_set_cookie('/?path=/regex/test.html'),
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
101 'v=path=domain=; Path=/test.html', 'path regex rewrite');
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
102 is(http_get_set_cookie('/?path=/CASEless/test.html'),
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
103 'v=path=domain=; Path=/test.html', 'path caseless regex rewrite');
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
104
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
105 is(http_get_set_cookie('/?domain=www.example.org&path=/path/test.html'),
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
106 'v=path=domain=; Domain=example.com; Path=/new/test.html',
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
107 'domain and path rewrite');
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
108
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
109 ###############################################################################
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
110
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
111 sub http_get_set_cookie {
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
112 my ($uri) = @_;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
113 http_get("http://127.0.0.1:8080$uri") =~ /^Set-Cookie:\s(.+?)\x0d?$/mi;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
114 return $1;
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
115 }
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
116
0ca8725e5958 Tests: proxy_cookie_domain and proxy_cookie_path tests.
Valentin Bartenev <ne@vbart.ru>
parents:
diff changeset
117 ###############################################################################