Annotate

tests/test_util_xmppstream.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 7241:5e7797822f19
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
7241
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 function new(new_stream, _M)
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 local function test(xml, expect_success, ex)
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 local stanzas = {};
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 local session = { notopen = true };
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5 local callbacks = {
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 stream_ns = "streamns";
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7 stream_tag = "stream";
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 default_ns = "stanzans";
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 streamopened = function (_session)
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 assert_equal(session, _session);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 assert_equal(session.notopen, true);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 _session.notopen = nil;
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 return true;
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14 end;
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 handlestanza = function (_session, stanza)
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 assert_equal(session, _session);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17 assert_equal(_session.notopen, nil);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 table.insert(stanzas, stanza);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 end;
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 streamclosed = function (_session)
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 assert_equal(session, _session);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 assert_equal(_session.notopen, nil);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 _session.notopen = nil;
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 end;
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25 }
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 if type(ex) == "table" then
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 for k, v in pairs(ex) do
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 if k ~= "_size_limit" then
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 callbacks[k] = v;
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 end
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 end
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32 end
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 local stream = new_stream(session, callbacks, size_limit);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 local ok, err = pcall(function ()
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35 assert(stream:feed(xml));
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 end);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 if ok and type(expect_success) == "function" then
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 expect_success(stanzas);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 end
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 assert_equal(not not ok, not not expect_success, "Expected "..(expect_success and ("success ("..tostring(err)..")") or "failure"));
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 end
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 local function test_stanza(stanza, expect_success, ex)
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45 return test([[<stream:stream xmlns:stream="streamns" xmlns="stanzans">]]..stanza, expect_success, ex);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 end
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48 test([[<stream:stream xmlns:stream="streamns"/>]], true);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49 test([[<stream xmlns="streamns"/>]], true);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51 test([[<stream1 xmlns="streamns"/>]], false);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52 test([[<stream xmlns="streamns1"/>]], false);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 test("<>", false);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55 test_stanza("<message/>", function (stanzas)
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 assert_equal(#stanzas, 1);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57 assert_equal(stanzas[1].name, "message");
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 end);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59 test_stanza("< message>>>>/>\n", false);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
60
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61 test_stanza([[<x xmlns:a="b">
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62 <y xmlns:a="c">
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63 <a:z/>
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
64 </y>
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
65 <a:z/>
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 </x>]], function (stanzas)
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 assert_equal(#stanzas, 1);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68 local s = stanzas[1];
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69 assert_equal(s.name, "x");
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 assert_equal(#s.tags, 2);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
71
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 assert_equal(s.tags[1].name, "y");
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
73 assert_equal(s.tags[1].attr.xmlns, nil);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75 assert_equal(s.tags[1].tags[1].name, "z");
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76 assert_equal(s.tags[1].tags[1].attr.xmlns, "c");
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
77
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
78 assert_equal(s.tags[2].name, "z");
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
79 assert_equal(s.tags[2].attr.xmlns, "b");
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
80
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
81 assert_equal(s.namespaces, nil);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
82 end);
5e7797822f19 tests: Add basic tests for util.xml and util.xmppstream
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
83 end