test-imagetools.sh 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. #!/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. BASEDIR=sandbox
  15. SRCDIR=sandbox/boot
  16. IMAGE_NAME="v1.0-test"
  17. IMAGE=linux.img
  18. DATAFILE0=vmlinuz
  19. DATAFILE1=initrd.img
  20. DATAFILE2=System.map
  21. DATAFILES="${DATAFILE0} ${DATAFILE1} ${DATAFILE2}"
  22. TEST_OUT=test_output
  23. MKIMAGE=${BASEDIR}/tools/mkimage
  24. DUMPIMAGE=${BASEDIR}/tools/dumpimage
  25. MKIMAGE_LIST=mkimage.list
  26. DUMPIMAGE_LIST=dumpimage.list
  27. # Remove all the files we created
  28. cleanup()
  29. {
  30. local file
  31. for file in ${DATAFILES}; do
  32. rm -f ${file} ${SRCDIR}/${file}
  33. done
  34. rm -f ${IMAGE} ${DUMPIMAGE_LIST} ${MKIMAGE_LIST} ${TEST_OUT}
  35. rmdir ${SRCDIR}
  36. }
  37. # Check that two files are the same
  38. assert_equal()
  39. {
  40. if ! diff $1 $2; then
  41. echo "Failed."
  42. cleanup
  43. exit 1
  44. fi
  45. }
  46. # Create some test files
  47. create_files()
  48. {
  49. local file
  50. mkdir -p ${SRCDIR}
  51. for file in ${DATAFILES}; do
  52. head -c $RANDOM /dev/urandom >${SRCDIR}/${file}
  53. done
  54. }
  55. # Run a command, echoing it first
  56. do_cmd()
  57. {
  58. local cmd="$@"
  59. echo "# ${cmd}"
  60. ${cmd} 2>&1
  61. }
  62. # Run a command, redirecting output
  63. # Args:
  64. # redirect_file
  65. # command...
  66. do_cmd_redir()
  67. {
  68. local redir="$1"
  69. shift
  70. local cmd="$@"
  71. echo "# ${cmd}"
  72. ${cmd} >${redir}
  73. }
  74. # Write files into an image
  75. create_image()
  76. {
  77. local files="${SRCDIR}/${DATAFILE0}:${SRCDIR}/${DATAFILE1}"
  78. files+=":${SRCDIR}/${DATAFILE2}"
  79. echo -e "\nBuilding image..."
  80. do_cmd ${MKIMAGE} -A x86 -O linux -T multi -n \"${IMAGE_NAME}\" \
  81. -d ${files} ${IMAGE}
  82. echo "done."
  83. }
  84. # Extract files from an image
  85. extract_image()
  86. {
  87. echo -e "\nExtracting image contents..."
  88. do_cmd ${DUMPIMAGE} -i ${IMAGE} -p 0 ${DATAFILE0}
  89. do_cmd ${DUMPIMAGE} -i ${IMAGE} -p 1 ${DATAFILE1}
  90. do_cmd ${DUMPIMAGE} -i ${IMAGE} -p 2 ${DATAFILE2}
  91. do_cmd ${DUMPIMAGE} -i ${IMAGE} -p 2 ${DATAFILE2} -o ${TEST_OUT}
  92. echo "done."
  93. }
  94. # List the contents of a file
  95. list_image()
  96. {
  97. echo -e "\nListing image contents..."
  98. do_cmd_redir ${MKIMAGE_LIST} ${MKIMAGE} -l ${IMAGE}
  99. do_cmd_redir ${DUMPIMAGE_LIST} ${DUMPIMAGE} -l ${IMAGE}
  100. echo "done."
  101. }
  102. main()
  103. {
  104. local file
  105. create_files
  106. # Compress and extract multifile images, compare the result
  107. create_image
  108. extract_image
  109. for file in ${DATAFILES}; do
  110. assert_equal ${file} ${SRCDIR}/${file}
  111. done
  112. assert_equal ${TEST_OUT} ${DATAFILE2}
  113. # List contents and compares output fro tools
  114. list_image
  115. assert_equal ${DUMPIMAGE_LIST} ${MKIMAGE_LIST}
  116. # Remove files created
  117. cleanup
  118. echo "Tests passed."
  119. }
  120. main