aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAhmad Fatoum <a.fatoum@pengutronix.de>2020-10-25 10:41:41 +0100
committerDavid Gibson <david@gibson.dropbear.id.au>2022-01-25 17:10:47 +1100
commit26c54f840d2340271f305c04f0d66bafac93274f (patch)
treef085b01ce260f9cc15fceb13088ae80f2469ef3c
parentec7986e682cf9a5078bdbad341feb807a56b21e0 (diff)
downloaddtc-26c54f840d2340271f305c04f0d66bafac93274f.zip
dtc-26c54f840d2340271f305c04f0d66bafac93274f.tar.gz
dtc-26c54f840d2340271f305c04f0d66bafac93274f.tar.bz2
tests: add test cases for label-relative path references
Newly added &{label/path} feature doesn't yet have any tests. Add some. Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
-rw-r--r--tests/.gitignore1
-rw-r--r--tests/Makefile.tests2
-rw-r--r--tests/path-references.c8
-rw-r--r--tests/path-references.dts9
-rw-r--r--tests/relref_merge.c51
-rw-r--r--tests/relref_merge.dts40
-rwxr-xr-xtests/run_tests.sh3
7 files changed, 112 insertions, 2 deletions
diff --git a/tests/.gitignore b/tests/.gitignore
index d3f1434..03bdde2 100644
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@ -54,6 +54,7 @@ tmp.*
/property_iterate
/propname_escapes
/references
+/relref_merge
/root_node
/rw_tree1
/rw_oom
diff --git a/tests/Makefile.tests b/tests/Makefile.tests
index 2b47627..2f78952 100644
--- a/tests/Makefile.tests
+++ b/tests/Makefile.tests
@@ -18,7 +18,7 @@ LIB_TESTS_L = get_mem_rsv \
open_pack rw_tree1 rw_oom set_name setprop del_property del_node \
appendprop1 appendprop2 propname_escapes \
string_escapes references path-references phandle_format \
- boot-cpuid incbin \
+ boot-cpuid incbin relref_merge \
extra-terminating-null \
dtbs_equal_ordered \
dtb_reverse dtbs_equal_unordered \
diff --git a/tests/path-references.c b/tests/path-references.c
index 4db61a5..b914576 100644
--- a/tests/path-references.c
+++ b/tests/path-references.c
@@ -53,7 +53,7 @@ int main(int argc, char *argv[])
void *fdt;
const char *p;
int len, multilen;
- int n1, n2, n3, n4;
+ int n1, n2, n3, n4, n5;
test_init(argc, argv);
fdt = load_blob_arg(argc, argv);
@@ -89,6 +89,12 @@ int main(int argc, char *argv[])
check_ref(fdt, n3, "/foobar/baz");
check_ref(fdt, n4, "/foo/baz");
+ n5 = fdt_path_offset(fdt, "/bar/baz");
+ if (n5 < 0)
+ FAIL("fdt_path_offset(/bar/baz): %s", fdt_strerror(n5));
+
+ check_ref(fdt, n5, "/bar/baz");
+
check_rref(fdt);
PASS();
diff --git a/tests/path-references.dts b/tests/path-references.dts
index 1fb7d70..dd9ccfc 100644
--- a/tests/path-references.dts
+++ b/tests/path-references.dts
@@ -25,4 +25,13 @@
lref = &n3;
};
};
+ n5: bar {
+ baz {
+ };
+ };
+};
+
+n6: &{n5/baz} {
+ ref = &{n6/};
+ lref = &{n5/baz};
};
diff --git a/tests/relref_merge.c b/tests/relref_merge.c
new file mode 100644
index 0000000..5daab2e
--- /dev/null
+++ b/tests/relref_merge.c
@@ -0,0 +1,51 @@
+// SPDX-License-Identifier: LGPL-2.1-or-later
+/*
+ * libfdt - Flat Device Tree manipulation
+ * Testcase for label relative child references in dtc
+ * Copyright (C) 2006 David Gibson, IBM Corporation.
+ * Copyright (C) 2020 Ahmad Fatoum, Pengutronix.
+ */
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdint.h>
+
+#include <libfdt.h>
+
+#include "tests.h"
+#include "testdata.h"
+
+static void check_exist(void *fdt, const char *path)
+{
+ int sn = fdt_path_offset(fdt, path);
+ if (sn < 0)
+ FAIL("%s expected but not found: %s", path, fdt_strerror(sn));
+}
+
+static void check_doesnt_exist(void *fdt, const char *path)
+{
+ int sn = fdt_path_offset(fdt, path);
+ if (sn >= 0)
+ FAIL("%s found but not expected %d", path, sn);
+}
+
+int main(int argc, char *argv[])
+{
+ void *fdt;
+
+ test_init(argc, argv);
+ fdt = load_blob_arg(argc, argv);
+
+ check_exist(fdt, "/node/subnode1");
+ check_exist(fdt, "/node/keep-me");
+ check_doesnt_exist(fdt, "/node/remove-me");
+
+ check_doesnt_exist(fdt, "/node2");
+ check_doesnt_exist(fdt, "/node/subnode3");
+
+ check_exist(fdt, "/node/subnode4");
+
+ check_exist(fdt, "/node/subnode1/add-me");
+
+ PASS();
+}
diff --git a/tests/relref_merge.dts b/tests/relref_merge.dts
new file mode 100644
index 0000000..d8660eb
--- /dev/null
+++ b/tests/relref_merge.dts
@@ -0,0 +1,40 @@
+/dts-v1/;
+
+/ {
+ node_label: node {
+ keep-me {};
+ remove-me {};
+
+ subnode1 {
+ property-inline1;
+ property-inline2;
+ property-inline3;
+ };
+
+ subnode2 {
+ property-inline1;
+ };
+
+ subnode3 {
+ property-inline1;
+ };
+ };
+
+ node2_label: node2 {
+ property-inline1;
+ };
+};
+/omit-if-no-ref/ &{node_label/subnode1};
+/omit-if-no-ref/ &node2_label;
+/delete-node/ &{node_label/subnode3};
+
+&{node_label/} {
+ /delete-node/ remove-me;
+
+ subnode4 { };
+};
+
+label: &{node_label/subnode1} {
+ selfref = &{node_label/subnode1};
+ add-me { };
+};
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
index 5e4e7c4..c78351d 100755
--- a/tests/run_tests.sh
+++ b/tests/run_tests.sh
@@ -669,6 +669,9 @@ dtc_tests () {
tree1_tests dtc_tree1_merge_path.test.dtb test_tree1.dtb
run_wrap_error_test $DTC -I dts -O dtb -o /dev/null "$SRCDIR/test_label_ref.dts"
+ run_dtc_test -I dts -O dtb -o dtc_relref_merge.test.dtb "$SRCDIR/relref_merge.dts"
+ run_test relref_merge dtc_relref_merge.test.dtb
+
# Check prop/node delete functionality
run_dtc_test -I dts -O dtb -o dtc_tree1_delete.test.dtb "$SRCDIR/test_tree1_delete.dts"
tree1_tests dtc_tree1_delete.test.dtb