summaryrefslogtreecommitdiff
path: root/test/mix_tests.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-11-18 13:38:08 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2016-11-18 13:38:08 +0300
commitb8dcc911a3b1e3cc05074d9ac4bd8da80b431388 (patch)
tree8f77735d46adff599eccd0ae93b0ad4a5e52520e /test/mix_tests.erl
parentFix IQ result processing (diff)
Make common tests working again
Diffstat (limited to 'test/mix_tests.erl')
-rw-r--r--test/mix_tests.erl139
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")]}.