# 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_STACK_SIZE
	int "Test function extra thread stack size"
	default 2048 if COVERAGE_GCOV
	default 768 if XTENSA
	default 0
	depends on TEST
	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_GCOV_HEAP_SIZE
	int "Size of heap allocated for gcov coverage data dump"
	default 32768 if X86 || SOC_SERIES_MPS2
	default 16384
	help
	  This option configures the heap size allocated for gcov coverage
	  data to be dumped over serial.

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 "Test case logging defaults"
	depends on TEST
	select LOG
	select LOG_DEFAULT_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 "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
	depends on TEST
	default y
	select ARM_SECURE_BUSFAULT_HARDFAULT_NMI if ARM_SECURE_FIRMWARE
	help
	  ARM Cortex-M configuration required when testing.

	  This option is used to select stack sizes and enable features for
	  testing.

	  This option is also used 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.

config TEST_BUSY_SIM
	bool "Busy simulator"
	depends on TEST
	select ENTROPY_GENERATOR
	select RING_BUFFER if !XOSHIRO_RANDOM_GENERATOR
	select COUNTER
	help
	  It simulates cpu load by using counter device to generate interrupts
	  with random intervals and random busy looping in the interrupt.

endmenu
