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

menu "Testing"

source "subsys/testsuite/ztest/Kconfig"

config TEST
	bool "Mark project as a test"
	# For tests, store thread names in binary and dump them on crash to
	# ease debugging.
	select THREAD_NAME
	help
	  Mark a project or an application as a test. This will enable a few
	  test defaults.

config TEST_EXTRA_STACKSIZE
	int "Test function extra thread stack size"
	default 2048 if COVERAGE_GCOV
	default 768 if XTENSA
	default 0
	help
	  Additional stack for tests on some platform where default is not
	  enough.

config HAS_COVERAGE_SUPPORT
	bool
	help
	  The code coverage report generation is only available on boards
	  with enough spare RAM to buffer the coverage data, or on boards
	  based on the POSIX ARCH.

config COVERAGE
	bool "Create coverage data"
	depends on HAS_COVERAGE_SUPPORT
	help
	  This option will build your application with the -coverage option
	  which will generate data that can be used to create coverage reports.
	  For more information see
	  https://docs.zephyrproject.org/latest/guides/coverage.html

config COVERAGE_GCOV
	bool "Create Coverage data from hardware platform"
	default y
	depends on COVERAGE
	depends on !NATIVE_APPLICATION
	help
	  This option will select the custom gcov library. The reports will
	  be available over serial. This serial dump can be passed to
	  gen_gcov_files.py which creates the required .gcda files. These
	  can be read by gcov utility. For more details see gcovr.com .

config COVERAGE_DUMP
	bool "Dump coverage data on exit"
	depends on COVERAGE_GCOV
	help
	  Dump collected coverage information to console on exit.

config TEST_USERSPACE
	bool "Indicate that this test exercises user mode"
	help
	  This option indicates that a test case puts threads in user mode,
	  and that the build system will [override and] enable USERSPACE
	  if the platform supports it. It should be set in a .conf file on
	  a per-test basis and is not meant to be used outside test cases.
	  Tests with this option should also have the "userspace" filtering
	  tag in their testcase.yaml file.

	  The userspace APIs are no-ops if userspace is not enabled, so it is
	  OK to enable this even if the test will run on platforms which do
	  not support userspace. The test should still run on those platforms,
	  just with all threads in supervisor mode.

	  If a test *requires* that userspace be enabled in order to
	  pass, CONFIG_ARCH_HAS_USERSPACE should be filtered in its
	  testcase.yaml.

config TEST_LOGGING_DEFAULTS
	bool "Enable test case logging defaults"
	depends on TEST
	select LOG
	imply LOG_MINIMAL
	default y
	help
	  Option which implements default policy of enabling logging in
	  minimal mode for all test cases. For tests that need alternate
	  logging configuration, or no logging at all, disable this
	  in the project-level defconfig.

config TEST_ENABLE_USERSPACE
	bool
	depends on TEST_USERSPACE
	depends on ARCH_HAS_USERSPACE
	select USERSPACE
	select DYNAMIC_OBJECTS
	default y
	help
	  This hidden option implements the TEST_USERSPACE logic. It turns on
	  USERSPACE when CONFIG_ARCH_HAS_USERSPACE is set and the test
	  case itself indicates that it exercises user mode via
	  CONFIG_TEST_USERSPACE.

config TEST_USERSPACE_WITHOUT_HW_STACK_PROTECTION
	bool "Run User Mode tests without additionally enabling stack protection"
	depends on TEST_ENABLE_USERSPACE
	default y if SOC_SERIES_KINETIS_KE1XF
	help
	  A HW platform might not have sufficient MPU/MMU capabilities to support
	  running all test cases with User Mode and HW Stack Protection features
	  simultaneously enabled. For this platforms we execute the User Mode-
	  related tests without enabling HW stack protection.

config TEST_HW_STACK_PROTECTION
	bool "Enable hardware-based stack overflow detection if available"
	depends on ARCH_HAS_STACK_PROTECTION
	depends on TEST
	select HW_STACK_PROTECTION
	default y if !TEST_USERSPACE_WITHOUT_HW_STACK_PROTECTION
	help
	  This option will enable hardware-based stack protection by default
	  for all test cases if the hardware supports it.

config TEST_FLASH_DRIVERS
	bool "Test flash drivers"
	depends on BOARD_QEMU_X86
	select FLASH_HAS_DRIVER_ENABLED
	select FLASH_HAS_PAGE_LAYOUT
	help
	  This option will help test the flash drivers. This should be enabled
	  only when using qemu_x86.

config TEST_ARM_CORTEX_M
	bool
	depends on CPU_CORTEX_M
	default y
	select ARM_SECURE_BUSFAULT_HARDFAULT_NMI if ARM_SECURE_FIRMWARE
	help
	  ARM Cortex-M configuration required when testing.

	  Currently, this option is only utilized, to force routing
	  BusFault, HardFault, and NMI exceptions to Secure State,
	  when building a Secure ARMv8-M firmware. This will allow
	  the testing suite to utilize these exceptions, in tests.
	  Note that by default, when building with ARM_SECURE_FIRMWARE
	  set, these exceptions are set to target the Non-Secure state.

endmenu
