aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorDiego Nehab <diego@tecgraf.puc-rio.br>2004-01-19 05:41:30 +0000
committerDiego Nehab <diego@tecgraf.puc-rio.br>2004-01-19 05:41:30 +0000
commit5b8d7dec541a618b4ca7f2205470a28cde2e3e25 (patch)
tree209ad0c80c9a938068401fc5b8fa51942972418f /test
parent6ac82d50eecdf9bf55f4234ed3a5449afd7a2992 (diff)
downloadluasocket-5b8d7dec541a618b4ca7f2205470a28cde2e3e25.tar.gz
luasocket-5b8d7dec541a618b4ca7f2205470a28cde2e3e25.tar.bz2
luasocket-5b8d7dec541a618b4ca7f2205470a28cde2e3e25.zip
Updated some of the callbacks in callback.lua.
Update get.lua to use the new callbacks. The old "code" module is now the "mime" module. Updated all modules that depended on it. Updated url.lua to use the new namespace scheme, and moved the escape and unescape functions that used to be in the code.lua module to it, since these are specific to urls. Updated the callback entries in the manual.
Diffstat (limited to 'test')
-rw-r--r--test/httptest.lua16
-rw-r--r--test/mimetest.lua236
2 files changed, 244 insertions, 8 deletions
diff --git a/test/httptest.lua b/test/httptest.lua
index 3d0db87..dc90741 100644
--- a/test/httptest.lua
+++ b/test/httptest.lua
@@ -5,14 +5,14 @@
5-- needs "AllowOverride AuthConfig" on /home/c/diego/tec/luasocket/test/auth 5-- needs "AllowOverride AuthConfig" on /home/c/diego/tec/luasocket/test/auth
6dofile("noglobals.lua") 6dofile("noglobals.lua")
7 7
8local host, proxyh, proxyp, request, response 8local host, proxyhost, proxyport, request, response
9local ignore, expect, index, prefix, cgiprefix 9local ignore, expect, index, prefix, cgiprefix
10 10
11local t = socket.time() 11local t = socket.time()
12 12
13host = host or "diego.princeton.edu" 13host = host or "diego.princeton.edu"
14proxyh = proxyh or "localhost" 14proxyhost = proxyhost or "localhost"
15proxyp = proxyp or 3128 15proxyport = proxyport or 3128
16prefix = prefix or "/luasocket-test" 16prefix = prefix or "/luasocket-test"
17cgiprefix = cgiprefix or "/luasocket-test-cgi" 17cgiprefix = cgiprefix or "/luasocket-test-cgi"
18 18
@@ -129,8 +129,8 @@ request = {
129 method = "POST", 129 method = "POST",
130 body = index, 130 body = index,
131 headers = { ["content-length"] = string.len(index) }, 131 headers = { ["content-length"] = string.len(index) },
132 port = proxyp, 132 proxyport = proxyport,
133 host = proxyh 133 proxyhost = proxyhost
134} 134}
135expect = { 135expect = {
136 body = index, 136 body = index,
@@ -170,8 +170,8 @@ check_request(request, expect, ignore)
170io.write("testing proxy with redirection: ") 170io.write("testing proxy with redirection: ")
171request = { 171request = {
172 url = "http://" .. host .. prefix, 172 url = "http://" .. host .. prefix,
173 host = proxyh, 173 proxyhost = proxyhost,
174 port = proxyp 174 proxyport = proxyport
175} 175}
176expect = { 176expect = {
177 body = index, 177 body = index,
@@ -267,7 +267,7 @@ io.write("testing manual basic auth: ")
267request = { 267request = {
268 url = "http://" .. host .. prefix .. "/auth/index.html", 268 url = "http://" .. host .. prefix .. "/auth/index.html",
269 headers = { 269 headers = {
270 authorization = "Basic " .. (socket.code.b64("luasocket:password")) 270 authorization = "Basic " .. (socket.mime.b64("luasocket:password"))
271 } 271 }
272} 272}
273expect = { 273expect = {
diff --git a/test/mimetest.lua b/test/mimetest.lua
new file mode 100644
index 0000000..5485db1
--- /dev/null
+++ b/test/mimetest.lua
@@ -0,0 +1,236 @@
1dofile("noglobals.lua")
2
3local qptest = "qptest.bin"
4local eqptest = "qptest.bin2"
5local dqptest = "qptest.bin3"
6
7local b64test = "luasocket"
8local eb64test = "b64test.bin"
9local db64test = "b64test.bin2"
10
11-- from Machado de Assis, "A Mão e a Rosa"
12local mao = [[
13 Cursavam estes dois moços a academia de S. Paulo, estando
14 Luís Alves no quarto ano e Estêvão no terceiro.
15 Conheceram-se na academia, e ficaram amigos íntimos, tanto
16 quanto podiam sê-lo dois espíritos diferentes, ou talvez por
17 isso mesmo que o eram. Estêvão, dotado de extrema
18 sensibilidade, e não menor fraqueza de ânimo, afetuoso e
19 bom, não daquela bondade varonil, que é apanágio de uma alma
20 forte, mas dessa outra bondade mole e de cera, que vai à
21 mercê de todas as circunstâncias, tinha, além de tudo isso,
22 o infortúnio de trazer ainda sobre o nariz os óculos
23 cor-de-rosa de suas virginais ilusões. Luís Alves via bem
24 com os olhos da cara. Não era mau rapaz, mas tinha o seu
25 grão de egoísmo, e se não era incapaz de afeições, sabia
26 regê-las, moderá-las, e sobretudo guiá-las ao seu próprio
27 interesse. Entre estes dois homens travara-se amizade
28 íntima, nascida para um na simpatia, para outro no costume.
29 Eram eles os naturais confidentes um do outro, com a
30 diferença que Luís Alves dava menos do que recebia, e, ainda
31 assim, nem tudo o que dava exprimia grande confiança.
32]]
33
34local fail = function(s)
35 s = s or "failed"
36 assert(nil, s)
37end
38
39local readfile = function(name)
40 local f = io.open(name, "r")
41 if not f then return nil end
42 local s = f:read("*a")
43 f:close()
44 return s
45end
46
47local function transform(input, output, filter)
48 local fi, err = io.open(input, "rb")
49 if not fi then fail(err) end
50 local fo, err = io.open(output, "wb")
51 if not fo then fail(err) end
52 while 1 do
53 local chunk = fi:read(math.random(0, 256))
54 fo:write(filter(chunk))
55 if not chunk then break end
56 end
57 fi:close()
58 fo:close()
59end
60
61local function compare(input, output)
62 local original = readfile(input)
63 local recovered = readfile(output)
64 if original ~= recovered then fail("recovering failed")
65 else print("ok") end
66end
67
68local function encode_qptest(mode)
69 local encode = socket.mime.qprint.encode(mode)
70 local split = socket.mime.qprint.split()
71 local chain = socket.mime.chain(encode, split)
72 transform(qptest, eqptest, chain)
73end
74
75local function compare_qptest()
76 compare(qptest, dqptest)
77end
78
79local function decode_qptest()
80 local decode = socket.mime.qprint.decode()
81 transform(eqptest, dqptest, decode)
82end
83
84local function create_qptest()
85 local f, err = io.open(qptest, "wb")
86 if not f then fail(err) end
87 -- try all characters
88 for i = 0, 255 do
89 f:write(string.char(i))
90 end
91 -- try all characters and different line sizes
92 for i = 0, 255 do
93 for j = 0, i do
94 f:write(string.char(i))
95 end
96 f:write("\r\n")
97 end
98 -- test latin text
99 f:write(mao)
100 -- force soft line breaks and treatment of space/tab in end of line
101 local tab
102 f:write(string.gsub(mao, "(%s)", function(c)
103 if tab then
104 tab = nil
105 return "\t"
106 else
107 tab = 1
108 return " "
109 end
110 end))
111 -- test crazy end of line conventions
112 local eol = { "\r\n", "\r", "\n", "\n\r" }
113 local which = 0
114 f:write(string.gsub(mao, "(\n)", function(c)
115 which = which + 1
116 if which > 4 then which = 1 end
117 return eol[which]
118 end))
119 for i = 1, 4 do
120 for j = 1, 4 do
121 f:write(eol[i])
122 f:write(eol[j])
123 end
124 end
125 -- try long spaced and tabbed lines
126 f:write("\r\n")
127 for i = 0, 255 do
128 f:write(string.char(9))
129 end
130 f:write("\r\n")
131 for i = 0, 255 do
132 f:write(' ')
133 end
134 f:write("\r\n")
135 for i = 0, 255 do
136 f:write(string.char(9),' ')
137 end
138 f:write("\r\n")
139 for i = 0, 255 do
140 f:write(' ',string.char(32))
141 end
142 f:write("\r\n")
143
144 f:close()
145end
146
147local function cleanup_qptest()
148 os.remove(qptest)
149 os.remove(eqptest)
150 os.remove(dqptest)
151end
152
153local function encode_b64test()
154 local e1 = socket.mime.base64.encode()
155 local e2 = socket.mime.base64.encode()
156 local e3 = socket.mime.base64.encode()
157 local e4 = socket.mime.base64.encode()
158 local sp4 = socket.mime.split()
159 local sp3 = socket.mime.split(59)
160 local sp2 = socket.mime.split(30)
161 local sp1 = socket.mime.split(27)
162 local chain = socket.mime.chain(e1, sp1, e2, sp2, e3, sp3, e4, sp4)
163 transform(b64test, eb64test, chain)
164end
165
166local function decode_b64test()
167 local d1 = socket.mime.base64.decode()
168 local d2 = socket.mime.base64.decode()
169 local d3 = socket.mime.base64.decode()
170 local d4 = socket.mime.base64.decode()
171 local chain = socket.mime.chain(d1, d2, d3, d4)
172 transform(eb64test, db64test, chain)
173end
174
175local function cleanup_b64test()
176 os.remove(eb64test)
177 os.remove(db64test)
178end
179
180local function compare_b64test()
181 compare(b64test, db64test)
182end
183
184local function padcheck(original, encoded)
185 local e = (socket.mime.b64(original))
186 local d = (socket.mime.unb64(encoded))
187 if e ~= encoded then fail("encoding failed") end
188 if d ~= original then fail("decoding failed") end
189end
190
191local function chunkcheck(original, encoded)
192 local len = string.len(original)
193 for i = 0, len do
194 local a = string.sub(original, 1, i)
195 local b = string.sub(original, i+1)
196 local e, r = socket.mime.b64(a, b)
197 local f = (socket.mime.b64(r))
198 if (e .. f ~= encoded) then fail(e .. f) end
199 end
200end
201
202local function padding_b64test()
203 padcheck("a", "YQ==")
204 padcheck("ab", "YWI=")
205 padcheck("abc", "YWJj")
206 padcheck("abcd", "YWJjZA==")
207 padcheck("abcde", "YWJjZGU=")
208 padcheck("abcdef", "YWJjZGVm")
209 padcheck("abcdefg", "YWJjZGVmZw==")
210 padcheck("abcdefgh", "YWJjZGVmZ2g=")
211 padcheck("abcdefghi", "YWJjZGVmZ2hp")
212 padcheck("abcdefghij", "YWJjZGVmZ2hpag==")
213 chunkcheck("abcdefgh", "YWJjZGVmZ2g=")
214 chunkcheck("abcdefghi", "YWJjZGVmZ2hp")
215 chunkcheck("abcdefghij", "YWJjZGVmZ2hpag==")
216 print("ok")
217end
218
219local t = socket.time()
220
221create_qptest()
222encode_qptest()
223decode_qptest()
224compare_qptest()
225encode_qptest("binary")
226decode_qptest()
227compare_qptest()
228cleanup_qptest()
229
230encode_b64test()
231decode_b64test()
232compare_b64test()
233cleanup_b64test()
234padding_b64test()
235
236print(string.format("done in %.2fs", socket.time() - t))