rabbitmq-server/deps/rabbit_common/mk/rabbitmq-run.mk

293 lines
11 KiB
Makefile

.PHONY: run-broker run-background-broker run-node run-background-node \
run-tests run-lazy-vq-tests run-qc \
start-background-node start-rabbit-on-node \
stop-rabbit-on-node set-resource-alarm clear-resource-alarm \
stop-node clean-node-db start-cover stop-cover
ifeq ($(filter rabbitmq-dist.mk,$(notdir $(MAKEFILE_LIST))),)
include $(dir $(lastword $(MAKEFILE_LIST)))rabbitmq-dist.mk
endif
exec_verbose_0 = @echo " EXEC " $@;
exec_verbose_2 = set -x;
exec_verbose = $(exec_verbose_$(V))
ifeq ($(PLATFORM),msys2)
TEST_TMPDIR ?= $(TEMP)/rabbitmq-test-instances
else
TMPDIR ?= /tmp
TEST_TMPDIR ?= $(TMPDIR)/rabbitmq-test-instances
endif
# Location of the scripts controlling the broker.
ifeq ($(PROJECT),rabbit)
RABBITMQ_BROKER_DIR ?= $(CURDIR)
else
RABBITMQ_BROKER_DIR ?= $(DEPS_DIR)/rabbit
endif
RABBITMQ_SCRIPTS_DIR ?= $(RABBITMQ_BROKER_DIR)/scripts
ifeq ($(PLATFORM),msys2)
RABBITMQ_PLUGINS ?= $(RABBITMQ_SCRIPTS_DIR)/rabbitmq-plugins.bat
RABBITMQ_SERVER ?= $(RABBITMQ_SCRIPTS_DIR)/rabbitmq-server.bat
RABBITMQCTL ?= $(RABBITMQ_SCRIPTS_DIR)/rabbitmqctl.bat
else
RABBITMQ_PLUGINS ?= $(RABBITMQ_SCRIPTS_DIR)/rabbitmq-plugins
RABBITMQ_SERVER ?= $(RABBITMQ_SCRIPTS_DIR)/rabbitmq-server
RABBITMQCTL ?= $(RABBITMQ_SCRIPTS_DIR)/rabbitmqctl
endif
export RABBITMQ_SCRIPTS_DIR RABBITMQCTL RABBITMQ_PLUGINS RABBITMQ_SERVER
# We export MAKE to be sure scripts and tests use the proper command.
export MAKE
# We need to pass the location of codegen to the Java client ant
# process.
CODEGEN_DIR = $(DEPS_DIR)/rabbitmq_codegen
PYTHONPATH = $(CODEGEN_DIR)
export PYTHONPATH
ANT ?= ant
ANT_FLAGS += -Dmake.bin=$(MAKE) \
-DUMBRELLA_AVAILABLE=true \
-Drabbitmqctl.bin=$(RABBITMQCTL) \
-Dsibling.codegen.dir=$(CODEGEN_DIR)
ifeq ($(PROJECT),rabbitmq_test)
ANT_FLAGS += -Dsibling.rabbitmq_test.dir=$(CURDIR)
else
ANT_FLAGS += -Dsibling.rabbitmq_test.dir=$(DEPS_DIR)/rabbitmq_test
endif
export ANT ANT_FLAGS
node_tmpdir = $(TEST_TMPDIR)/$(1)
node_pid_file = $(call node_tmpdir,$(1))/$(1).pid
node_log_base = $(call node_tmpdir,$(1))/log
node_mnesia_base = $(call node_tmpdir,$(1))/mnesia
node_plugins_expand_dir = $(call node_tmpdir,$(1))/plugins
node_enabled_plugins_file = $(call node_tmpdir,$(1))/enabled_plugins
# Broker startup variables for the test environment.
RABBITMQ_NODENAME ?= rabbit
NODE_TMPDIR ?= $(call node_tmpdir,$(RABBITMQ_NODENAME))
RABBITMQ_PID_FILE ?= $(call node_pid_file,$(RABBITMQ_NODENAME))
RABBITMQ_LOG_BASE ?= $(call node_log_base,$(RABBITMQ_NODENAME))
RABBITMQ_MNESIA_BASE ?= $(call node_mnesia_base,$(RABBITMQ_NODENAME))
RABBITMQ_PLUGINS_EXPAND_DIR ?= $(call node_plugins_expand_dir,$(RABBITMQ_NODENAME))
RABBITMQ_ENABLED_PLUGINS_FILE ?= $(call node_enabled_plugins_file,$(RABBITMQ_NODENAME))
# erlang.mk adds dependencies' ebin directory to ERL_LIBS. This is
# a sane default, but we prefer to rely on the .ez archives in the
# `plugins` directory so the plugin code is executed. The `plugins`
# directory is added to ERL_LIBS by rabbitmq-env.
DIST_ERL_LIBS = $(shell echo "$(filter-out $(DEPS_DIR),$(subst :, ,$(ERL_LIBS)))" | tr ' ' :)
define basic_script_env_settings
MAKE="$(MAKE)" \
ERL_LIBS="$(DIST_ERL_LIBS)" \
RABBITMQ_NODENAME="$(1)" \
RABBITMQ_NODE_IP_ADDRESS="$(RABBITMQ_NODE_IP_ADDRESS)" \
RABBITMQ_NODE_PORT="$(2)" \
RABBITMQ_PID_FILE="$(call node_pid_file,$(1))" \
RABBITMQ_LOG_BASE="$(call node_log_base,$(1))" \
RABBITMQ_MNESIA_BASE="$(call node_mnesia_base,$(1))" \
RABBITMQ_PLUGINS_DIR="$(CURDIR)/$(DIST_DIR)" \
RABBITMQ_PLUGINS_EXPAND_DIR="$(call node_plugins_expand_dir,$(1))" \
RABBITMQ_SERVER_START_ARGS="$(RABBITMQ_SERVER_START_ARGS)"
endef
BASIC_SCRIPT_ENV_SETTINGS = $(call basic_script_env_settings,$(RABBITMQ_NODENAME),$(RABBITMQ_NODE_PORT)) \
RABBITMQ_ENABLED_PLUGINS_FILE="$(RABBITMQ_ENABLED_PLUGINS_FILE)"
# NOTE: Running a plugin requires RabbitMQ itself. As this file is
# loaded *after* erlang.mk, it is too late to add "rabbit" to the
# dependencies. Therefore, this is done in rabbitmq-components.mk.
#
# rabbitmq-components.mk knows the list of targets which starts
# a broker. When we add a target here, it needs to be listed in
# rabbitmq-components.mk as well.
#
# FIXME: This is fragile, how can we fix this?
ERL_CALL ?= erl_call
ERL_CALL_OPTS ?= -sname $(RABBITMQ_NODENAME) -e
test-tmpdir:
$(verbose) mkdir -p $(TEST_TMPDIR)
virgin-test-tmpdir:
$(gen_verbose) rm -rf $(TEST_TMPDIR)
$(verbose) mkdir -p $(TEST_TMPDIR)
node-tmpdir:
$(verbose) mkdir -p $(RABBITMQ_LOG_BASE) \
$(RABBITMQ_MNESIA_BASE) \
$(RABBITMQ_PLUGINS_EXPAND_DIR)
virgin-node-tmpdir:
$(gen_verbose) rm -rf $(NODE_TMPDIR)
$(verbose) mkdir -p $(RABBITMQ_LOG_BASE) \
$(RABBITMQ_MNESIA_BASE) \
$(RABBITMQ_PLUGINS_EXPAND_DIR)
.PHONY: test-tmpdir virgin-test-tmpdir node-tmpdir virgin-node-tmpdir
ifeq ($(wildcard ebin/test),)
$(RABBITMQ_ENABLED_PLUGINS_FILE): dist
endif
$(RABBITMQ_ENABLED_PLUGINS_FILE): node-tmpdir
$(verbose) rm -f $@
$(gen_verbose) $(BASIC_SCRIPT_ENV_SETTINGS) \
$(RABBITMQ_PLUGINS) set --offline \
$$($(BASIC_SCRIPT_ENV_SETTINGS) $(RABBITMQ_PLUGINS) list -m | tr '\n' ' ')
# --------------------------------------------------------------------
# Run a full RabbitMQ.
# --------------------------------------------------------------------
run-broker: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE)
$(BASIC_SCRIPT_ENV_SETTINGS) \
RABBITMQ_ALLOW_INPUT=true \
$(RABBITMQ_SERVER)
run-background-broker: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE)
$(BASIC_SCRIPT_ENV_SETTINGS) \
$(RABBITMQ_SERVER) -detached
# --------------------------------------------------------------------
# Run a bare Erlang node.
# --------------------------------------------------------------------
run-node: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE)
$(BASIC_SCRIPT_ENV_SETTINGS) \
RABBITMQ_NODE_ONLY=true \
RABBITMQ_ALLOW_INPUT=true \
$(RABBITMQ_SERVER)
run-background-node: virgin-node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE)
$(BASIC_SCRIPT_ENV_SETTINGS) \
RABBITMQ_NODE_ONLY=true \
$(RABBITMQ_SERVER) -detached
# --------------------------------------------------------------------
# Used by rabbitmq-test.
# --------------------------------------------------------------------
# TODO: Move this to rabbitmq-tests.
run-tests:
$(verbose) echo 'code:add_path("$(TEST_EBIN_DIR)").' | $(ERL_CALL) $(ERL_CALL_OPTS) | sed -E '/^\{ok, true\}$$/d'
$(verbose) echo 'code:add_path("$(TEST_EBIN_DIR)").' | $(ERL_CALL) $(ERL_CALL_OPTS) -n hare | sed -E '/^\{ok, true\}$$/d'
OUT=$$(RABBITMQ_PID_FILE='$(RABBITMQ_PID_FILE)' \
echo "rabbit_tests:all_tests()." | $(ERL_CALL) $(ERL_CALL_OPTS)) ; \
echo $$OUT ; echo $$OUT | grep '^{ok, passed}$$' > /dev/null
run-lazy-vq-tests:
$(verbose) echo 'code:add_path("$(TEST_EBIN_DIR)").' | $(ERL_CALL) $(ERL_CALL_OPTS) | sed -E '/^\{ok, true\}$$/d'
$(verbose) echo 'code:add_path("$(TEST_EBIN_DIR)").' | $(ERL_CALL) $(ERL_CALL_OPTS) -n hare | sed -E '/^\{ok, true\}$$/d'
OUT=$$(RABBITMQ_PID_FILE='$(RABBITMQ_PID_FILE)' \
echo "rabbit_tests:test_lazy_variable_queue()." | $(ERL_CALL) $(ERL_CALL_OPTS)) ; \
echo $$OUT ; echo $$OUT | grep '^{ok, passed}$$' > /dev/null
run-qc:
echo 'code:add_path("$(TEST_EBIN_DIR)").' | $(ERL_CALL) $(ERL_CALL_OPTS)
./quickcheck $(RABBITMQ_NODENAME) rabbit_backing_queue_qc 100 40
./quickcheck $(RABBITMQ_NODENAME) gm_qc 1000 200
ifneq ($(LOG_TO_STDIO),yes)
REDIRECT_STDIO = > $(RABBITMQ_LOG_BASE)/startup_log \
2> $(RABBITMQ_LOG_BASE)/startup_err
endif
start-background-node: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE)
$(BASIC_SCRIPT_ENV_SETTINGS) \
RABBITMQ_NODE_ONLY=true \
$(RABBITMQ_SERVER) \
$(REDIRECT_STDIO) &
ERL_LIBS="$(DIST_ERL_LIBS)" \
$(RABBITMQCTL) -n $(RABBITMQ_NODENAME) wait $(RABBITMQ_PID_FILE) kernel
start-background-broker: node-tmpdir $(RABBITMQ_ENABLED_PLUGINS_FILE)
$(BASIC_SCRIPT_ENV_SETTINGS) \
$(RABBITMQ_SERVER) \
$(REDIRECT_STDIO) &
ERL_LIBS="$(DIST_ERL_LIBS)" \
$(RABBITMQCTL) -n $(RABBITMQ_NODENAME) wait $(RABBITMQ_PID_FILE) && \
ERL_LIBS="$(DIST_ERL_LIBS)" \
$(RABBITMQCTL) -n $(RABBITMQ_NODENAME) status >/dev/null
start-rabbit-on-node:
$(exec_verbose) echo 'rabbit:start().' | $(ERL_CALL) $(ERL_CALL_OPTS) | sed -E '/^\{ok, ok\}$$/d'
$(verbose) ERL_LIBS="$(DIST_ERL_LIBS)" \
$(RABBITMQCTL) -n $(RABBITMQ_NODENAME) wait $(RABBITMQ_PID_FILE)
stop-rabbit-on-node:
$(exec_verbose) echo 'rabbit:stop().' | $(ERL_CALL) $(ERL_CALL_OPTS) | sed -E '/^\{ok, ok\}$$/d'
set-resource-alarm:
$(exec_verbose) echo 'rabbit_alarm:set_alarm({{resource_limit, $(SOURCE), node()}, []}).' | \
$(ERL_CALL) $(ERL_CALL_OPTS)
clear-resource-alarm:
$(exec-verbose) echo 'rabbit_alarm:clear_alarm({resource_limit, $(SOURCE), node()}).' | \
$(ERL_CALL) $(ERL_CALL_OPTS)
stop-node:
$(exec_verbose) ( \
pid=$$(test -f $(RABBITMQ_PID_FILE) && cat $(RABBITMQ_PID_FILE)) && \
$(ERL_CALL) $(ERL_CALL_OPTS) -q && \
while ps -p "$$pid" >/dev/null 2>&1; do sleep 1; done \
) || :
clean-node-db:
$(exec_verbose) rm -rf $(RABBITMQ_MNESIA_BASE)/$(RABBITMQ_NODENAME)/*
start-cover:
$(exec_verbose) echo "rabbit_misc:start_cover([\"rabbit\", \"hare\"])." | $(ERL_CALL) $(ERL_CALL_OPTS) | sed -E '/^\{ok, ok\}$$/d'
$(verbose) echo "rabbit_misc:enable_cover([\"$(RABBITMQ_BROKER_DIR)\"])." | $(ERL_CALL) $(ERL_CALL_OPTS) | sed -E '/^\{ok, ok\}$$/d'
stop-cover:
$(exec_verbose) echo "rabbit_misc:report_cover(), cover:stop()." | $(ERL_CALL) $(ERL_CALL_OPTS) | sed -E '/^\{ok, ok\}$$/d'
$(verbose) cat cover/summary.txt
.PHONY: other-node-tmpdir virgin-other-node-tmpdir start-other-node \
cluster-other-node reset-other-node stop-other-node
other-node-tmpdir:
$(verbose) mkdir -p $(call node_log_base,$(OTHER_NODE)) \
$(call node_mnesia_base,$(OTHER_NODE)) \
$(call node_plugins_expand_dir,$(OTHER_NODE))
virgin-other-node-tmpdir:
$(exec_verbose) rm -rf $(call node_tmpdir,$(OTHER_NODE))
$(verbose) mkdir -p $(call node_log_base,$(OTHER_NODE)) \
$(call node_mnesia_base,$(OTHER_NODE)) \
$(call node_plugins_expand_dir,$(OTHER_NODE))
start-other-node: other-node-tmpdir
$(exec_verbose) $(call basic_script_env_settings,$(OTHER_NODE),$(OTHER_PORT)) \
RABBITMQ_ENABLED_PLUGINS_FILE="$(if $(OTHER_PLUGINS),$(OTHER_PLUGINS),$($(call node_enabled_plugins_file,$(OTHER_NODE))))" \
RABBITMQ_CONFIG_FILE="$(CURDIR)/etc/$(if $(OTHER_CONFIG),$(OTHER_CONFIG),$(OTHER_NODE))" \
RABBITMQ_NODE_ONLY='' \
$(RABBITMQ_SERVER) \
> $(call node_log_base,$(OTHER_NODE))/startup_log \
2> $(call node_log_base,$(OTHER_NODE))/startup_err &
$(verbose) $(RABBITMQCTL) -n $(OTHER_NODE) wait \
$(call node_pid_file,$(OTHER_NODE))
cluster-other-node:
$(exec_verbose) $(RABBITMQCTL) -n $(OTHER_NODE) stop_app
$(verbose) $(RABBITMQCTL) -n $(OTHER_NODE) reset
$(verbose) $(RABBITMQCTL) -n $(OTHER_NODE) join_cluster \
$(if $(MAIN_NODE),$(MAIN_NODE),$(RABBITMQ_NODENAME)@$$(hostname -s))
$(verbose) $(RABBITMQCTL) -n $(OTHER_NODE) start_app
reset-other-node:
$(exec_verbose) $(RABBITMQCTL) -n $(OTHER_NODE) stop_app
$(verbose) $(RABBITMQCTL) -n $(OTHER_NODE) reset
$(verbose) $(RABBITMQCTL) -n $(OTHER_NODE) start_app
stop-other-node:
$(exec_verbose) $(RABBITMQCTL) -n $(OTHER_NODE) stop