blob: 76abcebec65c4bd8aa80c445acd59c3d92abe732 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
|
# $FreeBSD$
mkimg_blksz_list="512 4096"
mkimg_format_list="qcow qcow2 raw vhd vhdf vmdk"
mkimg_geom_list="1x1 63x255"
mkimg_scheme_list="apm bsd ebr gpt mbr vtoc8"
bootcode()
{
case $1 in
bsd) echo 8192 ;;
gpt|mbr) echo 512 ;;
*) echo 0 ;;
esac
return 0
}
mkcontents()
{
local byte count name
byte=$1
count=$2
name=_tmp-$byte-$count.bin
jot -b $byte $(($count/2)) > $name
echo $name
return 0
}
makeimage()
{
local blksz bootarg bootsz format geom nhds nsecs partarg pfx scheme
format=$1
scheme=$2
blksz=$3
geom=$4
pfx=$5
shift 5
nsecs=${geom%x*}
nhds=${geom#*x}
bootsz=`bootcode $scheme`
if test $bootsz -gt 0; then
bootarg="-b `mkcontents B $bootsz`"
else
bootarg=""
fi
partarg=""
for P in $*; do
partarg="$partarg -p $P"
done
if test -z "$partarg"; then
local swap ufs
swap="-p freebsd-swap::128K"
ufs="-p freebsd-ufs:=`mkcontents P 4194304`"
partarg="$ufs $swap"
fi
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
}
mkimg_rebase()
{
local baseline image result tmpfile update
image=$1
result=$2
baseline=$image.gz.uu
update=yes
if test -f $baseline; then
tmpfile=_tmp-baseline
uudecode -p $baseline | gunzip -c > $tmpfile
if cmp -s $tmpfile $result; then
update=no
fi
fi
if test $update = yes; then
# Prevent keyword expansion when writing the keyword.
(echo -n '# $'; echo -n FreeBSD; echo '$') > $baseline
gzip -c $result | uuencode $image.gz >> $baseline
fi
rm $image $result _tmp-*
return 0
}
mkimg_test()
{
local blksz format geom scheme
geom=$1
blksz=$2
scheme=$3
format=$4
case $scheme in
ebr|mbr)
bsd=`makeimage raw bsd $blksz $geom _tmp`
partinfo="freebsd:=$bsd"
;;
*)
partinfo=""
;;
esac
image=`makeimage $format $scheme $blksz $geom img $partinfo`
result=$image.out
hexdump -C $image > $result
if test "x$mkimg_update_baseline" = "xyes"; then
mkimg_rebase $image $result
else
baseline=`atf_get_srcdir`/$image
atf_check -s exit:0 cmp -s $baseline $result
fi
return 0
}
atf_test_case rebase
rebase_body()
{
local nm
mkimg_update_baseline=yes
for nm in $mkimg_tests; do
${nm}_body
done
return 0
}
atf_init_test_cases()
{
local B F G S nm
for G in $mkimg_geom_list; do
for B in $mkimg_blksz_list; do
for S in $mkimg_scheme_list; do
for F in $mkimg_format_list; do
nm="${S}_${G}_${B}_${F}"
atf_test_case $nm
eval "${nm}_body() { mkimg_test $G $B $S $F; }"
mkimg_tests="${mkimg_tests} ${nm}"
atf_add_test_case $nm
done
done
done
done
# XXX hack to make updating the baseline easier
if test "${__RUNNING_INSIDE_ATF_RUN}" != "internal-yes-value"; then
atf_add_test_case rebase
fi
}
|