diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2014-07-22 13:59:31 +0400 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2014-07-22 14:00:48 +0400 |
commit | 25676b43ed28a0291bccb14e254fda9cbc904ad2 (patch) | |
tree | 57968d52f3d3d4d1ea7004261e68296c393a2cfa /test | |
parent | old release notes are not installed anymore (diff) |
Add tests for session management
Diffstat (limited to 'test')
-rw-r--r-- | test/ejabberd_SUITE.erl | 44 | ||||
-rw-r--r-- | test/suite.erl | 14 |
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}), |