1. Test suites in prior ztest serve no purpose other than logical ordering of tests into a named-group. Move the construct of setup and teardown into the test suite and away from individual tests. Additionally, add the constructs of before/after to the test suites. This model more closely resembels other testing frameworks such as gTest and Junit. 2. Test can be added to a suite by using ZTEST() or ZTEST_F() where _F stands for fixture. In the case where _F is used, the argument `this` will be provided with the type `struct suite_name##_fixture*`. Again, this models other modern testing frameworks and allows the test to directly access the already set up data related to the test suite. 3. Add the concept of test rules (from Junit). Rules are similar to the before/after functions of the test suites but are global and run on all suites. An example of a test rule can be to check that nothing was logged to ERROR. The rule can cause the test to fail if anything was logged to ERROR during an integration test. Another example would be a rule that verifies that tests ran within some defined timeout. Signed-off-by: Yuval Peress <peress@google.com>
149 lines
4.3 KiB
Plaintext
149 lines
4.3 KiB
Plaintext
/* SPDX-License-Identifier: Apache-2.0 */
|
|
|
|
#if defined(CONFIG_NETWORKING)
|
|
#ifndef NETWORK_RAM_SECTIONS
|
|
#define NETWORK_RAM_SECTIONS \
|
|
ITERABLE_SECTION_RAM(net_if, 4) \
|
|
ITERABLE_SECTION_RAM(net_if_dev, 4) \
|
|
ITERABLE_SECTION_RAM(net_l2, 4) \
|
|
ITERABLE_SECTION_RAM(eth_bridge, 4)
|
|
#endif
|
|
#endif /* NETWORKING */
|
|
|
|
#if defined(CONFIG_BT_MESH)
|
|
ITERABLE_SECTION_RAM(bt_mesh_ext_adv, 4)
|
|
#endif
|
|
|
|
#if defined(CONFIG_GEN_SW_ISR_TABLE) && defined(CONFIG_DYNAMIC_INTERRUPTS)
|
|
SECTION_DATA_PROLOGUE(sw_isr_table,,)
|
|
{
|
|
/*
|
|
* Some arch requires an entry to be aligned to arch
|
|
* specific boundary for using double word load
|
|
* instruction. See include/sw_isr_table.h.
|
|
*/
|
|
. = ALIGN(CONFIG_ARCH_SW_ISR_TABLE_ALIGN);
|
|
*(_SW_ISR_TABLE_SECTION_SYMS)
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
#endif
|
|
|
|
SECTION_DATA_PROLOGUE(device_states,,)
|
|
{
|
|
/* Device states used by the device objects. */
|
|
__device_states_start = .;
|
|
KEEP(*(".z_devstate"));
|
|
KEEP(*(".z_devstate.*"));
|
|
__device_states_end = .;
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
|
|
#if CONFIG_PM_DEVICE
|
|
SECTION_DATA_PROLOGUE(pm_device_slots, (NOLOAD),)
|
|
{
|
|
__pm_device_slots_start = .;
|
|
KEEP(*(".z_pm_device_slots"));
|
|
__pm_device_slots_end = .;
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
#endif
|
|
|
|
SECTION_DATA_PROLOGUE(initshell,,)
|
|
{
|
|
/* link in shell initialization objects for all modules that
|
|
* use shell and their shell commands are automatically
|
|
* initialized by the kernel.
|
|
*/
|
|
__shell_module_start = .;
|
|
KEEP(*(".shell_module_*"));
|
|
__shell_module_end = .;
|
|
__shell_cmd_start = .;
|
|
KEEP(*(".shell_cmd_*"));
|
|
__shell_cmd_end = .;
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
|
|
SECTION_DATA_PROLOGUE(log_dynamic_sections,,)
|
|
{
|
|
__log_dynamic_start = .;
|
|
KEEP(*(SORT(.log_dynamic_*)));
|
|
__log_dynamic_end = .;
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
|
|
ITERABLE_SECTION_RAM(_static_thread_data, 4)
|
|
|
|
#ifdef CONFIG_USERSPACE
|
|
/* All kernel objects within are assumed to be either completely
|
|
* initialized at build time, or initialized automatically at runtime
|
|
* via iteration before the POST_KERNEL phase.
|
|
*
|
|
* These two symbols only used by gen_kobject_list.py
|
|
*/
|
|
|
|
_static_kernel_objects_begin = .;
|
|
#endif /* CONFIG_USERSPACE */
|
|
|
|
ITERABLE_SECTION_RAM_GC_ALLOWED(k_timer, 4)
|
|
ITERABLE_SECTION_RAM_GC_ALLOWED(k_mem_slab, 4)
|
|
ITERABLE_SECTION_RAM_GC_ALLOWED(k_mem_pool, 4)
|
|
ITERABLE_SECTION_RAM_GC_ALLOWED(k_heap, 4)
|
|
ITERABLE_SECTION_RAM_GC_ALLOWED(k_mutex, 4)
|
|
ITERABLE_SECTION_RAM_GC_ALLOWED(k_stack, 4)
|
|
ITERABLE_SECTION_RAM_GC_ALLOWED(k_msgq, 4)
|
|
ITERABLE_SECTION_RAM_GC_ALLOWED(k_mbox, 4)
|
|
ITERABLE_SECTION_RAM_GC_ALLOWED(k_pipe, 4)
|
|
ITERABLE_SECTION_RAM_GC_ALLOWED(k_sem, 4)
|
|
ITERABLE_SECTION_RAM_GC_ALLOWED(k_event, 4)
|
|
ITERABLE_SECTION_RAM_GC_ALLOWED(k_queue, 4)
|
|
ITERABLE_SECTION_RAM_GC_ALLOWED(k_condvar, 4)
|
|
|
|
SECTION_DATA_PROLOGUE(_net_buf_pool_area,,SUBALIGN(4))
|
|
{
|
|
_net_buf_pool_list = .;
|
|
KEEP(*(SORT_BY_NAME("._net_buf_pool.static.*")))
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
|
|
#if defined(CONFIG_NETWORKING)
|
|
NETWORK_RAM_SECTIONS
|
|
#endif /* NETWORKING */
|
|
|
|
#if defined(CONFIG_UART_MUX)
|
|
SECTION_DATA_PROLOGUE(uart_mux,,SUBALIGN(4))
|
|
{
|
|
__uart_mux_start = .;
|
|
*(".uart_mux.*")
|
|
KEEP(*(SORT_BY_NAME(".uart_mux.*")))
|
|
__uart_mux_end = .;
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
#endif
|
|
|
|
#if defined(CONFIG_USB_DEVICE_STACK)
|
|
SECTION_DATA_PROLOGUE(usb_descriptor,,SUBALIGN(1))
|
|
{
|
|
__usb_descriptor_start = .;
|
|
*(".usb.descriptor")
|
|
KEEP(*(SORT_BY_NAME(".usb.descriptor*")))
|
|
__usb_descriptor_end = .;
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
|
|
ITERABLE_SECTION_RAM(usb_cfg_data, 4)
|
|
#endif /* CONFIG_USB_DEVICE_STACK */
|
|
|
|
#if defined(CONFIG_USB_DEVICE_BOS)
|
|
SECTION_DATA_PROLOGUE(usb_bos_desc,,SUBALIGN(1))
|
|
{
|
|
__usb_bos_desc_start = .;
|
|
*(".usb.bos_desc")
|
|
KEEP(*(SORT_BY_NAME(".usb.bos_desc*")))
|
|
__usb_bos_desc_end = .;
|
|
} GROUP_DATA_LINK_IN(RAMABLE_REGION, ROMABLE_REGION)
|
|
#endif /* CONFIG_USB_DEVICE_BOS */
|
|
|
|
#ifdef CONFIG_USERSPACE
|
|
_static_kernel_objects_end = .;
|
|
#endif
|
|
|
|
#if defined(CONFIG_ZTEST)
|
|
ITERABLE_SECTION_RAM(ztest_suite_node, 4)
|
|
#if defined(CONFIG_ZTEST_NEW_API)
|
|
ITERABLE_SECTION_RAM(ztest_unit_test, 4)
|
|
ITERABLE_SECTION_RAM(ztest_test_rule, 4)
|
|
#endif /* CONFIG_ZTEST_NEW_API */
|
|
#endif /* CONFIG_ZTEST */
|