make unit # runs the Erlang unit tests
make lite # runs the Erlang unit tests and the Java client / functional tests
make full # runs both the above plus the QPid test suite
make tests # runs the Erlang multi-node integration tests + all of the above
The multi-node tests take a long time, so you might want to run a subset:
make standalone-tests FILTER=dynamic_ha # <- run just one suite
make standalone-tests FILTER=dynamic_ha:change_policy # <- run just one test
The multi-node tests also default to coverage on, to turn it off:
make standalone-tests COVER=false
tests-with-broker
target also supports FILTER
and COVER
arguments, but instead runs modern single-node test - where all suites
are executed inside single broker instance.
This repository is not related to plugin tests; run "make tests" in a plugin directory to test that plugin.
There are different kinds of tests located inside tests/src
directory:
- Legacy test suite that can be only run as a whole using
rabbit_tests:all_tests/0
. Tests are run inside a running broker, so they could perform testing by doing direct calls to modules under the test. - Modern tests that are run in a running broker. This tests are
auto-discovered by function name, which should end with
_test
. As tests are being run inside a running broker, testing can be performed by directly calling modules under the test. But as tests are run independently by eunit, some care should be taken to preserve broker in a good state. (It's not a big problem for legacy test set as they stop after detecting the first failure). - Multi-node tests, where node(s) are being setup from clean slate for
every test case. This test are auto-disovered by function name,
which should end with
_with
. Those_with
functions provide meta-information about the way that nodes(s) should be setup, actual testing code should be placed in the function without_with
postfix.
Multi-node test-case is represented by 2 functions: test itself with
arbitary name, and setup metadata in a function named like the test
function plus suffix _with
. So, e.g. test named abc
should be
represented by: abc/1
and abc_with/0
.
rabbit_test_runner
calls XXX_with/0
and performs all
initializations mentioned there, accumulating some config data while
doing this. Possible return values for _with
functions are of type
rabbit_test_runner:initializers()
:
- atom referencing predefined function from
rabbit_test_configs
. - function reference which should accept single parameter of type
rabbit_test_configs:config()
. - list of things mentioned above.
In the end we will have a proplist (or list of proplists for each node), that will be passed to test case itself.