WIP: port a test to use the multi-node framework.

This commit is contained in:
Simon MacMullen 2014-05-08 16:26:52 +01:00
parent 329e9fda03
commit 4b787a9d20
3 changed files with 99 additions and 66 deletions

View File

@ -1,11 +1,17 @@
RELEASABLE:=true
DEPS:=rabbitmq-erlang-client
WITH_BROKER_TEST_COMMANDS:=rabbit_federation_test_all:all_tests()
WITH_BROKER_TEST_CONFIG:=$(PACKAGE_DIR)/etc/rabbit-test
WITH_BROKER_SETUP_SCRIPTS:=$(PACKAGE_DIR)/etc/setup-rabbit-test.sh
DEPS:=rabbitmq-erlang-client rabbitmq-test
# WITH_BROKER_TEST_COMMANDS:=rabbit_federation_test_all:all_tests()
# WITH_BROKER_TEST_CONFIG:=$(PACKAGE_DIR)/etc/rabbit-test
# WITH_BROKER_SETUP_SCRIPTS:=$(PACKAGE_DIR)/etc/setup-rabbit-test.sh
FILTER:=all
COVER:=false
STANDALONE_TEST_COMMANDS:=rabbit_test_runner:run_multi(\"$(PACKAGE_DIR)/test/ebin\",\"$(FILTER)\",$(COVER),\"/tmp/rabbitmq-multi-node/plugins\")
$(PACKAGE_DIR)+pre-test::
rm -rf tmp /tmp/rabbitmq-*-mnesia
for R in hare flopsy mopsy cottontail dylan bugs jessica cycle1 cycle2; do \
erl_call -sname $$R -q ; \
done
rm -rf /tmp/rabbitmq-multi-node/plugins
mkdir -p /tmp/rabbitmq-multi-node/plugins/plugins
cp -p dist/*.ez /tmp/rabbitmq-multi-node/plugins/plugins
# rm -rf tmp /tmp/rabbitmq-*-mnesia
# for R in hare flopsy mopsy cottontail dylan bugs jessica cycle1 cycle2; do \
# erl_call -sname $$R -q ; \
# done

View File

@ -16,6 +16,7 @@
-module(rabbit_federation_exchange_test).
-compile(export_all).
-include("rabbit_federation.hrl").
-include_lib("eunit/include/eunit.hrl").
-include_lib("amqp_client/include/amqp_client.hrl").
@ -253,11 +254,19 @@ no_loop_test() ->
end, [x(<<"one">>),
x(<<"two">>)]).
binding_recovery_test() ->
binding_recovery_with() -> start_ab.
binding_recovery([_Rabbit, Hare]) ->
Q = <<"durable-Q">>,
{_, Ch} = rabbit_test_util:connect(Hare),
stop_other_node(?HARE),
Ch = start_other_node(?HARE, "hare-two-upstreams"),
rabbit_federation_test_util:set_upstream(
Hare, <<"hare">>, <<"amqp://localhost:5673">>),
rabbit_federation_test_util:set_upstream_set(
Hare, <<"upstream">>,
[{<<"hare">>, [{<<"exchange">>, <<"upstream">>}]},
{<<"hare">>, [{<<"exchange">>, <<"upstream2">>}]}]),
rabbit_federation_test_util:set_policy(
Hare, <<"fed">>, <<"^fed\\.">>, <<"upstream">>),
declare_all(Ch, [x(<<"upstream2">>) | ?UPSTREAM_DOWNSTREAM]),
#'queue.declare_ok'{} =
@ -267,30 +276,33 @@ binding_recovery_test() ->
timer:sleep(100), %% To get the suffix written
%% i.e. don't clean up
rabbit_federation_test_util:stop_other_node(?HARE),
start_other_node(?HARE, "hare-two-upstreams"),
Hare2 = rabbit_test_configs:restart_node(Hare),
?assert(none =/= suffix(?HARE, "upstream")),
?assert(none =/= suffix(?HARE, "upstream2")),
?assert(none =/= suffix(Hare2, <<"hare">>, "upstream")),
?assert(none =/= suffix(Hare2, <<"hare">>, "upstream2")),
%% again don't clean up
rabbit_federation_test_util:stop_other_node(?HARE),
Hare3 = rabbit_test_configs:restart_node(Hare2),
{_, Ch3} = rabbit_test_util:connect(Hare3),
Ch2 = start_other_node(?HARE),
rabbit_test_util:set_param(
Hare, <<"federation-upstream-set">>, <<"upstream">>,
[[{<<"upstream">>, <<"hare">>}, {<<"exchange">>, <<"upstream">>}]]),
publish_expect(Ch2, <<"upstream">>, <<"key">>, Q, <<"HELLO">>),
?assert(none =/= suffix(?HARE, "upstream")),
?assertEqual(none, suffix(?HARE, "upstream2")),
delete_all(Ch2, [x(<<"upstream2">>) | ?UPSTREAM_DOWNSTREAM]),
delete_queue(Ch2, Q),
publish_expect(Ch3, <<"upstream">>, <<"key">>, Q, <<"HELLO">>),
?assert(none =/= suffix(Hare3, <<"hare">>, "upstream")),
?assertEqual(none, suffix(Hare3, <<"hare">>, "upstream2")),
delete_all(Ch3, [x(<<"upstream2">>) | ?UPSTREAM_DOWNSTREAM]),
delete_queue(Ch3, Q),
ok.
suffix({Nodename, _}, XName) ->
rpc:call(n(Nodename), rabbit_federation_db, get_active_suffix,
suffix(Cfg, Name, XName) ->
rpc:call(pget(node, Cfg), rabbit_federation_db, get_active_suffix,
[r(<<"fed.downstream">>),
#upstream{name = list_to_binary(Nodename),
#upstream{name = Name,
exchange_name = list_to_binary(XName)}, none]).
%% TODO remove
n(Nodename) ->
{_, NodeHost} = rabbit_nodes:parts(node()),
rabbit_nodes:make({Nodename, NodeHost}).

View File

@ -51,61 +51,76 @@ expect_empty(Ch, Q) ->
?assertMatch(#'basic.get_empty'{},
amqp_channel:call(Ch, #'basic.get'{ queue = Q })).
set_param(Component, Name, Value) ->
rabbitmqctl(fmt("set_parameter ~s ~s '~s'", [Component, Name, Value])).
set_upstream(Cfg, Name, URI) ->
rabbit_test_util:set_param(Cfg, <<"federation-upstream">>, Name,
[{<<"uri">>, URI}]).
clear_param(Component, Name) ->
rabbitmqctl(fmt("clear_parameter ~s ~s", [Component, Name])).
set_upstream_set(Cfg, Name, Set) ->
rabbit_test_util:set_param(
Cfg, <<"federation-upstream-set">>, Name,
[[{<<"upstream">>, UStream} | Extra] || {UStream, Extra} <- Set]).
set_pol(Name, Pattern, Defn) ->
rabbitmqctl(fmt("set_policy ~s \"~s\" '~s'", [Name, Pattern, Defn])).
set_policy(Cfg, Name, Pattern, UpstreamSet) ->
rabbit_test_util:set_policy(
Cfg, Name, Pattern, <<"all">>,
[{<<"federation-upstream-set">>, UpstreamSet}]).
clear_pol(Name) ->
rabbitmqctl(fmt("clear_policy ~s ", [Name])).
fmt(Fmt, Args) ->
string:join(string:tokens(rabbit_misc:format(Fmt, Args), [$\n]), " ").
%% set_param(Component, Name, Value) ->
%% rabbitmqctl(fmt("set_parameter ~s ~s '~s'", [Component, Name, Value])).
start_other_node({Name, Port}) ->
start_other_node({Name, Port}, Name).
%% clear_param(Component, Name) ->
%% rabbitmqctl(fmt("clear_parameter ~s ~s", [Component, Name])).
start_other_node({Name, Port}, Config) ->
start_other_node({Name, Port}, Config,
os:getenv("RABBITMQ_ENABLED_PLUGINS_FILE")).
%% set_pol(Name, Pattern, Defn) ->
%% rabbitmqctl(fmt("set_policy ~s \"~s\" '~s'", [Name, Pattern, Defn])).
start_other_node({Name, Port}, Config, PluginsFile) ->
execute("make -C " ++ plugin_dir() ++ " OTHER_NODE=" ++ Name ++
" OTHER_PORT=" ++ integer_to_list(Port) ++
" OTHER_CONFIG=" ++ Config ++
" OTHER_PLUGINS=" ++ PluginsFile ++
" start-other-node"),
{ok, Conn} = amqp_connection:start(#amqp_params_network{port = Port}),
{ok, Ch} = amqp_connection:open_channel(Conn),
Ch.
%% clear_pol(Name) ->
%% rabbitmqctl(fmt("clear_policy ~s ", [Name])).
stop_other_node({Name, _Port}) ->
execute("make -C " ++ plugin_dir() ++ " OTHER_NODE=" ++ Name ++
" stop-other-node"),
timer:sleep(1000).
%% fmt(Fmt, Args) ->
%% string:join(string:tokens(rabbit_misc:format(Fmt, Args), [$\n]), " ").
rabbitmqctl(Args) ->
execute(plugin_dir() ++ "/../rabbitmq-server/scripts/rabbitmqctl " ++ Args),
timer:sleep(100).
%% start_other_node({Name, Port}) ->
%% start_other_node({Name, Port}, Name).
%% ?assertCmd seems to hang if you background anything. Bah!
execute(Cmd) ->
Res = os:cmd(Cmd ++ " ; echo $?"),
case lists:reverse(string:tokens(Res, "\n")) of
["0" | _] -> ok;
_ -> exit({command_failed, Cmd, Res})
end.
%% start_other_node({Name, Port}, Config) ->
%% start_other_node({Name, Port}, Config,
%% os:getenv("RABBITMQ_ENABLED_PLUGINS_FILE")).
%% start_other_node({Name, Port}, Config, PluginsFile) ->
%% execute("make -C " ++ plugin_dir() ++ " OTHER_NODE=" ++ Name ++
%% " OTHER_PORT=" ++ integer_to_list(Port) ++
%% " OTHER_CONFIG=" ++ Config ++
%% " OTHER_PLUGINS=" ++ PluginsFile ++
%% " start-other-node"),
%% {ok, Conn} = amqp_connection:start(#amqp_params_network{port = Port}),
%% {ok, Ch} = amqp_connection:open_channel(Conn),
%% Ch.
%% stop_other_node({Name, _Port}) ->
%% execute("make -C " ++ plugin_dir() ++ " OTHER_NODE=" ++ Name ++
%% " stop-other-node"),
%% timer:sleep(1000).
%% rabbitmqctl(Args) ->
%% execute(plugin_dir() ++ "/../rabbitmq-server/scripts/rabbitmqctl " ++ Args),
%% timer:sleep(100).
%% %% ?assertCmd seems to hang if you background anything. Bah!
%% execute(Cmd) ->
%% Res = os:cmd(Cmd ++ " ; echo $?"),
%% case lists:reverse(string:tokens(Res, "\n")) of
%% ["0" | _] -> ok;
%% _ -> exit({command_failed, Cmd, Res})
%% end.
policy(UpstreamSet) ->
rabbit_misc:format("{\"federation-upstream-set\": \"~s\"}", [UpstreamSet]).
plugin_dir() ->
{ok, [[File]]} = init:get_argument(config),
filename:dirname(filename:dirname(File)).
%% plugin_dir() ->
%% {ok, [[File]]} = init:get_argument(config),
%% filename:dirname(filename:dirname(File)).
%%----------------------------------------------------------------------------