1#! /bin/sh 2 3. ./testutils.sh 4 5if [ -z "$CC" ]; then 6 CC=gcc 7fi 8 9# stat differs between platforms 10if [ -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 19fi 20 21# Help things find the libfdt shared object 22export LD_LIBRARY_PATH=../libfdt 23 24export QUIET_TEST=1 25STOP_ON_FAIL=0 26 27export VALGRIND= 28VGCODE=126 29 30tot_tests=0 31tot_pass=0 32tot_fail=0 33tot_config=0 34tot_vg=0 35tot_strange=0 36 37base_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 58shorten_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 72run_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 80run_sh_test () { 81 printf "$*: " 82 base_run_test sh "$@" 83} 84 85wrap_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 104run_wrap_test () { 105 shorten_echo "$@: " 106 base_run_test wrap_test "$@" 107} 108 109wrap_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 125run_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 133check_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 146run_dtc_test () { 147 printf "dtc $*: " 148 base_run_test wrap_test $VALGRIND $DTC "$@" 149} 150 151asm_to_so () { 152 $CC -shared -o $1.test.so data.S $1.test.s 153} 154 155asm_to_so_test () { 156 run_wrap_test asm_to_so "$@" 157} 158 159run_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 166run_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 174run_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 181run_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 189BAD_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 199libfdt_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 241dtc_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 298tree1_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 326tree1_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 336check_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 344ALL_LAYOUTS="mts mst tms tsm smt stm" 345 346libfdt_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 490dtc_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 759cmp_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 789dtbs_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 798fdtget_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 \ 80797 114 100 78 97 109 101 0 77 121 66 111 97 114 100 70 97 109 105 \ 808108 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 832fdtput_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 909utilfdt_tests () { 910 run_test utilfdt_test 911} 912 913fdtdump_tests () { 914 run_fdtdump_test fdtdump.dts 915} 916 917fdtoverlay_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 966pylibfdt_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 987while 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 1002done 1003 1004if [ -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 1011fi 1012 1013# Make sure we don't have stale blobs lying around 1014rm -f *.test.dtb *.test.dts 1015 1016for 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 1046done 1047 1048echo "********** TEST SUMMARY" 1049echo "* Total testcases: $tot_tests" 1050echo "* PASS: $tot_pass" 1051echo "* FAIL: $tot_fail" 1052echo "* Bad configuration: $tot_config" 1053if [ -n "$VALGRIND" ]; then 1054 echo "* valgrind errors: $tot_vg" 1055fi 1056echo "* Strange test result: $tot_strange" 1057echo "**********" 1058 1059[ "$tot_tests" -eq "$tot_pass" ] || exit 1 1060