summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorDaniil Fedotov <hairyhum@gmail.com>2018-03-15 18:31:42 +0000
committerDaniil Fedotov <hairyhum@gmail.com>2018-03-15 18:31:42 +0000
commit8b6d0ef7450754d47335e6fd5267236b957a0870 (patch)
tree51e478d6b888a2cbd26538ab6ce43ea7749898c9 /test
parent52d0c1aed0d5b532765d6efd0ed92b393d821322 (diff)
downloadrabbitmq-server-git-8b6d0ef7450754d47335e6fd5267236b957a0870.tar.gz
Test concurrent application start with no data.
Diffstat (limited to 'test')
-rw-r--r--test/clustering_management_SUITE.erl21
1 files changed, 20 insertions, 1 deletions
diff --git a/test/clustering_management_SUITE.erl b/test/clustering_management_SUITE.erl
index e04fff2182..559c8f1e92 100644
--- a/test/clustering_management_SUITE.erl
+++ b/test/clustering_management_SUITE.erl
@@ -53,7 +53,8 @@ groups() ->
forget_offline_removes_things,
force_boot,
status_with_alarm,
- wait_fails_when_cluster_fails
+ wait_fails_when_cluster_fails,
+ concurrent_default_data_creation
]},
{cluster_size_4, [], [
forget_promotes_offline_slave
@@ -636,6 +637,24 @@ wait_fails_when_cluster_fails(Config) ->
{error, _, _} = rabbit_ct_broker_helpers:rabbitmqctl(Config, Rabbit,
["wait", RabbitPidFile]).
+concurrent_default_data_creation(Config) ->
+ [Rabbit, Hare] = rabbit_ct_broker_helpers:get_node_configs(Config,
+ nodename),
+ %% Run multiple times to detect race.
+ [concurrent_default_data_creation1(Rabbit, Hare) || _ <- lists:seq(1, 20)].
+
+concurrent_default_data_creation1(Rabbit, Hare) ->
+ %% Clear default data.
+ [{atomic, ok} = rpc:call(Rabbit, mnesia, clear_table, [Tab])
+ || Tab <- [rabbit_user, rabbit_user_permission, rabbit_vhost]],
+ %% Stop both nodes
+ [ok = rpc:call(Node, rabbit, stop, []) || Node <- [Rabbit, Hare]],
+ %% Start nodes in parallel
+ [spawn(fun() -> rpc:call(Node, rabbit, start, []) end)
+ || Node <- [Rabbit, Hare]],
+ %% Verify both nodes are started successfully
+ [ok = rpc:call(Node, rabbit, await_startup, [Node]) || Node <- [Rabbit, Hare]].
+
%% ----------------------------------------------------------------------------
%% Internal utils
%% ----------------------------------------------------------------------------