1#! /bin/sh 2 3. ./tests.sh 4 5if [ -z "$CC" ]; then 6 CC=gcc 7fi 8 9export QUIET_TEST=1 10STOP_ON_FAIL=0 11 12export VALGRIND= 13VGCODE=126 14 15tot_tests=0 16tot_pass=0 17tot_fail=0 18tot_config=0 19tot_vg=0 20tot_strange=0 21 22base_run_test() { 23 tot_tests=$((tot_tests + 1)) 24 if VALGRIND="$VALGRIND" "$@"; then 25 tot_pass=$((tot_pass + 1)) 26 else 27 ret="$?" 28 if [ "$STOP_ON_FAIL" -eq 1 ]; then 29 exit 1 30 fi 31 if [ "$ret" -eq 1 ]; then 32 tot_config=$((tot_config + 1)) 33 elif [ "$ret" -eq 2 ]; then 34 tot_fail=$((tot_fail + 1)) 35 elif [ "$ret" -eq $VGCODE ]; then 36 tot_vg=$((tot_vg + 1)) 37 else 38 tot_strange=$((tot_strange + 1)) 39 fi 40 fi 41} 42 43shorten_echo () { 44 limit=32 45 printf "$1" 46 shift 47 for x; do 48 if [ ${#x} -le $limit ]; then 49 printf " $x" 50 else 51 short=$(echo "$x" | head -c$limit) 52 printf " \"$short\"...<${#x} bytes>" 53 fi 54 done 55} 56 57run_test () { 58 printf "$*: " 59 if [ -n "$VALGRIND" -a -f $1.supp ]; then 60 VGSUPP="--suppressions=$1.supp" 61 fi 62 base_run_test $VALGRIND $VGSUPP "./$@" 63} 64 65run_sh_test () { 66 printf "$*: " 67 base_run_test sh "$@" 68} 69 70wrap_test () { 71 ( 72 if verbose_run "$@"; then 73 PASS 74 else 75 ret="$?" 76 if [ "$ret" -gt 127 ]; then 77 signame=$(kill -l $((ret - 128))) 78 FAIL "Killed by SIG$signame" 79 else 80 FAIL "Returned error code $ret" 81 fi 82 fi 83 ) 84} 85 86run_wrap_test () { 87 shorten_echo "$@: " 88 base_run_test wrap_test "$@" 89} 90 91wrap_error () { 92 ( 93 if verbose_run "$@"; then 94 FAIL "Expected non-zero return code" 95 else 96 ret="$?" 97 if [ "$ret" -gt 127 ]; then 98 signame=$(kill -l $((ret - 128))) 99 FAIL "Killed by SIG$signame" 100 else 101 PASS 102 fi 103 fi 104 ) 105} 106 107run_wrap_error_test () { 108 shorten_echo "$@" 109 printf " {!= 0}: " 110 base_run_test wrap_error "$@" 111} 112 113run_dtc_test () { 114 printf "dtc $*: " 115 base_run_test wrap_test $VALGRIND $DTC "$@" 116} 117 118asm_to_so () { 119 $CC -shared -o $1.test.so data.S $1.test.s 120} 121 122asm_to_so_test () { 123 run_wrap_test asm_to_so "$@" 124} 125 126run_fdtget_test () { 127 expect="$1" 128 shift 129 printf "fdtget-runtest.sh %s $*: " "$(echo $expect)" 130 base_run_test sh fdtget-runtest.sh "$expect" "$@" 131} 132 133run_fdtput_test () { 134 expect="$1" 135 shift 136 shorten_echo fdtput-runtest.sh "$expect" "$@" 137 printf ": " 138 base_run_test sh fdtput-runtest.sh "$expect" "$@" 139} 140 141run_fdtdump_test() { 142 file="$1" 143 shorten_echo fdtdump-runtest.sh "$file" 144 printf ": " 145 base_run_test sh fdtdump-runtest.sh "$file" 146} 147 148tree1_tests () { 149 TREE=$1 150 151 # Read-only tests 152 run_test get_mem_rsv $TREE 153 run_test root_node $TREE 154 run_test find_property $TREE 155 run_test subnode_offset $TREE 156 run_test path_offset $TREE 157 run_test get_name $TREE 158 run_test getprop $TREE 159 run_test get_phandle $TREE 160 run_test get_path $TREE 161 run_test supernode_atdepth_offset $TREE 162 run_test parent_offset $TREE 163 run_test node_offset_by_prop_value $TREE 164 run_test node_offset_by_phandle $TREE 165 run_test node_check_compatible $TREE 166 run_test node_offset_by_compatible $TREE 167 run_test notfound $TREE 168 169 # Write-in-place tests 170 run_test setprop_inplace $TREE 171 run_test nop_property $TREE 172 run_test nop_node $TREE 173} 174 175tree1_tests_rw () { 176 TREE=$1 177 178 # Read-write tests 179 run_test set_name $TREE 180 run_test setprop $TREE 181 run_test del_property $TREE 182 run_test del_node $TREE 183} 184 185check_tests () { 186 tree="$1" 187 shift 188 run_sh_test dtc-checkfails.sh "$@" -- -I dts -O dtb $tree 189 run_dtc_test -I dts -O dtb -o $tree.test.dtb -f $tree 190 run_sh_test dtc-checkfails.sh "$@" -- -I dtb -O dtb $tree.test.dtb 191} 192 193ALL_LAYOUTS="mts mst tms tsm smt stm" 194 195libfdt_tests () { 196 tree1_tests test_tree1.dtb 197 198 run_dtc_test -I dts -O dtb -o addresses.test.dtb addresses.dts 199 run_test addr_size_cells addresses.test.dtb 200 201 run_dtc_test -I dts -O dtb -o stringlist.test.dtb stringlist.dts 202 run_test stringlist stringlist.test.dtb 203 204 # Sequential write tests 205 run_test sw_tree1 206 tree1_tests sw_tree1.test.dtb 207 tree1_tests unfinished_tree1.test.dtb 208 run_test dtbs_equal_ordered test_tree1.dtb sw_tree1.test.dtb 209 210 # Resizing tests 211 for mode in resize realloc; do 212 run_test sw_tree1 $mode 213 tree1_tests sw_tree1.test.dtb 214 tree1_tests unfinished_tree1.test.dtb 215 run_test dtbs_equal_ordered test_tree1.dtb sw_tree1.test.dtb 216 done 217 218 # fdt_move tests 219 for tree in test_tree1.dtb sw_tree1.test.dtb unfinished_tree1.test.dtb; do 220 rm -f moved.$tree shunted.$tree deshunted.$tree 221 run_test move_and_save $tree 222 run_test dtbs_equal_ordered $tree moved.$tree 223 run_test dtbs_equal_ordered $tree shunted.$tree 224 run_test dtbs_equal_ordered $tree deshunted.$tree 225 done 226 227 # v16 and alternate layout tests 228 for tree in test_tree1.dtb; do 229 for version in 17 16; do 230 for layout in $ALL_LAYOUTS; do 231 run_test mangle-layout $tree $version $layout 232 tree1_tests v$version.$layout.$tree 233 run_test dtbs_equal_ordered $tree v$version.$layout.$tree 234 done 235 done 236 done 237 238 # Read-write tests 239 for basetree in test_tree1.dtb; do 240 for version in 17 16; do 241 for layout in $ALL_LAYOUTS; do 242 tree=v$version.$layout.$basetree 243 rm -f opened.$tree repacked.$tree 244 run_test open_pack $tree 245 tree1_tests opened.$tree 246 tree1_tests repacked.$tree 247 248 tree1_tests_rw $tree 249 tree1_tests_rw opened.$tree 250 tree1_tests_rw repacked.$tree 251 done 252 done 253 done 254 run_test rw_tree1 255 tree1_tests rw_tree1.test.dtb 256 tree1_tests_rw rw_tree1.test.dtb 257 run_test appendprop1 258 run_test appendprop2 appendprop1.test.dtb 259 run_dtc_test -I dts -O dtb -o appendprop.test.dtb appendprop.dts 260 run_test dtbs_equal_ordered appendprop2.test.dtb appendprop.test.dtb 261 262 for basetree in test_tree1.dtb sw_tree1.test.dtb rw_tree1.test.dtb; do 263 run_test nopulate $basetree 264 run_test dtbs_equal_ordered $basetree noppy.$basetree 265 tree1_tests noppy.$basetree 266 tree1_tests_rw noppy.$basetree 267 done 268 269 run_dtc_test -I dts -O dtb -o subnode_iterate.dtb subnode_iterate.dts 270 run_test subnode_iterate subnode_iterate.dtb 271 272 # Tests for behaviour on various sorts of corrupted trees 273 run_test truncated_property 274 275 # Check aliases support in fdt_path_offset 276 run_dtc_test -I dts -O dtb -o aliases.dtb aliases.dts 277 run_test get_alias aliases.dtb 278 run_test path_offset_aliases aliases.dtb 279 280 # Specific bug tests 281 run_test add_subnode_with_nops 282 run_dtc_test -I dts -O dts -o sourceoutput.test.dts sourceoutput.dts 283 run_dtc_test -I dts -O dtb -o sourceoutput.test.dtb sourceoutput.dts 284 run_dtc_test -I dts -O dtb -o sourceoutput.test.dts.test.dtb sourceoutput.test.dts 285 run_test dtbs_equal_ordered sourceoutput.test.dtb sourceoutput.test.dts.test.dtb 286 287 run_dtc_test -I dts -O dtb -o embedded_nul.test.dtb embedded_nul.dts 288 run_dtc_test -I dts -O dtb -o embedded_nul_equiv.test.dtb embedded_nul_equiv.dts 289 run_test dtbs_equal_ordered embedded_nul.test.dtb embedded_nul_equiv.test.dtb 290 291 run_dtc_test -I dts -O dtb bad-size-cells.dts 292} 293 294dtc_tests () { 295 run_dtc_test -I dts -O dtb -o dtc_tree1.test.dtb test_tree1.dts 296 tree1_tests dtc_tree1.test.dtb 297 tree1_tests_rw dtc_tree1.test.dtb 298 run_test dtbs_equal_ordered dtc_tree1.test.dtb test_tree1.dtb 299 300 run_dtc_test -I dts -O dtb -o dtc_escapes.test.dtb propname_escapes.dts 301 run_test propname_escapes dtc_escapes.test.dtb 302 303 run_dtc_test -I dts -O dtb -o line_directives.test.dtb line_directives.dts 304 305 run_dtc_test -I dts -O dtb -o dtc_escapes.test.dtb escapes.dts 306 run_test string_escapes dtc_escapes.test.dtb 307 308 run_dtc_test -I dts -O dtb -o dtc_char_literal.test.dtb char_literal.dts 309 run_test char_literal dtc_char_literal.test.dtb 310 311 run_dtc_test -I dts -O dtb -o dtc_sized_cells.test.dtb sized_cells.dts 312 run_test sized_cells dtc_sized_cells.test.dtb 313 314 run_dtc_test -I dts -O dtb -o dtc_extra-terminating-null.test.dtb extra-terminating-null.dts 315 run_test extra-terminating-null dtc_extra-terminating-null.test.dtb 316 317 run_dtc_test -I dts -O dtb -o dtc_references.test.dtb references.dts 318 run_test references dtc_references.test.dtb 319 320 run_dtc_test -I dts -O dtb -o dtc_path-references.test.dtb path-references.dts 321 run_test path-references dtc_path-references.test.dtb 322 323 run_test phandle_format dtc_references.test.dtb both 324 for f in legacy epapr both; do 325 run_dtc_test -I dts -O dtb -H $f -o dtc_references.test.$f.dtb references.dts 326 run_test phandle_format dtc_references.test.$f.dtb $f 327 done 328 329 run_dtc_test -I dts -O dtb -o multilabel.test.dtb multilabel.dts 330 run_test references multilabel.test.dtb 331 332 run_dtc_test -I dts -O dtb -o label_repeated.test.dtb label_repeated.dts 333 334 run_dtc_test -I dts -O dtb -o dtc_comments.test.dtb comments.dts 335 run_dtc_test -I dts -O dtb -o dtc_comments-cmp.test.dtb comments-cmp.dts 336 run_test dtbs_equal_ordered dtc_comments.test.dtb dtc_comments-cmp.test.dtb 337 338 # Check /include/ directive 339 run_dtc_test -I dts -O dtb -o includes.test.dtb include0.dts 340 run_test dtbs_equal_ordered includes.test.dtb test_tree1.dtb 341 342 # Check /incbin/ directive 343 run_dtc_test -I dts -O dtb -o incbin.test.dtb incbin.dts 344 run_test incbin incbin.test.dtb 345 346 # Check boot_cpuid_phys handling 347 run_dtc_test -I dts -O dtb -o boot_cpuid.test.dtb boot-cpuid.dts 348 run_test boot-cpuid boot_cpuid.test.dtb 16 349 350 run_dtc_test -I dts -O dtb -b 17 -o boot_cpuid_17.test.dtb boot-cpuid.dts 351 run_test boot-cpuid boot_cpuid_17.test.dtb 17 352 353 run_dtc_test -I dtb -O dtb -o preserve_boot_cpuid.test.dtb boot_cpuid.test.dtb 354 run_test boot-cpuid preserve_boot_cpuid.test.dtb 16 355 run_test dtbs_equal_ordered preserve_boot_cpuid.test.dtb boot_cpuid.test.dtb 356 357 run_dtc_test -I dtb -O dtb -o preserve_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb 358 run_test boot-cpuid preserve_boot_cpuid_17.test.dtb 17 359 run_test dtbs_equal_ordered preserve_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb 360 361 run_dtc_test -I dtb -O dtb -b17 -o override17_boot_cpuid.test.dtb boot_cpuid.test.dtb 362 run_test boot-cpuid override17_boot_cpuid.test.dtb 17 363 364 run_dtc_test -I dtb -O dtb -b0 -o override0_boot_cpuid_17.test.dtb boot_cpuid_17.test.dtb 365 run_test boot-cpuid override0_boot_cpuid_17.test.dtb 0 366 367 368 # Check -Oasm mode 369 for tree in test_tree1.dts escapes.dts references.dts path-references.dts \ 370 comments.dts aliases.dts include0.dts incbin.dts \ 371 value-labels.dts ; do 372 run_dtc_test -I dts -O asm -o oasm_$tree.test.s $tree 373 asm_to_so_test oasm_$tree 374 run_dtc_test -I dts -O dtb -o $tree.test.dtb $tree 375 run_test asm_tree_dump ./oasm_$tree.test.so oasm_$tree.test.dtb 376 run_wrap_test cmp oasm_$tree.test.dtb $tree.test.dtb 377 done 378 379 run_test value-labels ./oasm_value-labels.dts.test.so 380 381 # Check -Odts mode preserve all dtb information 382 for tree in test_tree1.dtb dtc_tree1.test.dtb dtc_escapes.test.dtb \ 383 dtc_extra-terminating-null.test.dtb dtc_references.test.dtb; do 384 run_dtc_test -I dtb -O dts -o odts_$tree.test.dts $tree 385 run_dtc_test -I dts -O dtb -o odts_$tree.test.dtb odts_$tree.test.dts 386 run_test dtbs_equal_ordered $tree odts_$tree.test.dtb 387 done 388 389 # Check version conversions 390 for tree in test_tree1.dtb ; do 391 for aver in 1 2 3 16 17; do 392 atree="ov${aver}_$tree.test.dtb" 393 run_dtc_test -I dtb -O dtb -V$aver -o $atree $tree 394 for bver in 16 17; do 395 btree="ov${bver}_$atree" 396 run_dtc_test -I dtb -O dtb -V$bver -o $btree $atree 397 run_test dtbs_equal_ordered $btree $tree 398 done 399 done 400 done 401 402 # Check merge/overlay functionality 403 run_dtc_test -I dts -O dtb -o dtc_tree1_merge.test.dtb test_tree1_merge.dts 404 tree1_tests dtc_tree1_merge.test.dtb test_tree1.dtb 405 run_dtc_test -I dts -O dtb -o dtc_tree1_merge_labelled.test.dtb test_tree1_merge_labelled.dts 406 tree1_tests dtc_tree1_merge_labelled.test.dtb test_tree1.dtb 407 run_dtc_test -I dts -O dtb -o dtc_tree1_label_noderef.test.dtb test_tree1_label_noderef.dts 408 run_test dtbs_equal_unordered dtc_tree1_label_noderef.test.dtb test_tree1.dtb 409 run_dtc_test -I dts -O dtb -o multilabel_merge.test.dtb multilabel_merge.dts 410 run_test references multilabel.test.dtb 411 run_test dtbs_equal_ordered multilabel.test.dtb multilabel_merge.test.dtb 412 run_dtc_test -I dts -O dtb -o dtc_tree1_merge_path.test.dtb test_tree1_merge_path.dts 413 tree1_tests dtc_tree1_merge_path.test.dtb test_tree1.dtb 414 415 # Check prop/node delete functionality 416 run_dtc_test -I dts -O dtb -o dtc_tree1_delete.test.dtb test_tree1_delete.dts 417 tree1_tests dtc_tree1_delete.test.dtb 418 419 run_dtc_test -I dts -O dts -o delete_reinstate_multilabel.dts.test.dts delete_reinstate_multilabel.dts 420 run_wrap_test cmp delete_reinstate_multilabel.dts.test.dts delete_reinstate_multilabel_ref.dts 421 422 # Check some checks 423 check_tests dup-nodename.dts duplicate_node_names 424 check_tests dup-propname.dts duplicate_property_names 425 check_tests dup-phandle.dts explicit_phandles 426 check_tests zero-phandle.dts explicit_phandles 427 check_tests minusone-phandle.dts explicit_phandles 428 run_sh_test dtc-checkfails.sh phandle_references -- -I dts -O dtb nonexist-node-ref.dts 429 run_sh_test dtc-checkfails.sh phandle_references -- -I dts -O dtb nonexist-label-ref.dts 430 run_sh_test dtc-fatal.sh -I dts -O dtb nonexist-node-ref2.dts 431 check_tests bad-name-property.dts name_properties 432 433 check_tests bad-ncells.dts address_cells_is_cell size_cells_is_cell interrupt_cells_is_cell 434 check_tests bad-string-props.dts device_type_is_string model_is_string status_is_string 435 check_tests bad-reg-ranges.dts reg_format ranges_format 436 check_tests bad-empty-ranges.dts ranges_format 437 check_tests reg-ranges-root.dts reg_format ranges_format 438 check_tests default-addr-size.dts avoid_default_addr_size 439 check_tests obsolete-chosen-interrupt-controller.dts obsolete_chosen_interrupt_controller 440 run_sh_test dtc-checkfails.sh node_name_chars -- -I dtb -O dtb bad_node_char.dtb 441 run_sh_test dtc-checkfails.sh node_name_format -- -I dtb -O dtb bad_node_format.dtb 442 run_sh_test dtc-checkfails.sh prop_name_chars -- -I dtb -O dtb bad_prop_char.dtb 443 444 run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label1.dts 445 run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label2.dts 446 run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label3.dts 447 run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label4.dts 448 run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label5.dts 449 run_sh_test dtc-checkfails.sh duplicate_label -- -I dts -O dtb reuse-label6.dts 450 451 # Check warning options 452 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 453 run_sh_test dtc-fails.sh -n test-warn-output.test.dtb -I dts -O dtb bad-ncells.dts 454 run_sh_test dtc-fails.sh test-error-output.test.dtb -I dts -O dtb bad-ncells.dts -Esize_cells_is_cell 455 run_sh_test dtc-checkfails.sh always_fail -- -Walways_fail -I dts -O dtb test_tree1.dts 456 run_sh_test dtc-checkfails.sh -n always_fail -- -Walways_fail -Wno_always_fail -I dts -O dtb test_tree1.dts 457 run_sh_test dtc-fails.sh test-negation-1.test.dtb -Ealways_fail -I dts -O dtb test_tree1.dts 458 run_sh_test dtc-fails.sh -n test-negation-2.test.dtb -Ealways_fail -Eno_always_fail -I dts -O dtb test_tree1.dts 459 run_sh_test dtc-fails.sh test-negation-3.test.dtb -Ealways_fail -Wno_always_fail -I dts -O dtb test_tree1.dts 460 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 461 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 462 463 # Check for proper behaviour reading from stdin 464 run_dtc_test -I dts -O dtb -o stdin_dtc_tree1.test.dtb - < test_tree1.dts 465 run_wrap_test cmp stdin_dtc_tree1.test.dtb dtc_tree1.test.dtb 466 run_dtc_test -I dtb -O dts -o stdin_odts_test_tree1.dtb.test.dts - < test_tree1.dtb 467 run_wrap_test cmp stdin_odts_test_tree1.dtb.test.dts odts_test_tree1.dtb.test.dts 468 469 # Check integer expresisons 470 run_test integer-expressions -g integer-expressions.test.dts 471 run_dtc_test -I dts -O dtb -o integer-expressions.test.dtb integer-expressions.test.dts 472 run_test integer-expressions integer-expressions.test.dtb 473 474 # Check for graceful failure in some error conditions 475 run_sh_test dtc-fatal.sh -I dts -O dtb nosuchfile.dts 476 run_sh_test dtc-fatal.sh -I dtb -O dtb nosuchfile.dtb 477 run_sh_test dtc-fatal.sh -I fs -O dtb nosuchfile 478 479 # Dependencies 480 run_dtc_test -I dts -O dtb -o dependencies.test.dtb -d dependencies.test.d dependencies.dts 481 run_wrap_test cmp dependencies.test.d dependencies.cmp 482 483 # Search paths 484 run_wrap_error_test $DTC -I dts -O dtb -o search_paths.dtb search_paths.dts 485 run_dtc_test -i search_dir -I dts -O dtb -o search_paths.dtb \ 486 search_paths.dts 487 run_wrap_error_test $DTC -i search_dir_b -I dts -O dtb \ 488 -o search_paths_b.dtb search_paths_b.dts 489 run_dtc_test -i search_dir_b -i search_dir -I dts -O dtb \ 490 -o search_paths_b.dtb search_paths_b.dts 491 run_dtc_test -I dts -O dtb -o search_paths_subdir.dtb \ 492 search_dir_b/search_paths_subdir.dts 493} 494 495cmp_tests () { 496 basetree="$1" 497 shift 498 wrongtrees="$@" 499 500 run_test dtb_reverse $basetree 501 502 # First dtbs_equal_ordered 503 run_test dtbs_equal_ordered $basetree $basetree 504 run_test dtbs_equal_ordered -n $basetree $basetree.reversed.test.dtb 505 for tree in $wrongtrees; do 506 run_test dtbs_equal_ordered -n $basetree $tree 507 done 508 509 # now unordered 510 run_test dtbs_equal_unordered $basetree $basetree 511 run_test dtbs_equal_unordered $basetree $basetree.reversed.test.dtb 512 run_test dtbs_equal_unordered $basetree.reversed.test.dtb $basetree 513 for tree in $wrongtrees; do 514 run_test dtbs_equal_unordered -n $basetree $tree 515 done 516 517 # now dtc --sort 518 run_dtc_test -I dtb -O dtb -s -o $basetree.sorted.test.dtb $basetree 519 run_test dtbs_equal_unordered $basetree $basetree.sorted.test.dtb 520 run_dtc_test -I dtb -O dtb -s -o $basetree.reversed.sorted.test.dtb $basetree.reversed.test.dtb 521 run_test dtbs_equal_unordered $basetree.reversed.test.dtb $basetree.reversed.sorted.test.dtb 522 run_test dtbs_equal_ordered $basetree.sorted.test.dtb $basetree.reversed.sorted.test.dtb 523} 524 525dtbs_equal_tests () { 526 WRONG_TREE1="" 527 for x in 1 2 3 4 5 6 7 8 9; do 528 run_dtc_test -I dts -O dtb -o test_tree1_wrong$x.test.dtb test_tree1_wrong$x.dts 529 WRONG_TREE1="$WRONG_TREE1 test_tree1_wrong$x.test.dtb" 530 done 531 cmp_tests test_tree1.dtb $WRONG_TREE1 532} 533 534fdtget_tests () { 535 dts=label01.dts 536 dtb=$dts.fdtget.test.dtb 537 run_dtc_test -O dtb -o $dtb $dts 538 539 # run_fdtget_test <expected-result> [<flags>] <file> <node> <property> 540 run_fdtget_test "MyBoardName" $dtb / model 541 run_fdtget_test "MyBoardName MyBoardFamilyName" $dtb / compatible 542 run_fdtget_test "77 121 66 111 \ 54397 114 100 78 97 109 101 0 77 121 66 111 97 114 100 70 97 109 105 \ 544108 121 78 97 109 101 0" -t bu $dtb / compatible 545 run_fdtget_test "MyBoardName MyBoardFamilyName" -t s $dtb / compatible 546 run_fdtget_test 32768 $dtb /cpus/PowerPC,970@1 d-cache-size 547 run_fdtget_test 8000 -tx $dtb /cpus/PowerPC,970@1 d-cache-size 548 run_fdtget_test "61 62 63 0" -tbx $dtb /randomnode tricky1 549 run_fdtget_test "a b c d de ea ad be ef" -tbx $dtb /randomnode blob 550 551 # Here the property size is not a multiple of 4 bytes, so it should fail 552 run_wrap_error_test $DTGET -tlx $dtb /randomnode mixed 553 run_fdtget_test "6162 6300 1234 0 a 0 b 0 c" -thx $dtb /randomnode mixed 554 run_fdtget_test "61 62 63 0 12 34 0 0 0 a 0 0 0 b 0 0 0 c" \ 555 -thhx $dtb /randomnode mixed 556 run_wrap_error_test $DTGET -ts $dtb /randomnode doctor-who 557 558 # Test multiple arguments 559 run_fdtget_test "MyBoardName\nmemory" -ts $dtb / model /memory device_type 560 561 # Test defaults 562 run_wrap_error_test $DTGET -tx $dtb /randomnode doctor-who 563 run_fdtget_test "<the dead silence>" -tx \ 564 -d "<the dead silence>" $dtb /randomnode doctor-who 565 run_fdtget_test "<blink>" -tx -d "<blink>" $dtb /memory doctor-who 566} 567 568fdtput_tests () { 569 dts=label01.dts 570 dtb=$dts.fdtput.test.dtb 571 text=lorem.txt 572 573 # Allow just enough space for $text 574 run_dtc_test -O dtb -p $(stat -c %s $text) -o $dtb $dts 575 576 # run_fdtput_test <expected-result> <file> <node> <property> <flags> <value> 577 run_fdtput_test "a_model" $dtb / model -ts "a_model" 578 run_fdtput_test "board1 board2" $dtb / compatible -ts board1 board2 579 run_fdtput_test "board1 board2" $dtb / compatible -ts "board1 board2" 580 run_fdtput_test "32768" $dtb /cpus/PowerPC,970@1 d-cache-size "" "32768" 581 run_fdtput_test "8001" $dtb /cpus/PowerPC,970@1 d-cache-size -tx 0x8001 582 run_fdtput_test "2 3 12" $dtb /randomnode tricky1 -tbi "02 003 12" 583 run_fdtput_test "a b c ea ad be ef" $dtb /randomnode blob \ 584 -tbx "a b c ea ad be ef" 585 run_fdtput_test "a0b0c0d deeaae ef000000" $dtb /randomnode blob \ 586 -tx "a0b0c0d deeaae ef000000" 587 run_fdtput_test "$(cat $text)" $dtb /randomnode blob -ts "$(cat $text)" 588 589 # Test expansion of the blob when insufficient room for property 590 run_fdtput_test "$(cat $text $text)" $dtb /randomnode blob -ts "$(cat $text $text)" 591 592 # Start again with a fresh dtb 593 run_dtc_test -O dtb -p $(stat -c %s $text) -o $dtb $dts 594 595 # Node creation 596 run_wrap_error_test $DTPUT $dtb -c /baldrick sod 597 run_wrap_test $DTPUT $dtb -c /chosen/son /chosen/daughter 598 run_fdtput_test "eva" $dtb /chosen/daughter name "" -ts "eva" 599 run_fdtput_test "adam" $dtb /chosen/son name "" -ts "adam" 600 601 # Not allowed to create an existing node 602 run_wrap_error_test $DTPUT $dtb -c /chosen 603 run_wrap_error_test $DTPUT $dtb -c /chosen/son 604 605 # Automatic node creation 606 run_wrap_test $DTPUT $dtb -cp /blackadder/the-second/turnip \ 607 /blackadder/the-second/potato 608 run_fdtput_test 1000 $dtb /blackadder/the-second/turnip cost "" 1000 609 run_fdtput_test "fine wine" $dtb /blackadder/the-second/potato drink \ 610 "-ts" "fine wine" 611 run_wrap_test $DTPUT $dtb -p /you/are/drunk/sir/winston slurp -ts twice 612 613 # Test expansion of the blob when insufficent room for a new node 614 run_wrap_test $DTPUT $dtb -cp "$(cat $text $text)/longish" 615 616 # Allowed to create an existing node with -p 617 run_wrap_test $DTPUT $dtb -cp /chosen 618 run_wrap_test $DTPUT $dtb -cp /chosen/son 619 620 # Start again with a fresh dtb 621 run_dtc_test -O dtb -p $(stat -c %s $text) -o $dtb $dts 622 623 # Node delete 624 run_wrap_test $DTPUT $dtb -c /chosen/node1 /chosen/node2 /chosen/node3 625 run_fdtget_test "node3\nnode2\nnode1" $dtb -l /chosen 626 run_wrap_test $DTPUT $dtb -r /chosen/node1 /chosen/node2 627 run_fdtget_test "node3" $dtb -l /chosen 628 629 # Delete the non-existent node 630 run_wrap_error_test $DTPUT $dtb -r /non-existent/node 631 632 # Property delete 633 run_fdtput_test "eva" $dtb /chosen/ name "" -ts "eva" 634 run_fdtput_test "016" $dtb /chosen/ age "" -ts "016" 635 run_fdtget_test "age\nname\nbootargs\nlinux,platform" $dtb -p /chosen 636 run_wrap_test $DTPUT $dtb -d /chosen/ name age 637 run_fdtget_test "bootargs\nlinux,platform" $dtb -p /chosen 638 639 # Delete the non-existent property 640 run_wrap_error_test $DTPUT $dtb -d /chosen non-existent-prop 641 642 # TODO: Add tests for verbose mode? 643} 644 645utilfdt_tests () { 646 run_test utilfdt_test 647} 648 649fdtdump_tests () { 650 run_fdtdump_test fdtdump.dts 651} 652 653while getopts "vt:me" ARG ; do 654 case $ARG in 655 "v") 656 unset QUIET_TEST 657 ;; 658 "t") 659 TESTSETS=$OPTARG 660 ;; 661 "m") 662 VALGRIND="valgrind --tool=memcheck -q --error-exitcode=$VGCODE" 663 ;; 664 "e") 665 STOP_ON_FAIL=1 666 ;; 667 esac 668done 669 670if [ -z "$TESTSETS" ]; then 671 TESTSETS="libfdt utilfdt dtc dtbs_equal fdtget fdtput fdtdump" 672fi 673 674# Make sure we don't have stale blobs lying around 675rm -f *.test.dtb *.test.dts 676 677for set in $TESTSETS; do 678 case $set in 679 "libfdt") 680 libfdt_tests 681 ;; 682 "utilfdt") 683 utilfdt_tests 684 ;; 685 "dtc") 686 dtc_tests 687 ;; 688 "dtbs_equal") 689 dtbs_equal_tests 690 ;; 691 "fdtget") 692 fdtget_tests 693 ;; 694 "fdtput") 695 fdtput_tests 696 ;; 697 "fdtdump") 698 fdtdump_tests 699 ;; 700 esac 701done 702 703echo "********** TEST SUMMARY" 704echo "* Total testcases: $tot_tests" 705echo "* PASS: $tot_pass" 706echo "* FAIL: $tot_fail" 707echo "* Bad configuration: $tot_config" 708if [ -n "$VALGRIND" ]; then 709 echo "* valgrind errors: $tot_vg" 710fi 711echo "* Strange test result: $tot_strange" 712echo "**********" 713 714