# $FreeBSD: stable/11/usr.bin/mkimg/tests/mkimg.sh 272088 2014-09-24 22:58:10Z marcel $ setglobal mkimg_blksz_list = '"512 4096'" setglobal mkimg_format_list = '"qcow qcow2 raw vhd vhdf vmdk'" setglobal mkimg_geom_list = '"1x1 63x255'" setglobal mkimg_scheme_list = '"apm bsd ebr gpt mbr pc98 vtoc8'" proc bootcode { match $1 { with bsd|pc98 echo 8192 with gpt|mbr echo 512 with * echo 0 } return 0 } proc mkcontents { local byte count name setglobal byte = $1 setglobal count = $2 setglobal name = "_tmp-$byte-$count.bin" jot -b $byte $shExpr('$count/2') > $name echo $name return 0 } proc makeimage { local blksz bootarg bootsz format geom nhds nsecs partarg pfx scheme setglobal format = $1 setglobal scheme = $2 setglobal blksz = $3 setglobal geom = $4 setglobal pfx = $5 shift 5 setglobal nsecs = $(geom%x*) setglobal nhds = $(geom#*x) setglobal bootsz = $[bootcode $scheme] if test $bootsz -gt 0 { setglobal bootarg = ""-b $[mkcontents B $bootsz]"" } else { setglobal bootarg = ''"" } setglobal partarg = ''"" for P in [$ifsjoin(Argv)] { setglobal partarg = ""$partarg -p $P"" } if test -z $partarg { local swap ufs setglobal swap = '"-p freebsd-swap::128K'" setglobal ufs = ""-p freebsd-ufs:=$[mkcontents P 4194304]"" setglobal partarg = ""$ufs $swap"" } setglobal imagename = "$pfx-$geom-$blksz-$scheme.$format" mkimg -y -f $format -o $imagename -s $scheme -P $blksz -H $nhds -T $nsecs \ $bootarg $partarg echo $imagename return 0 } proc mkimg_rebase { local baseline image result tmpfile update setglobal image = $1 setglobal result = $2 setglobal baseline = "$image.gz.uu" setglobal update = 'yes' if test -f $baseline { setglobal tmpfile = '_tmp-baseline' uudecode -p $baseline | gunzip -c > $tmpfile if cmp -s $tmpfile $result { setglobal update = 'no' } } if test $update = yes { # Prevent keyword expansion when writing the keyword. shell {echo -n '# $'; echo -n FreeBSD; echo '$'} > $baseline gzip -c $result | uuencode $image.gz >> $baseline } rm $image $result _tmp-* return 0 } proc mkimg_test { local blksz format geom scheme setglobal geom = $1 setglobal blksz = $2 setglobal scheme = $3 setglobal format = $4 match $scheme { with ebr|mbr|pc98 setglobal bsd = $[makeimage raw bsd $blksz $geom _tmp] setglobal partinfo = ""freebsd:=$bsd"" with * setglobal partinfo = ''"" } setglobal image = $[makeimage $format $scheme $blksz $geom img $partinfo] setglobal result = "$image.out" hexdump -C $image > $result if test "x$mkimg_update_baseline" = "xyes" { mkimg_rebase $image $result } else { setglobal baseline = "$[atf_get_srcdir]/$image" atf_check -s exit:0 cmp -s $baseline $result } return 0 } atf_test_case rebase proc rebase_body { local nm setglobal mkimg_update_baseline = 'yes' for nm in [$mkimg_tests] { $(nm)_body } return 0 } proc atf_init_test_cases { local B F G S nm for G in [$mkimg_geom_list] { for B in [$mkimg_blksz_list] { for S in [$mkimg_scheme_list] { for F in [$mkimg_format_list] { setglobal nm = ""$(S)_$(G)_$(B)_$(F)"" atf_test_case $nm eval "$(nm)_body() { mkimg_test $G $B $S $F; }" setglobal mkimg_tests = ""$(mkimg_tests) $(nm)"" atf_add_test_case $nm } } } } # XXX hack to make updating the baseline easier if test $(__RUNNING_INSIDE_ATF_RUN) != "internal-yes-value" { atf_add_test_case rebase } }