# 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_TEST_DELAY_MS
	int "Delay between tests in milliseconds"
	default 0
	help
	  Add a delay between between tests to manage output on the console on
	  systems that can't handle the rapid output rate.

config ZTEST_CPU_HOLD_TIME_MS
	int "Time in milliseconds to hold other CPUs for 1cpu type tests"
	default 3000
	help
	  This option is used to specify the maximum time in milliseconds for
	  which a 1cpu type test may execute on a multicpu system. The default
	  value ought to suffice for most such tests; however slower platforms
	  (which may include simulators) may need to set this to a larger
	  value. Please be aware that increasing it for long-running test cases
	  may overload the CI system. Modify with caution.

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.

config ZTEST_FAIL_ON_ASSUME
	bool "Fail the test run when an assumption fails"
	default y
	help
	  When enabled, the test binary will fail at the end if an assumption failed. This means
	  that while tests will still be marked as skipped on failed zassume calls, the final test
	  result will be shown as a failure in order to increase visibility. This precludes tests
	  that skipped with the ZTEST_EXPECT_SKIP annotation.

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
