From 3a94d7ddaec62cec1c019342f86eb3c0f1c0deed Mon Sep 17 00:00:00 2001 From: spring2maz Date: Thu, 6 Sep 2018 22:41:17 +0200 Subject: [PATCH] Generate a config file for testing Prior to this change, the template file etc/emqx.conf is used directly in testing, as a result, mustache style directories are created e.g. `{{ platform_log_dir }}` which should have been replaced with a config varialbe e.g. `log` In this change, Makefile targets are added as `ct` dependency to download bbmustach, load the template input, replace with variableds defined in 'vars' file, finally to etc/gen.emqx.conf. The direct usage of etc/emqx.conf in test code are replaced with gen.emqx.conf --- .gitignore | 2 ++ Makefile | 27 +++++++++++++++++++++++++-- test/emqx_ct_broker_helpers.erl | 2 +- test/emqx_listeners_SUITE.erl | 2 +- vars | 9 +++++++++ 5 files changed, 38 insertions(+), 4 deletions(-) create mode 100644 vars diff --git a/.gitignore b/.gitignore index d1b8a289e..0322aaddc 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,5 @@ rebar3.crashdump .DS_Store rebar.config emqx.iml +bbmustache/ +etc/gen.emqx.conf diff --git a/Makefile b/Makefile index e12a516b1..452d7c57d 100644 --- a/Makefile +++ b/Makefile @@ -51,6 +51,29 @@ DIALYZER_OPTS := --verbose --statistics -Werror_handling -Wrace_conditions #-Wun include erlang.mk -app.config:: - ./deps/cuttlefish/cuttlefish -l info -e etc/ -c etc/emqx.conf -i priv/emqx.schema -d data/ +clean:: gen-clean + +.PHONY: gen-clean +gen-clean: + @rm -rf bbmustache + @rm -f etc/gen.emqx.conf + +bbmustache: + $(verbose) git clone https://github.com/soranoba/bbmustache.git && pushd bbmustache && ./rebar3 compile && popd + +# This hack is to generate a conf file for testing +# relx overlay is used for release +etc/gen.emqx.conf: bbmustache etc/emqx.conf + $(verbose) erl -noshell -pa bbmustache/_build/default/lib/bbmustache/ebin -eval \ + "{ok, Temp} = file:read_file('etc/emqx.conf'), \ + {ok, Vars0} = file:consult('vars'), \ + Vars = [{atom_to_list(N), list_to_binary(V)} || {N, V} <- Vars0], \ + Targ = bbmustache:render(Temp, Vars), \ + ok = file:write_file('etc/gen.emqx.conf', Targ), \ + halt(0)." + +app.config: etc/gen.emqx.conf + $(verbose) ./deps/cuttlefish/cuttlefish -l info -e etc/ -c etc/gen.emqx.conf -i priv/emqx.schema -d data/ + +ct: app.config diff --git a/test/emqx_ct_broker_helpers.erl b/test/emqx_ct_broker_helpers.erl index ba1883ecc..62a91df54 100644 --- a/test/emqx_ct_broker_helpers.erl +++ b/test/emqx_ct_broker_helpers.erl @@ -63,7 +63,7 @@ run_teardown_steps() -> generate_config() -> Schema = cuttlefish_schema:files([local_path(["priv", "emqx.schema"])]), - Conf = conf_parse:file([local_path(["etc", "emqx.conf"])]), + Conf = conf_parse:file([local_path(["etc", "gen.emqx.conf"])]), cuttlefish_generator:map(Schema, Conf). get_base_dir(Module) -> diff --git a/test/emqx_listeners_SUITE.erl b/test/emqx_listeners_SUITE.erl index 6086e98c2..9d85583ab 100644 --- a/test/emqx_listeners_SUITE.erl +++ b/test/emqx_listeners_SUITE.erl @@ -49,7 +49,7 @@ restart_listeners(_) -> generate_config() -> Schema = cuttlefish_schema:files([local_path(["priv", "emqx.schema"])]), - Conf = conf_parse:file([local_path(["etc", "emqx.conf"])]), + Conf = conf_parse:file([local_path(["etc", "gen.emqx.conf"])]), cuttlefish_generator:map(Schema, Conf). set_app_env({App, Lists}) -> diff --git a/vars b/vars new file mode 100644 index 000000000..fedd69a45 --- /dev/null +++ b/vars @@ -0,0 +1,9 @@ +%% vars here are for test only, not intended for release + +{platform_bin_dir, "bin"}. +{platform_data_dir, "data"}. +{platform_etc_dir, "etc"}. +{platform_lib_dir, "lib"}. +{platform_log_dir, "log"}. +{platform_plugins_dir, "plugins"}. +