From 5aa5ffe0937d091c828273a7d8bb904717656eaf Mon Sep 17 00:00:00 2001 From: Krzysztof Taborowski Date: Wed, 15 Nov 2023 14:07:44 +0100 Subject: [PATCH] tests: add critical region tests [KRKNWK-18043] Signed-off-by: Krzysztof Taborowski --- .../functional/critical_region/CMakeLists.txt | 18 ++++++ tests/functional/critical_region/Kconfig | 15 +++++ tests/functional/critical_region/prj.conf | 9 +++ tests/functional/critical_region/src/main.c | 62 +++++++++++++++++++ .../functional/critical_region/testcase.yaml | 6 ++ 5 files changed, 110 insertions(+) create mode 100644 tests/functional/critical_region/CMakeLists.txt create mode 100644 tests/functional/critical_region/Kconfig create mode 100644 tests/functional/critical_region/prj.conf create mode 100644 tests/functional/critical_region/src/main.c create mode 100644 tests/functional/critical_region/testcase.yaml diff --git a/tests/functional/critical_region/CMakeLists.txt b/tests/functional/critical_region/CMakeLists.txt new file mode 100644 index 0000000000..bf903d06fb --- /dev/null +++ b/tests/functional/critical_region/CMakeLists.txt @@ -0,0 +1,18 @@ +# +# Copyright (c) 2022 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# + +cmake_minimum_required(VERSION 3.20.0) + +find_package(Zephyr REQUIRED HINTS $ENV{ZEPHYR_BASE}) +project(sidewalk_test_critical_region) + +# add test file +FILE(GLOB app_sources src/*.c) +target_sources(app PRIVATE ${app_sources}) +target_include_directories(app PRIVATE .) + +# generate runner for the test +test_runner_generate(${app_sources}) diff --git a/tests/functional/critical_region/Kconfig b/tests/functional/critical_region/Kconfig new file mode 100644 index 0000000000..60a5c6f59a --- /dev/null +++ b/tests/functional/critical_region/Kconfig @@ -0,0 +1,15 @@ +# +# Copyright (c) 2022 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +config SIDEWALK_BUILD + default y + +config SIDEWALK_CRITICAL_REGION + default y + +config SIDEWALK_CRITICAL_REGION_RE_ENTRY_MAX + default 2 + +source "Kconfig.zephyr" diff --git a/tests/functional/critical_region/prj.conf b/tests/functional/critical_region/prj.conf new file mode 100644 index 0000000000..3ef526ea9c --- /dev/null +++ b/tests/functional/critical_region/prj.conf @@ -0,0 +1,9 @@ +# +# Copyright (c) 2022 Nordic Semiconductor ASA +# +# SPDX-License-Identifier: LicenseRef-Nordic-5-Clause +# +CONFIG_UNITY=y +CONFIG_MAIN_THREAD_PRIORITY=14 +CONFIG_NO_OPTIMIZATIONS=y +CONFIG_RESET_ON_FATAL_ERROR=n diff --git a/tests/functional/critical_region/src/main.c b/tests/functional/critical_region/src/main.c new file mode 100644 index 0000000000..fb1d9cd333 --- /dev/null +++ b/tests/functional/critical_region/src/main.c @@ -0,0 +1,62 @@ +/* + * Copyright (c) 2022 Nordic Semiconductor ASA + * + * SPDX-License-Identifier: LicenseRef-Nordic-5-Clause + */ +#include +#include +#include + +#if defined(CONFIG_CPU_CORTEX_M) +#include +#else +#error "Architecture not supported" +#endif + +#define TEST_IRQ (30) +#define TEST_IRQ_PRIO (2) +#define TEST_IRQ_FLAGS (0) + +#define UNCHANGED 0 +#define CHANGED 1 +static volatile int resource; + +static void irq_cb(void) +{ + resource = CHANGED; +} + +static void trigger_irq(int irq) +{ + NVIC_SetPendingIRQ(irq); +} + +void test_sid_pal_critical_region_with_timer(void) +{ + IRQ_CONNECT(TEST_IRQ, TEST_IRQ_PRIO, irq_cb, NULL, TEST_IRQ_FLAGS); + irq_enable(TEST_IRQ); + + resource = UNCHANGED; + trigger_irq(TEST_IRQ); + TEST_ASSERT_EQUAL_UINT32(CHANGED, resource); + + sid_pal_enter_critical_region(); + resource = UNCHANGED; + trigger_irq(TEST_IRQ); + TEST_ASSERT_EQUAL_UINT32(UNCHANGED, resource); + sid_pal_exit_critical_region(); + + trigger_irq(TEST_IRQ); + TEST_ASSERT_EQUAL_UINT32(CHANGED, resource); +} + +/* It is required to be added to each test. That is because unity is using + * different main signature (returns int) and zephyr expects main which does + * not return value. + */ +extern int unity_main(void); + +int main(void) +{ + return unity_main(); +} diff --git a/tests/functional/critical_region/testcase.yaml b/tests/functional/critical_region/testcase.yaml new file mode 100644 index 0000000000..c204d67738 --- /dev/null +++ b/tests/functional/critical_region/testcase.yaml @@ -0,0 +1,6 @@ +tests: + sidewalk.functional.critical_region: + platform_allow: nrf52840dk_nrf52840 nrf5340dk_nrf5340_cpuapp + integration_platforms: + - nrf52840dk_nrf52840 + - nrf5340dk_nrf5340_cpuapp