1# vim:set ft= ts=4 sw=4 et fdm=marker: 2 3use Test::Nginx::Socket::Lua; 4 5#worker_connections(1014); 6#master_process_enabled(1); 7log_level('warn'); 8 9repeat_each(2); 10 11plan tests => repeat_each() * (blocks() * 2 + 4); 12 13#no_diff(); 14#no_long_string(); 15run_tests(); 16 17__DATA__ 18 19=== TEST 1: base64 encode hello 20--- config 21 location = /encode_base64 { 22 content_by_lua 'ngx.say(ngx.encode_base64("hello"))'; 23 } 24--- request 25GET /encode_base64 26--- response_body 27aGVsbG8= 28 29 30 31=== TEST 2: nil string to ngx.encode_base64 32--- config 33 location = /encode_base64 { 34 content_by_lua 'ngx.say("left" .. ngx.encode_base64(nil) .. "right")'; 35 } 36--- request 37GET /encode_base64 38--- response_body 39leftright 40 41 42 43=== TEST 3: null string to ngx.encode_base64 44--- config 45 location = /encode_base64 { 46 content_by_lua 'ngx.say("left" .. ngx.encode_base64("") .. "right")'; 47 } 48--- request 49GET /encode_base64 50--- response_body 51leftright 52 53 54 55=== TEST 4: use ngx.encode_base64 in set_by_lua 56--- config 57 location = /encode_base64 { 58 set_by_lua $a 'return ngx.encode_base64("hello")'; 59 echo $a; 60 } 61--- request 62GET /encode_base64 63--- response_body 64aGVsbG8= 65 66 67 68=== TEST 5: use ngx.encode_base64 in set_by_lua (nil) 69--- config 70 location = /encode_base64 { 71 set_by_lua $a 'return "left" .. ngx.encode_base64(nil) .. "right"'; 72 echo $a; 73 } 74--- request 75GET /encode_base64 76--- response_body 77leftright 78 79 80 81=== TEST 6: use ngx.encode_base64 in set_by_lua (null string) 82--- config 83 location /encode_base64 { 84 set_by_lua $a 'return "left" .. ngx.encode_base64("") .. "right"'; 85 echo $a; 86 } 87--- request 88GET /encode_base64 89--- response_body 90leftright 91 92 93 94=== TEST 7: base64 encode hello 95--- config 96 location = /decode_base64 { 97 content_by_lua 'ngx.say(ngx.decode_base64("aGVsbG8="))'; 98 } 99--- request 100GET /decode_base64 101--- response_body 102hello 103 104 105 106=== TEST 8: null string to ngx.decode_base64 107--- config 108 location = /decode_base64 { 109 content_by_lua 'ngx.say("left" .. ngx.decode_base64("") .. "right")'; 110 } 111--- request 112GET /decode_base64 113--- response_body 114leftright 115 116 117 118=== TEST 9: use ngx.decode_base64 in set_by_lua 119--- config 120 location = /decode_base64 { 121 set_by_lua $a 'return ngx.decode_base64("aGVsbG8=")'; 122 echo $a; 123 } 124--- request 125GET /decode_base64 126--- response_body 127hello 128 129 130 131=== TEST 10: use ngx.decode_base64 in set_by_lua (nil) 132--- config 133 location = /decode_base64 { 134 set_by_lua $a 'return "left" .. ngx.decode_base64(nil) .. "right"'; 135 echo $a; 136 } 137--- request 138GET /decode_base64 139--- response_body_like: 500 Internal Server Error 140--- error_code: 500 141--- error_log 142string argument only 143 144 145 146=== TEST 11: use ngx.decode_base64 in set_by_lua (null string) 147--- config 148 location /decode_base64 { 149 set_by_lua $a 'return "left" .. ngx.decode_base64("") .. "right"'; 150 echo $a; 151 } 152--- request 153GET /decode_base64 154--- response_body 155leftright 156 157 158 159=== TEST 12: base64 encode number 160--- config 161 location = /t { 162 content_by_lua 'ngx.say(ngx.encode_base64(32))'; 163 } 164--- request 165GET /t 166--- response_body 167MzI= 168 169 170 171=== TEST 13: base64 decode number 172--- config 173 location = /t { 174 content_by_lua 'ngx.say(ngx.decode_base64(32))'; 175 } 176--- request 177GET /t 178--- response_body_like: 500 Internal Server Error 179--- error_code: 500 180--- error_log 181string argument only 182 183 184 185=== TEST 14: base64 decode error 186--- config 187 location = /t { 188 content_by_lua 'ngx.say(ngx.decode_base64("^*~"))'; 189 } 190--- request 191GET /t 192--- response_body 193nil 194--- no_error_log 195[error] 196 197 198 199=== TEST 15: base64 encode without padding (explicit true to no_padding) 200--- config 201 location = /t { 202 content_by_lua 'ngx.say(ngx.encode_base64("hello", true))'; 203 } 204--- request 205GET /t 206--- response_body 207aGVsbG8 208 209 210 211=== TEST 16: base64 encode short string 212--- config 213 location = /t { 214 content_by_lua 'ngx.say(ngx.encode_base64("w"))'; 215 } 216--- request 217GET /t 218--- response_body 219dw== 220 221 222 223=== TEST 17: base64 encode short string with padding (explicit false to no_padding) 224--- config 225 location = /t { 226 content_by_lua 'ngx.say(ngx.encode_base64("w", false))'; 227 } 228--- request 229GET /t 230--- response_body 231dw== 232 233 234 235=== TEST 18: base64 encode with wrong 2nd parameter 236--- config 237 location = /t { 238 content_by_lua 'ngx.say(ngx.encode_base64("w", 0))'; 239 } 240--- request 241GET /t 242--- response_body_like: 500 Internal Server Error 243--- error_code: 500 244--- error_log eval 245qr/bad argument \#2 to 'encode_base64' \(boolean expected, got number\)|\[error\] .*? bad no_padding: boolean expected, got number/ 246