]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
abuf: Remove code that prevented test code running
authorAndrew Goodbody <andrew.goodbody@linaro.org>
Wed, 16 Jul 2025 09:03:30 +0000 (10:03 +0100)
committerTom Rini <trini@konsulko.com>
Wed, 23 Jul 2025 23:37:05 +0000 (17:37 -0600)
When abuf was introduced some test code was prevented from running using
a 'return 0' early in the functions. A comment said it crashed on
sandbox due to a 'bug' in realloc. Some time later a bug in abuf_realloc
was fixed but this test code was never enabled.

Remove the early 'return 0' instances so that the test code can run.
Also remove some checks that relied on the implementation details of the
U-Boot memory code as these can fail on sandbox which uses system memory
code. Besides that this code should be testing abuf implementation not
the underlying memory code which has its own tests.
Finally use a new #define for the allocs that are meant to fail to
ensure they do fail on all CI platforms.

This issue found by Smatch.

Signed-off-by: Andrew Goodbody <andrew.goodbody@linaro.org>
test/lib/abuf.c

index 97b128c01c063156789075ae09fbce2096e068b5..3dced1ddb112028043f5d09a95eb16c0a52e4d30 100644 (file)
@@ -12,6 +12,7 @@
 
 static char test_data[] = "1234";
 #define TEST_DATA_LEN  sizeof(test_data)
+#define HUGE_ALLOC_SIZE 0x60000000
 
 /* Test abuf_set() */
 static int lib_test_abuf_set(struct unit_test_state *uts)
@@ -93,13 +94,6 @@ static int lib_test_abuf_realloc(struct unit_test_state *uts)
 {
        struct abuf buf;
        ulong start;
-       void *ptr;
-
-       /*
-        * TODO: crashes on sandbox sometimes due to an apparent bug in
-        * realloc().
-        */
-       return 0;
 
        start = ut_check_free();
 
@@ -116,23 +110,18 @@ static int lib_test_abuf_realloc(struct unit_test_state *uts)
        ut_assertnonnull(buf.data);
        ut_asserteq(TEST_DATA_LEN, buf.size);
        ut_asserteq(true, buf.alloced);
-       ptr = buf.data;
 
        /*
-        * Make it smaller; the pointer should remain the same. Note this relies
-        * on knowledge of how U-Boot's realloc() works
+        * Make it smaller.
         */
        ut_asserteq(true, abuf_realloc(&buf, TEST_DATA_LEN - 1));
        ut_asserteq(TEST_DATA_LEN - 1, buf.size);
        ut_asserteq(true, buf.alloced);
-       ut_asserteq_ptr(ptr, buf.data);
 
        /*
-        * Make it larger, forcing reallocation. Note this relies on knowledge
-        * of how U-Boot's realloc() works
+        * Make it larger.
         */
        ut_asserteq(true, abuf_realloc(&buf, 0x1000));
-       ut_assert(buf.data != ptr);
        ut_asserteq(0x1000, buf.size);
        ut_asserteq(true, buf.alloced);
 
@@ -210,19 +199,12 @@ static int lib_test_abuf_large(struct unit_test_state *uts)
        ulong start;
        size_t size;
        int delta;
-       void *ptr;
-
-       /*
-        * This crashes at present due to trying to allocate more memory than
-        * available, which breaks something on sandbox.
-        */
-       return 0;
 
        start = ut_check_free();
 
        /* Try an impossible size */
        abuf_init(&buf);
-       ut_asserteq(false, abuf_realloc(&buf, CONFIG_SYS_MALLOC_LEN));
+       ut_asserteq(false, abuf_realloc(&buf, HUGE_ALLOC_SIZE));
        ut_assertnull(buf.data);
        ut_asserteq(0, buf.size);
        ut_asserteq(false, buf.alloced);
@@ -237,13 +219,11 @@ static int lib_test_abuf_large(struct unit_test_state *uts)
        ut_assertnonnull(buf.data);
        ut_asserteq(TEST_DATA_LEN, buf.size);
        ut_asserteq(true, buf.alloced);
-       ptr = buf.data;
        delta = ut_check_delta(start);
        ut_assert(delta > 0);
 
        /* try to increase it */
-       ut_asserteq(false, abuf_realloc(&buf, CONFIG_SYS_MALLOC_LEN));
-       ut_asserteq_ptr(ptr, buf.data);
+       ut_asserteq(false, abuf_realloc(&buf, HUGE_ALLOC_SIZE));
        ut_asserteq(TEST_DATA_LEN, buf.size);
        ut_asserteq(true, buf.alloced);
        ut_asserteq(delta, ut_check_delta(start));
@@ -254,8 +234,8 @@ static int lib_test_abuf_large(struct unit_test_state *uts)
 
        /* Start with a huge unallocated buf and try to move it */
        abuf_init(&buf);
-       abuf_map_sysmem(&buf, 0, CONFIG_SYS_MALLOC_LEN);
-       ut_asserteq(CONFIG_SYS_MALLOC_LEN, buf.size);
+       abuf_map_sysmem(&buf, 0, HUGE_ALLOC_SIZE);
+       ut_asserteq(HUGE_ALLOC_SIZE, buf.size);
        ut_asserteq(false, buf.alloced);
        ut_assertnull(abuf_uninit_move(&buf, &size));
 
@@ -278,12 +258,6 @@ static int lib_test_abuf_uninit_move(struct unit_test_state *uts)
 
        start = ut_check_free();
 
-       /*
-        * TODO: crashes on sandbox sometimes due to an apparent bug in
-        * realloc().
-        */
-       return 0;
-
        /* Move an empty buffer */
        abuf_init(&buf);
        ut_assertnull(abuf_uninit_move(&buf, &size));
@@ -383,12 +357,6 @@ static int lib_test_abuf_init_move(struct unit_test_state *uts)
        struct abuf buf;
        void *ptr;
 
-       /*
-        * TODO: crashes on sandbox sometimes due to an apparent bug in
-        * realloc().
-        */
-       return 0;
-
        ptr = strdup(test_data);
        ut_assertnonnull(ptr);