blob: 9e299e1e57aa40f88f373008293900b7ca4281ef [file] [log] [blame]
Guilherme Maciel Ferreirac5c0c792013-12-01 12:43:12 -07001#!/bin/bash
2#
3# Written by Guilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com>
4#
5# Sanity check for mkimage and dumpimage tools
6#
7# SPDX-License-Identifier: GPL-2.0+
8#
9# To run this:
10#
11# make O=sandbox sandbox_config
12# make O=sandbox
13# ./test/image/test-imagetools.sh
14
15BASEDIR=sandbox
16SRCDIR=sandbox/boot
17IMAGE_NAME="v1.0-test"
18IMAGE=linux.img
19DATAFILE0=vmlinuz
20DATAFILE1=initrd.img
21DATAFILE2=System.map
22DATAFILES="${DATAFILE0} ${DATAFILE1} ${DATAFILE2}"
23TEST_OUT=test_output
24MKIMAGE=${BASEDIR}/tools/mkimage
25DUMPIMAGE=${BASEDIR}/tools/dumpimage
26MKIMAGE_LIST=mkimage.list
27DUMPIMAGE_LIST=dumpimage.list
28
29# Remove all the files we created
30cleanup()
31{
32 local file
33
34 for file in ${DATAFILES}; do
35 rm -f ${file} ${SRCDIR}/${file}
36 done
37 rm -f ${IMAGE} ${DUMPIMAGE_LIST} ${MKIMAGE_LIST} ${TEST_OUT}
38 rmdir ${SRCDIR}
39}
40
41# Check that two files are the same
42assert_equal()
43{
44 if ! diff $1 $2; then
45 echo "Failed."
46 cleanup
47 exit 1
48 fi
49}
50
51# Create some test files
52create_files()
53{
54 local file
55
56 mkdir -p ${SRCDIR}
57 for file in ${DATAFILES}; do
58 head -c $RANDOM /dev/urandom >${SRCDIR}/${file}
59 done
60}
61
62# Run a command, echoing it first
63do_cmd()
64{
65 local cmd="$@"
66
67 echo "# ${cmd}"
68 ${cmd} 2>&1
69}
70
71# Run a command, redirecting output
72# Args:
73# redirect_file
74# command...
75do_cmd_redir()
76{
77 local redir="$1"
78 shift
79 local cmd="$@"
80
81 echo "# ${cmd}"
82 ${cmd} >${redir}
83}
84
85# Write files into an image
86create_image()
87{
88 local files="${SRCDIR}/${DATAFILE0}:${SRCDIR}/${DATAFILE1}"
89 files+=":${SRCDIR}/${DATAFILE2}"
90
91 echo -e "\nBuilding image..."
92 do_cmd ${MKIMAGE} -A x86 -O linux -T multi -n \"${IMAGE_NAME}\" \
93 -d ${files} ${IMAGE}
94 echo "done."
95}
96
97# Extract files from an image
98extract_image()
99{
100 echo -e "\nExtracting image contents..."
101 do_cmd ${DUMPIMAGE} -i ${IMAGE} -p 0 ${DATAFILE0}
102 do_cmd ${DUMPIMAGE} -i ${IMAGE} -p 1 ${DATAFILE1}
103 do_cmd ${DUMPIMAGE} -i ${IMAGE} -p 2 ${DATAFILE2}
104 do_cmd ${DUMPIMAGE} -i ${IMAGE} -p 2 ${DATAFILE2} -o ${TEST_OUT}
105 echo "done."
106}
107
108# List the contents of a file
109list_image()
110{
111 echo -e "\nListing image contents..."
112 do_cmd_redir ${MKIMAGE_LIST} ${MKIMAGE} -l ${IMAGE}
113 do_cmd_redir ${DUMPIMAGE_LIST} ${DUMPIMAGE} -l ${IMAGE}
114 echo "done."
115}
116
117main()
118{
119 local file
120
121 create_files
122
123 # Compress and extract multifile images, compare the result
124 create_image
125 extract_image
126 for file in ${DATAFILES}; do
127 assert_equal ${file} ${SRCDIR}/${file}
128 done
129 assert_equal ${TEST_OUT} ${DATAFILE2}
130
131 # List contents and compares output fro tools
132 list_image
133 assert_equal ${DUMPIMAGE_LIST} ${MKIMAGE_LIST}
134
135 # Remove files created
136 cleanup
137
138 echo "Tests passed."
139}
140
141main