16496d00fSGuilherme Maciel Ferreira#!/bin/bash
26496d00fSGuilherme Maciel Ferreira#
36496d00fSGuilherme Maciel Ferreira# Written by Guilherme Maciel Ferreira <guilherme.maciel.ferreira@gmail.com>
46496d00fSGuilherme Maciel Ferreira#
56496d00fSGuilherme Maciel Ferreira# Sanity check for mkimage and dumpimage tools
66496d00fSGuilherme Maciel Ferreira#
76496d00fSGuilherme Maciel Ferreira# SPDX-License-Identifier:	GPL-2.0+
86496d00fSGuilherme Maciel Ferreira#
96496d00fSGuilherme Maciel Ferreira# To run this:
106496d00fSGuilherme Maciel Ferreira#
116496d00fSGuilherme Maciel Ferreira# make O=sandbox sandbox_config
126496d00fSGuilherme Maciel Ferreira# make O=sandbox
136496d00fSGuilherme Maciel Ferreira# ./test/image/test-imagetools.sh
146496d00fSGuilherme Maciel Ferreira
156496d00fSGuilherme Maciel FerreiraBASEDIR=sandbox
16*f41f5b7cSGuilherme Maciel FerreiraSRCDIR=${BASEDIR}/boot
176496d00fSGuilherme Maciel FerreiraIMAGE_NAME="v1.0-test"
18*f41f5b7cSGuilherme Maciel FerreiraIMAGE_MULTI=linux.img
196496d00fSGuilherme Maciel FerreiraDATAFILE0=vmlinuz
206496d00fSGuilherme Maciel FerreiraDATAFILE1=initrd.img
216496d00fSGuilherme Maciel FerreiraDATAFILE2=System.map
226496d00fSGuilherme Maciel FerreiraDATAFILES="${DATAFILE0} ${DATAFILE1} ${DATAFILE2}"
236496d00fSGuilherme Maciel FerreiraTEST_OUT=test_output
246496d00fSGuilherme Maciel FerreiraMKIMAGE=${BASEDIR}/tools/mkimage
256496d00fSGuilherme Maciel FerreiraDUMPIMAGE=${BASEDIR}/tools/dumpimage
266496d00fSGuilherme Maciel FerreiraMKIMAGE_LIST=mkimage.list
276496d00fSGuilherme Maciel FerreiraDUMPIMAGE_LIST=dumpimage.list
286496d00fSGuilherme Maciel Ferreira
296496d00fSGuilherme Maciel Ferreira# Remove all the files we created
306496d00fSGuilherme Maciel Ferreiracleanup()
316496d00fSGuilherme Maciel Ferreira{
326496d00fSGuilherme Maciel Ferreira	local file
336496d00fSGuilherme Maciel Ferreira
346496d00fSGuilherme Maciel Ferreira	for file in ${DATAFILES}; do
356496d00fSGuilherme Maciel Ferreira		rm -f ${file} ${SRCDIR}/${file}
366496d00fSGuilherme Maciel Ferreira	done
37*f41f5b7cSGuilherme Maciel Ferreira	rm -f ${IMAGE_MULTI} ${DUMPIMAGE_LIST} ${MKIMAGE_LIST} ${TEST_OUT}
386496d00fSGuilherme Maciel Ferreira	rmdir ${SRCDIR}
396496d00fSGuilherme Maciel Ferreira}
406496d00fSGuilherme Maciel Ferreira
416496d00fSGuilherme Maciel Ferreira# Check that two files are the same
426496d00fSGuilherme Maciel Ferreiraassert_equal()
436496d00fSGuilherme Maciel Ferreira{
44*f41f5b7cSGuilherme Maciel Ferreira	if ! diff -u $1 $2; then
456496d00fSGuilherme Maciel Ferreira		echo "Failed."
466496d00fSGuilherme Maciel Ferreira		cleanup
476496d00fSGuilherme Maciel Ferreira		exit 1
486496d00fSGuilherme Maciel Ferreira	fi
496496d00fSGuilherme Maciel Ferreira}
506496d00fSGuilherme Maciel Ferreira
516496d00fSGuilherme Maciel Ferreira# Create some test files
526496d00fSGuilherme Maciel Ferreiracreate_files()
536496d00fSGuilherme Maciel Ferreira{
546496d00fSGuilherme Maciel Ferreira	local file
556496d00fSGuilherme Maciel Ferreira
566496d00fSGuilherme Maciel Ferreira	mkdir -p ${SRCDIR}
576496d00fSGuilherme Maciel Ferreira	for file in ${DATAFILES}; do
586496d00fSGuilherme Maciel Ferreira		head -c $RANDOM /dev/urandom >${SRCDIR}/${file}
596496d00fSGuilherme Maciel Ferreira	done
606496d00fSGuilherme Maciel Ferreira}
616496d00fSGuilherme Maciel Ferreira
626496d00fSGuilherme Maciel Ferreira# Run a command, echoing it first
636496d00fSGuilherme Maciel Ferreirado_cmd()
646496d00fSGuilherme Maciel Ferreira{
656496d00fSGuilherme Maciel Ferreira	local cmd="$@"
666496d00fSGuilherme Maciel Ferreira
676496d00fSGuilherme Maciel Ferreira	echo "# ${cmd}"
686496d00fSGuilherme Maciel Ferreira	${cmd} 2>&1
696496d00fSGuilherme Maciel Ferreira}
706496d00fSGuilherme Maciel Ferreira
716496d00fSGuilherme Maciel Ferreira# Run a command, redirecting output
726496d00fSGuilherme Maciel Ferreira# Args:
736496d00fSGuilherme Maciel Ferreira#    redirect_file
746496d00fSGuilherme Maciel Ferreira#    command...
756496d00fSGuilherme Maciel Ferreirado_cmd_redir()
766496d00fSGuilherme Maciel Ferreira{
776496d00fSGuilherme Maciel Ferreira	local redir="$1"
786496d00fSGuilherme Maciel Ferreira	shift
796496d00fSGuilherme Maciel Ferreira	local cmd="$@"
806496d00fSGuilherme Maciel Ferreira
816496d00fSGuilherme Maciel Ferreira	echo "# ${cmd}"
826496d00fSGuilherme Maciel Ferreira	${cmd} >${redir}
836496d00fSGuilherme Maciel Ferreira}
846496d00fSGuilherme Maciel Ferreira
85*f41f5b7cSGuilherme Maciel Ferreira# Write files into an multi-file image
86*f41f5b7cSGuilherme Maciel Ferreiracreate_multi_image()
876496d00fSGuilherme Maciel Ferreira{
886496d00fSGuilherme Maciel Ferreira	local files="${SRCDIR}/${DATAFILE0}:${SRCDIR}/${DATAFILE1}"
896496d00fSGuilherme Maciel Ferreira	files+=":${SRCDIR}/${DATAFILE2}"
906496d00fSGuilherme Maciel Ferreira
91*f41f5b7cSGuilherme Maciel Ferreira	echo -e "\nBuilding multi-file image..."
926496d00fSGuilherme Maciel Ferreira	do_cmd ${MKIMAGE} -A x86 -O linux -T multi -n \"${IMAGE_NAME}\" \
93*f41f5b7cSGuilherme Maciel Ferreira		-d ${files} ${IMAGE_MULTI}
946496d00fSGuilherme Maciel Ferreira	echo "done."
956496d00fSGuilherme Maciel Ferreira}
966496d00fSGuilherme Maciel Ferreira
97*f41f5b7cSGuilherme Maciel Ferreira# Extract files from an multi-file image
98*f41f5b7cSGuilherme Maciel Ferreiraextract_multi_image()
996496d00fSGuilherme Maciel Ferreira{
100*f41f5b7cSGuilherme Maciel Ferreira	echo -e "\nExtracting multi-file image contents..."
101*f41f5b7cSGuilherme Maciel Ferreira	do_cmd ${DUMPIMAGE} -T multi -i ${IMAGE_MULTI} -p 0 ${DATAFILE0}
102*f41f5b7cSGuilherme Maciel Ferreira	do_cmd ${DUMPIMAGE} -T multi -i ${IMAGE_MULTI} -p 1 ${DATAFILE1}
103*f41f5b7cSGuilherme Maciel Ferreira	do_cmd ${DUMPIMAGE} -T multi -i ${IMAGE_MULTI} -p 2 ${DATAFILE2}
104*f41f5b7cSGuilherme Maciel Ferreira	do_cmd ${DUMPIMAGE} -T multi -i ${IMAGE_MULTI} -p 2 ${DATAFILE2} -o ${TEST_OUT}
1056496d00fSGuilherme Maciel Ferreira	echo "done."
1066496d00fSGuilherme Maciel Ferreira}
1076496d00fSGuilherme Maciel Ferreira
1086496d00fSGuilherme Maciel Ferreira# List the contents of a file
109*f41f5b7cSGuilherme Maciel Ferreira# Args:
110*f41f5b7cSGuilherme Maciel Ferreira#    image filename
1116496d00fSGuilherme Maciel Ferreiralist_image()
1126496d00fSGuilherme Maciel Ferreira{
113*f41f5b7cSGuilherme Maciel Ferreira	local image="$1"
114*f41f5b7cSGuilherme Maciel Ferreira
1156496d00fSGuilherme Maciel Ferreira	echo -e "\nListing image contents..."
116*f41f5b7cSGuilherme Maciel Ferreira	do_cmd_redir ${MKIMAGE_LIST} ${MKIMAGE} -l ${image}
117*f41f5b7cSGuilherme Maciel Ferreira	do_cmd_redir ${DUMPIMAGE_LIST} ${DUMPIMAGE} -l ${image}
1186496d00fSGuilherme Maciel Ferreira	echo "done."
1196496d00fSGuilherme Maciel Ferreira}
1206496d00fSGuilherme Maciel Ferreira
1216496d00fSGuilherme Maciel Ferreiramain()
1226496d00fSGuilherme Maciel Ferreira{
1236496d00fSGuilherme Maciel Ferreira	local file
1246496d00fSGuilherme Maciel Ferreira
1256496d00fSGuilherme Maciel Ferreira	create_files
1266496d00fSGuilherme Maciel Ferreira
127*f41f5b7cSGuilherme Maciel Ferreira	# Compress and extract multi-file images, compare the result
128*f41f5b7cSGuilherme Maciel Ferreira	create_multi_image
129*f41f5b7cSGuilherme Maciel Ferreira	extract_multi_image
1306496d00fSGuilherme Maciel Ferreira	for file in ${DATAFILES}; do
1316496d00fSGuilherme Maciel Ferreira		assert_equal ${file} ${SRCDIR}/${file}
1326496d00fSGuilherme Maciel Ferreira	done
1336496d00fSGuilherme Maciel Ferreira	assert_equal ${TEST_OUT} ${DATAFILE2}
1346496d00fSGuilherme Maciel Ferreira
135*f41f5b7cSGuilherme Maciel Ferreira	# List contents of multi-file image and compares output from tools
136*f41f5b7cSGuilherme Maciel Ferreira	list_image ${IMAGE_MULTI}
1376496d00fSGuilherme Maciel Ferreira	assert_equal ${DUMPIMAGE_LIST} ${MKIMAGE_LIST}
1386496d00fSGuilherme Maciel Ferreira
1396496d00fSGuilherme Maciel Ferreira	# Remove files created
1406496d00fSGuilherme Maciel Ferreira	cleanup
1416496d00fSGuilherme Maciel Ferreira
1426496d00fSGuilherme Maciel Ferreira	echo "Tests passed."
1436496d00fSGuilherme Maciel Ferreira}
1446496d00fSGuilherme Maciel Ferreira
1456496d00fSGuilherme Maciel Ferreiramain
146