diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-03-10 17:42:37 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-03-10 17:42:37 +0300 |
commit | 15ee72138ac04e09a54ce05ae43fb837288ab178 (patch) | |
tree | 35cd0d1d0c0352c6d0f92686bd3c65ce251f6d9f /test | |
parent | Lager to Elixir Logger bridge is now compliant with ejabberd loglevel set / get (diff) |
Add tests for MIX
Diffstat (limited to 'test')
-rw-r--r-- | test/ejabberd_SUITE.erl | 90 | ||||
-rw-r--r-- | test/ejabberd_SUITE_data/ejabberd.yml | 2 | ||||
-rw-r--r-- | test/suite.erl | 8 |
3 files changed, 98 insertions, 2 deletions
diff --git a/test/ejabberd_SUITE.erl b/test/ejabberd_SUITE.erl index 1b8d5f47..f17bfeb4 100644 --- a/test/ejabberd_SUITE.erl +++ b/test/ejabberd_SUITE.erl @@ -12,8 +12,8 @@ -import(suite, [init_config/1, connect/1, disconnect/1, recv/0, send/2, send_recv/2, my_jid/1, server_jid/1, - pubsub_jid/1, proxy_jid/1, muc_jid/1, - muc_room_jid/1, get_features/2, re_register/1, + pubsub_jid/1, proxy_jid/1, muc_jid/1, muc_room_jid/1, + mix_jid/1, mix_room_jid/1, get_features/2, re_register/1, is_feature_advertised/2, subscribe_to_events/1, is_feature_advertised/3, set_opt/3, auth_SASL/2, wait_for_master/1, wait_for_slave/1, @@ -249,6 +249,8 @@ db_tests(DB) when DB == mnesia; DB == redis -> test_unregister]}, {test_muc_register, [sequence], [muc_register_master, muc_register_slave]}, + {test_mix, [parallel], + [mix_master, mix_slave]}, {test_roster_subscribe, [parallel], [roster_subscribe_master, roster_subscribe_slave]}, @@ -882,6 +884,90 @@ pubsub(Config) -> jid = my_jid(Config)}}]}), disconnect(Config). +mix_master(Config) -> + MIX = mix_jid(Config), + Room = mix_room_jid(Config), + MyJID = my_jid(Config), + MyBareJID = jid:remove_resource(MyJID), + true = is_feature_advertised(Config, ?NS_MIX_0, MIX), + #iq{type = result, + sub_els = + [#disco_info{ + identities = [#identity{category = <<"conference">>, + type = <<"text">>}], + xdata = [#xdata{type = result, fields = XFields}]}]} = + send_recv(Config, #iq{type = get, to = MIX, sub_els = [#disco_info{}]}), + true = lists:any( + fun(#xdata_field{var = <<"FORM_TYPE">>, + values = [?NS_MIX_SERVICEINFO_0]}) -> true; + (_) -> false + end, XFields), + %% Joining + Nodes = [?NS_MIX_NODES_MESSAGES, ?NS_MIX_NODES_PRESENCE, + ?NS_MIX_NODES_PARTICIPANTS, ?NS_MIX_NODES_SUBJECT, + ?NS_MIX_NODES_CONFIG], + I0 = send(Config, #iq{type = set, to = Room, + sub_els = [#mix_join{subscribe = Nodes}]}), + {_, #message{sub_els = + [#pubsub_event{ + items = [#pubsub_event_items{ + node = ?NS_MIX_NODES_PARTICIPANTS, + items = [#pubsub_event_item{ + id = ParticipantID, + xml_els = [PXML]}]}]}]}} = + ?recv2(#iq{type = result, id = I0, + sub_els = [#mix_join{subscribe = Nodes, jid = MyBareJID}]}, + #message{from = Room}), + #mix_participant{jid = MyBareJID} = xmpp_codec:decode(PXML), + %% Coming online + PresenceID = randoms:get_string(), + Presence = xmpp_codec:encode(#presence{}), + I1 = send( + Config, + #iq{type = set, to = Room, + sub_els = + [#pubsub{ + publish = #pubsub_publish{ + node = ?NS_MIX_NODES_PRESENCE, + items = [#pubsub_item{ + id = PresenceID, + xml_els = [Presence]}]}}]}), + ?recv2(#iq{type = result, id = I1, + sub_els = + [#pubsub{ + publish = #pubsub_publish{ + node = ?NS_MIX_NODES_PRESENCE, + items = [#pubsub_item{id = PresenceID}]}}]}, + #message{from = Room, + sub_els = + [#pubsub_event{ + items = [#pubsub_event_items{ + node = ?NS_MIX_NODES_PRESENCE, + items = [#pubsub_event_item{ + id = PresenceID, + xml_els = [Presence]}]}]}]}), + %% Coming offline + send(Config, #presence{type = unavailable, to = Room}), + %% Receiving presence retract event + #message{from = Room, + sub_els = [#pubsub_event{ + items = [#pubsub_event_items{ + node = ?NS_MIX_NODES_PRESENCE, + retract = [PresenceID]}]}]} = recv(), + %% Leaving + I2 = send(Config, #iq{type = set, to = Room, sub_els = [#mix_leave{}]}), + ?recv2(#iq{type = result, id = I2, sub_els = []}, + #message{from = Room, + sub_els = + [#pubsub_event{ + items = [#pubsub_event_items{ + node = ?NS_MIX_NODES_PARTICIPANTS, + retract = [ParticipantID]}]}]}), + disconnect(Config). + +mix_slave(Config) -> + disconnect(Config). + roster_subscribe_master(Config) -> send(Config, #presence{}), ?recv1(#presence{}), diff --git a/test/ejabberd_SUITE_data/ejabberd.yml b/test/ejabberd_SUITE_data/ejabberd.yml index 5507900b..96453f77 100644 --- a/test/ejabberd_SUITE_data/ejabberd.yml +++ b/test/ejabberd_SUITE_data/ejabberd.yml @@ -197,6 +197,7 @@ Welcome to this XMPP server." - "flat" - "hometree" - "pep" + mod_mix: [] mod_roster: versioning: true store_current_id: true @@ -252,6 +253,7 @@ Welcome to this XMPP server." - "flat" - "hometree" - "pep" + mod_mix: [] mod_roster: versioning: true store_current_id: true diff --git a/test/suite.erl b/test/suite.erl index a0e0a482..bc094fa3 100644 --- a/test/suite.erl +++ b/test/suite.erl @@ -354,6 +354,14 @@ muc_room_jid(Config) -> Server = ?config(server, Config), jid:make(<<"test">>, <<"conference.", Server/binary>>, <<>>). +mix_jid(Config) -> + Server = ?config(server, Config), + jid:make(<<>>, <<"mix.", Server/binary>>, <<>>). + +mix_room_jid(Config) -> + Server = ?config(server, Config), + jid:make(<<"test">>, <<"mix.", Server/binary>>, <<>>). + id() -> id(undefined). |