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