aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-12-27 08:55:14 +0300
committerEvgeniy Khramtsov <ekhramtsov@process-one.net>2017-12-27 08:55:14 +0300
commit812acf0688ba9b27abbd1fff140fb0f0751cafeb (patch)
treeb615252fef51213f6d39d6d0df3053387fed2b6c /test
parentAdd new schemas for SQLite and MySQL (diff)
Update the test suite to support new XMPP socket API
Diffstat (limited to 'test')
-rw-r--r--test/suite.erl102
1 files changed, 72 insertions, 30 deletions
diff --git a/test/suite.erl b/test/suite.erl
index ce759446e..f66401c5e 100644
--- a/test/suite.erl
+++ b/test/suite.erl
@@ -117,7 +117,7 @@ init_config(Config) ->
{rosterver, false},
{lang, <<"en">>},
{base_dir, BaseDir},
- {socket, undefined},
+ {receiver, undefined},
{pubsub_node, <<"node!@#$%^&*()'\"`~<>+-/;:_=[]{}|\\">>},
{pubsub_node_title, <<"title!@#$%^&*()'\"`~<>+-/;:_=[]{}|\\">>},
{resource, <<"resource!@#$%^&*()'\"`~<>+-/;:_=[]{}|\\">>},
@@ -201,7 +201,7 @@ connect(Config) ->
end.
tcp_connect(Config) ->
- case ?config(socket, Config) of
+ case ?config(receiver, Config) of
undefined ->
Owner = self(),
NS = case ?config(type, Config) of
@@ -209,13 +209,12 @@ tcp_connect(Config) ->
server -> ?NS_SERVER;
component -> ?NS_COMPONENT
end,
- ReceiverPid = spawn(fun() -> receiver(NS, Owner) end),
- {ok, Sock} = ejabberd_socket:connect(
- ?config(server_host, Config),
- ?config(server_port, Config),
- [binary, {packet, 0}, {active, false}],
- infinity, ReceiverPid),
- set_opt(socket, Sock, Config);
+ Server = ?config(server_host, Config),
+ Port = ?config(server_port, Config),
+ ReceiverPid = spawn(fun() ->
+ start_receiver(NS, Owner, Server, Port)
+ end),
+ set_opt(receiver, ReceiverPid, Config);
_ ->
Config
end.
@@ -259,7 +258,6 @@ process_stream_features(Config) ->
disconnect(Config) ->
ct:comment("Disconnecting"),
- Socket = ?config(socket, Config),
try
send_text(Config, ?STREAM_TRAILER)
catch exit:normal ->
@@ -267,13 +265,12 @@ disconnect(Config) ->
end,
receive {xmlstreamend, <<"stream:stream">>} -> ok end,
flush(Config),
- ejabberd_socket:close(Socket),
+ ok = recv_call(Config, close),
ct:comment("Disconnected"),
- set_opt(socket, undefined, Config).
+ set_opt(receiver, undefined, Config).
close_socket(Config) ->
- Socket = ?config(socket, Config),
- ejabberd_socket:close(Socket),
+ ok = recv_call(Config, close),
Config.
starttls(Config) ->
@@ -289,18 +286,15 @@ starttls(Config, ShouldFail) ->
#starttls_failure{} ->
ct:fail(starttls_failed);
#starttls_proceed{} ->
- {ok, TLSSocket} = ejabberd_socket:starttls(
- ?config(socket, Config),
- [{certfile, ?config(certfile, Config)},
- connect]),
- set_opt(socket, TLSSocket, Config)
+ ok = recv_call(Config, {starttls, ?config(certfile, Config)}),
+ Config
end.
zlib(Config) ->
send(Config, #compress{methods = [<<"zlib">>]}),
receive #compressed{} -> ok end,
- {ok, ZlibSocket} = ejabberd_socket:compress(?config(socket, Config)),
- process_stream_features(init_stream(set_opt(socket, ZlibSocket, Config))).
+ ok = recv_call(Config, compress),
+ process_stream_features(init_stream(Config)).
auth(Config) ->
auth(Config, false).
@@ -442,7 +436,7 @@ wait_auth_SASL_result(Config, ShouldFail) ->
#sasl_success{} when ShouldFail ->
ct:fail(sasl_auth_should_have_failed);
#sasl_success{} ->
- ejabberd_socket:reset_stream(?config(socket, Config)),
+ ok = recv_call(Config, reset_stream),
send(Config, stream_header(Config)),
Type = ?config(type, Config),
NS = if Type == client -> ?NS_CLIENT;
@@ -528,7 +522,7 @@ decode(El, NS, Opts) ->
end.
send_text(Config, Text) ->
- ejabberd_socket:send(?config(socket, Config), Text).
+ ok = recv_call(Config, {send_text, Text}).
send(State, Pkt) ->
{NewID, NewPkt} = case Pkt of
@@ -774,23 +768,71 @@ get_roster(Config) ->
{LUser, LServer, _} = jid:tolower(my_jid(Config)),
mod_roster:get_roster(LUser, LServer).
-receiver(NS, Owner) ->
+recv_call(Config, Msg) ->
+ Receiver = ?config(receiver, Config),
+ Ref = make_ref(),
+ Receiver ! {Ref, Msg},
+ receive
+ {Ref, Reply} ->
+ Reply
+ end.
+
+start_receiver(NS, Owner, Server, Port) ->
MRef = erlang:monitor(process, Owner),
- receiver(NS, Owner, MRef).
+ {ok, Socket} = xmpp_socket:connect(
+ Server, Port,
+ [binary, {packet, 0}, {active, false}], infinity),
+ receiver(NS, Owner, Socket, MRef).
-receiver(NS, Owner, MRef) ->
+receiver(NS, Owner, Socket, MRef) ->
receive
+ {Ref, reset_stream} ->
+ Socket1 = xmpp_socket:reset_stream(Socket),
+ Owner ! {Ref, ok},
+ receiver(NS, Owner, Socket1, MRef);
+ {Ref, {starttls, Certfile}} ->
+ {ok, TLSSocket} = xmpp_socket:starttls(
+ Socket,
+ [{certfile, Certfile}, connect]),
+ Owner ! {Ref, ok},
+ receiver(NS, Owner, TLSSocket, MRef);
+ {Ref, compress} ->
+ {ok, ZlibSocket} = xmpp_socket:compress(Socket),
+ Owner ! {Ref, ok},
+ receiver(NS, Owner, ZlibSocket, MRef);
+ {Ref, {send_text, Text}} ->
+ ok = xmpp_socket:send(Socket, Text),
+ Owner ! {Ref, ok},
+ receiver(NS, Owner, Socket, MRef);
+ {Ref, close} ->
+ xmpp_socket:close(Socket),
+ Owner ! {Ref, ok},
+ receiver(NS, Owner, Socket, MRef);
{'$gen_event', {xmlstreamelement, El}} ->
Owner ! decode_stream_element(NS, El),
- receiver(NS, Owner, MRef);
+ receiver(NS, Owner, Socket, MRef);
{'$gen_event', {xmlstreamstart, Name, Attrs}} ->
Owner ! decode(#xmlel{name = Name, attrs = Attrs}, <<>>, []),
- receiver(NS, Owner, MRef);
+ receiver(NS, Owner, Socket, MRef);
{'$gen_event', Event} ->
Owner ! Event,
- receiver(NS, Owner, MRef);
+ receiver(NS, Owner, Socket, MRef);
{'DOWN', MRef, process, Owner, _} ->
- ok
+ ok;
+ {tcp, _, Data} ->
+ case xmpp_socket:recv(Socket, Data) of
+ {ok, Socket1} ->
+ receiver(NS, Owner, Socket1, MRef);
+ {error, _} ->
+ Owner ! closed,
+ receiver(NS, Owner, Socket, MRef)
+ end;
+ {tcp_error, _, _} ->
+ Owner ! closed,
+ receiver(NS, Owner, Socket, MRef);
+ {tcp_closed, _} ->
+ Owner ! closed,
+ receiver(NS, Owner, Socket, MRef)
end.
%%%===================================================================