123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301 |
- # Common Test plugin.
- CT_TARGETS = $(call list_targets,ct)
- .PHONY: ct $(CT_TARGETS)
- ct: $(CT_TARGETS)
- ct-all: build clean
- $i "Bootstrap a new OTP application named $(APP)"
- $t mkdir $(APP)/
- $t cp ../erlang.mk $(APP)/
- $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v
- $i "Check that Common Test detects no tests"
- $t $(MAKE) -C $(APP) ct | grep -c "Nothing to be done for 'ct'." | grep -q 1
- $i "Generate a Common Test suite"
- $t mkdir $(APP)/test
- $t printf "%s\n" \
- "-module($(APP)_SUITE)." \
- "-export([all/0, ok/1])." \
- "all() -> [ok]." \
- "ok(_) -> ok." > $(APP)/test/$(APP)_SUITE.erl
- $i "Check that Common Test runs tests"
- # We can't pipe CT's output without it crashing, so let's check that
- # the command succeeds and log files are created instead.
- $t test ! -e $(APP)/logs/index.html
- $t $(MAKE) -C $(APP) ct $v
- $t test -f $(APP)/logs/index.html
- $i "Generate a Common Test suite with a failing test case"
- $t printf "%s\n" \
- "-module($(APP)_fail_SUITE)." \
- "-export([all/0, fail/1])." \
- "all() -> [fail]." \
- "fail(_) -> throw(fail)." > $(APP)/test/$(APP)_fail_SUITE.erl
- $i "Check that Common Test errors out"
- $t ! $(MAKE) -C $(APP) ct $v
- $i "Check that logs are kept on clean"
- $t $(MAKE) -C $(APP) clean $v
- $t test -f $(APP)/logs/index.html
- $i "Check that logs are deleted on distclean"
- $t $(MAKE) -C $(APP) distclean $v
- $t test ! -e $(APP)/logs/index.html
- ct-apps: build clean
- $i "Create a multi application repository with root application"
- $t mkdir $(APP)/
- $t cp ../erlang.mk $(APP)/.
- $t echo "include erlang.mk" > $(APP)/Makefile
- $i "Create a new library named my_lib"
- $t $(MAKE) -C $(APP) new-lib in=my_lib $v
- $i "Populate my_lib"
- $t printf "%s\n" \
- "-module(my_lib)." \
- "-export([random_int/0])." \
- "random_int() -> 4." > $(APP)/apps/my_lib/src/my_lib.erl
- $i "Generate a Common Test suite in root application"
- $t mkdir $(APP)/test
- $t printf "%s\n" \
- "-module(my_root_SUITE)." \
- "-export([all/0, ok/1, call_my_lib/1])." \
- "all() -> [ok, call_my_lib]." \
- "ok(_) -> ok." \
- "call_my_lib(_) -> 4 = my_lib:random_int()." > $(APP)/test/my_root_SUITE.erl
- $i "Check that Common Test runs tests"
- $t $(MAKE) -C $(APP) ct $v
- $i "Check that Common Test runs tests from a specific test suite"
- $t $(MAKE) -C $(APP) ct-my_root $v
- $i "Check that Common Test runs tests from a specific test suite using CT_SUITES"
- $t $(MAKE) -C $(APP) ct CT_SUITES=my_root $v
- ct-apps-only: build clean
- $i "Create a multi application repository with no root application"
- $t mkdir $(APP)/
- $t cp ../erlang.mk $(APP)/
- $t echo "include erlang.mk" > $(APP)/Makefile
- $i "Create a new application named my_app_only"
- $t $(MAKE) -C $(APP) new-app in=my_app_only $v
- $i "Create a new library named my_lib_only"
- $t $(MAKE) -C $(APP) new-lib in=my_lib_only $v
- $i "Populate my_lib_only"
- $t printf "%s\n" \
- "-module(my_lib_only)." \
- "-export([random_int/0])." \
- "random_int() -> 4." > $(APP)/apps/my_lib_only/src/my_lib_only.erl
- $i "Check that Common Test detects no tests"
- $t $(MAKE) -C $(APP) ct | grep -c "Nothing to be done for 'ct'." | grep -q 2
- $i "Generate a Common Test suite in my_app_only"
- $t mkdir $(APP)/apps/my_app_only/test
- $t printf "%s\n" \
- "-module(my_app_only_SUITE)." \
- "-export([all/0, ok/1, call_my_lib_only/1])." \
- "all() -> [ok, call_my_lib_only]." \
- "ok(_) -> ok." \
- "call_my_lib_only(_) -> 4 = my_lib_only:random_int()." > $(APP)/apps/my_app_only/test/my_app_only_SUITE.erl
- $i "Generate a Common Test suite in my_lib_only"
- $t mkdir $(APP)/apps/my_lib_only/test
- $t printf "%s\n" \
- "-module(my_lib_only_SUITE)." \
- "-export([all/0, ok/1])." \
- "all() -> [ok]." \
- "ok(_) -> ok." > $(APP)/apps/my_lib_only/test/my_lib_only_SUITE.erl
- $i "Check that Common Test runs tests"
- # We can't pipe CT's output without it crashing, so let's check that
- # the command succeeds and log files are created instead.
- $t test ! -e $(APP)/apps/my_app_only/logs/index.html
- $t test ! -e $(APP)/apps/my_lib_only/logs/index.html
- $t $(MAKE) -C $(APP) ct $v
- $t test -f $(APP)/apps/my_app_only/logs/index.html
- $t test -f $(APP)/apps/my_lib_only/logs/index.html
- ct-case: build clean
- $i "Bootstrap a new OTP application named $(APP)"
- $t mkdir $(APP)/
- $t cp ../erlang.mk $(APP)/
- $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v
- $i "Generate a Common Test suite with two cases"
- $t mkdir $(APP)/test
- $t printf "%s\n" \
- "-module($(APP)_SUITE)." \
- "-export([all/0, groups/0, ok/1, bad/1])." \
- "all() -> [{group, mygroup}]." \
- "groups() -> [{mygroup, [ok, bad]}]." \
- "ok(_) -> ok." \
- "bad(_) -> throw(fail)." > $(APP)/test/$(APP)_SUITE.erl
- $i "Check that we can run Common Test on a specific test case"
- $t $(MAKE) -C $(APP) ct-$(APP) t=mygroup:ok $v
- ct-case-without-group: build clean
- $i "Bootstrap a new OTP application named $(APP)"
- $t mkdir $(APP)/
- $t cp ../erlang.mk $(APP)/
- $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v
- $i "Generate a Common Test suite with two cases that are not part of any group"
- $t mkdir $(APP)/test
- $t printf "%s\n" \
- "-module($(APP)_SUITE)." \
- "-export([all/0, ok/1, bad/1])." \
- "all() -> [ok, bad]." \
- "ok(_) -> ok." \
- "bad(_) -> throw(fail)." > $(APP)/test/$(APP)_SUITE.erl
- $i "Check that we can run Common Test on a specific test case"
- $t $(MAKE) -C $(APP) ct-$(APP) c=ok $v
- ct-check: build clean
- $i "Bootstrap a new OTP application named $(APP)"
- $t mkdir $(APP)/
- $t cp ../erlang.mk $(APP)/
- $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v
- $i "Generate a Common Test suite"
- $t mkdir $(APP)/test
- $t printf "%s\n" \
- "-module($(APP)_SUITE)." \
- "-export([all/0, ok/1])." \
- "all() -> [ok]." \
- "ok(_) -> ok." > $(APP)/test/$(APP)_SUITE.erl
- $i "Check that Common Test runs on 'make check'"
- $t test ! -e $(APP)/logs/index.html
- $t $(MAKE) -C $(APP) check $v
- $t test -f $(APP)/logs/index.html
- ct-group: build clean
- $i "Bootstrap a new OTP application named $(APP)"
- $t mkdir $(APP)/
- $t cp ../erlang.mk $(APP)/
- $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v
- $i "Generate a Common Test suite with two groups"
- $t mkdir $(APP)/test
- $t printf "%s\n" \
- "-module($(APP)_SUITE)." \
- "-export([all/0, groups/0, ok/1, bad/1])." \
- "all() -> [{group, okgroup}, {group, badgroup}]." \
- "groups() -> [{okgroup, [ok]}, {badgroup, [bad]}]." \
- "ok(_) -> ok." \
- "bad(_) -> throw(fail)." > $(APP)/test/$(APP)_SUITE.erl
- $i "Check that we can run Common Test on a specific group"
- $t $(MAKE) -C $(APP) ct-$(APP) t=okgroup $v
- ct-opts: build clean
- $i "Bootstrap a new OTP application named $(APP)"
- $t mkdir $(APP)/
- $t cp ../erlang.mk $(APP)/
- $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v
- $i "Set CT_OPTS in the Makefile"
- $t perl -ni.bak -e 'print;if ($$.==1) {print "CT_OPTS = -label hello_ct_opts\n"}' $(APP)/Makefile
- $i "Generate a Common Test suite"
- $t mkdir $(APP)/test
- $t printf "%s\n" \
- "-module($(APP)_SUITE)." \
- "-export([all/0, ok/1])." \
- "all() -> [ok]." \
- "ok(_) -> ok." > $(APP)/test/$(APP)_SUITE.erl
- $i "Run Common Test"
- $t $(MAKE) -C $(APP) ct $v
- $i "Check that Common Test uses options from CT_OPTS"
- $t grep -q hello_ct_opts $(APP)/logs/index.html
- ct-logs-dir: build clean
- $i "Bootstrap a new OTP application named $(APP)"
- $t mkdir $(APP)/
- $t cp ../erlang.mk $(APP)/
- $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v
- $i "Set CT_OPTS in the Makefile"
- $t perl -ni.bak -e 'print;if ($$.==1) {print "CT_LOGS_DIR = custom_dir\n"}' $(APP)/Makefile
- $i "Generate a Common Test suite"
- $t mkdir $(APP)/test
- $t printf "%s\n" \
- "-module($(APP)_SUITE)." \
- "-export([all/0, ok/1])." \
- "all() -> [ok]." \
- "ok(_) -> ok." > $(APP)/test/$(APP)_SUITE.erl
- $i "Check that Common Test log in right place"
- $t test ! -e $(APP)/custom_dir/index.html
- $t $(MAKE) -C $(APP) ct $v
- $t test -f $(APP)/custom_dir/index.html
- ct-suite: build clean
- $i "Bootstrap a new OTP application named $(APP)"
- $t mkdir $(APP)/
- $t cp ../erlang.mk $(APP)/
- $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v
- $i "Generate two Common Test suites"
- $t mkdir $(APP)/test
- $t printf "%s\n" \
- "-module($(APP)_ok_SUITE)." \
- "-export([all/0, ok/1])." \
- "all() -> [ok]." \
- "ok(_) -> ok." > $(APP)/test/$(APP)_ok_SUITE.erl
- $t printf "%s\n" \
- "-module($(APP)_fail_SUITE)." \
- "-export([all/0, bad/1])." \
- "all() -> [bad]." \
- "bad(_) -> throw(fail)." > $(APP)/test/$(APP)_fail_SUITE.erl
- $i "Check that we can run Common Test on a specific test suite"
- $t $(MAKE) -C $(APP) ct-$(APP)_ok $v
- ct-tests: build clean
- $i "Bootstrap a new OTP application named $(APP)"
- $t mkdir $(APP)/
- $t cp ../erlang.mk $(APP)/
- $t $(MAKE) -C $(APP) -f erlang.mk bootstrap $v
- $i "Generate a Common Test suite"
- $t mkdir $(APP)/test
- $t printf "%s\n" \
- "-module($(APP)_SUITE)." \
- "-export([all/0, ok/1])." \
- "all() -> [ok]." \
- "ok(_) -> ok." > $(APP)/test/$(APP)_SUITE.erl
- $i "Check that Common Test runs on 'make tests'"
- $t test ! -e $(APP)/logs/index.html
- $t $(MAKE) -C $(APP) tests $v
- $t test -f $(APP)/logs/index.html
|