aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2014-07-22 13:59:31 +0400
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2014-07-22 14:00:48 +0400
commit25676b43ed28a0291bccb14e254fda9cbc904ad2 (patch)
tree57968d52f3d3d4d1ea7004261e68296c393a2cfa /test
parentold release notes are not installed anymore (diff)
Add tests for session management
Diffstat (limited to 'test')
-rw-r--r--test/ejabberd_SUITE.erl44
-rw-r--r--test/suite.erl14
2 files changed, 55 insertions, 3 deletions
diff --git a/test/ejabberd_SUITE.erl b/test/ejabberd_SUITE.erl
index 33107040e..e362913a1 100644
--- a/test/ejabberd_SUITE.erl
+++ b/test/ejabberd_SUITE.erl
@@ -19,7 +19,8 @@
wait_for_master/1, wait_for_slave/1,
make_iq_result/1, start_event_relay/0,
stop_event_relay/1, put_event/2, get_event/1,
- bind/1, auth/1, open_session/1, zlib/1, starttls/1]).
+ bind/1, auth/1, open_session/1, zlib/1, starttls/1,
+ close_socket/1]).
-include("suite.hrl").
@@ -150,6 +151,8 @@ init_per_testcase(TestCase, OrigConfig) ->
connect(Config);
test_bind ->
auth(connect(Config));
+ sm_resume ->
+ auth(connect(Config));
test_open_session ->
bind(auth(connect(Config)));
_ when IsMaster or IsSlave ->
@@ -176,6 +179,8 @@ no_db_tests() ->
version,
time,
stats,
+ sm,
+ sm_resume,
disco]},
{test_proxy65, [parallel],
[proxy65_master, proxy65_slave]}].
@@ -502,6 +507,43 @@ disco(Config) ->
end, Items),
disconnect(Config).
+sm(Config) ->
+ Server = ?config(server, Config),
+ ServerJID = jlib:make_jid(<<"">>, Server, <<"">>),
+ Msg = #message{to = ServerJID, body = [#text{data = <<"body">>}]},
+ true = ?config(sm, Config),
+ %% Enable the session management with resumption enabled
+ send(Config, #sm_enable{resume = true}),
+ #sm_enabled{id = ID, resume = true} = recv(),
+ %% Initial request; 'h' should be 0.
+ send(Config, #sm_r{}),
+ #sm_a{h = 0} = recv(),
+ %% sending two messages and requesting again; 'h' should be 3.
+ send(Config, Msg),
+ send(Config, Msg),
+ send(Config, Msg),
+ send(Config, #sm_r{}),
+ #sm_a{h = 3} = recv(),
+ close_socket(Config),
+ {save_config, set_opt(sm_previd, ID, Config)}.
+
+sm_resume(Config) ->
+ {sm, SMConfig} = ?config(saved_config, Config),
+ ID = ?config(sm_previd, SMConfig),
+ Server = ?config(server, Config),
+ ServerJID = jlib:make_jid(<<"">>, Server, <<"">>),
+ MyJID = my_jid(Config),
+ Txt = #text{data = <<"body">>},
+ Msg = #message{from = ServerJID, to = MyJID, body = [Txt]},
+ %% Route message. The message should be queued by the C2S process.
+ ejabberd_router:route(ServerJID, MyJID, xmpp_codec:encode(Msg)),
+ send(Config, #sm_resume{previd = ID, h = 0}),
+ #sm_resumed{previd = ID, h = 3} = recv(),
+ #message{from = ServerJID, to = MyJID, body = [Txt]} = recv(),
+ #sm_r{} = recv(),
+ send(Config, #sm_a{h = 1}),
+ disconnect(Config).
+
private(Config) ->
Conference = #bookmark_conference{name = <<"Some name">>,
autojoin = true,
diff --git a/test/suite.erl b/test/suite.erl
index 180be40fb..a1043526f 100644
--- a/test/suite.erl
+++ b/test/suite.erl
@@ -88,6 +88,11 @@ disconnect(Config) ->
ejabberd_socket:close(Socket),
Config.
+close_socket(Config) ->
+ Socket = ?config(socket, Config),
+ ejabberd_socket:close(Socket),
+ Config.
+
starttls(Config) ->
send(Config, #starttls{}),
#starttls_proceed{} = recv(),
@@ -146,8 +151,13 @@ wait_auth_SASL_result(Config) ->
{xmlstreamstart, <<"stream:stream">>, Attrs} = recv(),
<<"jabber:client">> = xml:get_attr_s(<<"xmlns">>, Attrs),
<<"1.0">> = xml:get_attr_s(<<"version">>, Attrs),
- #stream_features{} = recv(),
- Config;
+ #stream_features{sub_els = Fs} = recv(),
+ lists:foldl(
+ fun(#feature_sm{}, ConfigAcc) ->
+ set_opt(sm, true, ConfigAcc);
+ (_, ConfigAcc) ->
+ ConfigAcc
+ end, Config, Fs);
#sasl_challenge{text = ClientIn} ->
{Response, SASL} = (?config(sasl, Config))(ClientIn),
send(Config, #sasl_response{text = Response}),