Common Test Docker Compose Hook
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.
Examples
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].Configuration
docker_compose_file: The path to adocker-compose.ymlfile 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.ymlas an example. If no compose file is found in the suite'sdata_dirit will pass no-f ...argument todocker-compose, this results indocker-composesearching 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-composeexecutable. 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 upif it is. By default this is done by attemptingexec lsin the service's container, but the command can be set to anything by passing a tuple{Service, Command}skip_or_fail: The atomskiporfail(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 iffalsemeans the services with not be shutdown when the hook terminates.