# 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

choice
	prompt "Coverage mode"
	default COVERAGE_NATIVE_GCOV if NATIVE_BUILD
	default COVERAGE_GCOV if !NATIVE_BUILD
	depends on COVERAGE

config COVERAGE_NATIVE_GCOV
	bool "Host compiler gcov based code coverage"
	depends on NATIVE_BUILD
	help
	  Build natively with the compiler standard `--coverage` options,
	  that is with gcov/GCC-compatible coverage

config COVERAGE_NATIVE_SOURCE
	bool "Host compiler source based code coverage"
	depends on NATIVE_BUILD
	depends on "${ZEPHYR_TOOLCHAIN_VARIANT}" = "llvm"
	help
	  Build natively with the compiler source based coverage options.
	  Today this is only supported with LLVM

config COVERAGE_GCOV
	bool "Create Coverage data from hardware platform"
	depends on !NATIVE_BUILD
	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 .

endchoice

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. If the value is 0, no buffer will be used,
	  data will be dumped directly 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 FORCE_COVERAGE
	bool "Force coverage"
	select HAS_COVERAGE_SUPPORT
	help
	  Regardless of platform support, it will enable coverage data production.
	  If the platform does not support coverage by default, setting this config
	  does not guarantee that coverage data will be gathered.
	  Application may not fit memory or crash at runtime.

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 || SOC_SERIES_S32K1XX
	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
