1
0
mirror of https://github.com/RIOT-OS/RIOT.git synced 2024-12-29 04:50:03 +01:00

Merge pull request #15771 from aabadie/review_test_manual

tests: add test-with-config and test-as-root targets
This commit is contained in:
Alexandre Abadie 2021-01-26 09:33:14 +01:00 committed by GitHub
commit ad20733f01
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
43 changed files with 102 additions and 82 deletions

View File

@ -27,6 +27,8 @@ tests/driver_v*"}
: ${TEST_KCONFIG_native:="examples/hello-world tests/periph_*
tests/xtimer_* tests/ztimer_* tests/driver_ws281x"}
: ${TEST_WITH_CONFIG_SUPPORTED:="examples/suit_update tests/driver_at86rf2xx_aes"}
export RIOT_CI_BUILD=1
export CC_NOCOLOR=1
export STATIC_TESTS=0
@ -382,7 +384,11 @@ run_test() {
BOARD=$board TOOLCHAIN=${toolchain} make -C$appdir flash-only termdeps -j2
# now run the actual test
BOARD=$board TOOLCHAIN=${toolchain} make -C$appdir test
if is_in_list "${appdir}" "${TEST_WITH_CONFIG_SUPPORTED}"; then
BOARD=${board} TOOLCHAIN=${toolchain} make -C${appdir} test-with-config
else
BOARD=$board TOOLCHAIN=${toolchain} make -C$appdir test
fi
RES=$?
if [ $RES -eq 0 -a -n "$TEST_HASH" ]; then

View File

@ -761,42 +761,8 @@ reset:
$(call check_cmd,$(RESET),Reset program)
$(RESET) $(RESET_FLAGS)
.PHONY: test test/available
TESTS ?= $(foreach file,$(wildcard $(APPDIR)/tests/*[^~]),\
$(shell test -f $(file) -a -x $(file) && echo $(file)))
# "make test" calls "make term" which would implicitly build it's dependencies,
# but that increases the time "make test" needs to get ready. That can cause
# problems ("make term" missing some lines) as terminal startup is not properly
# sychronized, but depends on a static timeout (TESTRUNNER_START_DELAY).
# Murdock builds the term dependencies before running "make test" to circumvent
# this. In order to make local builds behave similar, add the term deps here.
# See #11762.
TEST_DEPS += $(TERMDEPS)
# Export TESTRUNNER_RESET_AFTER_TERM only for the test target. This allows for
# it to be accessed through the environment from python test script.
# This is currently needed only by `examples/%/tests` and should be removed in
# the future since `make reset` after `term` is not a valid synch method across
# all platforms.
$(call target-export-variables,test,TESTRUNNER_RESET_AFTER_TERM)
test: $(TEST_DEPS)
$(Q) for t in $(TESTS); do \
$$t || exit 1; \
done
test/available:
$(Q)test -n "$(strip $(TESTS))"
# this target only makes sense if an ELFFILE is actually created, thus guard by
# RIOTNOLINK="".
ifeq (,$(RIOTNOLINK))
test-input-hash: $(TESTS) $(ELFFILE) $(TEST_EXTRA_FILES)
sha1sum $^ > $(BINDIR)/test-input-hash.sha1
else
test-input-hash:
true
endif
# tests related targets and variables
include $(RIOTMAKE)/tests/tests.inc.mk
.PHONY: fuzz
fuzz:

View File

@ -46,7 +46,4 @@ ifneq (,$(filter test,$(MAKECMDGOALS)))
DEFAULT_MODULE += test_utils_interactive_sync
endif
# Can't be run on ci since it requires gateway + lora node
TEST_ON_CI_BLACKLIST = all
include $(RIOTBASE)/Makefile.include

View File

@ -0,0 +1,63 @@
# Export TESTRUNNER_RESET_AFTER_TERM only for the test target. This allows for
# it to be accessed through the environment from python test script.
# This is currently needed only by `examples/%/tests` and should be removed in
# the future since `make reset` after `term` is not a valid synch method across
# all platforms.
$(call target-export-variables,test test-as-root test-with-config,TESTRUNNER_RESET_AFTER_TERM)
.PHONY: test test/available
TESTS ?= $(foreach file,$(wildcard $(APPDIR)/tests/*[^~]),\
$(shell test -f $(file) -a -x $(file) && echo $(file)))
# "make test" calls "make term" which would implicitly build it's dependencies,
# but that increases the time "make test" needs to get ready. That can cause
# problems ("make term" missing some lines) as terminal startup is not properly
# sychronized, but depends on a static timeout (TESTRUNNER_START_DELAY).
# Murdock builds the term dependencies before running "make test" to circumvent
# this. In order to make local builds behave similar, add the term deps here.
# See #11762.
TEST_DEPS += $(TERMDEPS)
test: $(TEST_DEPS)
$(Q) for t in $(TESTS); do \
$$t || exit 1; \
done
test/available:
$(Q)test -n "$(strip $(TESTS))"
# Tests that require root privileges
.PHONY: test-as-root test-as-root/available
TESTS_AS_ROOT ?= $(foreach file,$(wildcard $(APPDIR)/tests-as-root/*[^~]),\
$(shell test -f $(file) -a -x $(file) && echo $(file)))
test-as-root: $(TEST_DEPS)
$(Q) for t in $(TESTS_AS_ROOT); do \
sudo -E PYTHONPATH=$(PYTHONPATH) $$t || exit 1; \
done
test-as-root/available:
$(Q)test -n "$(strip $(TESTS_AS_ROOT))"
# Tests that require specific configuration
.PHONY: test-with-config test-with-config/available
TESTS_WITH_CONFIG ?= $(foreach file,$(wildcard $(APPDIR)/tests-with-config/*[^~]),\
$(shell test -f $(file) -a -x $(file) && echo $(file)))
test-with-config: $(TEST_DEPS)
$(Q) for t in $(TESTS_WITH_CONFIG); do \
$$t || exit 1; \
done
test-with-config/available:
$(Q)test -n "$(strip $(TESTS_WITH_CONFIG))"
# this target only makes sense if an ELFFILE is actually created, thus guard by
# RIOTNOLINK="".
ifeq (,$(RIOTNOLINK))
test-input-hash: $(TESTS) $(TESTS_WITH_CONFIG) $(TESTS_AS_ROOT) $(ELFFILE) $(TEST_EXTRA_FILES)
sha1sum $^ > $(BINDIR)/test-input-hash.sha1
else
test-input-hash:
true
endif

View File

@ -1,6 +1,6 @@
APPLICATION ?= tests_$(notdir $(patsubst %/,%,$(CURDIR)))
ifneq (,$(wildcard $(CURDIR)/tests/.))
ifneq (,$(wildcard $(CURDIR)/tests*/.))
DEFAULT_MODULE += test_utils_interactive_sync
# add interactive test configuration when testing Kconfig
ifeq (1,$(TEST_KCONFIG))

View File

@ -117,3 +117,22 @@ The expected behavior is verified with the test in `tests/test_tools`.
Tests cannot rely on having on all boards and terminal programs:
* unbuffered input
* allowing sending special characters like `ctrl+c/ctrl+d`
Running tests that require a preliminary manual configuration
-------------------------------------------------------------
Some tests need active monitoring or manual setup steps but still have some
automated scripts. The test automation scripts are defined in the
`<test_application>/tests-with-config/` folder.
For running them, follow the setup or analysis documentation and use the
`test-with-config` target.
Running tests that require root privileges
------------------------------------------
Some tests require root privileges to launch their automated script. In this
case, the test automation scripts are defined in the
`<test_application>/tests-as-root/` folder.
For running them, follow the setup or analysis documentation and use the
`test-as-root` target.

View File

@ -11,11 +11,8 @@ from testrunner import run
def testfunc(child):
child.expect('Initializing APDS99XX sensor')
i = child.expect(['[OK]', '[Failed]'])
if i == 1:
print('FAILED')
return
child.expect_exact('Initializing APDS99XX sensor')
child.expect_exact('[OK]')
child.expect(r'proximity = \d+ \[cnts\]')
child.expect(r'ambient = \d+ \[cnts\]')
child.expect([r'red = \d+ \[cnts\], green = \d+ \[cnts\], blue = \d+ \[cnts\]',

View File

@ -11,11 +11,8 @@ from testrunner import run
def testfunc(child):
child.expect('Initializing APDS99XX sensor')
i = child.expect(['[OK]', '[Failed]'])
if i == 1:
print('FAILED')
return
child.expect_exact('Initializing APDS99XX sensor')
child.expect_exact('[OK]')
child.expect(r'ambient = \d+ \[cnts\]')
child.expect([r'red = \d+ \[cnts\], green = \d+ \[cnts\], blue = \d+ \[cnts\]',
r'illuminance = %d [lux]'])

View File

@ -11,11 +11,7 @@ from testrunner import run
def testfunc(child):
child.expect('Initialize BME680 sensor 0 ... ')
i = child.expect(['[OK]', '[failed]'])
if i == 1:
print('FAILED')
return
child.expect_exact('Initialize BME680 sensor 0 ... OK')
child.expect(r'\[bme680\]: dev=0, '
r'T = \d+.\d+ degC, '
r'P = \d+ Pa, '

View File

@ -1,9 +1,5 @@
include ../Makefile.tests_common
# Blacklist iotlab boards since a different device has the same i2c address
BOARD_BLACKLIST := iotlab-a8-m3 \
iotlab-m3
USEMODULE += ds1307
USEMODULE += embunit
USEMODULE += xtimer

View File

@ -1,12 +1,5 @@
include ../Makefile.tests_common
# the test needs real hardware to run
TEST_ON_CI_BLACKLIST += all
# Blacklist iotlab boards since a different device has the same i2c address
BOARD_BLACKLIST := iotlab-a8-m3 \
iotlab-m3
USEMODULE += ds3231
USEMODULE += xtimer
USEMODULE += shell

View File

@ -11,8 +11,4 @@ ifeq (native,$(BOARD))
endif
endif
# Fails on esp32 because the driver defines default GPIOs that are used for the
# SPI flash interface.
TEST_ON_CI_BLACKLIST += esp32-wroom-32
include $(RIOTBASE)/Makefile.include

View File

@ -12,10 +12,7 @@ from testrunner import run
def testfunc(child):
child.expect_exact('Testing Si1133 in blocking mode:')
i = child.expect([r'.*Result: OK\s', r'.*Result: FAILED (\d+)\s'])
if i == 1:
print('FAILED')
return
child.expect_exact('Result: OK')
print('SUCCESS')

View File

@ -45,10 +45,6 @@ BOARD_WHITELIST := airfy-beacon arduino-due arduino-duemilanove \
TEST_DEPS += image
# The test requires some manual setup to work
# So it cannot currently be run
TEST_ON_CI_BLACKLIST += all
include $(RIOTBASE)/Makefile.include
image:

View File

@ -21,6 +21,8 @@ FAT) That implies it doesn't show any modifications in RIOT that you perform on
your OS and the other way round. So always remember to mount/unmount correctly
or your FS will probably get damaged.
make flash test-with-config
# Real Hardware
Currently the test defaults to sdcard_spi on real hardware. But generally any
@ -30,3 +32,5 @@ storage device (e.g. your SD-card). To copy the image onto the card you can use
something like `make image && dd if=bin/riot_fatfs_disk.img
of=/dev/<your_sdcard>`. After that you can connect the card to your RIOT device
and check the test output via terminal.
make flash test-with-config

View File

@ -34,7 +34,4 @@ ifneq (,$(filter iotlab%,$(MAKECMDGOALS)))
include $(RIOTBASE)/dist/testbed-support/Makefile.iotlab
endif
# Can't be run on ci since it requires gateway + lora node
TEST_ON_CI_BLACKLIST = all
include $(RIOTBASE)/Makefile.include