diff --git a/deps/rabbitmq_ct_helpers/src/rabbit_ct_broker_helpers.erl b/deps/rabbitmq_ct_helpers/src/rabbit_ct_broker_helpers.erl index 6edff88590..170bc3ddd5 100644 --- a/deps/rabbitmq_ct_helpers/src/rabbit_ct_broker_helpers.erl +++ b/deps/rabbitmq_ct_helpers/src/rabbit_ct_broker_helpers.erl @@ -35,7 +35,7 @@ control_action/2, control_action/3, control_action/4, rabbitmqctl/3, rabbitmqctl/4, rabbitmqctl_list/3, - rabbitmq_queues/3, + rabbitmq_queues/3, rabbitmq_diagnostics/3, add_code_path_to_node/2, add_code_path_to_all_nodes/2, @@ -219,6 +219,7 @@ setup_steps() -> fun rabbit_ct_helpers:ensure_rabbitmqctl_cmd/1, fun rabbit_ct_helpers:ensure_rabbitmqctl_app/1, fun rabbit_ct_helpers:ensure_rabbitmq_plugins_cmd/1, + fun rabbit_ct_helpers:ensure_rabbitmq_diagnostics_cmd/1, fun set_lager_flood_limit/1, fun configure_metadata_store/1, fun start_rabbitmq_nodes/1, @@ -229,6 +230,7 @@ setup_steps() -> fun rabbit_ct_helpers:ensure_rabbitmqctl_cmd/1, fun rabbit_ct_helpers:load_rabbitmqctl_app/1, fun rabbit_ct_helpers:ensure_rabbitmq_plugins_cmd/1, + fun rabbit_ct_helpers:ensure_rabbitmq_diagnostics_cmd/1, fun set_lager_flood_limit/1, fun configure_metadata_store/1, fun start_rabbitmq_nodes/1, @@ -1565,6 +1567,21 @@ rabbitmq_queues(Config, Node, Args) -> Cmd = [RabbitmqQueues, "-n", Nodename | Args], rabbit_ct_helpers:exec(Cmd, [{env, Env}]). +rabbitmq_diagnostics(Config, Node, Args) -> + Rabbitmqdiagnostics = ?config(rabbitmq_diagnostics_cmd, Config), + NodeConfig = get_node_config(Config, Node), + Nodename = ?config(nodename, NodeConfig), + Env = [ + {"RABBITMQ_SCRIPTS_DIR", filename:dirname(Rabbitmqdiagnostics)}, + {"RABBITMQ_PID_FILE", ?config(pid_file, NodeConfig)}, + {"RABBITMQ_MNESIA_DIR", ?config(data_dir, NodeConfig)}, + {"RABBITMQ_PLUGINS_DIR", ?config(plugins_dir, NodeConfig)}, + {"RABBITMQ_ENABLED_PLUGINS_FILE", + ?config(enabled_plugins_file, NodeConfig)} + ], + Cmd = [Rabbitmqdiagnostics, "-n", Nodename | Args], + rabbit_ct_helpers:exec(Cmd, [{env, Env}]). + %% ------------------------------------------------------------------- %% Other helpers. %% ------------------------------------------------------------------- diff --git a/deps/rabbitmq_ct_helpers/src/rabbit_ct_helpers.erl b/deps/rabbitmq_ct_helpers/src/rabbit_ct_helpers.erl index 822a57ced9..6e3f11d304 100644 --- a/deps/rabbitmq_ct_helpers/src/rabbit_ct_helpers.erl +++ b/deps/rabbitmq_ct_helpers/src/rabbit_ct_helpers.erl @@ -27,6 +27,7 @@ load_rabbitmqctl_app/1, ensure_rabbitmq_plugins_cmd/1, ensure_rabbitmq_queues_cmd/1, + ensure_rabbitmq_diagnostics_cmd/1, redirect_logger_to_ct_logs/1, init_skip_as_error_flag/1, start_long_running_testsuite_monitor/1, @@ -595,6 +596,41 @@ ensure_rabbitmq_queues_cmd(Config) -> end end. +ensure_rabbitmq_diagnostics_cmd(Config) -> + RabbitmqDiagnostics = case get_config(Config, rabbitmq_diagnostics_cmd) of + undefined -> + case os:getenv("RABBITMQ_DIAGNOSTICS") of + false -> find_script(Config, "rabbitmq-diagnostics"); + R -> R + end; + R -> + ct:log(?LOW_IMPORTANCE, + "Using rabbitmq-diagnostics from rabbitmq_diagnostics_cmd: ~tp~n", [R]), + R + end, + Error = {skip, "rabbitmq-diagnostics required, " ++ + "please set 'rabbitmq_diagnostics_cmd' in ct config"}, + case RabbitmqDiagnostics of + false -> + Error; + _ -> + Cmd = [RabbitmqDiagnostics], + Env = [ + {"RABBITMQ_SCRIPTS_DIR", filename:dirname(RabbitmqDiagnostics)} + ], + case exec(Cmd, [drop_stdout, {env, Env}]) of + {error, 64, _} -> + set_config(Config, + {rabbitmq_diagnostics_cmd, + RabbitmqDiagnostics}); + {error, Code, Reason} -> + ct:pal("Exec failed with exit code ~tp: ~tp", [Code, Reason]), + Error; + _ -> + Error + end + end. + ensure_ssl_certs(Config) -> SrcDir = ?config(rabbitmq_ct_helpers_srcdir, Config), UniqueDir = io_lib:format(