summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniil Fedotov <daniil@rabbitmq.com>2016-12-21 16:12:47 +0000
committerGerhard Lazu <gerhard@rabbitmq.com>2016-12-21 16:12:47 +0000
commitd616cc922dbd73eca7700c50f09e33e6b578b0d9 (patch)
tree1d6fe7b31845fde5264a5b63d7b4d23fdb1c1a71
parentcbbcc3e32f97b6047b4f82f0776717dd3e85430c (diff)
downloadrabbitmq-server-git-d616cc922dbd73eca7700c50f09e33e6b578b0d9.tar.gz
Fix listing active plugins with multiple plugin directories
Bug introduced in https://github.com/rabbitmq/rabbitmq-server/pull/1064 Signed-off-by: Gerhard Lazu <gerhard@rabbitmq.com> [#136495407]
-rw-r--r--src/rabbit_plugins.erl11
-rw-r--r--test/plugins_SUITE.erl80
-rw-r--r--test/plugins_SUITE_data/plugins1/mock_rabbitmq_plugins_01-0.1.0.ezbin0 -> 3280 bytes
3 files changed, 88 insertions, 3 deletions
diff --git a/src/rabbit_plugins.erl b/src/rabbit_plugins.erl
index 171448b05c..9da68b7640 100644
--- a/src/rabbit_plugins.erl
+++ b/src/rabbit_plugins.erl
@@ -140,9 +140,14 @@ active() ->
lists:member(App, LoadedPluginNames)].
loaded_plugin_names() ->
- {ok, PluginsDir} = application:get_env(rabbit, plugins_dir),
- PluginsDirComponents = filename:split(PluginsDir),
- loaded_plugin_names(code:get_path(), PluginsDirComponents, []).
+ {ok, PluginsPath} = application:get_env(rabbit, plugins_dir),
+ PluginsDirs = split_path(PluginsPath),
+ lists:flatmap(
+ fun(PluginsDir) ->
+ PluginsDirComponents = filename:split(PluginsDir),
+ loaded_plugin_names(code:get_path(), PluginsDirComponents, [])
+ end,
+ PluginsDirs).
loaded_plugin_names([Path | OtherPaths], PluginsDirComponents, PluginNames) ->
case lists:sublist(filename:split(Path), length(PluginsDirComponents)) of
diff --git a/test/plugins_SUITE.erl b/test/plugins_SUITE.erl
new file mode 100644
index 0000000000..8896298df1
--- /dev/null
+++ b/test/plugins_SUITE.erl
@@ -0,0 +1,80 @@
+%% 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) 2016 Pivotal Software, Inc. All rights reserved.
+%%
+
+-module(plugins_SUITE).
+
+-include_lib("common_test/include/ct.hrl").
+
+-compile(export_all).
+
+all() ->
+ [
+ active_with_single_plugin_dir,
+ active_with_multiple_plugin_dirs
+ ].
+
+%% -------------------------------------------------------------------
+%% Testsuite setup/teardown.
+%% -------------------------------------------------------------------
+
+init_per_suite(Config) ->
+ rabbit_ct_helpers:log_environment(),
+ application:load(rabbit),
+ rabbit_ct_helpers:run_setup_steps(Config).
+
+end_per_suite(Config) ->
+ rabbit_ct_helpers:run_teardown_steps(Config).
+
+init_per_group(_, Config) ->
+ Config.
+
+end_per_group(_, Config) ->
+ Config.
+
+init_per_testcase(Testcase, Config) ->
+ rabbit_ct_helpers:testcase_started(Config, Testcase).
+
+end_per_testcase(Testcase, Config) ->
+ rabbit_ct_helpers:testcase_finished(Config, Testcase).
+
+%% -------------------------------------------------------------------
+%% Testcases.
+%% -------------------------------------------------------------------
+
+active_with_single_plugin_dir(Config) ->
+ DataDir = rabbit_ct_helpers:get_config(Config, data_dir),
+ PluginsDir1 = filename:join(DataDir, "plugins1"),
+
+ true = code:add_path(filename:join([PluginsDir1,
+ "mock_rabbitmq_plugins_01-0.1.0.ez",
+ "mock_rabbitmq_plugins_01-0.1.0", "ebin"])),
+ {ok, _} = application:ensure_all_started(mock_rabbitmq_plugins_01),
+ application:set_env(rabbit, plugins_dir, PluginsDir1),
+
+ [mock_rabbitmq_plugins_01] = rabbit_plugins:active().
+
+active_with_multiple_plugin_dirs(Config) ->
+ DataDir = rabbit_ct_helpers:get_config(Config, data_dir),
+ PluginsDir1 = filename:join(DataDir, "plugins1"),
+ PluginsDir2 = filename:join(DataDir, "plugins2"),
+
+ true = code:add_path(filename:join([PluginsDir1,
+ "mock_rabbitmq_plugins_01-0.1.0.ez",
+ "mock_rabbitmq_plugins_01-0.1.0", "ebin"])),
+ {ok, _} = application:ensure_all_started(mock_rabbitmq_plugins_01),
+ application:set_env(rabbit, plugins_dir, PluginsDir1 ++ ":" ++ PluginsDir2),
+
+ [mock_rabbitmq_plugins_01] = rabbit_plugins:active().
diff --git a/test/plugins_SUITE_data/plugins1/mock_rabbitmq_plugins_01-0.1.0.ez b/test/plugins_SUITE_data/plugins1/mock_rabbitmq_plugins_01-0.1.0.ez
new file mode 100644
index 0000000000..40cba9f16b
--- /dev/null
+++ b/test/plugins_SUITE_data/plugins1/mock_rabbitmq_plugins_01-0.1.0.ez
Binary files differ