summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Gibson <david@gibson.dropbear.id.au>2007-11-20 16:24:23 +1100
committerJon Loeliger <jdl@freescale.com>2007-11-20 09:03:51 -0600
commit0d6ade254773aa4798fed1b2f1639ea2b8bdeb89 (patch)
tree35327bd6982564e41a04c13e14d9f74a056c1e30
parent2cf86939aff2692098396e7f25ce299e7195fa12 (diff)
downloaddtc-0d6ade254773aa4798fed1b2f1639ea2b8bdeb89.tar.gz
dtc: Add testcases for tree checks
This patch adds a group of testcases to check that dtc correctly rejects trees with various structural errors. To make things easier to test, we change dtc so that failing checks (as opposed to other errors) result in exit code 2. This patch also fixes an embarrasing bug uncovered by these new tests: check_phandles() worked out if the tree's phandles were valid, then throws that information away and returns success always. Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
-rw-r--r--checks.c2
-rw-r--r--dtc.c2
-rwxr-xr-xtests/dtc-checkfails.sh22
-rwxr-xr-xtests/dtc.sh20
-rw-r--r--tests/dup-nodename.dts8
-rw-r--r--tests/dup-phandle.dts10
-rw-r--r--tests/dup-propname.dts6
-rw-r--r--tests/minusone-phandle.dts7
-rwxr-xr-xtests/run_tests.sh6
-rw-r--r--tests/tests.sh21
-rw-r--r--tests/zero-phandle.dts7
11 files changed, 90 insertions, 21 deletions
diff --git a/checks.c b/checks.c
index f0e7505..0a34109 100644
--- a/checks.c
+++ b/checks.c
@@ -101,7 +101,7 @@ static int check_phandles(struct node *root, struct node *node)
for_each_child(node, child)
ok = ok && check_phandles(root, child);
- return 1;
+ return ok;
}
int check_structure(struct node *dt)
diff --git a/dtc.c b/dtc.c
index bbef829..602b296 100644
--- a/dtc.c
+++ b/dtc.c
@@ -197,7 +197,7 @@ int main(int argc, char *argv[])
if (!structure_ok) {
if (!force) {
fprintf(stderr, "ERROR: Input tree has structural errors, aborting (use -f to force output)\n");
- exit(1);
+ exit(2);
} else if (quiet < 3) {
fprintf(stderr, "Warning: Input tree has structural errors, output forced\n");
}
diff --git a/tests/dtc-checkfails.sh b/tests/dtc-checkfails.sh
new file mode 100755
index 0000000..0a45a0b
--- /dev/null
+++ b/tests/dtc-checkfails.sh
@@ -0,0 +1,22 @@
+#! /bin/sh
+
+. tests.sh
+
+TMPFILE="tmp.out.$$"
+
+rm -f $TMPFILE
+
+verbose_run "$DTC" -o $TMPFILE "$@"
+ret="$?"
+
+if [ -f $TMPFILE ]; then
+ FAIL "output file was created despite bad input"
+fi
+
+if [ "$ret" = "2" ]; then
+ PASS
+else
+ FAIL "dtc returned error code $ret instead of 2 (check failed)"
+fi
+
+rm -f $TMPFILE
diff --git a/tests/dtc.sh b/tests/dtc.sh
index f704f55..c5a7324 100755
--- a/tests/dtc.sh
+++ b/tests/dtc.sh
@@ -1,24 +1,6 @@
#! /bin/sh
-PASS () {
- echo "PASS"
- exit 0
-}
-
-FAIL () {
- echo "FAIL" "$@"
- exit 2
-}
-
-DTC=../dtc
-
-verbose_run () {
- if [ -z "$QUIET_TEST" ]; then
- "$@"
- else
- "$@" > /dev/null 2> /dev/null
- fi
-}
+. tests.sh
if verbose_run "$DTC" "$@"; then
PASS
diff --git a/tests/dup-nodename.dts b/tests/dup-nodename.dts
new file mode 100644
index 0000000..2a3aa75
--- /dev/null
+++ b/tests/dup-nodename.dts
@@ -0,0 +1,8 @@
+/dts-v1/;
+
+/ {
+ node {
+ };
+ node {
+ };
+};
diff --git a/tests/dup-phandle.dts b/tests/dup-phandle.dts
new file mode 100644
index 0000000..c266c61
--- /dev/null
+++ b/tests/dup-phandle.dts
@@ -0,0 +1,10 @@
+/dts-v1/;
+
+/ {
+ node1 {
+ linux,phandle = <1>;
+ };
+ node2 {
+ linux,phandle = <1>;
+ };
+};
diff --git a/tests/dup-propname.dts b/tests/dup-propname.dts
new file mode 100644
index 0000000..8145f6e
--- /dev/null
+++ b/tests/dup-propname.dts
@@ -0,0 +1,6 @@
+/dts-v1/;
+
+/ {
+ prop;
+ prop;
+};
diff --git a/tests/minusone-phandle.dts b/tests/minusone-phandle.dts
new file mode 100644
index 0000000..21d9986
--- /dev/null
+++ b/tests/minusone-phandle.dts
@@ -0,0 +1,7 @@
+/dts-v1/;
+
+/ {
+ node {
+ linux,phandle = <0xffffffff>;
+ };
+};
diff --git a/tests/run_tests.sh b/tests/run_tests.sh
index 9ae2a12..2a41d43 100755
--- a/tests/run_tests.sh
+++ b/tests/run_tests.sh
@@ -142,6 +142,12 @@ dtc_tests () {
run_test dtbs_equal_ordered $tree odts_$tree.test.dtb
done
+ # Check some checks
+ run_test dtc-checkfails.sh -I dts -O dtb dup-nodename.dts
+ run_test dtc-checkfails.sh -I dts -O dtb dup-propname.dts
+ run_test dtc-checkfails.sh -I dts -O dtb dup-phandle.dts
+ run_test dtc-checkfails.sh -I dts -O dtb zero-phandle.dts
+ run_test dtc-checkfails.sh -I dts -O dtb minusone-phandle.dts
}
while getopts "vdt:" ARG ; do
diff --git a/tests/tests.sh b/tests/tests.sh
new file mode 100644
index 0000000..396b4cf
--- /dev/null
+++ b/tests/tests.sh
@@ -0,0 +1,21 @@
+# Common functions for shell testcases
+
+PASS () {
+ echo "PASS"
+ exit 0
+}
+
+FAIL () {
+ echo "FAIL" "$@"
+ exit 2
+}
+
+DTC=../dtc
+
+verbose_run () {
+ if [ -z "$QUIET_TEST" ]; then
+ "$@"
+ else
+ "$@" > /dev/null 2> /dev/null
+ fi
+}
diff --git a/tests/zero-phandle.dts b/tests/zero-phandle.dts
new file mode 100644
index 0000000..7997d98
--- /dev/null
+++ b/tests/zero-phandle.dts
@@ -0,0 +1,7 @@
+/dts-v1/;
+
+/ {
+ node {
+ linux,phandle = <0>;
+ };
+};