Home | History | Annotate | Line # | Download | only in tests
run_tests.sh revision 1.1.1.3
      1 #! /bin/sh
      2 
      3 . ./testutils.sh
      4 
      5 if [ -z "$CC" ]; then
      6     CC=gcc
      7 fi
      8 
      9 # stat differs between platforms
     10 if [ -z "$STATSZ" ]; then
     11 	stat --version 2>/dev/null | grep -q 'GNU'
     12 	GNUSTAT=$?
     13 	if [ "$GNUSTAT" -ne 0 ]; then
     14 		# Assume BSD stat if we can't detect as GNU stat
     15 		STATSZ="stat -f %Uz"
     16 	else
     17 		STATSZ="stat -c %s"
     18 	fi
     19 fi
     20 
     21 # Help things find the libfdt shared object
     22 export LD_LIBRARY_PATH=../libfdt
     23 
     24 export QUIET_TEST=1
     25 STOP_ON_FAIL=0
     26 
     27 export VALGRIND=
     28 VGCODE=126
     29 
     30 tot_tests=0
     31 tot_pass=0
     32 tot_fail=0
     33 tot_config=0
     34 tot_vg=0
     35 tot_strange=0
     36 
     37 base_run_test() {
     38     tot_tests=$((tot_tests + 1))
     39     if VALGRIND="$VALGRIND" "$@"; then
     40 	tot_pass=$((tot_pass + 1))
     41     else
     42 	ret="$?"
     43 	if [ "$STOP_ON_FAIL" -eq 1 ]; then
     44 	    exit 1
     45 	fi
     46 	if [ "$ret" -eq 1 ]; then
     47 	    tot_config=$((tot_config + 1))
     48 	elif [ "$ret" -eq 2 ]; then
     49 	    tot_fail=$((tot_fail + 1))
     50 	elif [ "$ret" -eq $VGCODE ]; then
     51 	    tot_vg=$((tot_vg + 1))
     52 	else
     53 	    tot_strange=$((tot_strange + 1))
     54 	fi
     55     fi
     56 }
     57 
     58 shorten_echo () {
     59     limit=32
     60     printf "$1"
     61     shift
     62     for x; do
     63 	if [ ${#x} -le $limit ]; then
     64 	    printf " $x"
     65 	else
     66 	    short=$(echo "$x" | head -c$limit)
     67 	    printf " \"$short\"...<${#x} bytes>"
     68 	fi
     69     done
     70 }
     71 
     72 run_test () {
     73     printf "$*:	"
     74     if [ -n "$VALGRIND" -a -f $1.supp ]; then
     75 	VGSUPP="--suppressions=$1.supp"
     76     fi
     77     base_run_test $VALGRIND $VGSUPP "./$@"
     78 }
     79 
     80 run_sh_test () {
     81     printf "$*:	"
     82     base_run_test sh "$@"
     83 }
     84 
     85 wrap_test () {
     86     (
     87 	if verbose_run "$@"; then
     88 	    PASS
     89 	else
     90 	    ret="$?"
     91 	    if [ "$ret" -gt 127 ]; then
     92 		signame=$(kill -l $((ret - 128)))
     93 		FAIL "Killed by SIG$signame"
     94 	    elif [ "$ret" -eq $VGCODE ]; then
     95 		echo "VALGRIND ERROR"
     96 		exit $VGCODE
     97 	    else
     98 		FAIL "Returned error code $ret"
     99 	    fi
    100 	fi
    101     )
    102 }
    103 
    104 run_wrap_test () {
    105     shorten_echo "$@:	"
    106     base_run_test wrap_test "$@"
    107 }
    108 
    109 wrap_error () {
    110     (
    111 	if verbose_run "$@"; then
    112 	    FAIL "Expected non-zero return code"
    113 	else
    114 	    ret="$?"
    115 	    if [ "$ret" -gt 127 ]; then
    116 		signame=$(kill -l $((ret - 128)))
    117 		FAIL "Killed by SIG$signame"
    118 	    else
    119 		PASS
    120 	    fi
    121 	fi
    122     )
    123 }
    124 
    125 run_wrap_error_test () {
    126     shorten_echo "$@"
    127     printf " {!= 0}:	"
    128     base_run_test wrap_error "$@"
    129 }
    130 
    131 # $1: dtb file
    132 # $2: align base
    133 check_align () {
    134     shorten_echo "check_align $@:	"
    135     local size=$($STATSZ "$1")
    136     local align="$2"
    137     (
    138 	if [ $(($size % $align)) -eq 0 ] ;then
    139 	    PASS
    140 	else
    141 	    FAIL "Output size $size is not $align-byte aligned"
    142 	fi
    143     )
    144 }
    145 
    146 run_dtc_test () {
    147     printf "dtc $*:	"
    148     base_run_test wrap_test $VALGRIND $DTC "$@"
    149 }
    150 
    151 asm_to_so () {
    152     $CC -shared -o $1.test.so data.S $1.test.s
    153 }
    154 
    155 asm_to_so_test () {
    156     run_wrap_test asm_to_so "$@"
    157 }
    158 
    159 run_fdtget_test () {
    160     expect="$1"
    161     shift
    162     printf "fdtget-runtest.sh %s $*:	" "$(echo $expect)"
    163     base_run_test sh fdtget-runtest.sh "$expect" "$@"
    164 }
    165 
    166 run_fdtput_test () {
    167     expect="$1"
    168     shift
    169     shorten_echo fdtput-runtest.sh "$expect" "$@"
    170     printf ":	"
    171     base_run_test sh fdtput-runtest.sh "$expect" "$@"
    172 }
    173 
    174 run_fdtdump_test() {
    175     file="$1"
    176     shorten_echo fdtdump-runtest.sh "$file"
    177     printf ":	"
    178     base_run_test sh fdtdump-runtest.sh "$file" 2>/dev/null
    179 }
    180 
    181 run_fdtoverlay_test() {
    182     expect="$1"
    183     shift
    184     shorten_echo fdtoverlay-runtest.sh "$expect" "$@"
    185     printf ":	"
    186     base_run_test sh fdtoverlay-runtest.sh "$expect" "$@"
    187 }
    188 
    189 BAD_FIXUP_TREES="bad_index \
    190 		empty \
    191 		empty_index \
    192 		index_trailing \
    193 		path_empty_prop \
    194 		path_only \
    195 		path_only_sep \
    196 		path_prop"
    197 
    198 # Test to exercise libfdt overlay application without dtc's overlay support
    199 libfdt_overlay_tests () {
    200     # First test a doctored overlay which requires only local fixups
    201     run_dtc_test -I dts -O dtb -o overlay_base_no_symbols.test.dtb overlay_base.dts
    202     run_test check_path overlay_base_no_symbols.test.dtb not-exists "/__symbols__"
    203     run_test check_path overlay_base_no_symbols.test.dtb not-exists "/__fixups__"
    204     run_test check_path overlay_base_no_symbols.test.dtb not-exists "/__local_fixups__"
    205 
    206     run_dtc_test -I dts -O dtb -o overlay_overlay_no_fixups.test.dtb overlay_overlay_no_fixups.dts
    207     run_test check_path overlay_overlay_no_fixups.test.dtb not-exists "/__symbols__"
    208     run_test check_path overlay_overlay_no_fixups.test.dtb not-exists "/__fixups__"
    209     run_test check_path overlay_overlay_no_fixups.test.dtb exists "/__local_fixups__"
    210 
    211     run_test overlay overlay_base_no_symbols.test.dtb overlay_overlay_no_fixups.test.dtb
    212 
    213     # Then test with manually constructed fixups
    214     run_dtc_test -I dts -O dtb -o overlay_base_manual_symbols.test.dtb overlay_base_manual_symbols.dts
    215     run_test check_path overlay_base_manual_symbols.test.dtb exists "/__symbols__"
    216     run_test check_path overlay_base_manual_symbols.test.dtb not-exists "/__fixups__"
    217     run_test check_path overlay_base_manual_symbols.test.dtb not-exists "/__local_fixups__"
    218 
    219     run_dtc_test -I dts -O dtb -o overlay_overlay_manual_fixups.test.dtb overlay_overlay_manual_fixups.dts
    220     run_test check_path overlay_overlay_manual_fixups.test.dtb not-exists "/__symbols__"
    221     run_test check_path overlay_overlay_manual_fixups.test.dtb exists "/__fixups__"
    222     run_test check_path overlay_overlay_manual_fixups.test.dtb exists "/__local_fixups__"
    223 
    224     run_test overlay overlay_base_manual_symbols.test.dtb overlay_overlay_manual_fixups.test.dtb
    225 
    226     # test simplified plugin syntax
    227     run_dtc_test -@ -I dts -O dtb -o overlay_overlay_simple.dtb overlay_overlay_simple.dts
    228 
    229     # verify non-generation of local fixups
    230     run_test check_path overlay_overlay_simple.dtb not-exists "/__local_fixups__"
    231 
    232     # Bad fixup tests
    233     for test in $BAD_FIXUP_TREES; do
    234 	tree="overlay_bad_fixup_$test"
    235 	run_dtc_test -I dts -O dtb -o $tree.test.dtb $tree.dts
    236 	run_test overlay_bad_fixup overlay_base_no_symbols.test.dtb $tree.test.dtb
    237     done
    238 }
    239 
    240 # Tests to exercise dtc's overlay generation support
    241 dtc_overlay_tests () {
    242     # Overlay tests for dtc
    243     run_dtc_test -@ -I dts -O dtb -o overlay_base.test.dtb overlay_base.dts
    244     run_test check_path overlay_base.test.dtb exists "/__symbols__"
    245     run_test check_path overlay_base.test.dtb not-exists "/__fixups__"
    246     run_test check_path overlay_base.test.dtb not-exists "/__local_fixups__"
    247 
    248     # With syntactic sugar
    249     run_dtc_test -I dts -O dtb -o overlay_overlay.test.dtb overlay_overlay.dts
    250     run_test check_path overlay_overlay.test.dtb not-exists "/__symbols__"
    251     run_test check_path overlay_overlay.test.dtb exists "/__fixups__"
    252     run_test check_path overlay_overlay.test.dtb exists "/__local_fixups__"
    253 
    254     # Without syntactic sugar
    255     run_dtc_test -I dts -O dtb -o overlay_overlay_nosugar.test.dtb overlay_overlay.dts
    256     run_test check_path overlay_overlay_nosugar.test.dtb not-exists "/__symbols__"
    257     run_test check_path overlay_overlay_nosugar.test.dtb exists "/__fixups__"
    258     run_test check_path overlay_overlay_nosugar.test.dtb exists "/__local_fixups__"
    259 
    260     # Using target-path
    261     run_dtc_test -I dts -O dtb -o overlay_overlay_bypath.test.dtb overlay_overlay_bypath.dts
    262     run_test check_path overlay_overlay_bypath.test.dtb not-exists "/__symbols__"
    263     run_test check_path overlay_overlay_bypath.test.dtb not-exists "/__fixups__"
    264     run_test check_path overlay_overlay_bypath.test.dtb exists "/__local_fixups__"
    265 
    266     # Make sure local target references are resolved and nodes are merged and that path references are not
    267     run_dtc_test -I dts -O dtb -o overlay_overlay_local_merge.test.dtb overlay_overlay_local_merge.dts
    268     run_test check_path overlay_overlay_local_merge.test.dtb exists "/fragment@0/__overlay__/new-node/new-merged-node"
    269     run_test check_path overlay_overlay_local_merge.test.dtb exists "/fragment@1/__overlay__/new-root-node"
    270 
    271     # Check building works the same as manual constructions
    272     run_test dtbs_equal_ordered overlay_overlay.test.dtb overlay_overlay_nosugar.test.dtb
    273 
    274     run_dtc_test -I dts -O dtb -o overlay_overlay_manual_fixups.test.dtb overlay_overlay_manual_fixups.dts
    275     run_test dtbs_equal_ordered overlay_overlay.test.dtb overlay_overlay_manual_fixups.test.dtb
    276 
    277     run_dtc_test -I dts -O dtb -o overlay_overlay_no_fixups.test.dtb overlay_overlay_no_fixups.dts
    278     run_test dtbs_equal_ordered overlay_overlay_bypath.test.dtb overlay_overlay_no_fixups.test.dtb
    279 
    280     # Check we can actually apply the result
    281     run_dtc_test -I dts -O dtb -o overlay_base_no_symbols.test.dtb overlay_base.dts
    282     run_test overlay overlay_base.test.dtb overlay_overlay.test.dtb
    283     run_test overlay overlay_base_no_symbols.test.dtb overlay_overlay_bypath.test.dtb
    284 
    285     # test plugin source to dtb and back
    286     run_dtc_test -I dtb -O dts -o overlay_overlay_decompile.test.dts overlay_overlay.test.dtb
    287     run_dtc_test -I dts -O dtb -o overlay_overlay_decompile.test.dtb overlay_overlay_decompile.test.dts
    288     run_test dtbs_equal_ordered overlay_overlay.test.dtb overlay_overlay_decompile.test.dtb
    289 
    290     # Test generation of aliases instead of symbols
    291     run_dtc_test -A -I dts -O dtb -o overlay_base_with_aliases.dtb overlay_base.dts
    292     run_test check_path overlay_base_with_aliases.dtb exists "/aliases"
    293     run_test check_path overlay_base_with_aliases.dtb not-exists "/__symbols__"
    294     run_test check_path overlay_base_with_aliases.dtb not-exists "/__fixups__"
    295     run_test check_path overlay_base_with_aliases.dtb not-exists "/__local_fixups__"
    296 }
    297 
    298 tree1_tests () {
    299     TREE=$1
    300 
    301     # Read-only tests
    302     run_test get_mem_rsv $TREE
    303     run_test root_node $TREE
    304     run_test find_property $TREE
    305     run_test subnode_offset $TREE
    306     run_test path_offset $TREE
    307     run_test get_name $TREE
    308     run_test getprop $TREE
    309     run_test get_prop_offset $TREE
    310     run_test get_phandle $TREE
    311     run_test get_path $TREE
    312     run_test supernode_atdepth_offset $TREE
    313     run_test parent_offset $TREE
    314     run_test node_offset_by_prop_value $TREE
    315     run_test node_offset_by_phandle $TREE
    316     run_test node_check_compatible $TREE
    317     run_test node_offset_by_compatible $TREE
    318     run_test notfound $TREE
    319 
    320     # Write-in-place tests
    321     run_test setprop_inplace $TREE
    322     run_test nop_property $TREE
    323     run_test nop_node $TREE
    324 }
    325 
    326 tree1_tests_rw () {
    327     TREE=$1
    328 
    329     # Read-write tests
    330     run_test set_name $TREE
    331     run_test setprop $TREE
    332     run_test del_property $TREE
    333     run_test del_node $TREE
    334 }
    335 
    336 check_tests () {
    337     tree="$1"
    338     shift
    339     run_sh_test dtc-checkfails.sh "$@" -- -I dts -O dtb $tree
    340     run_dtc_test -I dts -O dtb -o $tree.test.dtb -f $tree
    341     run_sh_test dtc-checkfails.sh "$@" -- -I dtb -O dtb $tree.test.dtb
    342 }
    343 
    344 ALL_LAYOUTS="mts mst tms tsm smt stm"
    345 
    346 libfdt_tests () {
    347     tree1_tests test_tree1.dtb
    348 
    349     run_dtc_test -I dts -O dtb -o addresses.test.dtb addresses.dts
    350     run_test addr_size_cells addresses.test.dtb
    351     run_dtc_test -I dts -O dtb -o addresses2.test.dtb empty.dts
    352     run_test addr_size_cells2 addresses2.test.dtb
    353 
    354     run_dtc_test -I dts -O dtb -o stringlist.test.dtb stringlist.dts
    355     run_test stringlist stringlist.test.dtb
    356 
    357     for flags in default no_name_dedup; do
    358         # Sequential write tests
    359         run_test sw_tree1 fixed $flags
    360         tree1_tests sw_tree1.test.dtb
    361         tree1_tests unfinished_tree1.test.dtb
    362         run_test dtbs_equal_ordered test_tree1.dtb sw_tree1.test.dtb
    363         run_test sw_states
    364 
    365         # Resizing tests
    366         for mode in resize realloc newalloc; do
    367             run_test sw_tree1 $mode $flags
    368             tree1_tests sw_tree1.test.dtb
    369             tree1_tests unfinished_tree1.test.dtb
    370             run_test dtbs_equal_ordered test_tree1.dtb sw_tree1.test.dtb
    371         done
    372     done
    373 
    374     # fdt_move tests
    375     for tree in test_tree1.dtb sw_tree1.test.dtb unfinished_tree1.test.dtb; do
    376 	rm -f moved.$tree shunted.$tree deshunted.$tree
    377 	run_test move_and_save $tree
    378 	run_test dtbs_equal_ordered $tree moved.$tree
    379 	run_test dtbs_equal_ordered $tree shunted.$tree
    380 	run_test dtbs_equal_ordered $tree deshunted.$tree
    381     done
    382 
    383     # v16 and alternate layout tests
    384     for tree in test_tree1.dtb; do
    385 	for version in 17 16; do
    386 	    for layout in $ALL_LAYOUTS; do
    387 		run_test mangle-layout $tree $version $layout
    388 		tree1_tests v$version.$layout.$tree
    389 		run_test dtbs_equal_ordered $tree v$version.$layout.$tree
    390 	    done
    391 	done
    392     done
    393 
    394     # Read-write tests
    395     for basetree in test_tree1.dtb; do
    396 	for version in 17 16; do
    397 	    for layout in $ALL_LAYOUTS; do
    398 		tree=v$version.$layout.$basetree
    399 		rm -f opened.$tree repacked.$tree
    400 		run_test open_pack $tree
    401 		tree1_tests opened.$tree
    402 		tree1_tests repacked.$tree
    403 
    404 		tree1_tests_rw $tree
    405 		tree1_tests_rw opened.$tree
    406 		tree1_tests_rw repacked.$tree
    407 	    done
    408 	done
    409     done
    410     run_test rw_tree1
    411     tree1_tests rw_tree1.test.dtb
    412     tree1_tests_rw rw_tree1.test.dtb
    413     run_test appendprop1
    414     run_test appendprop2 appendprop1.test.dtb
    415     run_dtc_test -I dts -O dtb -o appendprop.test.dtb appendprop.dts
    416     run_test dtbs_equal_ordered appendprop2.test.dtb appendprop.test.dtb
    417     libfdt_overlay_tests
    418 
    419     for basetree in test_tree1.dtb sw_tree1.test.dtb rw_tree1.test.dtb; do
    420 	run_test nopulate $basetree
    421 	run_test dtbs_equal_ordered $basetree noppy.$basetree
    422 	tree1_tests noppy.$basetree
    423 	tree1_tests_rw noppy.$basetree
    424     done
    425 
    426     run_test rw_oom
    427 
    428     run_dtc_test -I dts -O dtb -o subnode_iterate.dtb subnode_iterate.dts
    429     run_test subnode_iterate subnode_iterate.dtb
    430 
    431     run_dtc_test -I dts -O dtb -o property_iterate.dtb property_iterate.dts
    432     run_test property_iterate property_iterate.dtb
    433 
    434     run_dtc_test -I dts -O dtb -o unit-addr-without-reg.dtb unit-addr-without-reg.dts
    435     run_test appendprop_addrrange unit-addr-without-reg.dtb 1 1 1
    436     run_test appendprop_addrrange unit-addr-without-reg.dtb 2 2 2
    437     run_test appendprop_addrrange unit-addr-without-reg.dtb 2 1 3
    438 
    439     # Tests for behaviour on various sorts of corrupted trees
    440     run_test truncated_property
    441     run_test truncated_string
    442     run_test truncated_memrsv
    443 
    444     # Check aliases support in fdt_path_offset
    445     run_dtc_test -I dts -O dtb -o aliases.dtb aliases.dts
    446     run_test get_alias aliases.dtb
    447     run_test path_offset_aliases aliases.dtb
    448 
    449     # Specific bug tests
    450     run_test add_subnode_with_nops
    451     run_dtc_test -I dts -O dts -o sourceoutput.test.dts sourceoutput.dts
    452     run_dtc_test -I dts -O dtb -o sourceoutput.test.dtb sourceoutput.dts
    453     run_dtc_test -I dts -O dtb -o sourceoutput.test.dts.test.dtb sourceoutput.test.dts
    454     run_test dtbs_equal_ordered sourceoutput.test.dtb sourceoutput.test.dts.test.dtb
    455 
    456     run_dtc_test -I dts -O dtb -o embedded_nul.test.dtb embedded_nul.dts
    457     run_dtc_test -I dts -O dtb -o embedded_nul_equiv.test.dtb embedded_nul_equiv.dts
    458     run_test dtbs_equal_ordered embedded_nul.test.dtb embedded_nul_equiv.test.dtb
    459 
    460     run_dtc_test -I dts -O dtb bad-size-cells.dts
    461 
    462     run_wrap_error_test $DTC division-by-zero.dts
    463     run_wrap_error_test $DTC bad-octal-literal.dts
    464     run_dtc_test -I dts -O dtb nul-in-escape.dts
    465     run_wrap_error_test $DTC nul-in-line-info1.dts
    466     run_wrap_error_test $DTC nul-in-line-info2.dts
    467 
    468     run_wrap_error_test $DTC -I dtb -O dts -o /dev/null ovf_size_strings.dtb
    469 
    470     run_test check_header test_tree1.dtb
    471 
    472     FSBASE=fs
    473     rm -rf $FSBASE
    474     mkdir -p $FSBASE
    475     run_test fs_tree1 $FSBASE/test_tree1
    476     run_dtc_test -I fs -O dts -o fs.test_tree1.test.dts $FSBASE/test_tree1
    477     run_dtc_test -I fs -O dtb -o fs.test_tree1.test.dtb $FSBASE/test_tree1
    478     run_test dtbs_equal_unordered -m fs.test_tree1.test.dtb test_tree1.dtb
    479 
    480     # check full tests
    481     for good in test_tree1.dtb; do
    482 	run_test check_full $good
    483     done
    484     for bad in truncated_property.dtb truncated_string.dtb \
    485 				      truncated_memrsv.dtb; do
    486 	run_test check_full -n $bad
    487     done
    488 }
    489 
    490 dtc_tests () {
    491     run_dtc_test -I dts -O dtb -o dtc_tree1.test.dtb test_tree1.dts
    492     tree1_tests dtc_tree1.test.dtb
    493     tree1_tests_rw dtc_tree1.test.dtb
    494     run_test dtbs_equal_ordered dtc_tree1.test.dtb test_tree1.dtb
    495 
    496     run_dtc_test -I dts -O dtb -o dtc_escapes.test.dtb propname_escapes.dts
    497     run_test propname_escapes dtc_escapes.test.dtb
    498 
    499     run_dtc_test -I dts -O dtb -o line_directives.test.dtb line_directives.dts
    500 
    501     run_dtc_test -I dts -O dtb -o dtc_escapes.test.dtb escapes.dts
    502     run_test string_escapes dtc_escapes.test.dtb
    503 
    504     run_dtc_test -I dts -O dtb -o dtc_char_literal.test.dtb char_literal.dts
    505     run_test char_literal dtc_char_literal.test.dtb
    506 
    507     run_dtc_test -I dts -O dtb -o dtc_sized_cells.test.dtb sized_cells.dts
    508     run_test sized_cells dtc_sized_cells.test.dtb
    509 
    510     run_dtc_test -I dts -O dtb -o dtc_extra-terminating-null.test.dtb extra-terminating-null.dts
    511     run_test extra-terminating-null dtc_extra-terminating-null.test.dtb
    512 
    513     run_dtc_test -I dts -O dtb -o dtc_references.test.dtb references.dts
    514     run_test references dtc_references.test.dtb
    515 
    516     run_dtc_test -I dts -O dtb -o dtc_path-references.test.dtb path-references.dts
    517     run_test path-references dtc_path-references.test.dtb
    518 
    519     run_test phandle_format dtc_references.test.dtb epapr
    520     for f in legacy epapr both; do
    521 	run_dtc_test -I dts -O dtb -H $f -o dtc_references.test.$f.dtb references.dts
    522 	run_test phandle_format dtc_references.test.$f.dtb $f
    523     done
    524 
    525     run_dtc_test -I dts -O dtb -o multilabel.test.dtb multilabel.dts
    526     run_test references multilabel.test.dtb
    527 
    528     run_dtc_test -I dts -O dtb -o label_repeated.test.dtb label_repeated.dts
    529 
    530     run_dtc_test -I dts -O dtb -o dtc_comments.test.dtb comments.dts
    531     run_dtc_test -I dts -O dtb -o dtc_comments-cmp.test.dtb comments-cmp.dts
    532     run_test dtbs_equal_ordered dtc_comments.test.dtb dtc_comments-cmp.test.dtb
    533 
    534     # Check /include/ directive
    535     run_dtc_test -I dts -O dtb -o includes.test.dtb include0.dts
    536     run_test dtbs_equal_ordered includes.test.dtb test_tree1.dtb
    537 
    538     # Check /incbin/ directive
    539     run_dtc_test -I dts -O dtb -o incbin.test.dtb incbin.dts
    540     run_test incbin incbin.test.dtb
    541 
    542     # Check boot_cpuid_phys handling
    543     run_dtc_test -I dts -O dtb -o boot_cpuid.test.dtb boot-cpuid.dts
    544     run_test boot-cpuid boot_cpuid.test.dtb 16
    545 
    546     run_dtc_test -I dts -O dtb -b 17 -o boot_cpuid_17.test.dtb boot-cpuid.dts
    547     run_test boot-cpuid boot_cpuid_17.test.dtb 17
    548 
    549     run_dtc_test -I dtb -O dtb -o preserve_boot_cpuid.test.dtb boot_cpuid.test.dtb
    550     run_test boot-cpuid preserve_boot_cpuid.test.dtb 16
    551     run_test dtbs_equal_ordered preserve_boot_cpuid.test.dtb boot_cpuid.test.dtb
    552 
    553     run_dtc_test -I dtb -O dtb -o preserve_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb
    554     run_test boot-cpuid preserve_boot_cpuid_17.test.dtb 17
    555     run_test dtbs_equal_ordered preserve_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb
    556 
    557     run_dtc_test -I dtb -O dtb -b17 -o override17_boot_cpuid.test.dtb boot_cpuid.test.dtb
    558     run_test boot-cpuid override17_boot_cpuid.test.dtb 17
    559 
    560     run_dtc_test -I dtb -O dtb -b0 -o override0_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb
    561     run_test boot-cpuid override0_boot_cpuid_17.test.dtb 0
    562 
    563 
    564     # Check -Oasm mode
    565     for tree in test_tree1.dts escapes.dts references.dts path-references.dts \
    566 	comments.dts aliases.dts include0.dts incbin.dts \
    567 	value-labels.dts ; do
    568 	run_dtc_test -I dts -O asm -o oasm_$tree.test.s $tree
    569 	asm_to_so_test oasm_$tree
    570 	run_dtc_test -I dts -O dtb -o $tree.test.dtb $tree
    571 	run_test asm_tree_dump ./oasm_$tree.test.so oasm_$tree.test.dtb
    572 	run_wrap_test cmp oasm_$tree.test.dtb $tree.test.dtb
    573     done
    574 
    575     run_test value-labels ./oasm_value-labels.dts.test.so
    576 
    577     # Check -Odts mode preserve all dtb information
    578     for tree in test_tree1.dtb dtc_tree1.test.dtb dtc_escapes.test.dtb \
    579 	dtc_extra-terminating-null.test.dtb dtc_references.test.dtb; do
    580 	run_dtc_test -I dtb -O dts -o odts_$tree.test.dts $tree
    581 	run_dtc_test -I dts -O dtb -o odts_$tree.test.dtb odts_$tree.test.dts
    582 	run_test dtbs_equal_ordered $tree odts_$tree.test.dtb
    583     done
    584 
    585     # Check -Odts preserving type information
    586     for tree in type-preservation.dts; do
    587         run_dtc_test -I dts -O dts -o $tree.test.dts $tree
    588         run_dtc_test -I dts -O dts $tree.test.dts
    589         run_wrap_test cmp $tree $tree.test.dts
    590     done
    591     for tree in path-references; do
    592         run_dtc_test -I dts -O dtb -o $tree.test.dtb $tree.dts
    593         run_dtc_test -I dts -O dts -o $tree.test.dts $tree.dts
    594         run_dtc_test -I dts -O dtb -o $tree.test.dts.test.dtb $tree.test.dts
    595         run_test dtbs_equal_ordered $tree.test.dtb $tree.test.dts.test.dtb
    596     done
    597 
    598     # Check -Oyaml output
    599     if pkg-config --exists yaml-0.1; then
    600             for tree in type-preservation; do
    601                 run_dtc_test -I dts -O yaml -o $tree.test.dt.yaml $tree.dts
    602                 run_wrap_test cmp $tree.dt.yaml $tree.test.dt.yaml
    603             done
    604     fi
    605 
    606     # Check version conversions
    607     for tree in test_tree1.dtb ; do
    608 	 for aver in 1 2 3 16 17; do
    609 	     atree="ov${aver}_$tree.test.dtb"
    610 	     run_dtc_test -I dtb -O dtb -V$aver -o $atree $tree
    611 	     for bver in 16 17; do
    612 		 btree="ov${bver}_$atree"
    613 		 run_dtc_test -I dtb -O dtb -V$bver -o $btree $atree
    614 		 run_test dtbs_equal_ordered $btree $tree
    615 	     done
    616 	 done
    617     done
    618 
    619     # Check merge/overlay functionality
    620     run_dtc_test -I dts -O dtb -o dtc_tree1_merge.test.dtb test_tree1_merge.dts
    621     tree1_tests dtc_tree1_merge.test.dtb test_tree1.dtb
    622     run_dtc_test -I dts -O dtb -o dtc_tree1_merge_labelled.test.dtb test_tree1_merge_labelled.dts
    623     tree1_tests dtc_tree1_merge_labelled.test.dtb test_tree1.dtb
    624     run_dtc_test -I dts -O dtb -o dtc_tree1_label_noderef.test.dtb test_tree1_label_noderef.dts
    625     run_test dtbs_equal_unordered dtc_tree1_label_noderef.test.dtb test_tree1.dtb
    626     run_dtc_test -I dts -O dtb -o multilabel_merge.test.dtb multilabel_merge.dts
    627     run_test references multilabel.test.dtb
    628     run_test dtbs_equal_ordered multilabel.test.dtb multilabel_merge.test.dtb
    629     run_dtc_test -I dts -O dtb -o dtc_tree1_merge_path.test.dtb test_tree1_merge_path.dts
    630     tree1_tests dtc_tree1_merge_path.test.dtb test_tree1.dtb
    631     run_wrap_error_test $DTC -I dts -O dtb -o /dev/null test_label_ref.dts
    632 
    633     # Check prop/node delete functionality
    634     run_dtc_test -I dts -O dtb -o dtc_tree1_delete.test.dtb test_tree1_delete.dts
    635     tree1_tests dtc_tree1_delete.test.dtb
    636 
    637     # Check omit-if-no-ref functionality
    638     run_dtc_test -I dts -O dtb -o omit-no-ref.test.dtb omit-no-ref.dts
    639     run_test check_path omit-no-ref.test.dtb not-exists "/node1"
    640     run_test check_path omit-no-ref.test.dtb not-exists "/node2"
    641     run_test check_path omit-no-ref.test.dtb exists "/node3"
    642     run_test check_path omit-no-ref.test.dtb exists "/node4"
    643 
    644     run_dtc_test -I dts -O dts -o delete_reinstate_multilabel.dts.test.dts delete_reinstate_multilabel.dts
    645     run_wrap_test cmp delete_reinstate_multilabel.dts.test.dts delete_reinstate_multilabel_ref.dts
    646 
    647     # Check some checks
    648     check_tests dup-nodename.dts duplicate_node_names
    649     check_tests dup-propname.dts duplicate_property_names
    650     check_tests dup-phandle.dts explicit_phandles
    651     check_tests zero-phandle.dts explicit_phandles
    652     check_tests minusone-phandle.dts explicit_phandles
    653     run_sh_test dtc-checkfails.sh phandle_references -- -I dts -O dtb nonexist-node-ref.dts
    654     run_sh_test dtc-checkfails.sh phandle_references -- -I dts -O dtb nonexist-label-ref.dts
    655     run_sh_test dtc-fatal.sh -I dts -O dtb nonexist-node-ref2.dts
    656     check_tests bad-name-property.dts name_properties
    657 
    658     check_tests bad-ncells.dts address_cells_is_cell size_cells_is_cell interrupt_cells_is_cell
    659     check_tests bad-string-props.dts device_type_is_string model_is_string status_is_string label_is_string compatible_is_string_list names_is_string_list
    660     check_tests bad-chosen.dts chosen_node_is_root
    661     check_tests bad-chosen.dts chosen_node_bootargs
    662     check_tests bad-chosen.dts chosen_node_stdout_path
    663     check_tests bad-reg-ranges.dts reg_format ranges_format
    664     check_tests bad-empty-ranges.dts ranges_format
    665     check_tests reg-ranges-root.dts reg_format ranges_format
    666     check_tests default-addr-size.dts avoid_default_addr_size
    667     check_tests obsolete-chosen-interrupt-controller.dts obsolete_chosen_interrupt_controller
    668     check_tests reg-without-unit-addr.dts unit_address_vs_reg
    669     check_tests unit-addr-without-reg.dts unit_address_vs_reg
    670     check_tests unit-addr-leading-0x.dts unit_address_format
    671     check_tests unit-addr-leading-0s.dts unit_address_format
    672     check_tests unit-addr-unique.dts unique_unit_address
    673     check_tests bad-phandle-cells.dts interrupts_extended_property
    674     check_tests bad-gpio.dts gpios_property
    675     check_tests bad-graph.dts graph_child_address
    676     check_tests bad-graph.dts graph_port
    677     check_tests bad-graph.dts graph_endpoint
    678     run_sh_test dtc-checkfails.sh deprecated_gpio_property -- -Wdeprecated_gpio_property -I dts -O dtb bad-gpio.dts
    679     check_tests bad-interrupt-cells.dts interrupts_property
    680     run_sh_test dtc-checkfails.sh node_name_chars -- -I dtb -O dtb bad_node_char.dtb
    681     run_sh_test dtc-checkfails.sh node_name_format -- -I dtb -O dtb bad_node_format.dtb
    682     run_sh_test dtc-checkfails.sh property_name_chars -- -I dtb -O dtb bad_prop_char.dtb
    683 
    684     run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label1.dts
    685     run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label2.dts
    686     run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label3.dts
    687     run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label4.dts
    688     run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label5.dts
    689     run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label6.dts
    690 
    691     run_test check_path test_tree1.dtb exists "/subnode@1"
    692     run_test check_path test_tree1.dtb not-exists "/subnode@10"
    693 
    694     check_tests pci-bridge-ok.dts -n pci_bridge
    695     check_tests pci-bridge-bad1.dts pci_bridge
    696     check_tests pci-bridge-bad2.dts pci_bridge
    697 
    698     check_tests unit-addr-simple-bus-reg-mismatch.dts simple_bus_reg
    699     check_tests unit-addr-simple-bus-compatible.dts simple_bus_reg
    700 
    701 
    702     # Check warning options
    703     run_sh_test dtc-checkfails.sh address_cells_is_cell interrupt_cells_is_cell -n size_cells_is_cell -- -Wno_size_cells_is_cell -I dts -O dtb bad-ncells.dts
    704     run_sh_test dtc-fails.sh -n test-warn-output.test.dtb -I dts -O dtb bad-ncells.dts
    705     run_sh_test dtc-fails.sh test-error-output.test.dtb -I dts -O dtb bad-ncells.dts -Esize_cells_is_cell
    706     run_sh_test dtc-checkfails.sh always_fail -- -Walways_fail -I dts -O dtb test_tree1.dts
    707     run_sh_test dtc-checkfails.sh -n always_fail -- -Walways_fail -Wno_always_fail -I dts -O dtb test_tree1.dts
    708     run_sh_test dtc-fails.sh test-negation-1.test.dtb -Ealways_fail -I dts -O dtb test_tree1.dts
    709     run_sh_test dtc-fails.sh -n test-negation-2.test.dtb -Ealways_fail -Eno_always_fail -I dts -O dtb test_tree1.dts
    710     run_sh_test dtc-fails.sh test-negation-3.test.dtb -Ealways_fail -Wno_always_fail -I dts -O dtb test_tree1.dts
    711     run_sh_test dtc-fails.sh -n test-negation-4.test.dtb -Esize_cells_is_cell -Eno_size_cells_is_cell -I dts -O dtb bad-ncells.dts
    712     run_sh_test dtc-checkfails.sh size_cells_is_cell -- -Esize_cells_is_cell -Eno_size_cells_is_cell -I dts -O dtb bad-ncells.dts
    713 
    714     # Check for proper behaviour reading from stdin
    715     run_dtc_test -I dts -O dtb -o stdin_dtc_tree1.test.dtb - < test_tree1.dts
    716     run_wrap_test cmp stdin_dtc_tree1.test.dtb dtc_tree1.test.dtb
    717     run_dtc_test -I dtb -O dts -o stdin_odts_test_tree1.dtb.test.dts - < test_tree1.dtb
    718     run_wrap_test cmp stdin_odts_test_tree1.dtb.test.dts odts_test_tree1.dtb.test.dts
    719 
    720     # Check integer expresisons
    721     run_test integer-expressions -g integer-expressions.test.dts
    722     run_dtc_test -I dts -O dtb -o integer-expressions.test.dtb integer-expressions.test.dts
    723     run_test integer-expressions integer-expressions.test.dtb
    724 
    725     # Check for graceful failure in some error conditions
    726     run_sh_test dtc-fatal.sh -I dts -O dtb nosuchfile.dts
    727     run_sh_test dtc-fatal.sh -I dtb -O dtb nosuchfile.dtb
    728     run_sh_test dtc-fatal.sh -I fs -O dtb nosuchfile
    729 
    730     # Dependencies
    731     run_dtc_test -I dts -O dtb -o dependencies.test.dtb -d dependencies.test.d dependencies.dts
    732     run_wrap_test cmp dependencies.test.d dependencies.cmp
    733 
    734     # Search paths
    735     run_wrap_error_test $DTC -I dts -O dtb -o search_paths.dtb search_paths.dts
    736     run_dtc_test -i search_dir -I dts -O dtb -o search_paths.dtb \
    737 	search_paths.dts
    738     run_wrap_error_test $DTC -i search_dir_b -I dts -O dtb \
    739 	-o search_paths_b.dtb search_paths_b.dts
    740     run_dtc_test -i search_dir_b -i search_dir -I dts -O dtb \
    741 	-o search_paths_b.dtb search_paths_b.dts
    742     run_dtc_test -I dts -O dtb -o search_paths_subdir.dtb \
    743 	search_dir_b/search_paths_subdir.dts
    744 
    745     # Check -a option
    746     for align in 2 4 8 16 32 64; do
    747 	# -p -a
    748 	run_dtc_test -O dtb -p 1000 -a $align -o align0.dtb subnode_iterate.dts
    749 	base_run_test check_align align0.dtb $align
    750 	# -S -a
    751 	run_dtc_test -O dtb -S 1999 -a $align -o align1.dtb subnode_iterate.dts
    752 	base_run_test check_align align1.dtb $align
    753     done
    754 
    755     # Tests for overlay/plugin generation
    756     dtc_overlay_tests
    757 }
    758 
    759 cmp_tests () {
    760     basetree="$1"
    761     shift
    762     wrongtrees="$@"
    763 
    764     run_test dtb_reverse $basetree
    765 
    766     # First dtbs_equal_ordered
    767     run_test dtbs_equal_ordered $basetree $basetree
    768     run_test dtbs_equal_ordered -n $basetree $basetree.reversed.test.dtb
    769     for tree in $wrongtrees; do
    770 	run_test dtbs_equal_ordered -n $basetree $tree
    771     done
    772 
    773     # now unordered
    774     run_test dtbs_equal_unordered $basetree $basetree
    775     run_test dtbs_equal_unordered $basetree $basetree.reversed.test.dtb
    776     run_test dtbs_equal_unordered $basetree.reversed.test.dtb $basetree
    777     for tree in $wrongtrees; do
    778 	run_test dtbs_equal_unordered -n $basetree $tree
    779     done
    780 
    781     # now dtc --sort
    782     run_dtc_test -I dtb -O dtb -s -o $basetree.sorted.test.dtb $basetree
    783     run_test dtbs_equal_unordered $basetree $basetree.sorted.test.dtb
    784     run_dtc_test -I dtb -O dtb -s -o $basetree.reversed.sorted.test.dtb $basetree.reversed.test.dtb
    785     run_test dtbs_equal_unordered $basetree.reversed.test.dtb $basetree.reversed.sorted.test.dtb
    786     run_test dtbs_equal_ordered $basetree.sorted.test.dtb $basetree.reversed.sorted.test.dtb
    787 }
    788 
    789 dtbs_equal_tests () {
    790     WRONG_TREE1=""
    791     for x in 1 2 3 4 5 6 7 8 9; do
    792 	run_dtc_test -I dts -O dtb -o test_tree1_wrong$x.test.dtb test_tree1_wrong$x.dts
    793 	WRONG_TREE1="$WRONG_TREE1 test_tree1_wrong$x.test.dtb"
    794     done
    795     cmp_tests test_tree1.dtb $WRONG_TREE1
    796 }
    797 
    798 fdtget_tests () {
    799     dts=label01.dts
    800     dtb=$dts.fdtget.test.dtb
    801     run_dtc_test -O dtb -o $dtb $dts
    802 
    803     # run_fdtget_test <expected-result> [<flags>] <file> <node> <property>
    804     run_fdtget_test "MyBoardName" $dtb / model
    805     run_fdtget_test "MyBoardName MyBoardFamilyName" $dtb / compatible
    806     run_fdtget_test "77 121 66 111 \
    807 97 114 100 78 97 109 101 0 77 121 66 111 97 114 100 70 97 109 105 \
    808 108 121 78 97 109 101 0" -t bu $dtb / compatible
    809     run_fdtget_test "MyBoardName MyBoardFamilyName" -t s $dtb / compatible
    810     run_fdtget_test 32768 $dtb /cpus/PowerPC,970@1 d-cache-size
    811     run_fdtget_test 8000 -tx $dtb /cpus/PowerPC,970@1 d-cache-size
    812     run_fdtget_test "61 62 63 0" -tbx $dtb /randomnode tricky1
    813     run_fdtget_test "a b c d de ea ad be ef" -tbx $dtb /randomnode blob
    814 
    815     # Here the property size is not a multiple of 4 bytes, so it should fail
    816     run_wrap_error_test $DTGET -tlx $dtb /randomnode mixed
    817     run_fdtget_test "6162 6300 1234 0 a 0 b 0 c" -thx $dtb /randomnode mixed
    818     run_fdtget_test "61 62 63 0 12 34 0 0 0 a 0 0 0 b 0 0 0 c" \
    819 	-thhx $dtb /randomnode mixed
    820     run_wrap_error_test $DTGET -ts $dtb /randomnode doctor-who
    821 
    822     # Test multiple arguments
    823     run_fdtget_test "MyBoardName\nmemory" -ts $dtb / model /memory device_type
    824 
    825     # Test defaults
    826     run_wrap_error_test $DTGET -tx $dtb /randomnode doctor-who
    827     run_fdtget_test "<the dead silence>" -tx \
    828 	-d "<the dead silence>" $dtb /randomnode doctor-who
    829     run_fdtget_test "<blink>" -tx -d "<blink>" $dtb /memory doctor-who
    830 }
    831 
    832 fdtput_tests () {
    833     dts=label01.dts
    834     dtb=$dts.fdtput.test.dtb
    835     text=lorem.txt
    836 
    837     # Allow just enough space for $text
    838     run_dtc_test -O dtb -p $($STATSZ $text) -o $dtb $dts
    839 
    840     # run_fdtput_test <expected-result> <file> <node> <property> <flags> <value>
    841     run_fdtput_test "a_model" $dtb / model -ts "a_model"
    842     run_fdtput_test "board1 board2" $dtb / compatible -ts board1 board2
    843     run_fdtput_test "board1 board2" $dtb / compatible -ts "board1 board2"
    844     run_fdtput_test "32768" $dtb /cpus/PowerPC,970@1 d-cache-size "" "32768"
    845     run_fdtput_test "8001" $dtb /cpus/PowerPC,970@1 d-cache-size -tx 0x8001
    846     run_fdtput_test "2 3 12" $dtb /randomnode tricky1 -tbi "02 003 12"
    847     run_fdtput_test "a b c ea ad be ef" $dtb /randomnode blob \
    848 	-tbx "a b c ea ad be ef"
    849     run_fdtput_test "a0b0c0d deeaae ef000000" $dtb /randomnode blob \
    850 	-tx "a0b0c0d deeaae ef000000"
    851     run_fdtput_test "$(cat $text)" $dtb /randomnode blob -ts "$(cat $text)"
    852 
    853     # Test expansion of the blob when insufficient room for property
    854     run_fdtput_test "$(cat $text $text)" $dtb /randomnode blob -ts "$(cat $text $text)"
    855 
    856     # Start again with a fresh dtb
    857     run_dtc_test -O dtb -p $($STATSZ $text) -o $dtb $dts
    858 
    859     # Node creation
    860     run_wrap_error_test $DTPUT $dtb -c /baldrick sod
    861     run_wrap_test $DTPUT $dtb -c /chosen/son /chosen/daughter
    862     run_fdtput_test "eva" $dtb /chosen/daughter name "" -ts "eva"
    863     run_fdtput_test "adam" $dtb /chosen/son name "" -ts "adam"
    864 
    865     # Not allowed to create an existing node
    866     run_wrap_error_test $DTPUT $dtb -c /chosen
    867     run_wrap_error_test $DTPUT $dtb -c /chosen/son
    868 
    869     # Automatic node creation
    870     run_wrap_test $DTPUT $dtb -cp /blackadder/the-second/turnip \
    871 	/blackadder/the-second/potato
    872     run_fdtput_test 1000 $dtb /blackadder/the-second/turnip cost "" 1000
    873     run_fdtput_test "fine wine" $dtb /blackadder/the-second/potato drink \
    874 	"-ts" "fine wine"
    875     run_wrap_test $DTPUT $dtb -p /you/are/drunk/sir/winston slurp -ts twice
    876 
    877     # Test expansion of the blob when insufficient room for a new node
    878     run_wrap_test $DTPUT $dtb -cp "$(cat $text $text)/longish"
    879 
    880     # Allowed to create an existing node with -p
    881     run_wrap_test $DTPUT $dtb -cp /chosen
    882     run_wrap_test $DTPUT $dtb -cp /chosen/son
    883 
    884     # Start again with a fresh dtb
    885     run_dtc_test -O dtb -p $($STATSZ $text) -o $dtb $dts
    886 
    887     # Node delete
    888     run_wrap_test $DTPUT $dtb -c /chosen/node1 /chosen/node2 /chosen/node3
    889     run_fdtget_test "node3\nnode2\nnode1" $dtb -l  /chosen
    890     run_wrap_test $DTPUT $dtb -r /chosen/node1 /chosen/node2
    891     run_fdtget_test "node3" $dtb -l  /chosen
    892 
    893     # Delete the non-existent node
    894     run_wrap_error_test $DTPUT $dtb -r /non-existent/node
    895 
    896     # Property delete
    897     run_fdtput_test "eva" $dtb /chosen/ name "" -ts "eva"
    898     run_fdtput_test "016" $dtb /chosen/ age  "" -ts "016"
    899     run_fdtget_test "age\nname\nbootargs\nlinux,platform" $dtb -p  /chosen
    900     run_wrap_test $DTPUT $dtb -d /chosen/ name age
    901     run_fdtget_test "bootargs\nlinux,platform" $dtb -p  /chosen
    902 
    903     # Delete the non-existent property
    904     run_wrap_error_test $DTPUT $dtb -d /chosen   non-existent-prop
    905 
    906     # TODO: Add tests for verbose mode?
    907 }
    908 
    909 utilfdt_tests () {
    910     run_test utilfdt_test
    911 }
    912 
    913 fdtdump_tests () {
    914     run_fdtdump_test fdtdump.dts
    915 }
    916 
    917 fdtoverlay_tests() {
    918     base=overlay_base.dts
    919     basedtb=overlay_base.fdoverlay.test.dtb
    920     overlay=overlay_overlay_manual_fixups.dts
    921     overlaydtb=overlay_overlay_manual_fixups.fdoverlay.test.dtb
    922     targetdtb=target.fdoverlay.test.dtb
    923 
    924     run_dtc_test -@ -I dts -O dtb -o $basedtb $base
    925     run_dtc_test -@ -I dts -O dtb -o $overlaydtb $overlay
    926 
    927     # test that the new property is installed
    928     run_fdtoverlay_test foobar "/test-node" "test-str-property" "-ts" ${basedtb} ${targetdtb} ${overlaydtb}
    929 
    930     stacked_base=stacked_overlay_base.dts
    931     stacked_basedtb=stacked_overlay_base.fdtoverlay.test.dtb
    932     stacked_bar=stacked_overlay_bar.dts
    933     stacked_bardtb=stacked_overlay_bar.fdtoverlay.test.dtb
    934     stacked_baz=stacked_overlay_baz.dts
    935     stacked_bazdtb=stacked_overlay_baz.fdtoverlay.test.dtb
    936     stacked_targetdtb=stacked_overlay_target.fdtoverlay.test.dtb
    937 
    938     run_dtc_test -@ -I dts -O dtb -o $stacked_basedtb $stacked_base
    939     run_dtc_test -@ -I dts -O dtb -o $stacked_bardtb $stacked_bar
    940     run_dtc_test -@ -I dts -O dtb -o $stacked_bazdtb $stacked_baz
    941 
    942     # test that baz correctly inserted the property
    943     run_fdtoverlay_test baz "/foonode/barnode/baznode" "baz-property" "-ts" ${stacked_basedtb} ${stacked_targetdtb} ${stacked_bardtb} ${stacked_bazdtb}
    944 
    945     overlay_long_path=overlay_overlay_long_path.dts
    946     overlay_long_pathdtb=overlay_overlay_long_path.fdoverlay.test.dtb
    947     target_long_pathdtb=overlay_overlay_long_path_target.fdoverlay.test.dtb
    948     run_dtc_test -@ -I dts -O dtb -o $overlay_long_pathdtb $overlay_long_path
    949 
    950     # test that fdtoverlay manages to apply overlays with long target path
    951     run_fdtoverlay_test lpath "/test-node/sub-test-node/sub-test-node-with-very-long-target-path/test-0" "prop" "-ts" ${basedtb} ${target_long_pathdtb} ${overlay_long_pathdtb}
    952 
    953     # test adding a label to the root of a fragment
    954     stacked_base_nolabel=stacked_overlay_base_nolabel.dts
    955     stacked_base_nolabeldtb=stacked_overlay_base_nolabel.test.dtb
    956     stacked_addlabel=stacked_overlay_addlabel.dts
    957     stacked_addlabeldtb=stacked_overlay_addlabel.test.dtb
    958     stacked_addlabel_targetdtb=stacked_overlay_target_nolabel.fdtoverlay.test.dtb
    959 
    960     run_dtc_test -@ -I dts -O dtb -o $stacked_base_nolabeldtb $stacked_base_nolabel
    961     run_dtc_test -@ -I dts -O dtb -o $stacked_addlabeldtb $stacked_addlabel
    962 
    963     run_fdtoverlay_test baz "/foonode/barnode/baznode" "baz-property" "-ts" ${stacked_base_nolabeldtb} ${stacked_addlabel_targetdtb} ${stacked_addlabeldtb} ${stacked_bardtb} ${stacked_bazdtb}
    964 }
    965 
    966 pylibfdt_tests () {
    967     run_dtc_test -I dts -O dtb -o test_props.dtb test_props.dts
    968     TMP=/tmp/tests.stderr.$$
    969     $PYTHON pylibfdt_tests.py -v 2> $TMP
    970 
    971     # Use the 'ok' message meaning the test passed, 'ERROR' meaning it failed
    972     # and the summary line for total tests (e.g. 'Ran 17 tests in 0.002s').
    973     # We could add pass + fail to get total tests, but this provides a useful
    974     # sanity check.
    975     pass_count=$(grep "ok$" $TMP | wc -l)
    976     fail_count=$(grep "^ERROR: " $TMP | wc -l)
    977     total_tests=$(sed -n 's/^Ran \([0-9]*\) tests.*$/\1/p' $TMP)
    978     cat $TMP
    979     rm $TMP
    980 
    981     # Extract the test results and add them to our totals
    982     tot_fail=$((tot_fail + $fail_count))
    983     tot_pass=$((tot_pass + $pass_count))
    984     tot_tests=$((tot_tests + $total_tests))
    985 }
    986 
    987 while getopts "vt:me" ARG ; do
    988     case $ARG in
    989 	"v")
    990 	    unset QUIET_TEST
    991 	    ;;
    992 	"t")
    993 	    TESTSETS=$OPTARG
    994 	    ;;
    995 	"m")
    996 	    VALGRIND="valgrind --tool=memcheck -q --error-exitcode=$VGCODE"
    997 	    ;;
    998 	"e")
    999 	    STOP_ON_FAIL=1
   1000 	    ;;
   1001     esac
   1002 done
   1003 
   1004 if [ -z "$TESTSETS" ]; then
   1005     TESTSETS="libfdt utilfdt dtc dtbs_equal fdtget fdtput fdtdump fdtoverlay"
   1006 
   1007     # Test pylibfdt if the libfdt Python module is available.
   1008     if [ -f ../pylibfdt/_libfdt.so ] || [ -f ../pylibfdt/_libfdt.cpython-3*.so ]; then
   1009         TESTSETS="$TESTSETS pylibfdt"
   1010     fi
   1011 fi
   1012 
   1013 # Make sure we don't have stale blobs lying around
   1014 rm -f *.test.dtb *.test.dts
   1015 
   1016 for set in $TESTSETS; do
   1017     case $set in
   1018 	"libfdt")
   1019 	    libfdt_tests
   1020 	    ;;
   1021 	"utilfdt")
   1022 	    utilfdt_tests
   1023 	    ;;
   1024 	"dtc")
   1025 	    dtc_tests
   1026 	    ;;
   1027 	"dtbs_equal")
   1028 	    dtbs_equal_tests
   1029 	    ;;
   1030 	"fdtget")
   1031 	    fdtget_tests
   1032 	    ;;
   1033 	"fdtput")
   1034 	    fdtput_tests
   1035 	    ;;
   1036 	"fdtdump")
   1037 	    fdtdump_tests
   1038 	    ;;
   1039 	"pylibfdt")
   1040 	    pylibfdt_tests
   1041 	    ;;
   1042         "fdtoverlay")
   1043 	    fdtoverlay_tests
   1044 	    ;;
   1045     esac
   1046 done
   1047 
   1048 echo "********** TEST SUMMARY"
   1049 echo "*     Total testcases:	$tot_tests"
   1050 echo "*                PASS:	$tot_pass"
   1051 echo "*                FAIL:	$tot_fail"
   1052 echo "*   Bad configuration:	$tot_config"
   1053 if [ -n "$VALGRIND" ]; then
   1054     echo "*    valgrind errors:	$tot_vg"
   1055 fi
   1056 echo "* Strange test result:	$tot_strange"
   1057 echo "**********"
   1058 
   1059 [ "$tot_tests" -eq "$tot_pass" ] || exit 1
   1060