# Copyright (c) 2016 Intel Corporation
# SPDX-License-Identifier: Apache-2.0

config ZTEST
	bool "Zephyr testing framework"
	select TEST
	select OUTPUT_SYMBOLS
	help
	  Enable the Zephyr testing framework. You should enable this only
	  if you're writing automated tests.

if ZTEST

config ZTEST_NEW_API
	bool "Use the new Ztest API"
	help
	  Enables the new Ztest APIs for creating suites and unit tests in
	  separate compilation units as well as the new 'rules' API.

config ZTEST_STACK_SIZE
	int "Test function thread stack size"
	default 2048 if COVERAGE_GCOV
	default 1024

config ZTEST_FAIL_FAST
	bool "Abort on first failing test"
	help
	  Stop and abort on first failing test. Do not continue with other
	  tests that might be in the queue.

config ZTEST_ASSERT_VERBOSE
	int "Assertion verbosity level"
	default 1
	help
	  Set verbosity level for assertions.
	  Assertion verbosity levels:
	  0 Write only file and line for failed assertions
	  1 Write file, line number, function and reason for failed assertions
	  2 Log also successful assertions

config ZTEST_THREAD_PRIORITY
	int "Testing thread priority"
	default -2 if !PREEMPT_ENABLED
	default -1
	help
	  Set priority of the testing thread. Default is -1 (cooperative).

config ZTEST_TC_UTIL_USER_OVERRIDE
	bool "Override tc_util.h"
	help
	  Enable overriding defines in tc_util.h.
	  If True the user should provide tc_util_user_override.h in Zephyr's include path,
	  e.g. by adding zephyr_include_directories(project PRIVATE my_folder) to a project's CMakeLists.txt.
	  The override header may now #define the various macros and strings in tc_util.h which are
	  surrounded by #ifndef ... #endif blocks.

config ZTEST_RETEST_IF_PASSED
	bool "Reset the board to test again if the test passed"
	select REBOOT
	help
	  If the test passed reset the board so it is run again.  This
	  may be used as an alternative to manual resets when
	  attempting to reproduce an intermittent failure.

config ZTEST_FATAL_HOOK
	bool "Using a pre-defined fatal handler and hook function"
	help
	  Use the pre-defined common fatal error handler and a post hook to
	  do actions in your test case, this option often enabled when doing
	  error test case. Remember to add ignore_fault tag in yaml file when
	  using twister to run testing.

config ZTEST_ASSERT_HOOK
	bool "Using a pre-defined assert handler and hook function"
	help
	  Use the pre-defined common assert fail handler and a post hook to
	  do actions in your test case, this option often enabled when doing
	  error test case. Remember to add ignore_fault tag in yaml file when
	  using twister to run testing.

config ZTEST_NO_YIELD
	bool "Do not yield to the idle thread after tests complete"
	help
	  When the tests complete, do not yield to the idle thread and instead
	  spin in a loop. This is useful for low power mode tests, where
	  yielding to the idle thread may put the board into a low power state
	  where a debugger cannot connect to it.

if ZTEST_NEW_API

menu "ztest provided rules"

config ZTEST_RULE_1CPU
	bool "Run all the tests on a single CPU"
	help
	  This rule will call z_test_1cpu_start before each unit test and
	  ztest_1cpu_stop after each test.

endmenu

config ZTEST_VERIFY_RUN_ALL
	bool "Validates all defined tests have ran"
	default y
	help
	  This rule will fail the project if not all tests have been run.

config ZTEST_SHUFFLE
	bool "Shuffle the order of tests and suites"
	select TEST_RANDOM_GENERATOR if !ENTROPY_HAS_DRIVER
	help
	  This rule will shuffle the order of tests and test suites.

if ZTEST_SHUFFLE
config ZTEST_SHUFFLE_SUITE_REPEAT_COUNT
	int "Number of iterations the test suite will run"
	default 3
	help
	  This rule will execute a test suite N number of times. The tests
	  per suite will be shuffled on each iteration.  The test order will likely
	  be different per iteration.

config ZTEST_SHUFFLE_TEST_REPEAT_COUNT
	int "Number of iterations the test will run"
	default 3
	help
	  This rule will execute a test N number of times.  The test order will
	  likely be different per iteration.

endif #ZTEST_SHUFFLE

config ZTEST_VERBOSE_OUTPUT
	bool "Verbose test output"
	default y
	help
	  This option controls whether test output is shown verbosely or
	  no output at all.

config ZTEST_VERBOSE_SUMMARY
	bool "Verbose test summary"
	default y
	help
	  This option controls whether suite summary is shown verbosely or
	  just in one line.

endif # ZTEST_NEW_API

config TEST_LOGGING_FLUSH_AFTER_TEST
	bool "When enabled logs are flushed after each test case"
	default y
	depends on MULTITHREADING

endif # ZTEST

config ZTEST_MOCKING
	bool "Mocking support functions"
	help
	  Enable mocking support for Ztest. This allows the test to set
	  return values and expected parameters to functions.

config ZTEST_PARAMETER_COUNT
	int "Count of parameters or return values reserved"
	default 10
	depends on ZTEST_MOCKING
	help
	  Maximum amount of concurrent return values / expected parameters.

config ZTRESS
	bool "Stress test framework"
	select THREAD_RUNTIME_STATS
	select THREAD_MONITOR
	select TEST_RANDOM_GENERATOR if !ENTROPY_HAS_DRIVER
	depends on !USERSPACE

if ZTRESS

config ZTRESS_MAX_THREADS
	int "Maximum number of threads in ztress framework"
	default 3
	range 1 16

config ZTRESS_STACK_SIZE
	int "Stack size of Ztress thread"
	default 4096 if NO_OPTIMIZATIONS
	default 2048

config ZTRESS_REPORT_PROGRESS_MS
	int "Progress report interval (in milliseconds)"
	default 1000
	help
	  Use 0 to disable.
endif # ZTRESS
