aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2018-07-09 11:00:21 +1000
committerDavid Gibson <david@gibson.dropbear.id.au>2018-07-09 15:03:14 +1000
commit9b0e4fe26093cf3846868543b24b874990ec76e1 (patch)
tree946eeddcf3a67ffcbf71a2ed504a3d201063e4f9 /tests
parent1087504bb3e8b00988e7bb99784eb02d4d9d9fd1 (diff)
downloaddtc-9b0e4fe26093cf3846868543b24b874990ec76e1.zip
dtc-9b0e4fe26093cf3846868543b24b874990ec76e1.tar.gz
dtc-9b0e4fe26093cf3846868543b24b874990ec76e1.tar.bz2
tests: Improve fdt_resize() tests
We primarily test fdt_resize() in the sw_tree1 testcase, but it has some deficiencies: - It didn't check for errors actually originating in fdt_resize(), just for errors before and after - It only tested cases where the resized buffer was at the same address as the original one, whereas fdt_resize() is also supposed to work if the new buffer is entirely separate, or partly overlapping Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
Diffstat (limited to 'tests')
-rwxr-xr-xtests/run_tests.sh2
-rw-r--r--tests/sw_tree1.c35
2 files changed, 33 insertions, 4 deletions
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
index 759625d..cf87066 100755
--- a/tests/run_tests.sh
+++ b/tests/run_tests.sh
@@ -348,7 +348,7 @@ libfdt_tests () {
run_test sw_states
# Resizing tests
- for mode in resize realloc; do
+ for mode in resize realloc newalloc; do
run_test sw_tree1 $mode
tree1_tests sw_tree1.test.dtb
tree1_tests unfinished_tree1.test.dtb
diff --git a/tests/sw_tree1.c b/tests/sw_tree1.c
index 386b05f..2a67c12 100644
--- a/tests/sw_tree1.c
+++ b/tests/sw_tree1.c
@@ -35,10 +35,13 @@ static enum {
FIXED = 0,
RESIZE,
REALLOC,
+ NEWALLOC,
} alloc_mode;
static void realloc_fdt(void **fdt, size_t *size, bool created)
{
+ int err;
+
switch (alloc_mode) {
case FIXED:
if (!(*fdt))
@@ -52,7 +55,10 @@ static void realloc_fdt(void **fdt, size_t *size, bool created)
*fdt = xmalloc(SPACE);
} else if (*size < SPACE) {
*size += 1;
- fdt_resize(*fdt, *fdt, *size);
+ err = fdt_resize(*fdt, *fdt, *size);
+ if (err < 0)
+ FAIL("fdt_resize() failed: %s",
+ fdt_strerror(err));
} else {
FAIL("Ran out of space");
}
@@ -61,9 +67,29 @@ static void realloc_fdt(void **fdt, size_t *size, bool created)
case REALLOC:
*size += 1;
*fdt = xrealloc(*fdt, *size);
- if (created)
- fdt_resize(*fdt, *fdt, *size);
+ if (created) {
+ err = fdt_resize(*fdt, *fdt, *size);
+ if (err < 0)
+ FAIL("fdt_resize() failed: %s",
+ fdt_strerror(err));
+ }
+ return;
+
+ case NEWALLOC: {
+ void *buf;
+
+ *size += 1;
+ buf = xmalloc(*size);
+ if (created) {
+ err = fdt_resize(*fdt, buf, *size);
+ if (err < 0)
+ FAIL("fdt_resize() failed: %s",
+ fdt_strerror(err));
+ }
+ free(*fdt);
+ *fdt = buf;
return;
+ }
default:
CONFIG("Bad allocation mode");
@@ -101,6 +127,9 @@ int main(int argc, char *argv[])
} else if (streq(argv[1], "realloc")) {
alloc_mode = REALLOC;
size = 0;
+ } else if (streq(argv[1], "newalloc")) {
+ alloc_mode = NEWALLOC;
+ size = 0;
} else {
char *endp;