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