A Common Test hook for starting and stopping docker-compose services.
To use this hook simply place a docker-compose.yml
file in the suite's data_dir
, the top level of the project or declare the path explicitly with docker_compose_file
-- see the configuration section below for more on how the compose file is found.
Then hooks must be declared in the ct_opts
, the config returned by a function in the test suite or in a test spec. Some examples of enabling the hook are in the next section.
Shutdown of the services happens in the hook's terminate
function which is called depending on when the hook was installed: CTH Scope. But the configuration for the hook can include #{stop => never}
and the hook will not shutdown the services during terminate
.
First, the hook must be included as a dependency of the rebar3 project. Since the hook is only used by Common Test it can be put in the test
profile:
{profiles, [{test, [{deps, [docker_compose_cth]}]}]}.
Hooks can be declared in rebar.config
with ct_opts
:
{ct_opts, [{ct_hooks, [docker_compose_cth]}]}.
It can be added on a per-suite either with the suite/0
function in the suite module:
suite() ->
[{ct_hooks, [docker_compose_cth]}].
or in the return of init_per_suite/1
:
init_per_suite(Config) ->
[{ct_hooks, [docker_compose_cth]} | Config].
For groups it can be added per-group in the return of init_per_group/2
function in the suite module:
init_per_group(Group, Config) ->
[{ct_hooks, [docker_compose_cth]} | Config].
docker_compose_file
: The path to adocker-compose.yml
file to use. If it isn't an absolute path then it is relative to what will be the current working directory during the test run which is_build/test/logs/ct_run.<node>.<timestamp>
. If no path is given then the hook first checks the suite'sdata_dir
, seetest/post_group_SUITE_data/docker-compose.yml
as an example. If no compose file is found in the suite'sdata_dir
it will pass no-f ...
argument todocker-compose
, this results indocker-compose
searching up the directory tree (starting at the cwd which in this case is thatct_run.<node>.<timestamp>
directory mentioned above) until it finds a compile file.executable_search_paths
: Path to search for thedocker-compose
executable. If it is not set the regular path is searched as described in the docs for os:find_executable/1.check_if_running
: A string that is the name of the service to check for before runningdocker-compose up
. If defined the hook will check if a service is already up and not calldocker-compose up
if it is. By default this is done by attemptingexec ls
in the service's container, but the command can be set to anything by passing a tuple{Service, Command}
skip_or_fail
: The atomskip
orfail
(default isfail
). If the hook is unable to bring up the service with docker-compose then the suite will either skip or fail, depending on this configuration.stop
: Boolean value that iffalse
means the services with not be shutdown when the hook terminates.