# 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_SUMMARY
	bool "Display test summary"
	default y
	help
	  This option controls output of a test summary.

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
