2006-11-27 06:21:28 +01:00
|
|
|
#! /bin/bash
|
|
|
|
|
|
|
|
export QUIET_TEST=1
|
|
|
|
|
2007-11-21 01:56:14 +01:00
|
|
|
export VALGRIND=
|
|
|
|
VGCODE=126
|
|
|
|
|
2007-06-26 03:33:10 +02:00
|
|
|
tot_tests=0
|
|
|
|
tot_pass=0
|
|
|
|
tot_fail=0
|
|
|
|
tot_config=0
|
2007-11-21 01:56:14 +01:00
|
|
|
tot_vg=0
|
2007-06-26 03:33:10 +02:00
|
|
|
tot_strange=0
|
|
|
|
|
2006-11-27 06:21:28 +01:00
|
|
|
run_test () {
|
2007-06-26 03:33:10 +02:00
|
|
|
tot_tests=$[tot_tests + 1]
|
2006-11-27 06:21:28 +01:00
|
|
|
echo -n "$@: "
|
2007-11-21 01:56:14 +01:00
|
|
|
VGLOCAL="$VALGRIND"
|
|
|
|
if [ -n "$VALGRIND" ]; then
|
|
|
|
if [ -f $1.supp ]; then
|
|
|
|
VGLOCAL="$VGLOCAL --suppressions=$1.supp"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
if $VGLOCAL "./$@"; then
|
2007-06-26 03:33:10 +02:00
|
|
|
tot_pass=$[tot_pass + 1]
|
|
|
|
else
|
2007-08-29 04:18:51 +02:00
|
|
|
ret="$?"
|
|
|
|
if [ "$ret" == "1" ]; then
|
|
|
|
tot_config=$[tot_config + 1]
|
|
|
|
elif [ "$ret" == "2" ]; then
|
|
|
|
tot_fail=$[tot_fail + 1]
|
2007-11-21 01:56:14 +01:00
|
|
|
elif [ "$ret" == "$VGCODE" ]; then
|
|
|
|
tot_vg=$[tot_vg + 1]
|
2007-08-29 04:18:51 +02:00
|
|
|
else
|
|
|
|
tot_strange=$[tot_strange + 1]
|
|
|
|
fi
|
2007-06-26 03:33:10 +02:00
|
|
|
fi
|
2006-11-27 06:21:28 +01:00
|
|
|
}
|
|
|
|
|
2006-11-28 07:20:01 +01:00
|
|
|
tree1_tests () {
|
|
|
|
TREE=$1
|
|
|
|
|
2006-11-27 06:21:28 +01:00
|
|
|
# Read-only tests
|
2007-10-10 09:12:12 +02:00
|
|
|
run_test get_mem_rsv $TREE
|
2006-11-28 07:20:01 +01:00
|
|
|
run_test root_node $TREE
|
2006-12-11 06:15:34 +01:00
|
|
|
run_test find_property $TREE
|
2006-11-28 07:20:01 +01:00
|
|
|
run_test subnode_offset $TREE
|
|
|
|
run_test path_offset $TREE
|
2007-08-30 06:54:04 +02:00
|
|
|
run_test get_name $TREE
|
2006-11-28 07:20:01 +01:00
|
|
|
run_test getprop $TREE
|
2007-11-12 23:59:38 +01:00
|
|
|
run_test get_phandle $TREE
|
2007-08-30 06:54:04 +02:00
|
|
|
run_test get_path $TREE
|
2007-08-30 06:54:04 +02:00
|
|
|
run_test supernode_atdepth_offset $TREE
|
|
|
|
run_test parent_offset $TREE
|
2007-09-17 06:28:34 +02:00
|
|
|
run_test node_offset_by_prop_value $TREE
|
2007-11-12 23:59:38 +01:00
|
|
|
run_test node_offset_by_phandle $TREE
|
2007-10-16 05:58:25 +02:00
|
|
|
run_test node_check_compatible $TREE
|
|
|
|
run_test node_offset_by_compatible $TREE
|
2006-11-28 07:20:01 +01:00
|
|
|
run_test notfound $TREE
|
2006-11-27 06:21:28 +01:00
|
|
|
|
|
|
|
# Write-in-place tests
|
2006-11-28 07:20:01 +01:00
|
|
|
run_test setprop_inplace $TREE
|
|
|
|
run_test nop_property $TREE
|
|
|
|
run_test nop_node $TREE
|
|
|
|
}
|
|
|
|
|
2007-09-28 06:57:01 +02:00
|
|
|
tree1_tests_rw () {
|
|
|
|
TREE=$1
|
|
|
|
|
|
|
|
# Read-write tests
|
2008-01-11 04:55:05 +01:00
|
|
|
run_test set_name $TREE
|
2007-09-28 06:57:01 +02:00
|
|
|
run_test setprop $TREE
|
|
|
|
run_test del_property $TREE
|
|
|
|
run_test del_node $TREE
|
|
|
|
}
|
|
|
|
|
2007-11-01 01:37:31 +01:00
|
|
|
ALL_LAYOUTS="mts mst tms tsm smt stm"
|
|
|
|
|
2007-09-17 06:39:24 +02:00
|
|
|
libfdt_tests () {
|
2006-11-28 07:20:01 +01:00
|
|
|
tree1_tests test_tree1.dtb
|
2006-11-29 06:45:46 +01:00
|
|
|
|
|
|
|
# Sequential write tests
|
|
|
|
run_test sw_tree1
|
|
|
|
tree1_tests sw_tree1.test.dtb
|
|
|
|
tree1_tests unfinished_tree1.test.dtb
|
2007-11-06 00:42:45 +01:00
|
|
|
run_test dtbs_equal_ordered test_tree1.dtb sw_tree1.test.dtb
|
2006-12-01 05:07:19 +01:00
|
|
|
|
|
|
|
# fdt_move tests
|
|
|
|
for tree in test_tree1.dtb sw_tree1.test.dtb unfinished_tree1.test.dtb; do
|
|
|
|
rm -f moved.$tree shunted.$tree deshunted.$tree
|
|
|
|
run_test move_and_save $tree
|
2007-11-21 01:29:18 +01:00
|
|
|
run_test dtbs_equal_ordered $tree moved.$tree
|
|
|
|
run_test dtbs_equal_ordered $tree shunted.$tree
|
|
|
|
run_test dtbs_equal_ordered $tree deshunted.$tree
|
2006-12-01 05:07:19 +01:00
|
|
|
done
|
2006-12-01 06:59:43 +01:00
|
|
|
|
2007-10-25 07:05:58 +02:00
|
|
|
# v16 and alternate layout tests
|
2007-11-21 01:29:18 +01:00
|
|
|
for tree in test_tree1.dtb; do
|
2007-10-25 07:05:58 +02:00
|
|
|
for version in 17 16; do
|
2007-11-01 01:37:31 +01:00
|
|
|
for layout in $ALL_LAYOUTS; do
|
2007-10-25 07:05:58 +02:00
|
|
|
run_test mangle-layout $tree $version $layout
|
|
|
|
tree1_tests v$version.$layout.$tree
|
|
|
|
run_test dtbs_equal_ordered $tree v$version.$layout.$tree
|
|
|
|
done
|
|
|
|
done
|
|
|
|
done
|
|
|
|
|
2006-12-01 06:59:43 +01:00
|
|
|
# Read-write tests
|
2007-11-21 01:29:18 +01:00
|
|
|
for basetree in test_tree1.dtb; do
|
2007-11-01 01:37:31 +01:00
|
|
|
for version in 17 16; do
|
|
|
|
for layout in $ALL_LAYOUTS; do
|
|
|
|
tree=v$version.$layout.$basetree
|
|
|
|
rm -f opened.$tree repacked.$tree
|
|
|
|
run_test open_pack $tree
|
|
|
|
tree1_tests opened.$tree
|
|
|
|
tree1_tests repacked.$tree
|
|
|
|
|
|
|
|
tree1_tests_rw $tree
|
|
|
|
tree1_tests_rw opened.$tree
|
|
|
|
tree1_tests_rw repacked.$tree
|
|
|
|
done
|
|
|
|
done
|
2007-09-28 06:57:01 +02:00
|
|
|
done
|
2006-12-01 06:59:43 +01:00
|
|
|
run_test rw_tree1
|
|
|
|
tree1_tests rw_tree1.test.dtb
|
2007-09-28 06:57:01 +02:00
|
|
|
tree1_tests_rw rw_tree1.test.dtb
|
2006-12-14 05:29:25 +01:00
|
|
|
|
2008-02-18 06:09:25 +01:00
|
|
|
for basetree in test_tree1.dtb sw_tree1.test.dtb rw_tree1.test.dtb; do
|
|
|
|
run_test nopulate $basetree
|
|
|
|
run_test dtbs_equal_ordered $basetree noppy.$basetree
|
|
|
|
tree1_tests noppy.$basetree
|
|
|
|
tree1_tests_rw noppy.$basetree
|
|
|
|
done
|
|
|
|
|
2006-12-14 05:29:25 +01:00
|
|
|
# Tests for behaviour on various sorts of corrupted trees
|
|
|
|
run_test truncated_property
|
2008-02-14 06:50:34 +01:00
|
|
|
|
|
|
|
# Specific bug tests
|
|
|
|
run_test add_subnode_with_nops
|
2006-11-27 06:21:28 +01:00
|
|
|
}
|
|
|
|
|
2007-09-18 02:33:40 +02:00
|
|
|
dtc_tests () {
|
2007-10-18 09:22:30 +02:00
|
|
|
run_test dtc.sh -I dts -O dtb -o dtc_tree1.test.dtb test_tree1.dts
|
2007-09-18 02:33:40 +02:00
|
|
|
tree1_tests dtc_tree1.test.dtb
|
2007-09-28 06:57:01 +02:00
|
|
|
tree1_tests_rw dtc_tree1.test.dtb
|
2007-10-24 03:06:09 +02:00
|
|
|
run_test dtbs_equal_ordered dtc_tree1.test.dtb test_tree1.dtb
|
2007-10-16 08:42:02 +02:00
|
|
|
|
2007-11-07 01:17:17 +01:00
|
|
|
run_test dtc.sh -I dts -O dtb -o dtc_tree1_dts0.test.dtb test_tree1_dts0.dts
|
|
|
|
tree1_tests dtc_tree1_dts0.test.dtb
|
|
|
|
tree1_tests_rw dtc_tree1_dts0.test.dtb
|
|
|
|
|
2007-10-18 09:22:30 +02:00
|
|
|
run_test dtc.sh -I dts -O dtb -o dtc_escapes.test.dtb escapes.dts
|
2007-10-16 08:42:02 +02:00
|
|
|
run_test string_escapes dtc_escapes.test.dtb
|
2007-11-07 00:34:06 +01:00
|
|
|
|
2007-11-12 23:59:38 +01:00
|
|
|
run_test dtc.sh -I dts -O dtb -o dtc_references.test.dtb references.dts
|
|
|
|
run_test references dtc_references.test.dtb
|
|
|
|
|
dtc: Fix some lexical problems with references
The recent change to the lexer to only recognize property and node
names in the appropriate context removed a number of lexical warts in
our language that would have gotten ugly as we add expression support
and so forth.
But there's one nasty one remaining: references can contain a full
path, including the various problematic node name characters (',', '+'
and '-', for example). This would cause trouble with expressions, and
it also causes trouble with the patch I'm working on to allow
expanding references to paths rather than phandles. This patch
therefore reworks the lexer to mitigate these problems.
- References to labels cause no problems. These are now
recognized separately from references to full paths. No syntax change
here.
- References to full paths, including problematic characters
are allowed by "quoting" the path with braces
e.g. &{/pci@10000/somedevice@3,8000}. The braces protect any internal
problematic characters from being confused with operators or whatever.
- For compatibility with existing dts files, in v0 dts files
we allow bare references to paths as before &/foo/bar/whatever - but
*only* if the path contains no troublesome characters. Specifically
only [a-zA-Z0-9_@/] are allowed.
This is an incompatible change to the dts-v1 format, but since AFAIK
no-one has yet switched to dts-v1 files, I think we can get away with
it. Better to make the transition when people to convert to v1, and
get rid of the problematic old syntax.
Strictly speaking, it's also an incompatible change to the v0 format,
since some path references that were allowed before are no longer
allowed. I suspect no-one has been using the no-longer-supported
forms (certainly none of the kernel dts files will cause trouble).
We might need to think about this harder, though.
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2007-11-22 07:10:07 +01:00
|
|
|
run_test dtc.sh -I dts -O dtb -o dtc_references_dts0.test.dtb references_dts0.dts
|
|
|
|
run_test references dtc_references_dts0.test.dtb
|
|
|
|
|
2007-12-05 00:43:50 +01:00
|
|
|
run_test dtc.sh -I dts -O dtb -o dtc_path-references.test.dtb path-references.dts
|
|
|
|
run_test path-references dtc_path-references.test.dtb
|
|
|
|
|
2008-02-15 05:14:16 +01:00
|
|
|
run_test dtc.sh -I dts -O dtb -o dtc_comments.test.dtb comments.dts
|
|
|
|
run_test dtc.sh -I dts -O dtb -o dtc_comments-cmp.test.dtb comments-cmp.dts
|
|
|
|
run_test dtbs_equal_ordered dtc_comments.test.dtb dtc_comments-cmp.test.dtb
|
|
|
|
|
2007-11-07 00:34:06 +01:00
|
|
|
# Check -Odts mode preserve all dtb information
|
|
|
|
for tree in test_tree1.dtb dtc_tree1.test.dtb dtc_escapes.test.dtb ; do
|
|
|
|
run_test dtc.sh -I dtb -O dts -o odts_$tree.test.dts $tree
|
|
|
|
run_test dtc.sh -I dts -O dtb -o odts_$tree.test.dtb odts_$tree.test.dts
|
|
|
|
run_test dtbs_equal_ordered $tree odts_$tree.test.dtb
|
|
|
|
done
|
2007-11-12 23:59:38 +01:00
|
|
|
|
2008-02-28 10:55:37 +01:00
|
|
|
# Check version conversions
|
|
|
|
for tree in test_tree1.dtb ; do
|
|
|
|
for aver in 1 2 3 16 17; do
|
|
|
|
atree="ov${aver}_$tree.test.dtb"
|
|
|
|
run_test dtc.sh -I dtb -O dtb -V$aver -o $atree $tree
|
|
|
|
for bver in 16 17; do
|
|
|
|
btree="ov${bver}_$atree"
|
|
|
|
run_test dtc.sh -I dtb -O dtb -V$bver -o $btree $atree
|
|
|
|
run_test dtbs_equal_ordered $btree $tree
|
|
|
|
done
|
|
|
|
done
|
|
|
|
done
|
|
|
|
|
2007-11-20 06:24:23 +01:00
|
|
|
# Check some checks
|
2007-12-06 06:56:55 +01:00
|
|
|
run_test dtc-checkfails.sh duplicate_node_names -- -I dts -O dtb dup-nodename.dts
|
|
|
|
run_test dtc-checkfails.sh duplicate_property_names -- -I dts -O dtb dup-propname.dts
|
|
|
|
run_test dtc-checkfails.sh explicit_phandles -- -I dts -O dtb dup-phandle.dts
|
|
|
|
run_test dtc-checkfails.sh explicit_phandles -- -I dts -O dtb zero-phandle.dts
|
|
|
|
run_test dtc-checkfails.sh explicit_phandles -- -I dts -O dtb minusone-phandle.dts
|
|
|
|
run_test dtc-checkfails.sh phandle_references -- -I dts -O dtb nonexist-node-ref.dts
|
|
|
|
run_test dtc-checkfails.sh phandle_references -- -I dts -O dtb nonexist-label-ref.dts
|
|
|
|
run_test dtc-checkfails.sh name_properties -- -I dts -O dtb bad-name-property.dts
|
2007-12-06 06:59:45 +01:00
|
|
|
|
|
|
|
run_test dtc-checkfails.sh address_cells_is_cell size_cells_is_cell interrupt_cells_is_cell -- -I dts -O dtb bad-ncells.dts
|
2007-12-06 07:01:07 +01:00
|
|
|
run_test dtc-checkfails.sh device_type_is_string model_is_string status_is_string -- -I dts -O dtb bad-string-props.dts
|
2007-12-07 04:05:55 +01:00
|
|
|
run_test dtc-checkfails.sh reg_format ranges_format -- -I dts -O dtb bad-reg-ranges.dts
|
|
|
|
run_test dtc-checkfails.sh ranges_format -- -I dts -O dtb bad-empty-ranges.dts
|
|
|
|
run_test dtc-checkfails.sh avoid_default_addr_size -- -I dts -O dtb default-addr-size.dts
|
2007-12-07 04:06:11 +01:00
|
|
|
run_test dtc-checkfails.sh obsolete_chosen_interrupt_controller -- -I dts -O dtb obsolete-chosen-interrupt-controller.dts
|
2008-02-27 03:45:13 +01:00
|
|
|
run_test dtc-checkfails.sh node_name_chars -- -I dtb -O dtb bad_node_char.dtb
|
|
|
|
run_test dtc-checkfails.sh node_name_format -- -I dtb -O dtb bad_node_format.dtb
|
|
|
|
run_test dtc-checkfails.sh prop_name_chars -- -I dtb -O dtb bad_prop_char.dtb
|
2007-09-18 02:33:40 +02:00
|
|
|
}
|
|
|
|
|
2007-11-21 01:56:14 +01:00
|
|
|
while getopts "vt:m" ARG ; do
|
2006-11-27 06:21:28 +01:00
|
|
|
case $ARG in
|
|
|
|
"v")
|
|
|
|
unset QUIET_TEST
|
|
|
|
;;
|
|
|
|
"t")
|
|
|
|
TESTSETS=$OPTARG
|
|
|
|
;;
|
2007-11-21 01:56:14 +01:00
|
|
|
"m")
|
|
|
|
VALGRIND="valgrind --tool=memcheck -q --error-exitcode=$VGCODE"
|
|
|
|
;;
|
2006-11-27 06:21:28 +01:00
|
|
|
esac
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ -z "$TESTSETS" ]; then
|
2007-09-18 02:33:40 +02:00
|
|
|
TESTSETS="libfdt dtc"
|
2006-11-27 06:21:28 +01:00
|
|
|
fi
|
|
|
|
|
2007-10-16 05:53:20 +02:00
|
|
|
# Make sure we don't have stale blobs lying around
|
2007-11-07 00:34:06 +01:00
|
|
|
rm -f *.test.dtb *.test.dts
|
2007-10-16 05:53:20 +02:00
|
|
|
|
2006-11-27 06:21:28 +01:00
|
|
|
for set in $TESTSETS; do
|
|
|
|
case $set in
|
2007-09-17 06:39:24 +02:00
|
|
|
"libfdt")
|
|
|
|
libfdt_tests
|
2006-11-27 06:21:28 +01:00
|
|
|
;;
|
2007-09-18 02:33:40 +02:00
|
|
|
"dtc")
|
|
|
|
dtc_tests
|
|
|
|
;;
|
2006-11-27 06:21:28 +01:00
|
|
|
esac
|
|
|
|
done
|
2007-06-26 03:33:10 +02:00
|
|
|
|
|
|
|
echo -e "********** TEST SUMMARY"
|
|
|
|
echo -e "* Total testcases: $tot_tests"
|
|
|
|
echo -e "* PASS: $tot_pass"
|
|
|
|
echo -e "* FAIL: $tot_fail"
|
|
|
|
echo -e "* Bad configuration: $tot_config"
|
2007-11-21 01:56:14 +01:00
|
|
|
if [ -n "$VALGRIND" ]; then
|
|
|
|
echo -e "* valgrind errors: $tot_vg"
|
|
|
|
fi
|
2007-06-26 03:33:10 +02:00
|
|
|
echo -e "* Strange test result: $tot_strange"
|
|
|
|
echo -e "**********"
|
|
|
|
|