Annotate

tests/test_net_http_parser.lua @ 8791:8da11142fabf

muc: Allow clients to change multiple affiliations or roles at once (#345) According to XEP-0045 sections 9.2, 9.5 and 9.8 affiliation lists and role lists should allow mass-modification. Prosody however would just use the first entry of the list and ignore the rest. This is fixed by introducing a `for` loop to `set` stanzas of the respective `muc#admin` namespace. In order for this loop to work, the error handling was changed a little. Prosody no longer returns after the first error. Instead, an error reply is sent for each malformed or otherwise wrong entry, but the loop keeps going over the other entries. This may lead to multiple error messages being sent for one client request. A notable exception from this is when the XML Schema for `muc#admin` requests is violated. In that case the loop is aborted with an error message to the client. The change is a bit bigger than that in order to have the loop only for `set` stanzas without changing the behaviour of the `get` stanzas. This is now more in line with trunk, where there are separate methods for each stanza type. References: #345
author Lennart Sauerbeck <devel@lennart.sauerbeck.org>
date Sat, 18 Mar 2017 18:47:28 +0100
parent 7493:f67b7509ee28
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7493
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 local httpstreams = { [[
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 GET / HTTP/1.1
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 Host: example.com
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 ]], [[
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 HTTP/1.1 200 OK
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 Content-Length: 0
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 ]], [[
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10 HTTP/1.1 200 OK
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 Content-Length: 7
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 Hello
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 HTTP/1.1 200 OK
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 Transfer-Encoding: chunked
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 1
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18 H
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 1
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 e
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 2
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 ll
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
23 1
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 o
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 0
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
27
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
28 ]]
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
29 }
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
30
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
31 function new(new)
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
32
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
33 for _, stream in ipairs(httpstreams) do
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
34 local success;
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
35 local function success_cb(packet)
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 success = true;
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
37 end
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
38 stream = stream:gsub("\n", "\r\n");
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
39 local parser = new(success_cb, error, stream:sub(1,4) == "HTTP" and "client" or "server")
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
40 for chunk in stream:gmatch("..?.?") do
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
41 parser:feed(chunk);
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
42 end
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
43
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
44 assert_is(success);
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
45 end
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
46
f67b7509ee28 tests: Add basic test for net.http.parser
Kim Alvefur <zash@zash.se>
parents:
diff changeset
47 end