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>
This commit is contained in:
David Gibson 2007-11-20 16:24:23 +11:00 committed by Jon Loeliger
parent 2cf86939af
commit 0d6ade2547
11 changed files with 90 additions and 21 deletions

View File

@ -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)

2
dtc.c
View File

@ -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");
}

22
tests/dtc-checkfails.sh Executable file
View File

@ -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

View File

@ -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

8
tests/dup-nodename.dts Normal file
View File

@ -0,0 +1,8 @@
/dts-v1/;
/ {
node {
};
node {
};
};

10
tests/dup-phandle.dts Normal file
View File

@ -0,0 +1,10 @@
/dts-v1/;
/ {
node1 {
linux,phandle = <1>;
};
node2 {
linux,phandle = <1>;
};
};

6
tests/dup-propname.dts Normal file
View File

@ -0,0 +1,6 @@
/dts-v1/;
/ {
prop;
prop;
};

View File

@ -0,0 +1,7 @@
/dts-v1/;
/ {
node {
linux,phandle = <0xffffffff>;
};
};

View File

@ -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

21
tests/tests.sh Normal file
View File

@ -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
}

7
tests/zero-phandle.dts Normal file
View File

@ -0,0 +1,7 @@
/dts-v1/;
/ {
node {
linux,phandle = <0>;
};
};