1# vi:filetype=
2
3use lib 'lib';
4use Test::Nginx::Socket;
5
6repeat_each(3);
7
8plan tests => repeat_each() * 2 * blocks();
9
10$ENV{TEST_NGINX_MEMCACHED_PORT} ||= 11211;
11
12#no_diff;
13no_shuffle();
14no_long_string();
15
16run_tests();
17
18__DATA__
19
20=== TEST 1: set only
21--- http_config
22   upstream mc {
23        server 127.0.0.1:$TEST_NGINX_MEMCACHED_PORT;
24   }
25
26--- config
27   location = "/set" {
28       set $memc_cmd 'set';
29       set $memc_key 'jalla';
30       set $memc_value 'myvalue';
31       set $memc_exptime 24;
32       memc_pass mc;
33   }
34
35
36   location = "/get" {
37       set $memc_cmd 'get';
38       set $memc_key 'jalla';
39       memc_pass mc;
40   }
41
42   location = "/delete" {
43       set $memc_cmd 'delete';
44       set $memc_key 'jalla';
45       memc_pass mc;
46   }
47   location = "/flush" {
48       echo_location /get;
49       #echo "";
50       echo_location /delete;
51   }
52--- request
53    GET /flush
54--- response_body eval
55"STORED\r\n"
56--- error_code: 201
57--- SKIP
58
59
60
61=== TEST 2: set in a subrequest issued from an output filter
62--- config
63    location /memc {
64        set $memc_cmd 'set';
65        set $memc_key 'foo';
66        set $memc_value 'blah';
67        memc_pass 127.0.0.1:$TEST_NGINX_MEMCACHED_PORT;
68    }
69    location /main {
70        default_type 'text/html';
71        add_before_body '/memc';
72        echo '~~';
73        add_after_body '/memc';
74    }
75--- request
76GET /main
77--- response_body eval
78"STORED\r
79~~
80STORED\r
81"
82
83
84
85=== TEST 3: reuse request body
86--- config
87    location /main {
88        echo_read_request_body;
89
90        echo 'flush_all';
91        echo_location '/memc?cmd=flush_all';
92
93        echo 'set foo';
94        echo_subrequest POST '/memc?key=foo&cmd=set';
95
96        echo 'set bar';
97        echo_subrequest POST '/memc?key=bar&cmd=set';
98
99        echo 'get bar';
100        echo_location '/memc?key=bar&cmd=get';
101
102        echo 'get foo';
103        echo_location '/memc?key=foo&cmd=get';
104    }
105    location /memc {
106        echo_before_body "status: $echo_response_status";
107        echo_before_body "exptime: $memc_exptime";
108
109        set $memc_cmd $arg_cmd;
110        set $memc_key $arg_key;
111        #set $memc_value $arg_val;
112        set $memc_exptime $arg_exptime;
113
114        memc_pass 127.0.0.1:$TEST_NGINX_MEMCACHED_PORT;
115    }
116--- request
117POST /main
118Hello
119--- response_body eval
120"flush_all
121status: 200
122exptime:
123OK\r
124set foo
125status: 201
126exptime: 0
127STORED\r
128set bar
129status: 201
130exptime: 0
131STORED\r
132get bar
133status: 200
134exptime:
135Helloget foo
136status: 200
137exptime:
138Hello"
139
140
141
142=== TEST 4: zero buf when $memc_value is empty
143http://github.com/agentzh/memc-nginx-module/issues#issue/2
144--- config
145    location /memc {
146        set $memc_cmd 'set';
147        set $memc_key 'foo';
148        set $memc_value '';
149        memc_pass 127.0.0.1:$TEST_NGINX_MEMCACHED_PORT;
150    }
151--- request
152GET /memc
153--- response_body eval
154"STORED\r
155"
156--- error_code: 201
157
158
159
160=== TEST 5: zero buf when $memc_value is empty
161http://github.com/agentzh/memc-nginx-module/issues#issue/2
162--- config
163    location /memc {
164        set $memc_cmd 'set';
165        set $memc_key 'foo';
166        set $memc_value '';
167        memc_pass 127.0.0.1:$TEST_NGINX_MEMCACHED_PORT;
168    }
169--- request
170GET /memc
171--- response_body eval
172"STORED\r
173"
174--- error_code: 201
175
176
177
178=== TEST 6: set too long keys
179--- config
180    location /memc {
181        set $memc_cmd 'set';
182        set $memc_key 'foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo';
183        set $memc_value 'hi';
184        memc_pass 127.0.0.1:$TEST_NGINX_MEMCACHED_PORT;
185    }
186--- request
187GET /memc
188--- response_body eval
189"CLIENT_ERROR bad command line format\r
190"
191--- error_code: 502
192
193
194
195=== TEST 7: get too long keys
196--- config
197    location /memc {
198        set $memc_cmd 'get';
199        set $memc_key 'foooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo';
200        memc_pass 127.0.0.1:$TEST_NGINX_MEMCACHED_PORT;
201    }
202--- request
203GET /memc
204--- response_body_like: 502 Bad Gateway
205--- error_code: 502
206
207
208
209=== TEST 8: set only
210--- config
211    location /memc {
212        set $memc_cmd $arg_cmd;
213        set $memc_key $arg_key;
214        set $memc_value $echo_request_body;
215        memc_pass 127.0.0.1:$TEST_NGINX_MEMCACHED_PORT;
216    }
217--- request
218POST /memc?key=foo&cmd=set
219hello, world
220--- response_body eval
221"STORED\r\n"
222--- error_code: 201
223--- SKIP
224
225
226
227=== TEST 9: get
228--- config
229    location /memc {
230        set $memc_cmd $arg_cmd;
231        set $memc_key $arg_key;
232        memc_pass 127.0.0.1:$TEST_NGINX_MEMCACHED_PORT;
233    }
234--- request
235GET /memc?key=foo&cmd=get
236--- response_body
237hello, world
238--- error_code: 200
239--- SKIP
240
241