Skip to content

Commit

Permalink
Switch testsuite to common_test, part #2
Browse files Browse the repository at this point in the history
The migrated tests are those from `rabbit_tests.erl`.

References #725.
[#116526487]
  • Loading branch information
dumbbell committed Apr 13, 2016
1 parent c61eb2d commit 8e9827b
Show file tree
Hide file tree
Showing 6 changed files with 3,944 additions and 221 deletions.
58 changes: 58 additions & 0 deletions test/dummy_event_receiver.erl
@@ -0,0 +1,58 @@
%% The contents of this file are subject to the Mozilla Public License
%% Version 1.1 (the "License"); you may not use this file except in
%% compliance with the License. You may obtain a copy of the License
%% at http://www.mozilla.org/MPL/
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and
%% limitations under the License.
%%
%% The Original Code is RabbitMQ.
%%
%% The Initial Developer of the Original Code is GoPivotal, Inc.
%% Copyright (c) 2007-2015 Pivotal Software, Inc. All rights reserved.
%%

-module(dummy_event_receiver).

-export([start/3, stop/0]).

-export([init/1, handle_call/2, handle_event/2, handle_info/2,
terminate/2, code_change/3]).

-include("rabbit.hrl").

start(Pid, Nodes, Types) ->
Oks = [ok || _ <- Nodes],
{Oks, _} = rpc:multicall(Nodes, gen_event, add_handler,
[rabbit_event, ?MODULE, [Pid, Types]]).

stop() ->
gen_event:delete_handler(rabbit_event, ?MODULE, []).

%%----------------------------------------------------------------------------

init([Pid, Types]) ->
{ok, {Pid, Types}}.

handle_call(_Request, State) ->
{ok, not_understood, State}.

handle_event(Event = #event{type = Type}, State = {Pid, Types}) ->
case lists:member(Type, Types) of
true -> Pid ! Event;
false -> ok
end,
{ok, State}.

handle_info(_Info, State) ->
{ok, State}.

terminate(_Arg, _State) ->
ok.

code_change(_OldVsn, State, _Extra) ->
{ok, State}.

%%----------------------------------------------------------------------------
72 changes: 72 additions & 0 deletions test/dummy_runtime_parameters.erl
@@ -0,0 +1,72 @@
%% The contents of this file are subject to the Mozilla Public License
%% Version 1.1 (the "License"); you may not use this file except in
%% compliance with the License. You may obtain a copy of the License
%% at http://www.mozilla.org/MPL/
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and
%% limitations under the License.
%%
%% The Original Code is RabbitMQ.
%%
%% The Initial Developer of the Original Code is GoPivotal, Inc.
%% Copyright (c) 2007-2015 Pivotal Software, Inc. All rights reserved.
%%

-module(dummy_runtime_parameters).
-behaviour(rabbit_runtime_parameter).
-behaviour(rabbit_policy_validator).

-include("rabbit.hrl").

-export([validate/5, notify/4, notify_clear/3]).
-export([register/0, unregister/0]).
-export([validate_policy/1]).
-export([register_policy_validator/0, unregister_policy_validator/0]).

%----------------------------------------------------------------------------

register() ->
rabbit_registry:register(runtime_parameter, <<"test">>, ?MODULE).

unregister() ->
rabbit_registry:unregister(runtime_parameter, <<"test">>).

validate(_, <<"test">>, <<"good">>, _Term, _User) -> ok;
validate(_, <<"test">>, <<"maybe">>, <<"good">>, _User) -> ok;
validate(_, <<"test">>, <<"admin">>, _Term, none) -> ok;
validate(_, <<"test">>, <<"admin">>, _Term, User) ->
case lists:member(administrator, User#user.tags) of
true -> ok;
false -> {error, "meh", []}
end;
validate(_, <<"test">>, _, _, _) -> {error, "meh", []}.

notify(_, _, _, _) -> ok.
notify_clear(_, _, _) -> ok.

%----------------------------------------------------------------------------

register_policy_validator() ->
rabbit_registry:register(policy_validator, <<"testeven">>, ?MODULE),
rabbit_registry:register(policy_validator, <<"testpos">>, ?MODULE).

unregister_policy_validator() ->
rabbit_registry:unregister(policy_validator, <<"testeven">>),
rabbit_registry:unregister(policy_validator, <<"testpos">>).

validate_policy([{<<"testeven">>, Terms}]) when is_list(Terms) ->
case length(Terms) rem 2 =:= 0 of
true -> ok;
false -> {error, "meh", []}
end;

validate_policy([{<<"testpos">>, Terms}]) when is_list(Terms) ->
case lists:all(fun (N) -> is_integer(N) andalso N > 0 end, Terms) of
true -> ok;
false -> {error, "meh", []}
end;

validate_policy(_) ->
{error, "meh", []}.
32 changes: 20 additions & 12 deletions test/rabbit_ct_broker_helpers.erl
Expand Up @@ -20,7 +20,7 @@

-export([
run_on_broker/4,
find_listener/0,
get_connection_pids/1,
test_channel/0
]).

Expand All @@ -47,17 +47,20 @@ run_on_broker(Node, Module, Function, Args) ->
Ret -> Ret
end.

find_listener() ->
[#listener{host = H, port = P} | _] =
[L || L = #listener{node = N, protocol = amqp}
<- rabbit_networking:active_listeners(),
N =:= node()],
{H, P}.

user(Username) ->
#user{username = Username,
tags = [administrator],
authz_backends = [{rabbit_auth_backend_internal, none}]}.
%% From a given list of gen_tcp client connections, return the list of
%% connection handler PID in RabbitMQ.
get_connection_pids(Connections) ->
ConnInfos = [
begin
{ok, {Addr, Port}} = inet:sockname(Connection),
[{peer_host, Addr}, {peer_port, Port}]
end || Connection <- Connections],
lists:filter(
fun(Conn) ->
ConnInfo = rabbit_networking:connection_info(Conn,
[peer_host, peer_port]),
lists:member(ConnInfo, ConnInfos)
end, rabbit_networking:connections()).

test_channel() ->
Me = self(),
Expand All @@ -76,3 +79,8 @@ test_writer(Pid) ->
test_writer(Pid);
shutdown -> ok
end.

user(Username) ->
#user{username = Username,
tags = [administrator],
authz_backends = [{rabbit_auth_backend_internal, none}]}.
91 changes: 91 additions & 0 deletions test/sup_delayed_restart_SUITE.erl
@@ -0,0 +1,91 @@
%% The contents of this file are subject to the Mozilla Public License
%% Version 1.1 (the "License"); you may not use this file except in
%% compliance with the License. You may obtain a copy of the License
%% at http://www.mozilla.org/MPL/
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and
%% limitations under the License.
%%
%% The Original Code is RabbitMQ.
%%
%% The Initial Developer of the Original Code is GoPivotal, Inc.
%% Copyright (c) 2007-2015 Pivotal Software, Inc. All rights reserved.
%%

-module(sup_delayed_restart_SUITE).

-behaviour(supervisor2).

-include_lib("common_test/include/ct.hrl").

-compile(export_all).

all() ->
[
delayed_restart
].

%%----------------------------------------------------------------------------
%% Public API
%%----------------------------------------------------------------------------

delayed_restart(_Config) ->
passed = with_sup(simple_one_for_one,
fun (SupPid) ->
{ok, _ChildPid} =
supervisor2:start_child(SupPid, []),
test_supervisor_delayed_restart(SupPid)
end),
passed = with_sup(one_for_one, fun test_supervisor_delayed_restart/1).

test_supervisor_delayed_restart(SupPid) ->
ok = ping_child(SupPid),
ok = exit_child(SupPid),
timer:sleep(100),
ok = ping_child(SupPid),
ok = exit_child(SupPid),
timer:sleep(100),
timeout = ping_child(SupPid),
timer:sleep(1010),
ok = ping_child(SupPid),
passed.

with_sup(RestartStrategy, Fun) ->
{ok, SupPid} = supervisor2:start_link(?MODULE, [RestartStrategy]),
Res = Fun(SupPid),
unlink(SupPid),
exit(SupPid, shutdown),
Res.

init([RestartStrategy]) ->
{ok, {{RestartStrategy, 1, 1},
[{test, {?MODULE, start_child, []}, {permanent, 1},
16#ffffffff, worker, [?MODULE]}]}}.

start_child() ->
{ok, proc_lib:spawn_link(fun run_child/0)}.

ping_child(SupPid) ->
Ref = make_ref(),
with_child_pid(SupPid, fun(ChildPid) -> ChildPid ! {ping, Ref, self()} end),
receive {pong, Ref} -> ok
after 1000 -> timeout
end.

exit_child(SupPid) ->
with_child_pid(SupPid, fun(ChildPid) -> exit(ChildPid, abnormal) end),
ok.

with_child_pid(SupPid, Fun) ->
case supervisor2:which_children(SupPid) of
[{_Id, undefined, worker, [?MODULE]}] -> ok;
[{_Id, ChildPid, worker, [?MODULE]}] -> Fun(ChildPid);
[] -> ok
end.

run_child() ->
receive {ping, Ref, Pid} -> Pid ! {pong, Ref},
run_child()
end.

0 comments on commit 8e9827b

Please sign in to comment.