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