1271911Smarcel# $FreeBSD: releng/11.0/usr.bin/mkimg/tests/mkimg.sh 272088 2014-09-24 22:58:10Z marcel $ 2271911Smarcel 3271911Smarcelmkimg_blksz_list="512 4096" 4272088Smarcelmkimg_format_list="qcow qcow2 raw vhd vhdf vmdk" 5271911Smarcelmkimg_geom_list="1x1 63x255" 6271911Smarcelmkimg_scheme_list="apm bsd ebr gpt mbr pc98 vtoc8" 7271911Smarcel 8271911Smarcelbootcode() 9271911Smarcel{ 10271911Smarcel case $1 in 11271911Smarcel bsd|pc98) echo 8192 ;; 12271911Smarcel gpt|mbr) echo 512 ;; 13271911Smarcel *) echo 0 ;; 14271911Smarcel esac 15271911Smarcel return 0 16271911Smarcel} 17271911Smarcel 18271911Smarcelmkcontents() 19271911Smarcel{ 20271911Smarcel local byte count name 21271911Smarcel 22271911Smarcel byte=$1 23271911Smarcel count=$2 24271911Smarcel 25271911Smarcel name=_tmp-$byte-$count.bin 26271911Smarcel jot -b $byte $(($count/2)) > $name 27271911Smarcel echo $name 28271911Smarcel return 0 29271911Smarcel} 30271911Smarcel 31271911Smarcelmakeimage() 32271911Smarcel{ 33271911Smarcel local blksz bootarg bootsz format geom nhds nsecs partarg pfx scheme 34271911Smarcel 35271911Smarcel format=$1 36271911Smarcel scheme=$2 37271911Smarcel blksz=$3 38271911Smarcel geom=$4 39271911Smarcel pfx=$5 40271911Smarcel shift 5 41271911Smarcel 42271911Smarcel nsecs=${geom%x*} 43271911Smarcel nhds=${geom#*x} 44271911Smarcel 45271911Smarcel bootsz=`bootcode $scheme` 46271911Smarcel if test $bootsz -gt 0; then 47271911Smarcel bootarg="-b `mkcontents B $bootsz`" 48271911Smarcel else 49271911Smarcel bootarg="" 50271911Smarcel fi 51271911Smarcel 52271911Smarcel partarg="" 53271911Smarcel for P in $*; do 54271911Smarcel partarg="$partarg -p $P" 55271911Smarcel done 56271911Smarcel if test -z "$partarg"; then 57271911Smarcel local swap ufs 58271911Smarcel swap="-p freebsd-swap::128K" 59271911Smarcel ufs="-p freebsd-ufs:=`mkcontents P 4194304`" 60271911Smarcel partarg="$ufs $swap" 61271911Smarcel fi 62271911Smarcel 63271911Smarcel imagename=$pfx-$geom-$blksz-$scheme.$format 64271911Smarcel 65271911Smarcel mkimg -y -f $format -o $imagename -s $scheme -P $blksz -H $nhds -T $nsecs \ 66271911Smarcel $bootarg $partarg 67271911Smarcel echo $imagename 68271911Smarcel return 0 69271911Smarcel} 70271911Smarcel 71271979Smarcelmkimg_rebase() 72271979Smarcel{ 73271979Smarcel local baseline image result tmpfile update 74271979Smarcel 75271979Smarcel image=$1 76271979Smarcel result=$2 77271979Smarcel 78271979Smarcel baseline=$image.gz.uu 79271979Smarcel update=yes 80271979Smarcel 81271979Smarcel if test -f $baseline; then 82271979Smarcel tmpfile=_tmp-baseline 83271979Smarcel uudecode -p $baseline | gunzip -c > $tmpfile 84271979Smarcel if cmp -s $tmpfile $result; then 85271979Smarcel update=no 86271979Smarcel fi 87271979Smarcel fi 88271979Smarcel 89271979Smarcel if test $update = yes; then 90271979Smarcel # Prevent keyword expansion when writing the keyword. 91271979Smarcel (echo -n '# $'; echo -n FreeBSD; echo '$') > $baseline 92271979Smarcel gzip -c $result | uuencode $image.gz >> $baseline 93271979Smarcel fi 94271979Smarcel 95271979Smarcel rm $image $result _tmp-* 96271979Smarcel return 0 97271979Smarcel} 98271979Smarcel 99271911Smarcelmkimg_test() 100271911Smarcel{ 101271911Smarcel local blksz format geom scheme 102271911Smarcel 103271911Smarcel geom=$1 104271911Smarcel blksz=$2 105271911Smarcel scheme=$3 106271911Smarcel format=$4 107271911Smarcel 108271911Smarcel case $scheme in 109271911Smarcel ebr|mbr|pc98) 110271911Smarcel bsd=`makeimage raw bsd $blksz $geom _tmp` 111271911Smarcel partinfo="freebsd:=$bsd" 112271911Smarcel ;; 113271911Smarcel *) 114271911Smarcel partinfo="" 115271911Smarcel ;; 116271911Smarcel esac 117271911Smarcel image=`makeimage $format $scheme $blksz $geom img $partinfo` 118271911Smarcel result=$image.out 119271911Smarcel hexdump -C $image > $result 120271911Smarcel if test "x$mkimg_update_baseline" = "xyes"; then 121271979Smarcel mkimg_rebase $image $result 122271911Smarcel else 123271979Smarcel baseline=`atf_get_srcdir`/$image 124271911Smarcel atf_check -s exit:0 cmp -s $baseline $result 125271911Smarcel fi 126271911Smarcel return 0 127271911Smarcel} 128271911Smarcel 129271911Smarcelatf_test_case rebase 130271911Smarcelrebase_body() 131271911Smarcel{ 132271911Smarcel local nm 133271911Smarcel 134271911Smarcel mkimg_update_baseline=yes 135271911Smarcel for nm in $mkimg_tests; do 136271911Smarcel ${nm}_body 137271911Smarcel done 138271911Smarcel return 0 139271911Smarcel} 140271911Smarcel 141271911Smarcelatf_init_test_cases() 142271911Smarcel{ 143271981Smarcel local B F G S nm 144271911Smarcel 145271911Smarcel for G in $mkimg_geom_list; do 146271911Smarcel for B in $mkimg_blksz_list; do 147271911Smarcel for S in $mkimg_scheme_list; do 148271911Smarcel for F in $mkimg_format_list; do 149271981Smarcel nm="${S}_${G}_${B}_${F}" 150271911Smarcel atf_test_case $nm 151271911Smarcel eval "${nm}_body() { mkimg_test $G $B $S $F; }" 152271911Smarcel mkimg_tests="${mkimg_tests} ${nm}" 153271911Smarcel atf_add_test_case $nm 154271911Smarcel done 155271911Smarcel done 156271911Smarcel done 157271911Smarcel done 158271911Smarcel 159271911Smarcel # XXX hack to make updating the baseline easier 160271911Smarcel if test "${__RUNNING_INSIDE_ATF_RUN}" != "internal-yes-value"; then 161271911Smarcel atf_add_test_case rebase 162271911Smarcel fi 163271911Smarcel} 164271911Smarcel 165