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