1# vi:filetype=
2
3use lib 'lib';
4use Test::Nginx::Socket;
5
6repeat_each(2);
7
8plan tests => repeat_each() * (2 * blocks() + 1);
9
10#$Test::Nginx::LWP::LogLevel = 'debug';
11
12run_tests();
13
14__DATA__
15
16=== TEST 1: exec normal location
17--- config
18    location /main {
19        echo_exec /bar;
20        echo end;
21    }
22    location = /bar {
23        echo "$echo_request_uri:";
24        echo bar;
25    }
26--- request
27    GET /main
28--- response_body
29/bar:
30bar
31
32
33
34=== TEST 2: location with args (inlined in uri)
35--- config
36    location /main {
37        echo_exec /bar?a=32;
38        echo end;
39    }
40    location /bar {
41        echo "a: [$arg_a]";
42    }
43--- request
44    GET /main
45--- response_body
46a: [32]
47
48
49
50=== TEST 3: location with args (in separate arg)
51--- config
52    location /main {
53        echo_exec /bar a=56;
54        echo end;
55    }
56    location /bar {
57        echo "a: [$arg_a]";
58    }
59--- request
60    GET /main
61--- response_body
62a: [56]
63
64
65
66=== TEST 4: exec named location
67--- config
68    location /main {
69        echo_exec @bar;
70        echo end;
71    }
72    location @bar {
73        echo bar;
74    }
75--- request
76    GET /main
77--- response_body
78bar
79
80
81
82=== TEST 5: query string ignored for named locations
83--- config
84    location /main {
85        echo_exec @bar?a=32;
86        echo end;
87    }
88    location @bar {
89        echo "a: [$arg_a]";
90    }
91--- request
92    GET /main
93--- response_body
94a: []
95--- error_log
96querystring a=32 ignored when exec'ing named location @bar
97
98
99
100=== TEST 6: query string ignored for named locations
101--- config
102  location /foo {
103      echo_exec @bar;
104  }
105  location @bar {
106      echo "uri: [$echo_request_uri]";
107  }
108--- request
109    GET /foo
110--- response_body
111uri: [/foo]
112
113
114
115=== TEST 7: exec(named location) in subrequests
116--- config
117    location /entry {
118        echo_location /foo;
119        echo_sleep 0.001;
120        echo_location /foo2;
121    }
122  location /foo {
123      echo_exec @bar;
124  }
125  location /foo2 {
126      echo_exec @bar;
127  }
128
129  location @bar {
130    proxy_pass http://127.0.0.1:$server_port/bar;
131  }
132  location /bar {
133    echo_sleep 0.01;
134    echo hello;
135  }
136--- request
137    GET /entry
138--- response_body
139hello
140hello
141
142
143
144=== TEST 8: exec(normal loctions) in subrequests
145--- config
146    location /entry {
147        echo_location /foo;
148        echo_sleep 0.001;
149        echo_location /foo2;
150    }
151  location /foo {
152      echo_exec /baz;
153  }
154  location /foo2 {
155      echo_exec /baz;
156  }
157
158  location /baz {
159    proxy_pass http://127.0.0.1:$server_port/bar;
160  }
161  location /bar {
162    echo_sleep 0.01;
163    echo hello;
164  }
165--- request
166    GET /entry
167--- response_body
168hello
169hello
170
171
172
173=== TEST 9: exec should clear ctx
174--- config
175    location @bar {
176        echo hello;
177        echo world;
178        echo heh;
179    }
180  location /foo {
181      #echo_sleep 0.001;
182      echo_reset_timer;
183      echo_exec @bar;
184  }
185--- request
186    GET /foo
187--- response_body
188hello
189world
190heh
191
192
193
194=== TEST 10: reset ctx
195--- config
196    location @proxy {
197        rewrite_by_lua return;
198        echo hello;
199    }
200    location /main {
201        rewrite_by_lua return;
202        echo_exec @proxy;
203    }
204--- request
205    GET /main
206--- response_body
207hello
208
209
210
211=== TEST 11: yield before exec
212--- config
213    location @bar {
214        echo hello;
215        echo world;
216        echo heh;
217    }
218  location /foo {
219      echo_sleep 0.001;
220      echo_exec @bar;
221  }
222--- request
223    GET /foo
224--- response_body
225hello
226world
227heh
228
229