summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorTom Hughes <tomhughes@chromium.org>2023-04-03 16:28:17 -0700
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2023-04-04 22:47:27 +0000
commit855cf7675dda0d2119c9869c7eb97139cf503636 (patch)
tree42ebb40cd2e763e8c4db0469ffc7c63a70a29a05 /test
parenta60dc001c3d202d19cbf07b455c8a165a58fa01f (diff)
downloadchrome-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>
Diffstat (limited to 'test')
-rw-r--r--test/build.mk2
-rwxr-xr-xtest/run_device_tests.py1
-rw-r--r--test/sbrk.c86
-rw-r--r--test/sbrk.tasklist9
4 files changed, 98 insertions, 0 deletions
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