| #!/bin/bash |
| # |
| # Copyright (C) 2022 The Android Open Source Project |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| # |
| |
| set -eo errtrace |
| |
| die() { |
| echo >&2 "ERROR:" "${@}" |
| exit 1 |
| } |
| |
| trap 'die "line ${LINENO}, ${FUNCNAME:-<main>}(): \"${BASH_COMMAND}\" returned \"$?\"" ' ERR |
| |
| # Figure out where we are and where to look for test executables. |
| cd "$(dirname "${BASH_SOURCE[0]}")" |
| TEST_DIR="$(pwd)" |
| readonly TEST_DIR |
| readonly TEMP_DIR="${TEST_DIR}/stage.retrofit_gki_test" |
| |
| export PATH="${TEST_DIR}:${PATH}" |
| rm -rf "${TEMP_DIR}" |
| mkdir -p "${TEMP_DIR}" |
| |
| # Generate some test files. |
| readonly TEST_DTB="${TEMP_DIR}/dtb" |
| readonly TEST_KERNEL="${TEMP_DIR}/kernel" |
| readonly TEST_RAMDISK="${TEMP_DIR}/ramdisk" |
| readonly TEST_VENDOR_RAMDISK="${TEMP_DIR}/vendor_ramdisk" |
| readonly TEST_KERNEL_SIGNATURE="${TEMP_DIR}/kernel.boot_signature" |
| |
| readonly TEST_V2_RETROFITTED_RAMDISK="${TEMP_DIR}/retrofitted.ramdisk" |
| readonly TEST_RETROFITTED_SIGNATURE="${TEMP_DIR}/retrofitted.boot_signature" |
| readonly TEST_PADDED_RETROFITTED_SIGNATURE="${TEMP_DIR}/retrofitted.boot_signature.padded" |
| |
| readonly TEST_BOOT_IMAGE="${TEMP_DIR}/boot.img" |
| readonly TEST_INIT_BOOT_IMAGE="${TEMP_DIR}/init_boot.img" |
| readonly TEST_VENDOR_BOOT_IMAGE="${TEMP_DIR}/vendor_boot.img" |
| |
| ( # Run these in subshell because dd is noisy. |
| dd if=/dev/urandom of="${TEST_KERNEL}" bs=1024 count=10 |
| dd if=/dev/urandom of="${TEST_RAMDISK}" bs=1024 count=10 |
| dd if=/dev/urandom of="${TEST_KERNEL_SIGNATURE}" bs=1024 count=1 |
| dd if=/dev/urandom of="${TEST_DTB}" bs=1024 count=10 |
| dd if=/dev/urandom of="${TEST_VENDOR_RAMDISK}" bs=1024 count=10 |
| ) 2> /dev/null |
| |
| cat "${TEST_VENDOR_RAMDISK}" "${TEST_RAMDISK}" > "${TEST_V2_RETROFITTED_RAMDISK}" |
| cp "${TEST_KERNEL_SIGNATURE}" "${TEST_RETROFITTED_SIGNATURE}" |
| cp "${TEST_RETROFITTED_SIGNATURE}" "${TEST_PADDED_RETROFITTED_SIGNATURE}" |
| truncate -s $(( 16 << 10 )) "${TEST_PADDED_RETROFITTED_SIGNATURE}" |
| |
| mkbootimg \ |
| --header_version 4 \ |
| --kernel "${TEST_KERNEL}" \ |
| --boot_signature "${TEST_KERNEL_SIGNATURE}" \ |
| --output "${TEST_BOOT_IMAGE}" |
| mkbootimg \ |
| --header_version 4 \ |
| --ramdisk "${TEST_RAMDISK}" \ |
| --output "${TEST_INIT_BOOT_IMAGE}" |
| mkbootimg \ |
| --header_version 4 \ |
| --pagesize 4096 \ |
| --dtb "${TEST_DTB}" \ |
| --vendor_ramdisk "${TEST_VENDOR_RAMDISK}" \ |
| --vendor_boot "${TEST_VENDOR_BOOT_IMAGE}" |
| |
| readonly RETROFITTED_IMAGE="${TEMP_DIR}/retrofitted_boot.img" |
| readonly RETROFITTED_IMAGE_DIR="${TEMP_DIR}/retrofitted_boot.img.unpack" |
| |
| |
| # |
| # Begin test. |
| # |
| echo >&2 "TEST: retrofit to boot v4" |
| |
| retrofit_gki.sh \ |
| --boot "${TEST_BOOT_IMAGE}" \ |
| --init_boot "${TEST_INIT_BOOT_IMAGE}" \ |
| --version 4 \ |
| --output "${RETROFITTED_IMAGE}" |
| |
| rm -rf "${RETROFITTED_IMAGE_DIR}" |
| unpack_bootimg --boot_img "${RETROFITTED_IMAGE}" --out "${RETROFITTED_IMAGE_DIR}" > /dev/null |
| |
| cmp -s "${TEST_KERNEL}" "${RETROFITTED_IMAGE_DIR}/kernel" || |
| die "unexpected diff: kernel" |
| cmp -s "${TEST_RAMDISK}" "${RETROFITTED_IMAGE_DIR}/ramdisk" || |
| die "unexpected diff: ramdisk" |
| cmp -s "${TEST_RETROFITTED_SIGNATURE}" "${RETROFITTED_IMAGE_DIR}/boot_signature" || |
| die "unexpected diff: boot signature" |
| |
| |
| echo >&2 "TEST: retrofit to boot v3" |
| |
| retrofit_gki.sh \ |
| --boot "${TEST_BOOT_IMAGE}" \ |
| --init_boot "${TEST_INIT_BOOT_IMAGE}" \ |
| --version 3 \ |
| --output "${RETROFITTED_IMAGE}" |
| |
| rm -rf "${RETROFITTED_IMAGE_DIR}" |
| unpack_bootimg --boot_img "${RETROFITTED_IMAGE}" --out "${RETROFITTED_IMAGE_DIR}" > /dev/null |
| tail -c $(( 16 << 10 )) "${RETROFITTED_IMAGE}" > "${RETROFITTED_IMAGE_DIR}/boot_signature" |
| |
| cmp -s "${TEST_KERNEL}" "${RETROFITTED_IMAGE_DIR}/kernel" || |
| die "unexpected diff: kernel" |
| cmp -s "${TEST_RAMDISK}" "${RETROFITTED_IMAGE_DIR}/ramdisk" || |
| die "unexpected diff: ramdisk" |
| cmp -s "${TEST_PADDED_RETROFITTED_SIGNATURE}" "${RETROFITTED_IMAGE_DIR}/boot_signature" || |
| die "unexpected diff: boot signature" |
| |
| |
| echo >&2 "TEST: retrofit to boot v2" |
| |
| retrofit_gki.sh \ |
| --boot "${TEST_BOOT_IMAGE}" \ |
| --init_boot "${TEST_INIT_BOOT_IMAGE}" \ |
| --vendor_boot "${TEST_VENDOR_BOOT_IMAGE}" \ |
| --version 2 \ |
| --output "${RETROFITTED_IMAGE}" |
| |
| rm -rf "${RETROFITTED_IMAGE_DIR}" |
| unpack_bootimg --boot_img "${RETROFITTED_IMAGE}" --out "${RETROFITTED_IMAGE_DIR}" > /dev/null |
| tail -c $(( 16 << 10 )) "${RETROFITTED_IMAGE}" > "${RETROFITTED_IMAGE_DIR}/boot_signature" |
| |
| cmp -s "${TEST_DTB}" "${RETROFITTED_IMAGE_DIR}/dtb" || |
| die "unexpected diff: dtb" |
| cmp -s "${TEST_KERNEL}" "${RETROFITTED_IMAGE_DIR}/kernel" || |
| die "unexpected diff: kernel" |
| cmp -s "${TEST_V2_RETROFITTED_RAMDISK}" "${RETROFITTED_IMAGE_DIR}/ramdisk" || |
| die "unexpected diff: ramdisk" |
| cmp -s "${TEST_PADDED_RETROFITTED_SIGNATURE}" "${RETROFITTED_IMAGE_DIR}/boot_signature" || |
| die "unexpected diff: boot signature" |