Browse Source

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>
main
David Gibson 17 years ago committed by Jon Loeliger
parent
commit
0d6ade2547
  1. 2
      checks.c
  2. 2
      dtc.c
  3. 22
      tests/dtc-checkfails.sh
  4. 20
      tests/dtc.sh
  5. 8
      tests/dup-nodename.dts
  6. 10
      tests/dup-phandle.dts
  7. 6
      tests/dup-propname.dts
  8. 7
      tests/minusone-phandle.dts
  9. 6
      tests/run_tests.sh
  10. 21
      tests/tests.sh
  11. 7
      tests/zero-phandle.dts

2
checks.c

@ -101,7 +101,7 @@ static int check_phandles(struct node *root, struct node *node) @@ -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

@ -197,7 +197,7 @@ int main(int argc, char *argv[]) @@ -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

@ -0,0 +1,22 @@ @@ -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

20
tests/dtc.sh

@ -1,24 +1,6 @@ @@ -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

@ -0,0 +1,8 @@ @@ -0,0 +1,8 @@
/dts-v1/;

/ {
node {
};
node {
};
};

10
tests/dup-phandle.dts

@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
/dts-v1/;

/ {
node1 {
linux,phandle = <1>;
};
node2 {
linux,phandle = <1>;
};
};

6
tests/dup-propname.dts

@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
/dts-v1/;

/ {
prop;
prop;
};

7
tests/minusone-phandle.dts

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
/dts-v1/;

/ {
node {
linux,phandle = <0xffffffff>;
};
};

6
tests/run_tests.sh

@ -142,6 +142,12 @@ dtc_tests () { @@ -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

@ -0,0 +1,21 @@ @@ -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

@ -0,0 +1,7 @@ @@ -0,0 +1,7 @@
/dts-v1/;

/ {
node {
linux,phandle = <0>;
};
};
Loading…
Cancel
Save