diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-11-18 13:38:08 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-11-18 13:38:08 +0300 |
commit | b8dcc911a3b1e3cc05074d9ac4bd8da80b431388 (patch) | |
tree | 8f77735d46adff599eccd0ae93b0ad4a5e52520e /test/mix_tests.erl | |
parent | Fix IQ result processing (diff) |
Make common tests working again
Diffstat (limited to 'test/mix_tests.erl')
-rw-r--r-- | test/mix_tests.erl | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/test/mix_tests.erl b/test/mix_tests.erl new file mode 100644 index 00000000..56b1b35d --- /dev/null +++ b/test/mix_tests.erl @@ -0,0 +1,139 @@ +%%%------------------------------------------------------------------- +%%% @author Evgeny Khramtsov <ekhramtsov@process-one.net> +%%% @copyright (C) 2016, Evgeny Khramtsov +%%% @doc +%%% +%%% @end +%%% Created : 16 Nov 2016 by Evgeny Khramtsov <ekhramtsov@process-one.net> +%%%------------------------------------------------------------------- +-module(mix_tests). + +%% API +-compile(export_all). +-import(suite, [mix_jid/1, mix_room_jid/1, my_jid/1, is_feature_advertised/3, + disconnect/1, send_recv/2, recv_message/1, send/2, + put_event/2, get_event/1]). +-include("suite.hrl"). + +%%%=================================================================== +%%% API +%%%=================================================================== +%%%=================================================================== +%%% Single user tests +%%%=================================================================== +single_cases() -> + {mix_single, [sequence], + [single_test(feature_enabled)]}. + +feature_enabled(Config) -> + MIX = mix_jid(Config), + ct:comment("Checking if ~s is set", [?NS_MIX_0]), + true = is_feature_advertised(Config, ?NS_MIX_0, MIX), + disconnect(Config). + +%%%=================================================================== +%%% Master-slave tests +%%%=================================================================== +master_slave_cases() -> + {mix_master_slave, [sequence], + [master_slave_test(all)]}. + +all_master(Config) -> + MIX = mix_jid(Config), + Room = mix_room_jid(Config), + MyJID = my_jid(Config), + MyBareJID = jid:remove_resource(MyJID), + #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], + #iq{type = result, + sub_els = [#mix_join{subscribe = Nodes, jid = MyBareJID}]} = + send_recv(Config, #iq{type = set, to = Room, + sub_els = [#mix_join{subscribe = Nodes}]}), + #message{from = Room, + sub_els = + [#ps_event{ + items = #ps_items{ + node = ?NS_MIX_NODES_PARTICIPANTS, + items = [#ps_item{ + id = ParticipantID, + xml_els = [PXML]}]}}]} = + recv_message(Config), + #mix_participant{jid = MyBareJID} = xmpp:decode(PXML), + %% Coming online + PresenceID = randoms:get_string(), + Presence = xmpp:encode(#presence{}), + #iq{type = result, + sub_els = + [#pubsub{ + publish = #ps_publish{ + node = ?NS_MIX_NODES_PRESENCE, + items = [#ps_item{id = PresenceID}]}}]} = + send_recv( + Config, + #iq{type = set, to = Room, + sub_els = + [#pubsub{ + publish = #ps_publish{ + node = ?NS_MIX_NODES_PRESENCE, + items = [#ps_item{ + id = PresenceID, + xml_els = [Presence]}]}}]}), + #message{from = Room, + sub_els = + [#ps_event{ + items = #ps_items{ + node = ?NS_MIX_NODES_PRESENCE, + items = [#ps_item{ + id = PresenceID, + xml_els = [Presence]}]}}]} = + recv_message(Config), + %% Coming offline + send(Config, #presence{type = unavailable, to = Room}), + %% Receiving presence retract event + #message{from = Room, + sub_els = [#ps_event{ + items = #ps_items{ + node = ?NS_MIX_NODES_PRESENCE, + retract = PresenceID}}]} = + recv_message(Config), + %% Leaving + #iq{type = result, sub_els = []} = + send_recv(Config, #iq{type = set, to = Room, sub_els = [#mix_leave{}]}), + #message{from = Room, + sub_els = + [#ps_event{ + items = #ps_items{ + node = ?NS_MIX_NODES_PARTICIPANTS, + retract = ParticipantID}}]} = + recv_message(Config), + put_event(Config, disconnect), + disconnect(Config). + +all_slave(Config) -> + disconnect = get_event(Config), + disconnect(Config). + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== +single_test(T) -> + list_to_atom("mix_" ++ atom_to_list(T)). + +master_slave_test(T) -> + {list_to_atom("mix_" ++ atom_to_list(T)), [parallel], + [list_to_atom("mix_" ++ atom_to_list(T) ++ "_master"), + list_to_atom("mix_" ++ atom_to_list(T) ++ "_slave")]}. |