summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorJean-Sébastien Pédron <jean-sebastien@rabbitmq.com>2016-04-07 15:16:40 +0200
committerJean-Sébastien Pédron <jean-sebastien.pedron@dumbbell.fr>2016-05-27 10:37:28 +0200
commited6588bd1ea2c31b029d7ee510ae7df1ed0da62e (patch)
tree3810331358ce6cd0e042997b54ddefb43f9f0bfc /test
parent4d2e3bbcbbfee4d72de3ddf4f610c5a2834ae0a1 (diff)
downloadrabbitmq-server-git-ed6588bd1ea2c31b029d7ee510ae7df1ed0da62e.tar.gz
Squash several small testsuites in unit_SUITE and unit_inbroker_SUITE
This allows to run most of the testcases in parallel. As the name of the new testsuites suggests, testcases are grouped by the fact they must run inside a running broker or not. References #725. [#116526487]
Diffstat (limited to 'test')
-rw-r--r--test/credit_flow_SUITE.erl77
-rw-r--r--test/dummy_supervisor2.erl41
-rw-r--r--test/password_hashing_SUITE.erl121
-rw-r--r--test/resource_monitor_SUITE.erl64
-rw-r--r--test/supervisor2_SUITE.erl90
-rw-r--r--test/truncate_SUITE.erl99
-rw-r--r--test/unit_SUITE.erl212
-rw-r--r--test/unit_inbroker_SUITE.erl (renamed from test/rabbit_ctl_timeout_SUITE.erl)161
-rw-r--r--test/vm_memory_monitor_SUITE.erl42
9 files changed, 404 insertions, 503 deletions
diff --git a/test/credit_flow_SUITE.erl b/test/credit_flow_SUITE.erl
deleted file mode 100644
index 5747f8c8d8..0000000000
--- a/test/credit_flow_SUITE.erl
+++ /dev/null
@@ -1,77 +0,0 @@
-%% 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) 2011-2015 Pivotal Software, Inc. All rights reserved.
-%%
-
--module(credit_flow_SUITE).
-
--include_lib("common_test/include/ct.hrl").
-
--compile(export_all).
-
-all() ->
- [
- credit_flow_settings
- ].
-
-%% -------------------------------------------------------------------
-%% Testsuite setup/teardown.
-%% -------------------------------------------------------------------
-
-init_per_suite(Config) ->
- rabbit_ct_helpers:log_environment(),
- rabbit_ct_helpers:run_setup_steps(?MODULE, Config).
-
-end_per_suite(Config) ->
- rabbit_ct_helpers:run_teardown_steps(Config).
-
-%% ---------------------------------------------------------------------------
-%% Test cases
-%% ---------------------------------------------------------------------------
-
-credit_flow_settings(Config) ->
- passed = rabbit_ct_broker_helpers:run_test_on_broker(
- ?config(rmq_nodename, Config),
- ?MODULE, credit_flow_settings1, [Config]).
-
-credit_flow_settings1(_Config) ->
- %% default values
- passed = test_proc(200, 50),
-
- application:set_env(rabbit, credit_flow_default_credit, {100, 20}),
- passed = test_proc(100, 20),
-
- application:unset_env(rabbit, credit_flow_default_credit),
-
- % back to defaults
- passed = test_proc(200, 50),
- passed.
-
-test_proc(InitialCredit, MoreCreditAfter) ->
- Pid = spawn(fun dummy/0),
- Pid ! {credit, self()},
- {InitialCredit, MoreCreditAfter} =
- receive
- {credit, Val} -> Val
- end,
- passed.
-
-dummy() ->
- credit_flow:send(self()),
- receive
- {credit, From} ->
- From ! {credit, get(credit_flow_default_credit)};
- _ ->
- dummy()
- end.
diff --git a/test/dummy_supervisor2.erl b/test/dummy_supervisor2.erl
new file mode 100644
index 0000000000..9ca3f6329c
--- /dev/null
+++ b/test/dummy_supervisor2.erl
@@ -0,0 +1,41 @@
+%% 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) 2011-2016 Pivotal Software, Inc. All rights reserved.
+%%
+
+-module(dummy_supervisor2).
+
+-behaviour(supervisor2).
+
+-export([
+ start_link/0,
+ init/1
+ ]).
+
+start_link() ->
+ Pid = spawn_link(fun () ->
+ process_flag(trap_exit, true),
+ receive stop -> ok end
+ end),
+ {ok, Pid}.
+
+init([Timeout]) ->
+ {ok, {{one_for_one, 0, 1},
+ [{test_sup, {supervisor2, start_link,
+ [{local, ?MODULE}, ?MODULE, []]},
+ transient, Timeout, supervisor, [?MODULE]}]}};
+init([]) ->
+ {ok, {{simple_one_for_one, 0, 1},
+ [{test_worker, {?MODULE, start_link, []},
+ temporary, 1000, worker, [?MODULE]}]}}.
diff --git a/test/password_hashing_SUITE.erl b/test/password_hashing_SUITE.erl
deleted file mode 100644
index 50f0f4e6d1..0000000000
--- a/test/password_hashing_SUITE.erl
+++ /dev/null
@@ -1,121 +0,0 @@
-%% 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) 2011-2015 Pivotal Software, Inc. All rights reserved.
-%%
-
--module(password_hashing_SUITE).
-
--include_lib("common_test/include/ct.hrl").
--include_lib("rabbit_common/include/rabbit.hrl").
-
--compile(export_all).
-
-all() ->
- [
- password_hashing,
- change_password
- ].
-
-%% -------------------------------------------------------------------
-%% Testsuite setup/teardown.
-%% -------------------------------------------------------------------
-
-init_per_suite(Config) ->
- rabbit_ct_helpers:log_environment(),
- rabbit_ct_helpers:run_setup_steps(?MODULE, Config).
-
-end_per_suite(Config) ->
- rabbit_ct_helpers:run_teardown_steps(Config).
-
-%% ---------------------------------------------------------------------------
-%% Test cases
-%% ---------------------------------------------------------------------------
-
-password_hashing(Config) ->
- passed = rabbit_ct_broker_helpers:run_test_on_broker(
- ?config(rmq_nodename, Config),
- ?MODULE, password_hashing1, [Config]).
-
-password_hashing1(_Config) ->
- rabbit_password_hashing_sha256 = rabbit_password:hashing_mod(),
- application:set_env(rabbit, password_hashing_module,
- rabbit_password_hashing_md5),
- rabbit_password_hashing_md5 = rabbit_password:hashing_mod(),
- application:set_env(rabbit, password_hashing_module,
- rabbit_password_hashing_sha256),
- rabbit_password_hashing_sha256 = rabbit_password:hashing_mod(),
-
- rabbit_password_hashing_sha256 =
- rabbit_password:hashing_mod(rabbit_password_hashing_sha256),
- rabbit_password_hashing_md5 =
- rabbit_password:hashing_mod(rabbit_password_hashing_md5),
- rabbit_password_hashing_md5 =
- rabbit_password:hashing_mod(undefined),
-
- rabbit_password_hashing_md5 =
- rabbit_auth_backend_internal:hashing_module_for_user(
- #internal_user{}),
- rabbit_password_hashing_md5 =
- rabbit_auth_backend_internal:hashing_module_for_user(
- #internal_user{
- hashing_algorithm = undefined
- }),
- rabbit_password_hashing_md5 =
- rabbit_auth_backend_internal:hashing_module_for_user(
- #internal_user{
- hashing_algorithm = rabbit_password_hashing_md5
- }),
-
- rabbit_password_hashing_sha256 =
- rabbit_auth_backend_internal:hashing_module_for_user(
- #internal_user{
- hashing_algorithm = rabbit_password_hashing_sha256
- }),
-
- passed.
-
-change_password(Config) ->
- passed = rabbit_ct_broker_helpers:run_test_on_broker(
- ?config(rmq_nodename, Config),
- ?MODULE, change_password1, [Config]).
-
-change_password1(_Config) ->
- UserName = <<"test_user">>,
- Password = <<"test_password">>,
- case rabbit_auth_backend_internal:lookup_user(UserName) of
- {ok, _} -> rabbit_auth_backend_internal:delete_user(UserName);
- _ -> ok
- end,
- ok = application:set_env(rabbit, password_hashing_module,
- rabbit_password_hashing_md5),
- ok = rabbit_auth_backend_internal:add_user(UserName, Password),
- {ok, #auth_user{username = UserName}} =
- rabbit_auth_backend_internal:user_login_authentication(
- UserName, [{password, Password}]),
- ok = application:set_env(rabbit, password_hashing_module,
- rabbit_password_hashing_sha256),
- {ok, #auth_user{username = UserName}} =
- rabbit_auth_backend_internal:user_login_authentication(
- UserName, [{password, Password}]),
-
- NewPassword = <<"test_password1">>,
- ok = rabbit_auth_backend_internal:change_password(UserName, NewPassword),
- {ok, #auth_user{username = UserName}} =
- rabbit_auth_backend_internal:user_login_authentication(
- UserName, [{password, NewPassword}]),
-
- {refused, _, [UserName]} =
- rabbit_auth_backend_internal:user_login_authentication(
- UserName, [{password, Password}]),
- passed.
diff --git a/test/resource_monitor_SUITE.erl b/test/resource_monitor_SUITE.erl
deleted file mode 100644
index 378b75cc1a..0000000000
--- a/test/resource_monitor_SUITE.erl
+++ /dev/null
@@ -1,64 +0,0 @@
-%% 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(resource_monitor_SUITE).
-
--include_lib("common_test/include/ct.hrl").
-
--compile(export_all).
-
-all() ->
- [
- parse_information_unit
- ].
-
-%% ---------------------------------------------------------------------------
-%% Tests
-%% ---------------------------------------------------------------------------
-
-parse_information_unit(_Config) ->
- lists:foreach(fun ({S, V}) ->
- V = rabbit_resource_monitor_misc:parse_information_unit(S)
- end,
- [
- {"1000", {ok, 1000}},
-
- {"10kB", {ok, 10000}},
- {"10MB", {ok, 10000000}},
- {"10GB", {ok, 10000000000}},
-
- {"10kiB", {ok, 10240}},
- {"10MiB", {ok, 10485760}},
- {"10GiB", {ok, 10737418240}},
-
- {"10k", {ok, 10240}},
- {"10M", {ok, 10485760}},
- {"10G", {ok, 10737418240}},
-
- {"10KB", {ok, 10000}},
- {"10K", {ok, 10240}},
- {"10m", {ok, 10485760}},
- {"10Mb", {ok, 10000000}},
-
- {"0MB", {ok, 0}},
-
- {"10 k", {error, parse_error}},
- {"MB", {error, parse_error}},
- {"", {error, parse_error}},
- {"0.5GB", {error, parse_error}},
- {"10TB", {error, parse_error}}
- ]),
- passed.
diff --git a/test/supervisor2_SUITE.erl b/test/supervisor2_SUITE.erl
deleted file mode 100644
index e2b95146c0..0000000000
--- a/test/supervisor2_SUITE.erl
+++ /dev/null
@@ -1,90 +0,0 @@
-%% 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) 2011-2015 Pivotal Software, Inc. All rights reserved.
-%%
-
--module(supervisor2_SUITE).
-
--behaviour(supervisor2).
-
--include_lib("common_test/include/ct.hrl").
-
--compile(export_all).
-
-all() ->
- [
- check_shutdown_stop,
- check_shutdown_ignored
- ].
-
-check_shutdown_stop(_Config) ->
- ok = check_shutdown(stop, 200, 200, 2000).
-
-check_shutdown_ignored(_Config) ->
- ok = check_shutdown(ignored, 1, 2, 2000).
-
-check_shutdown(SigStop, Iterations, ChildCount, SupTimeout) ->
- {ok, Sup} = supervisor2:start_link(?MODULE, [SupTimeout]),
- Res = lists:foldl(
- fun (I, ok) ->
- TestSupPid = erlang:whereis(?MODULE),
- ChildPids =
- [begin
- {ok, ChildPid} =
- supervisor2:start_child(TestSupPid, []),
- ChildPid
- end || _ <- lists:seq(1, ChildCount)],
- MRef = erlang:monitor(process, TestSupPid),
- [P ! SigStop || P <- ChildPids],
- ok = supervisor2:terminate_child(Sup, test_sup),
- {ok, _} = supervisor2:restart_child(Sup, test_sup),
- receive
- {'DOWN', MRef, process, TestSupPid, shutdown} ->
- ok;
- {'DOWN', MRef, process, TestSupPid, Reason} ->
- {error, {I, Reason}}
- end;
- (_, R) ->
- R
- end, ok, lists:seq(1, Iterations)),
- unlink(Sup),
- MSupRef = erlang:monitor(process, Sup),
- exit(Sup, shutdown),
- receive
- {'DOWN', MSupRef, process, Sup, _Reason} ->
- ok
- end,
- Res.
-
-%% -------------------------------------------------------------------
-%% supervisor2 behavior callbacks.
-%% -------------------------------------------------------------------
-
-start_link() ->
- Pid = spawn_link(fun () ->
- process_flag(trap_exit, true),
- receive stop -> ok end
- end),
- {ok, Pid}.
-
-init([Timeout]) ->
- {ok, {{one_for_one, 0, 1},
- [{test_sup, {supervisor2, start_link,
- [{local, ?MODULE}, ?MODULE, []]},
- transient, Timeout, supervisor, [?MODULE]}]}};
-init([]) ->
- {ok, {{simple_one_for_one, 0, 1},
- [{test_worker, {?MODULE, start_link, []},
- temporary, 1000, worker, [?MODULE]}]}}.
-
diff --git a/test/truncate_SUITE.erl b/test/truncate_SUITE.erl
deleted file mode 100644
index 6c78be726d..0000000000
--- a/test/truncate_SUITE.erl
+++ /dev/null
@@ -1,99 +0,0 @@
-%% 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-2016 Pivotal Software, Inc. All rights reserved.
-%%
-
--module(truncate_SUITE).
-
--include_lib("common_test/include/ct.hrl").
-
--compile(export_all).
-
-all() ->
- [
- {group, all_tests}
- ].
-
-groups() ->
- [
- {all_tests, [parallel], [
- short_examples_exactly,
- term_limit,
- large_examples_for_size
- ]}
- ].
-
-init_per_group(_, Config) -> Config.
-end_per_group(_, Config) -> Config.
-
-short_examples_exactly(_Config) ->
- F = fun (Term, Exp) ->
- Exp = truncate:term(Term, {1, {10, 10, 5, 5}}),
- Term = truncate:term(Term, {100000, {10, 10, 5, 5}})
- end,
- FSmall = fun (Term, Exp) ->
- Exp = truncate:term(Term, {1, {2, 2, 2, 2}}),
- Term = truncate:term(Term, {100000, {2, 2, 2, 2}})
- end,
- F([], []),
- F("h", "h"),
- F("hello world", "hello w..."),
- F([[h,e,l,l,o,' ',w,o,r,l,d]], [[h,e,l,l,o,'...']]),
- F([a|b], [a|b]),
- F(<<"hello">>, <<"hello">>),
- F([<<"hello world">>], [<<"he...">>]),
- F(<<1:1>>, <<1:1>>),
- F(<<1:81>>, <<0:56, "...">>),
- F({{{{a}}},{b},c,d,e,f,g,h,i,j,k}, {{{'...'}},{b},c,d,e,f,g,h,i,j,'...'}),
- FSmall({a,30,40,40,40,40}, {a,30,'...'}),
- FSmall([a,30,40,40,40,40], [a,30,'...']),
- P = spawn(fun() -> receive die -> ok end end),
- F([0, 0.0, <<1:1>>, F, P], [0, 0.0, <<1:1>>, F, P]),
- P ! die,
- R = make_ref(),
- F([R], [R]),
- ok.
-
-term_limit(_Config) ->
- W = erlang:system_info(wordsize),
- S = <<"abc">>,
- 1 = truncate:term_size(S, 4, W),
- limit_exceeded = truncate:term_size(S, 3, W),
- case 100 - truncate:term_size([S, S], 100, W) of
- 22 -> ok; %% 32 bit
- 38 -> ok %% 64 bit
- end,
- case 100 - truncate:term_size([S, [S]], 100, W) of
- 30 -> ok; %% ditto
- 54 -> ok
- end,
- limit_exceeded = truncate:term_size([S, S], 6, W),
- ok.
-
-large_examples_for_size(_Config) ->
- %% Real world values
- Shrink = fun(Term) -> truncate:term(Term, {1, {1000, 100, 50, 5}}) end,
- TestSize = fun(Term) ->
- true = 5000000 < size(term_to_binary(Term)),
- true = 500000 > size(term_to_binary(Shrink(Term)))
- end,
- TestSize(lists:seq(1, 5000000)),
- TestSize(recursive_list(1000, 10)),
- TestSize(recursive_list(5000, 20)),
- TestSize(gb_sets:from_list([I || I <- lists:seq(1, 1000000)])),
- TestSize(gb_trees:from_orddict([{I, I} || I <- lists:seq(1, 1000000)])),
- ok.
-
-recursive_list(S, 0) -> lists:seq(1, S);
-recursive_list(S, N) -> [recursive_list(S div N, N-1) || _ <- lists:seq(1, S)].
diff --git a/test/unit_SUITE.erl b/test/unit_SUITE.erl
new file mode 100644
index 0000000000..eddcba5803
--- /dev/null
+++ b/test/unit_SUITE.erl
@@ -0,0 +1,212 @@
+%% 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) 2011-2016 Pivotal Software, Inc. All rights reserved.
+%%
+
+-module(unit_SUITE).
+
+-include_lib("common_test/include/ct.hrl").
+
+-compile(export_all).
+
+all() ->
+ [
+ {group, parallel_tests}
+ ].
+
+groups() ->
+ [
+ {parallel_tests, [parallel], [
+ {resource_monitor, [parallel], [
+ parse_information_unit
+ ]},
+ {supervisor2, [], [
+ check_shutdown_stop,
+ check_shutdown_ignored
+ ]},
+ {truncate, [parallel], [
+ short_examples_exactly,
+ term_limit,
+ large_examples_for_size
+ ]},
+ {vm_memory_monitor, [parallel], [
+ parse_line_linux
+ ]}
+ ]}
+ ].
+
+init_per_group(_, Config) -> Config.
+end_per_group(_, Config) -> Config.
+
+%% ---------------------------------------------------------------------------
+%% rabbit_resource_monitor.
+%% ---------------------------------------------------------------------------
+
+parse_information_unit(_Config) ->
+ lists:foreach(fun ({S, V}) ->
+ V = rabbit_resource_monitor_misc:parse_information_unit(S)
+ end,
+ [
+ {"1000", {ok, 1000}},
+
+ {"10kB", {ok, 10000}},
+ {"10MB", {ok, 10000000}},
+ {"10GB", {ok, 10000000000}},
+
+ {"10kiB", {ok, 10240}},
+ {"10MiB", {ok, 10485760}},
+ {"10GiB", {ok, 10737418240}},
+
+ {"10k", {ok, 10240}},
+ {"10M", {ok, 10485760}},
+ {"10G", {ok, 10737418240}},
+
+ {"10KB", {ok, 10000}},
+ {"10K", {ok, 10240}},
+ {"10m", {ok, 10485760}},
+ {"10Mb", {ok, 10000000}},
+
+ {"0MB", {ok, 0}},
+
+ {"10 k", {error, parse_error}},
+ {"MB", {error, parse_error}},
+ {"", {error, parse_error}},
+ {"0.5GB", {error, parse_error}},
+ {"10TB", {error, parse_error}}
+ ]),
+ passed.
+
+%% ---------------------------------------------------------------------------
+%% supervisor2.
+%% ---------------------------------------------------------------------------
+
+check_shutdown_stop(_Config) ->
+ ok = check_shutdown(stop, 200, 200, 2000).
+
+check_shutdown_ignored(_Config) ->
+ ok = check_shutdown(ignored, 1, 2, 2000).
+
+check_shutdown(SigStop, Iterations, ChildCount, SupTimeout) ->
+ {ok, Sup} = supervisor2:start_link(dummy_supervisor2, [SupTimeout]),
+ Res = lists:foldl(
+ fun (I, ok) ->
+ TestSupPid = erlang:whereis(dummy_supervisor2),
+ ChildPids =
+ [begin
+ {ok, ChildPid} =
+ supervisor2:start_child(TestSupPid, []),
+ ChildPid
+ end || _ <- lists:seq(1, ChildCount)],
+ MRef = erlang:monitor(process, TestSupPid),
+ [P ! SigStop || P <- ChildPids],
+ ok = supervisor2:terminate_child(Sup, test_sup),
+ {ok, _} = supervisor2:restart_child(Sup, test_sup),
+ receive
+ {'DOWN', MRef, process, TestSupPid, shutdown} ->
+ ok;
+ {'DOWN', MRef, process, TestSupPid, Reason} ->
+ {error, {I, Reason}}
+ end;
+ (_, R) ->
+ R
+ end, ok, lists:seq(1, Iterations)),
+ unlink(Sup),
+ MSupRef = erlang:monitor(process, Sup),
+ exit(Sup, shutdown),
+ receive
+ {'DOWN', MSupRef, process, Sup, _Reason} ->
+ ok
+ end,
+ Res.
+
+%% ---------------------------------------------------------------------------
+%% truncate.
+%% ---------------------------------------------------------------------------
+
+short_examples_exactly(_Config) ->
+ F = fun (Term, Exp) ->
+ Exp = truncate:term(Term, {1, {10, 10, 5, 5}}),
+ Term = truncate:term(Term, {100000, {10, 10, 5, 5}})
+ end,
+ FSmall = fun (Term, Exp) ->
+ Exp = truncate:term(Term, {1, {2, 2, 2, 2}}),
+ Term = truncate:term(Term, {100000, {2, 2, 2, 2}})
+ end,
+ F([], []),
+ F("h", "h"),
+ F("hello world", "hello w..."),
+ F([[h,e,l,l,o,' ',w,o,r,l,d]], [[h,e,l,l,o,'...']]),
+ F([a|b], [a|b]),
+ F(<<"hello">>, <<"hello">>),
+ F([<<"hello world">>], [<<"he...">>]),
+ F(<<1:1>>, <<1:1>>),
+ F(<<1:81>>, <<0:56, "...">>),
+ F({{{{a}}},{b},c,d,e,f,g,h,i,j,k}, {{{'...'}},{b},c,d,e,f,g,h,i,j,'...'}),
+ FSmall({a,30,40,40,40,40}, {a,30,'...'}),
+ FSmall([a,30,40,40,40,40], [a,30,'...']),
+ P = spawn(fun() -> receive die -> ok end end),
+ F([0, 0.0, <<1:1>>, F, P], [0, 0.0, <<1:1>>, F, P]),
+ P ! die,
+ R = make_ref(),
+ F([R], [R]),
+ ok.
+
+term_limit(_Config) ->
+ W = erlang:system_info(wordsize),
+ S = <<"abc">>,
+ 1 = truncate:term_size(S, 4, W),
+ limit_exceeded = truncate:term_size(S, 3, W),
+ case 100 - truncate:term_size([S, S], 100, W) of
+ 22 -> ok; %% 32 bit
+ 38 -> ok %% 64 bit
+ end,
+ case 100 - truncate:term_size([S, [S]], 100, W) of
+ 30 -> ok; %% ditto
+ 54 -> ok
+ end,
+ limit_exceeded = truncate:term_size([S, S], 6, W),
+ ok.
+
+large_examples_for_size(_Config) ->
+ %% Real world values
+ Shrink = fun(Term) -> truncate:term(Term, {1, {1000, 100, 50, 5}}) end,
+ TestSize = fun(Term) ->
+ true = 5000000 < size(term_to_binary(Term)),
+ true = 500000 > size(term_to_binary(Shrink(Term)))
+ end,
+ TestSize(lists:seq(1, 5000000)),
+ TestSize(recursive_list(1000, 10)),
+ TestSize(recursive_list(5000, 20)),
+ TestSize(gb_sets:from_list([I || I <- lists:seq(1, 1000000)])),
+ TestSize(gb_trees:from_orddict([{I, I} || I <- lists:seq(1, 1000000)])),
+ ok.
+
+recursive_list(S, 0) -> lists:seq(1, S);
+recursive_list(S, N) -> [recursive_list(S div N, N-1) || _ <- lists:seq(1, S)].
+
+%% ---------------------------------------------------------------------------
+%% vm_memory_monitor.
+%% ---------------------------------------------------------------------------
+
+parse_line_linux(_Config) ->
+ lists:foreach(fun ({S, {K, V}}) ->
+ {K, V} = vm_memory_monitor:parse_line_linux(S)
+ end,
+ [{"MemTotal: 0 kB", {'MemTotal', 0}},
+ {"MemTotal: 502968 kB ", {'MemTotal', 515039232}},
+ {"MemFree: 178232 kB", {'MemFree', 182509568}},
+ {"MemTotal: 50296888", {'MemTotal', 50296888}},
+ {"MemTotal 502968 kB", {'MemTotal', 515039232}},
+ {"MemTotal 50296866 ", {'MemTotal', 50296866}}]),
+ ok.
diff --git a/test/rabbit_ctl_timeout_SUITE.erl b/test/unit_inbroker_SUITE.erl
index 92b2867a54..4b58221727 100644
--- a/test/rabbit_ctl_timeout_SUITE.erl
+++ b/test/unit_inbroker_SUITE.erl
@@ -1,20 +1,20 @@
%% 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/
+%% 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.
+%% 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.
+%% Copyright (c) 2011-2016 Pivotal Software, Inc. All rights reserved.
%%
--module(rabbit_ctl_timeout_SUITE).
+-module(unit_inbroker_SUITE).
-include_lib("common_test/include/ct.hrl").
-include_lib("rabbit_common/include/rabbit.hrl").
@@ -25,7 +25,23 @@
all() ->
[
- list_operations_timeout_pass
+ {group, parallel_tests}
+ ].
+
+groups() ->
+ [
+ {parallel_tests, [parallel], [
+ {credit_flow, [parallel], [
+ credit_flow_settings
+ ]},
+ {password_hashing, [parallel], [
+ password_hashing,
+ change_password
+ ]},
+ {rabbitmqctl, [parallel], [
+ list_operations_timeout_pass
+ ]}
+ ]}
].
%% -------------------------------------------------------------------
@@ -39,12 +55,137 @@ init_per_suite(Config) ->
end_per_suite(Config) ->
rabbit_ct_helpers:run_teardown_steps(Config).
+init_per_group(_, Config) -> Config.
+end_per_group(_, Config) -> Config.
+
+%% ---------------------------------------------------------------------------
+%% Credit flow.
+%% ---------------------------------------------------------------------------
+
+credit_flow_settings(Config) ->
+ passed = rabbit_ct_broker_helpers:run_on_broker(
+ ?config(rmq_nodename, Config),
+ ?MODULE, credit_flow_settings1, [Config]).
+
+credit_flow_settings1(_Config) ->
+ %% default values
+ passed = test_proc(200, 50),
+
+ application:set_env(rabbit, credit_flow_default_credit, {100, 20}),
+ passed = test_proc(100, 20),
+
+ application:unset_env(rabbit, credit_flow_default_credit),
+
+ % back to defaults
+ passed = test_proc(200, 50),
+ passed.
+
+test_proc(InitialCredit, MoreCreditAfter) ->
+ Pid = spawn(fun dummy/0),
+ Pid ! {credit, self()},
+ {InitialCredit, MoreCreditAfter} =
+ receive
+ {credit, Val} -> Val
+ end,
+ passed.
+
+dummy() ->
+ credit_flow:send(self()),
+ receive
+ {credit, From} ->
+ From ! {credit, get(credit_flow_default_credit)};
+ _ ->
+ dummy()
+ end.
+
+%% ---------------------------------------------------------------------------
+%% Password hashing.
+%% ---------------------------------------------------------------------------
+
+password_hashing(Config) ->
+ passed = rabbit_ct_broker_helpers:run_on_broker(
+ ?config(rmq_nodename, Config),
+ ?MODULE, password_hashing1, [Config]).
+
+password_hashing1(_Config) ->
+ rabbit_password_hashing_sha256 = rabbit_password:hashing_mod(),
+ application:set_env(rabbit, password_hashing_module,
+ rabbit_password_hashing_md5),
+ rabbit_password_hashing_md5 = rabbit_password:hashing_mod(),
+ application:set_env(rabbit, password_hashing_module,
+ rabbit_password_hashing_sha256),
+ rabbit_password_hashing_sha256 = rabbit_password:hashing_mod(),
+
+ rabbit_password_hashing_sha256 =
+ rabbit_password:hashing_mod(rabbit_password_hashing_sha256),
+ rabbit_password_hashing_md5 =
+ rabbit_password:hashing_mod(rabbit_password_hashing_md5),
+ rabbit_password_hashing_md5 =
+ rabbit_password:hashing_mod(undefined),
+
+ rabbit_password_hashing_md5 =
+ rabbit_auth_backend_internal:hashing_module_for_user(
+ #internal_user{}),
+ rabbit_password_hashing_md5 =
+ rabbit_auth_backend_internal:hashing_module_for_user(
+ #internal_user{
+ hashing_algorithm = undefined
+ }),
+ rabbit_password_hashing_md5 =
+ rabbit_auth_backend_internal:hashing_module_for_user(
+ #internal_user{
+ hashing_algorithm = rabbit_password_hashing_md5
+ }),
+
+ rabbit_password_hashing_sha256 =
+ rabbit_auth_backend_internal:hashing_module_for_user(
+ #internal_user{
+ hashing_algorithm = rabbit_password_hashing_sha256
+ }),
+
+ passed.
+
+change_password(Config) ->
+ passed = rabbit_ct_broker_helpers:run_on_broker(
+ ?config(rmq_nodename, Config),
+ ?MODULE, change_password1, [Config]).
+
+change_password1(_Config) ->
+ UserName = <<"test_user">>,
+ Password = <<"test_password">>,
+ case rabbit_auth_backend_internal:lookup_user(UserName) of
+ {ok, _} -> rabbit_auth_backend_internal:delete_user(UserName);
+ _ -> ok
+ end,
+ ok = application:set_env(rabbit, password_hashing_module,
+ rabbit_password_hashing_md5),
+ ok = rabbit_auth_backend_internal:add_user(UserName, Password),
+ {ok, #auth_user{username = UserName}} =
+ rabbit_auth_backend_internal:user_login_authentication(
+ UserName, [{password, Password}]),
+ ok = application:set_env(rabbit, password_hashing_module,
+ rabbit_password_hashing_sha256),
+ {ok, #auth_user{username = UserName}} =
+ rabbit_auth_backend_internal:user_login_authentication(
+ UserName, [{password, Password}]),
+
+ NewPassword = <<"test_password1">>,
+ ok = rabbit_auth_backend_internal:change_password(UserName, NewPassword),
+ {ok, #auth_user{username = UserName}} =
+ rabbit_auth_backend_internal:user_login_authentication(
+ UserName, [{password, NewPassword}]),
+
+ {refused, _, [UserName]} =
+ rabbit_auth_backend_internal:user_login_authentication(
+ UserName, [{password, Password}]),
+ passed.
+
%% -------------------------------------------------------------------
-%% Test cases.
+%% rabbitmqctl.
%% -------------------------------------------------------------------
list_operations_timeout_pass(Config) ->
- passed = rabbit_ct_broker_helpers:run_test_on_broker(
+ passed = rabbit_ct_broker_helpers:run_on_broker(
?config(rmq_nodename, Config),
?MODULE, list_operations_timeout_pass1, [Config]).
diff --git a/test/vm_memory_monitor_SUITE.erl b/test/vm_memory_monitor_SUITE.erl
deleted file mode 100644
index 195fff7567..0000000000
--- a/test/vm_memory_monitor_SUITE.erl
+++ /dev/null
@@ -1,42 +0,0 @@
-%% 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(vm_memory_monitor_SUITE).
-
--include_lib("common_test/include/ct.hrl").
-
--compile(export_all).
-
-all() ->
- [
- parse_line_linux
- ].
-
-%% ---------------------------------------------------------------------------
-%% Test cases
-%% ---------------------------------------------------------------------------
-
-parse_line_linux(_Config) ->
- lists:foreach(fun ({S, {K, V}}) ->
- {K, V} = vm_memory_monitor:parse_line_linux(S)
- end,
- [{"MemTotal: 0 kB", {'MemTotal', 0}},
- {"MemTotal: 502968 kB ", {'MemTotal', 515039232}},
- {"MemFree: 178232 kB", {'MemFree', 182509568}},
- {"MemTotal: 50296888", {'MemTotal', 50296888}},
- {"MemTotal 502968 kB", {'MemTotal', 515039232}},
- {"MemTotal 50296866 ", {'MemTotal', 50296866}}]),
- ok.