diff options
author | Tom Hughes <tomhughes@chromium.org> | 2023-04-03 16:28:17 -0700 |
---|---|---|
committer | Chromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com> | 2023-04-04 22:47:27 +0000 |
commit | 855cf7675dda0d2119c9869c7eb97139cf503636 (patch) | |
tree | 42ebb40cd2e763e8c4db0469ffc7c63a70a29a05 | |
parent | a60dc001c3d202d19cbf07b455c8a165a58fa01f (diff) | |
download | chrome-ec-855cf7675dda0d2119c9869c7eb97139cf503636.tar.gz |
test: Add unit tests for sbrk
BRANCH=none
BUG=b:234181908
TEST=./test/run_device_tests.py --board bloonchipper -t sbrk
=> PASS
TEST=./test/run_device_tests.py --board dartmonkey -t sbrk
=> PASS
Change-Id: I02d6fe269718f0f4f7f5d72e6a8f01bb4e6b4cfd
Signed-off-by: Tom Hughes <tomhughes@chromium.org>
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4396773
Reviewed-by: Abe Levkoy <alevkoy@chromium.org>
-rw-r--r-- | board/hatch_fp/build.mk | 1 | ||||
-rw-r--r-- | board/nocturne_fp/build.mk | 1 | ||||
-rw-r--r-- | board/nucleo-dartmonkey/build.mk | 1 | ||||
-rw-r--r-- | board/nucleo-f412zg/build.mk | 1 | ||||
-rw-r--r-- | board/nucleo-h743zi/build.mk | 1 | ||||
-rw-r--r-- | test/build.mk | 2 | ||||
-rwxr-xr-x | test/run_device_tests.py | 1 | ||||
-rw-r--r-- | test/sbrk.c | 86 | ||||
-rw-r--r-- | test/sbrk.tasklist | 9 |
9 files changed, 103 insertions, 0 deletions
diff --git a/board/hatch_fp/build.mk b/board/hatch_fp/build.mk index 2647b4af9c..a13ec273d2 100644 --- a/board/hatch_fp/build.mk +++ b/board/hatch_fp/build.mk @@ -56,6 +56,7 @@ test-list-y=\ rollback_entropy \ rsa3 \ rtc \ + sbrk \ scratchpad \ sha256 \ sha256_unrolled \ diff --git a/board/nocturne_fp/build.mk b/board/nocturne_fp/build.mk index 49d5db1582..aa906b8cf1 100644 --- a/board/nocturne_fp/build.mk +++ b/board/nocturne_fp/build.mk @@ -56,6 +56,7 @@ test-list-y=\ rollback_entropy \ rsa3 \ rtc \ + sbrk \ scratchpad \ sha256 \ sha256_unrolled \ diff --git a/board/nucleo-dartmonkey/build.mk b/board/nucleo-dartmonkey/build.mk index b544490fc9..fbf78d16b7 100644 --- a/board/nucleo-dartmonkey/build.mk +++ b/board/nucleo-dartmonkey/build.mk @@ -33,6 +33,7 @@ test-list-y=\ rollback_entropy \ rsa3 \ rtc \ + sbrk \ scratchpad \ sha256 \ sha256_unrolled \ diff --git a/board/nucleo-f412zg/build.mk b/board/nucleo-f412zg/build.mk index d923a7a40f..8299781a6f 100644 --- a/board/nucleo-f412zg/build.mk +++ b/board/nucleo-f412zg/build.mk @@ -30,6 +30,7 @@ test-list-y=\ rollback_entropy \ rsa3 \ rtc \ + sbrk \ scratchpad \ sha256 \ sha256_unrolled \ diff --git a/board/nucleo-h743zi/build.mk b/board/nucleo-h743zi/build.mk index ad04a68918..575a6d5da3 100644 --- a/board/nucleo-h743zi/build.mk +++ b/board/nucleo-h743zi/build.mk @@ -30,6 +30,7 @@ test-list-y=\ rollback_entropy \ rsa3 \ rtc \ + sbrk \ scratchpad \ sha256 \ sha256_unrolled \ diff --git a/test/build.mk b/test/build.mk index 923c141d33..2c5ff67b69 100644 --- a/test/build.mk +++ b/test/build.mk @@ -90,6 +90,7 @@ test-list-host += rollback_secret test-list-host += rsa test-list-host += rsa3 test-list-host += rtc +test-list-host += sbrk test-list-host += sbs_charging_v2 test-list-host += sha256 test-list-host += sha256_unrolled @@ -252,6 +253,7 @@ rsa-y=rsa.o rsa3-y=rsa.o rtc-y=rtc.o scratchpad-y=scratchpad.o +sbrk-y=sbrk.o sbs_charging-y=sbs_charging.o sbs_charging_v2-y=sbs_charging_v2.o sha256-y=sha256.o diff --git a/test/run_device_tests.py b/test/run_device_tests.py index 4661d57b74..65241177b2 100755 --- a/test/run_device_tests.py +++ b/test/run_device_tests.py @@ -308,6 +308,7 @@ class AllTests: test_name="rollback_entropy", imagetype_to_use=ImageType.RO ), TestConfig(test_name="rtc"), + TestConfig(test_name="sbrk", imagetype_to_use=ImageType.RO), TestConfig(test_name="sha256"), TestConfig(test_name="sha256_unrolled"), TestConfig(test_name="static_if"), diff --git a/test/sbrk.c b/test/sbrk.c new file mode 100644 index 0000000000..a5cbd2e41b --- /dev/null +++ b/test/sbrk.c @@ -0,0 +1,86 @@ +/* Copyright 2023 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +#include "link_defs.h" +#include "shared_mem.h" +#include "test_util.h" + +#include <errno.h> + +#include <unistd.h> + +test_static int test_sbrk_overflow(void) +{ + /* Requesting the maximum possible amount should succeed. */ + uint8_t *ptr = sbrk(shared_mem_size()); + TEST_NE(ptr, (void *)-1, "%p"); + + /* Requesting any more should fail. */ + ptr = sbrk(1); + TEST_EQ(ptr, (void *)-1, "%p"); + TEST_EQ(errno, ENOMEM, "%d"); + + return EC_SUCCESS; +} + +test_static int test_sbrk_underflow(void) +{ + uint8_t *const start = sbrk(0); + TEST_EQ(start, (uint8_t *)__shared_mem_buf, "%p"); + + /* + * We're already at the start of the shared mem buffer, so requesting + * less should fail. + */ + uint8_t *ptr = sbrk(-1); + TEST_EQ(ptr, (void *)-1, "%p"); + TEST_EQ(errno, ENOMEM, "%d"); + + ptr = sbrk(0); + TEST_EQ(ptr, (uint8_t *)__shared_mem_buf, "%p"); + + return EC_SUCCESS; +} + +test_static int test_sbrk(void) +{ + uint8_t *const start = sbrk(0); + if (!IS_ENABLED(BOARD_HOST)) + TEST_EQ(start, (uint8_t *)__shared_mem_buf, "%p"); + + uint8_t *prev = sbrk(100); + TEST_EQ(prev, start, "%p"); + + uint8_t *cur = sbrk(0); + TEST_EQ(cur, prev + 100, "%p"); + + prev = sbrk(-100); + TEST_EQ(prev, cur, "%p"); + + cur = sbrk(0); + TEST_EQ(cur, start, "%p"); + + return EC_SUCCESS; +} + +void run_test(int argc, const char **argv) +{ + test_reset(); + + RUN_TEST(test_sbrk); + if (!IS_ENABLED(BOARD_HOST)) { + if (IS_ENABLED(SECTION_IS_RW)) { + ccprintf("The following tests only work in RO, since " + "RW performs dynamic memory allocation " + "before the test starts.\n"); + test_fail(); + return; + } + RUN_TEST(test_sbrk_underflow); + RUN_TEST(test_sbrk_overflow); + } + + test_print_result(); +} diff --git a/test/sbrk.tasklist b/test/sbrk.tasklist new file mode 100644 index 0000000000..d1920322a9 --- /dev/null +++ b/test/sbrk.tasklist @@ -0,0 +1,9 @@ +/* Copyright 2023 The ChromiumOS Authors + * Use of this source code is governed by a BSD-style license that can be + * found in the LICENSE file. + */ + +/** + * See CONFIG_TASK_LIST in config.h for details. + */ +#define CONFIG_TEST_TASK_LIST |