aboutsummaryrefslogtreecommitdiff
path: root/test/ejabberd_SUITE.erl
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2014-09-03 21:28:07 +0400
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2014-09-03 21:30:44 +0400
commit50d7046517071d6bebfec36c7ddc2da11259e78c (patch)
treefbe88f6aaee72ba5adaf6e8820460113b0227f70 /test/ejabberd_SUITE.erl
parentParse x:data in jabber:register (diff)
Test MUC nick registration
Diffstat (limited to '')
-rw-r--r--test/ejabberd_SUITE.erl68
1 files changed, 68 insertions, 0 deletions
diff --git a/test/ejabberd_SUITE.erl b/test/ejabberd_SUITE.erl
index a1a2256b7..fbf2444b6 100644
--- a/test/ejabberd_SUITE.erl
+++ b/test/ejabberd_SUITE.erl
@@ -199,6 +199,8 @@ db_tests(riak) ->
blocking,
vcard,
test_unregister]},
+ {test_muc_register, [sequence],
+ [muc_register_master, muc_register_slave]},
{test_roster_subscribe, [parallel],
[roster_subscribe_master,
roster_subscribe_slave]},
@@ -226,6 +228,8 @@ db_tests(mnesia) ->
vcard,
pubsub,
test_unregister]},
+ {test_muc_register, [sequence],
+ [muc_register_master, muc_register_slave]},
{test_roster_subscribe, [parallel],
[roster_subscribe_master,
roster_subscribe_slave]},
@@ -256,6 +260,8 @@ db_tests(_) ->
vcard,
pubsub,
test_unregister]},
+ {test_muc_register, [sequence],
+ [muc_register_master, muc_register_slave]},
{test_roster_subscribe, [parallel],
[roster_subscribe_master,
roster_subscribe_slave]},
@@ -1279,6 +1285,66 @@ muc_slave(Config) ->
role = none}]}]} = recv(),
disconnect(Config).
+muc_register_nick(Config, MUC, PrevNick, Nick) ->
+ {Registered, PrevNickVals} = if PrevNick /= <<"">> ->
+ {true, [PrevNick]};
+ true ->
+ {false, []}
+ end,
+ %% Request register form
+ #iq{type = result,
+ sub_els = [#register{registered = Registered,
+ xdata = #xdata{type = form,
+ fields = FsWithoutNick}}]} =
+ send_recv(Config, #iq{type = get, to = MUC,
+ sub_els = [#register{}]}),
+ %% Check if 'nick' field presents
+ #xdata_field{type = 'text-single',
+ var = <<"nick">>,
+ values = PrevNickVals} =
+ lists:keyfind(<<"nick">>, #xdata_field.var, FsWithoutNick),
+ X = #xdata{type = submit,
+ fields = [#xdata_field{var = <<"nick">>, values = [Nick]}]},
+ %% Submitting form
+ #iq{type = result, sub_els = [_|_]} =
+ send_recv(Config, #iq{type = set, to = MUC,
+ sub_els = [#register{xdata = X}]}),
+ %% Check if the nick was registered
+ #iq{type = result,
+ sub_els = [#register{registered = true,
+ xdata = #xdata{type = form,
+ fields = FsWithNick}}]} =
+ send_recv(Config, #iq{type = get, to = MUC,
+ sub_els = [#register{}]}),
+ #xdata_field{type = 'text-single', var = <<"nick">>,
+ values = [Nick]} =
+ lists:keyfind(<<"nick">>, #xdata_field.var, FsWithNick).
+
+muc_register_master(Config) ->
+ MUC = muc_jid(Config),
+ %% Register nick "master1"
+ muc_register_nick(Config, MUC, <<"">>, <<"master1">>),
+ %% Unregister nick "master1" via jabber:register
+ #iq{type = result, sub_els = [_|_]} =
+ send_recv(Config, #iq{type = set, to = MUC,
+ sub_els = [#register{remove = true}]}),
+ %% Register nick "master2"
+ muc_register_nick(Config, MUC, <<"">>, <<"master2">>),
+ %% Now register nick "master"
+ muc_register_nick(Config, MUC, <<"master2">>, <<"master">>),
+ disconnect(Config).
+
+muc_register_slave(Config) ->
+ MUC = muc_jid(Config),
+ %% Trying to register occupied nick "master"
+ X = #xdata{type = submit,
+ fields = [#xdata_field{var = <<"nick">>,
+ values = [<<"master">>]}]},
+ #iq{type = error} =
+ send_recv(Config, #iq{type = set, to = MUC,
+ sub_els = [#register{xdata = X}]}),
+ disconnect(Config).
+
announce_master(Config) ->
MyJID = my_jid(Config),
ServerJID = server_jid(Config),
@@ -1557,4 +1623,6 @@ clear_riak_tables(Config) ->
ejabberd_auth:remove_user(<<"test_slave">>, Server),
ejabberd_auth:remove_user(<<"test_master">>, Server),
mod_muc:forget_room(Server, URoom, SRoom),
+ ejabberd_riak:delete(muc_registered, {{<<"test_slave">>, Server}, SRoom}),
+ ejabberd_riak:delete(muc_registered, {{<<"test_master">>, Server}, SRoom}),
Config.