1*8617a60dSAndroid Build Coastguard Worker#!/bin/bash -eu 2*8617a60dSAndroid Build Coastguard Worker 3*8617a60dSAndroid Build Coastguard Worker# Copyright 2010 The ChromiumOS Authors 4*8617a60dSAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be 5*8617a60dSAndroid Build Coastguard Worker# found in the LICENSE file. 6*8617a60dSAndroid Build Coastguard Worker# 7*8617a60dSAndroid Build Coastguard Worker# Run tests for cgpt utility. 8*8617a60dSAndroid Build Coastguard Worker 9*8617a60dSAndroid Build Coastguard Worker# Load common constants and variables. 10*8617a60dSAndroid Build Coastguard Worker. "$(dirname "$0")/common.sh" 11*8617a60dSAndroid Build Coastguard Worker 12*8617a60dSAndroid Build Coastguard WorkerCGPT=$(readlink -f "$1") 13*8617a60dSAndroid Build Coastguard Worker[ -x ""${CGPT}"" ] || error "Can't execute $CGPT" 14*8617a60dSAndroid Build Coastguard Worker 15*8617a60dSAndroid Build Coastguard WorkerMTD=("${@:2}") 16*8617a60dSAndroid Build Coastguard Worker 17*8617a60dSAndroid Build Coastguard Worker# Run tests in a dedicated directory for easy cleanup or debugging. 18*8617a60dSAndroid Build Coastguard WorkerDIR="${TEST_DIR}/cgpt_test_dir" 19*8617a60dSAndroid Build Coastguard Worker[ -d "$DIR" ] || mkdir -p "$DIR" 20*8617a60dSAndroid Build Coastguard Workerwarning "testing "${CGPT}" in $DIR" 21*8617a60dSAndroid Build Coastguard Workercd "$DIR" 22*8617a60dSAndroid Build Coastguard Worker 23*8617a60dSAndroid Build Coastguard Workerassert_fail() { 24*8617a60dSAndroid Build Coastguard Worker set +e 25*8617a60dSAndroid Build Coastguard Worker if "$@" 2>/dev/null; then 26*8617a60dSAndroid Build Coastguard Worker error "$*" " should have failed but did not" 27*8617a60dSAndroid Build Coastguard Worker fi 28*8617a60dSAndroid Build Coastguard Worker set -e 29*8617a60dSAndroid Build Coastguard Worker} 30*8617a60dSAndroid Build Coastguard Worker 31*8617a60dSAndroid Build Coastguard Worker# Test failure on non existing file. 32*8617a60dSAndroid Build Coastguard Workerassert_fail "${CGPT}" show "${MTD[@]}" blah_404_haha 33*8617a60dSAndroid Build Coastguard Worker 34*8617a60dSAndroid Build Coastguard Workerecho "Create an empty file to use as the device..." 35*8617a60dSAndroid Build Coastguard WorkerNUM_SECTORS=1000 36*8617a60dSAndroid Build Coastguard WorkerDEV=fake_dev.bin 37*8617a60dSAndroid Build Coastguard Workerrm -f ${DEV} 38*8617a60dSAndroid Build Coastguard Workerdd if=/dev/zero of=${DEV} conv=notrunc bs=512 count=${NUM_SECTORS} 2>/dev/null 39*8617a60dSAndroid Build Coastguard Worker 40*8617a60dSAndroid Build Coastguard WorkerDATA_START=100 41*8617a60dSAndroid Build Coastguard WorkerDATA_SIZE=20 42*8617a60dSAndroid Build Coastguard WorkerDATA_LABEL="data stuff" 43*8617a60dSAndroid Build Coastguard WorkerDATA_GUID='0fc63daf-8483-4772-8e79-3d69d8477de4' 44*8617a60dSAndroid Build Coastguard WorkerDATA_NUM=1 45*8617a60dSAndroid Build Coastguard Worker 46*8617a60dSAndroid Build Coastguard WorkerKERN_START=200 47*8617a60dSAndroid Build Coastguard WorkerKERN_SIZE=30 48*8617a60dSAndroid Build Coastguard WorkerKERN_LABEL="kernel stuff" 49*8617a60dSAndroid Build Coastguard WorkerKERN_GUID='fe3a2a5d-4f32-41a7-b725-accc3285a309' 50*8617a60dSAndroid Build Coastguard WorkerKERN_NUM=2 51*8617a60dSAndroid Build Coastguard Worker 52*8617a60dSAndroid Build Coastguard WorkerROOTFS_START=300 53*8617a60dSAndroid Build Coastguard WorkerROOTFS_SIZE=40 54*8617a60dSAndroid Build Coastguard WorkerROOTFS_LABEL="rootfs stuff" 55*8617a60dSAndroid Build Coastguard WorkerROOTFS_GUID='3cb8e202-3b7e-47dd-8a3c-7ff2a13cfcec' 56*8617a60dSAndroid Build Coastguard WorkerROOTFS_NUM=3 57*8617a60dSAndroid Build Coastguard Worker 58*8617a60dSAndroid Build Coastguard WorkerESP_START=400 59*8617a60dSAndroid Build Coastguard WorkerESP_SIZE=50 60*8617a60dSAndroid Build Coastguard WorkerESP_LABEL="ESP stuff" 61*8617a60dSAndroid Build Coastguard WorkerESP_GUID='c12a7328-f81f-11d2-ba4b-00a0c93ec93b' 62*8617a60dSAndroid Build Coastguard WorkerESP_NUM=4 63*8617a60dSAndroid Build Coastguard Worker 64*8617a60dSAndroid Build Coastguard WorkerFUTURE_START=500 65*8617a60dSAndroid Build Coastguard WorkerFUTURE_SIZE=60 66*8617a60dSAndroid Build Coastguard WorkerFUTURE_LABEL="future stuff" 67*8617a60dSAndroid Build Coastguard WorkerFUTURE_GUID='2e0a753d-9e48-43b0-8337-b15192cb1b5e' 68*8617a60dSAndroid Build Coastguard WorkerFUTURE_NUM=5 69*8617a60dSAndroid Build Coastguard Worker 70*8617a60dSAndroid Build Coastguard WorkerRANDOM_START=600 71*8617a60dSAndroid Build Coastguard WorkerRANDOM_SIZE=70 72*8617a60dSAndroid Build Coastguard WorkerRANDOM_LABEL="random stuff" 73*8617a60dSAndroid Build Coastguard WorkerRANDOM_GUID='2364a860-bf63-42fb-a83d-9ad3e057fcf5' 74*8617a60dSAndroid Build Coastguard WorkerRANDOM_NUM=6 75*8617a60dSAndroid Build Coastguard Worker 76*8617a60dSAndroid Build Coastguard WorkerRANDOM_DRIVE_GUID='12345678-0000-1111-2222-123456789ABC' 77*8617a60dSAndroid Build Coastguard Worker 78*8617a60dSAndroid Build Coastguard Worker"${CGPT}" create "${MTD[@]}" ${DEV} 79*8617a60dSAndroid Build Coastguard Worker 80*8617a60dSAndroid Build Coastguard Workerrun_basic_tests() { 81*8617a60dSAndroid Build Coastguard Worker echo "Create a bunch of partitions, using the real GUID types..." 82*8617a60dSAndroid Build Coastguard Worker 83*8617a60dSAndroid Build Coastguard Worker "${CGPT}" add "${MTD[@]}" -b ${DATA_START} -s ${DATA_SIZE} -t ${DATA_GUID} \ 84*8617a60dSAndroid Build Coastguard Worker -l "${DATA_LABEL}" ${DEV} 85*8617a60dSAndroid Build Coastguard Worker "${CGPT}" add "${MTD[@]}" -b ${KERN_START} -s ${KERN_SIZE} -t ${KERN_GUID} \ 86*8617a60dSAndroid Build Coastguard Worker -l "${KERN_LABEL}" ${DEV} 87*8617a60dSAndroid Build Coastguard Worker "${CGPT}" add "${MTD[@]}" -b ${ROOTFS_START} -s ${ROOTFS_SIZE} \ 88*8617a60dSAndroid Build Coastguard Worker -t ${ROOTFS_GUID} -l "${ROOTFS_LABEL}" ${DEV} 89*8617a60dSAndroid Build Coastguard Worker "${CGPT}" add "${MTD[@]}" -b ${ESP_START} -s ${ESP_SIZE} -t ${ESP_GUID} \ 90*8617a60dSAndroid Build Coastguard Worker -l "${ESP_LABEL}" ${DEV} 91*8617a60dSAndroid Build Coastguard Worker "${CGPT}" add "${MTD[@]}" -b ${FUTURE_START} -s ${FUTURE_SIZE} \ 92*8617a60dSAndroid Build Coastguard Worker -t ${FUTURE_GUID} -l "${FUTURE_LABEL}" ${DEV} 93*8617a60dSAndroid Build Coastguard Worker "${CGPT}" add "${MTD[@]}" -b ${RANDOM_START} -s ${RANDOM_SIZE} \ 94*8617a60dSAndroid Build Coastguard Worker -t ${RANDOM_GUID} -l "${RANDOM_LABEL}" ${DEV} 95*8617a60dSAndroid Build Coastguard Worker 96*8617a60dSAndroid Build Coastguard Worker 97*8617a60dSAndroid Build Coastguard Worker echo "Extract the start and size of given partitions..." 98*8617a60dSAndroid Build Coastguard Worker 99*8617a60dSAndroid Build Coastguard Worker X=$("${CGPT}" show "${MTD[@]}" -b -i $DATA_NUM ${DEV}) 100*8617a60dSAndroid Build Coastguard Worker Y=$("${CGPT}" show "${MTD[@]}" -s -i $DATA_NUM ${DEV}) 101*8617a60dSAndroid Build Coastguard Worker [ "$X $Y" = "$DATA_START $DATA_SIZE" ] || error 102*8617a60dSAndroid Build Coastguard Worker 103*8617a60dSAndroid Build Coastguard Worker X=$("${CGPT}" show "${MTD[@]}" -b -i $KERN_NUM ${DEV}) 104*8617a60dSAndroid Build Coastguard Worker Y=$("${CGPT}" show "${MTD[@]}" -s -i $KERN_NUM ${DEV}) 105*8617a60dSAndroid Build Coastguard Worker [ "$X $Y" = "$KERN_START $KERN_SIZE" ] || error 106*8617a60dSAndroid Build Coastguard Worker 107*8617a60dSAndroid Build Coastguard Worker X=$("${CGPT}" show "${MTD[@]}" -b -i $ROOTFS_NUM ${DEV}) 108*8617a60dSAndroid Build Coastguard Worker Y=$("${CGPT}" show "${MTD[@]}" -s -i $ROOTFS_NUM ${DEV}) 109*8617a60dSAndroid Build Coastguard Worker [ "$X $Y" = "$ROOTFS_START $ROOTFS_SIZE" ] || error 110*8617a60dSAndroid Build Coastguard Worker 111*8617a60dSAndroid Build Coastguard Worker X=$("${CGPT}" show "${MTD[@]}" -b -i $ESP_NUM ${DEV}) 112*8617a60dSAndroid Build Coastguard Worker Y=$("${CGPT}" show "${MTD[@]}" -s -i $ESP_NUM ${DEV}) 113*8617a60dSAndroid Build Coastguard Worker [ "$X $Y" = "$ESP_START $ESP_SIZE" ] || error 114*8617a60dSAndroid Build Coastguard Worker 115*8617a60dSAndroid Build Coastguard Worker X=$("${CGPT}" show "${MTD[@]}" -b -i $FUTURE_NUM ${DEV}) 116*8617a60dSAndroid Build Coastguard Worker Y=$("${CGPT}" show "${MTD[@]}" -s -i $FUTURE_NUM ${DEV}) 117*8617a60dSAndroid Build Coastguard Worker [ "$X $Y" = "$FUTURE_START $FUTURE_SIZE" ] || error 118*8617a60dSAndroid Build Coastguard Worker 119*8617a60dSAndroid Build Coastguard Worker X=$("${CGPT}" show "${MTD[@]}" -b -i $RANDOM_NUM ${DEV}) 120*8617a60dSAndroid Build Coastguard Worker Y=$("${CGPT}" show "${MTD[@]}" -s -i $RANDOM_NUM ${DEV}) 121*8617a60dSAndroid Build Coastguard Worker [ "$X $Y" = "$RANDOM_START $RANDOM_SIZE" ] || error 122*8617a60dSAndroid Build Coastguard Worker 123*8617a60dSAndroid Build Coastguard Worker 124*8617a60dSAndroid Build Coastguard Worker echo "Change the beginning..." 125*8617a60dSAndroid Build Coastguard Worker DATA_START=$((DATA_START + 10)) 126*8617a60dSAndroid Build Coastguard Worker "${CGPT}" add "${MTD[@]}" -i 1 -b ${DATA_START} ${DEV} || error 127*8617a60dSAndroid Build Coastguard Worker X=$("${CGPT}" show "${MTD[@]}" -b -i 1 ${DEV}) 128*8617a60dSAndroid Build Coastguard Worker [ "$X" = "$DATA_START" ] || error 129*8617a60dSAndroid Build Coastguard Worker 130*8617a60dSAndroid Build Coastguard Worker echo "Change the size..." 131*8617a60dSAndroid Build Coastguard Worker DATA_SIZE=$((DATA_SIZE + 10)) 132*8617a60dSAndroid Build Coastguard Worker "${CGPT}" add "${MTD[@]}" -i 1 -s ${DATA_SIZE} ${DEV} || error 133*8617a60dSAndroid Build Coastguard Worker X=$("${CGPT}" show "${MTD[@]}" -s -i 1 ${DEV}) 134*8617a60dSAndroid Build Coastguard Worker [ "$X" = "$DATA_SIZE" ] || error 135*8617a60dSAndroid Build Coastguard Worker 136*8617a60dSAndroid Build Coastguard Worker echo "Change the type..." 137*8617a60dSAndroid Build Coastguard Worker "${CGPT}" add "${MTD[@]}" -i 1 -t reserved ${DEV} || error 138*8617a60dSAndroid Build Coastguard Worker X=$("${CGPT}" show "${MTD[@]}" -t -i 1 ${DEV} | tr '[:upper:]' '[:lower:]') 139*8617a60dSAndroid Build Coastguard Worker [ "$X" = "$FUTURE_GUID" ] || error 140*8617a60dSAndroid Build Coastguard Worker # arbitrary value 141*8617a60dSAndroid Build Coastguard Worker "${CGPT}" add "${MTD[@]}" -i 1 -t 610a563a-a55c-4ae0-ab07-86e5bb9db67f \ 142*8617a60dSAndroid Build Coastguard Worker ${DEV} || error 143*8617a60dSAndroid Build Coastguard Worker X=$("${CGPT}" show "${MTD[@]}" -t -i 1 ${DEV}) 144*8617a60dSAndroid Build Coastguard Worker [ "$X" = "610A563A-A55C-4AE0-AB07-86E5BB9DB67F" ] || error 145*8617a60dSAndroid Build Coastguard Worker 146*8617a60dSAndroid Build Coastguard Worker "${CGPT}" add "${MTD[@]}" -i 1 -t data ${DEV} || error 147*8617a60dSAndroid Build Coastguard Worker X=$("${CGPT}" show "${MTD[@]}" -t -i 1 ${DEV} | tr '[:upper:]' '[:lower:]') 148*8617a60dSAndroid Build Coastguard Worker [ "$X" = "$DATA_GUID" ] || error 149*8617a60dSAndroid Build Coastguard Worker 150*8617a60dSAndroid Build Coastguard Worker ORIG_ID=$("${CGPT}" show "${MTD[@]}" -v ${DEV} | \ 151*8617a60dSAndroid Build Coastguard Worker grep -i "disk uuid" | head -1 | awk ' { print $3 } ' ) 152*8617a60dSAndroid Build Coastguard Worker [ ! "$ORIG_ID" = "$RANDOM_DRIVE_GUID" ] || error 153*8617a60dSAndroid Build Coastguard Worker "${CGPT}" edit "${MTD[@]}" -u ${RANDOM_DRIVE_GUID} ${DEV} || error 154*8617a60dSAndroid Build Coastguard Worker X=$("${CGPT}" show "${MTD[@]}" -v ${DEV} | grep -i "disk uuid" | \ 155*8617a60dSAndroid Build Coastguard Worker head -1 | awk ' { print $3 } ' ) 156*8617a60dSAndroid Build Coastguard Worker [ "$X" = "${RANDOM_DRIVE_GUID}" ] || error 157*8617a60dSAndroid Build Coastguard Worker "${CGPT}" edit "${MTD[@]}" -u "${ORIG_ID}" ${DEV} || error 158*8617a60dSAndroid Build Coastguard Worker X=$("${CGPT}" show "${MTD[@]}" -v ${DEV} | grep -i "disk uuid" | \ 159*8617a60dSAndroid Build Coastguard Worker head -1 | awk ' { print $3 } ' ) 160*8617a60dSAndroid Build Coastguard Worker [ "$X" = "${ORIG_ID}" ] || error 161*8617a60dSAndroid Build Coastguard Worker} 162*8617a60dSAndroid Build Coastguard Workerrun_basic_tests 163*8617a60dSAndroid Build Coastguard Worker 164*8617a60dSAndroid Build Coastguard WorkerORIG_ID=$("${CGPT}" show "${MTD[@]}" -v ${DEV} | \ 165*8617a60dSAndroid Build Coastguard Worker grep -i "disk uuid" | awk ' { print $3 } ' ) 166*8617a60dSAndroid Build Coastguard Worker[ ! "$ORIG_ID" = "$RANDOM_DRIVE_GUID" ] || error 167*8617a60dSAndroid Build Coastguard Worker"${CGPT}" edit "${MTD[@]}" -u ${RANDOM_DRIVE_GUID} ${DEV} || error 168*8617a60dSAndroid Build Coastguard WorkerX=$("${CGPT}" show "${MTD[@]}" -v ${DEV} | grep -i "disk uuid" | \ 169*8617a60dSAndroid Build Coastguard Worker head -1 | awk ' { print $3 } ' ) 170*8617a60dSAndroid Build Coastguard Worker[ "$X" = "${RANDOM_DRIVE_GUID}" ] || error 171*8617a60dSAndroid Build Coastguard Worker"${CGPT}" edit "${MTD[@]}" -u "${ORIG_ID}" ${DEV} || error 172*8617a60dSAndroid Build Coastguard WorkerX=$("${CGPT}" show "${MTD[@]}" -v ${DEV} | grep -i "disk uuid" | \ 173*8617a60dSAndroid Build Coastguard Worker awk ' { print $3 } ' ) 174*8617a60dSAndroid Build Coastguard Worker[ "$X" = "${ORIG_ID}" ] || error 175*8617a60dSAndroid Build Coastguard Worker 176*8617a60dSAndroid Build Coastguard Workerecho "Set the boot partition.." 177*8617a60dSAndroid Build Coastguard Worker"${CGPT}" boot "${MTD[@]}" -i ${KERN_NUM} ${DEV} >/dev/null 178*8617a60dSAndroid Build Coastguard Worker 179*8617a60dSAndroid Build Coastguard Workerecho "Check the PMBR's idea of the boot partition..." 180*8617a60dSAndroid Build Coastguard WorkerX=$("${CGPT}" boot "${MTD[@]}" ${DEV}) 181*8617a60dSAndroid Build Coastguard WorkerY=$("${CGPT}" show "${MTD[@]}" -u -i $KERN_NUM $DEV) 182*8617a60dSAndroid Build Coastguard Worker[ "$X" = "$Y" ] || error 183*8617a60dSAndroid Build Coastguard Worker 184*8617a60dSAndroid Build Coastguard Worker# Input: sequence of priorities 185*8617a60dSAndroid Build Coastguard Worker# Output: ${DEV} has kernel partitions with the given priorities 186*8617a60dSAndroid Build Coastguard Workermake_pri() { 187*8617a60dSAndroid Build Coastguard Worker local idx=0 188*8617a60dSAndroid Build Coastguard Worker "${CGPT}" create "${MTD[@]}" ${DEV} 189*8617a60dSAndroid Build Coastguard Worker for pri in "$@"; do 190*8617a60dSAndroid Build Coastguard Worker idx=$((idx+1)) 191*8617a60dSAndroid Build Coastguard Worker "${CGPT}" add "${MTD[@]}" -t kernel -l "kern$idx" -b $((100 + 2 * idx)) \ 192*8617a60dSAndroid Build Coastguard Worker -s 1 -P $pri ${DEV} 193*8617a60dSAndroid Build Coastguard Worker done 194*8617a60dSAndroid Build Coastguard Worker} 195*8617a60dSAndroid Build Coastguard Worker 196*8617a60dSAndroid Build Coastguard Worker# Output: returns string containing priorities of all kernels 197*8617a60dSAndroid Build Coastguard Workerget_pri() { 198*8617a60dSAndroid Build Coastguard Worker local output=() 199*8617a60dSAndroid Build Coastguard Worker for idx in $("${CGPT}" find "${MTD[@]}" -t kernel ${DEV} | sed -e s@${DEV}@@); 200*8617a60dSAndroid Build Coastguard Worker do 201*8617a60dSAndroid Build Coastguard Worker output+=("$("${CGPT}" show "${MTD[@]}" -i "$idx" -P ${DEV})") 202*8617a60dSAndroid Build Coastguard Worker done 203*8617a60dSAndroid Build Coastguard Worker echo "${output[@]}" 204*8617a60dSAndroid Build Coastguard Worker} 205*8617a60dSAndroid Build Coastguard Worker 206*8617a60dSAndroid Build Coastguard Worker# Input: list of priorities 207*8617a60dSAndroid Build Coastguard Worker# Operation: expects ${DEV} to contain those kernel priorities 208*8617a60dSAndroid Build Coastguard Workerassert_pri() { 209*8617a60dSAndroid Build Coastguard Worker local expected="$*" 210*8617a60dSAndroid Build Coastguard Worker local actual 211*8617a60dSAndroid Build Coastguard Worker actual=$(get_pri) 212*8617a60dSAndroid Build Coastguard Worker [ "$actual" = "$expected" ] || \ 213*8617a60dSAndroid Build Coastguard Worker error 1 "expected priority \"$expected\", actual priority \"$actual\"" 214*8617a60dSAndroid Build Coastguard Worker} 215*8617a60dSAndroid Build Coastguard Worker 216*8617a60dSAndroid Build Coastguard Worker# no kernels at all. This should do nothing. 217*8617a60dSAndroid Build Coastguard Worker"${CGPT}" create "${MTD[@]}" ${DEV} 218*8617a60dSAndroid Build Coastguard Worker 219*8617a60dSAndroid Build Coastguard Workerrun_prioritize_tests() { 220*8617a60dSAndroid Build Coastguard Worker echo "Test the cgpt prioritize command..." 221*8617a60dSAndroid Build Coastguard Worker "${CGPT}" add "${MTD[@]}" -t rootfs -b 100 -s 1 ${DEV} 222*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" ${DEV} 223*8617a60dSAndroid Build Coastguard Worker assert_pri "" 224*8617a60dSAndroid Build Coastguard Worker 225*8617a60dSAndroid Build Coastguard Worker # common install/upgrade sequence 226*8617a60dSAndroid Build Coastguard Worker make_pri 2 0 0 227*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -i 1 ${DEV} 228*8617a60dSAndroid Build Coastguard Worker assert_pri 1 0 0 229*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -i 2 ${DEV} 230*8617a60dSAndroid Build Coastguard Worker assert_pri 1 2 0 231*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -i 1 ${DEV} 232*8617a60dSAndroid Build Coastguard Worker assert_pri 2 1 0 233*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -i 2 ${DEV} 234*8617a60dSAndroid Build Coastguard Worker assert_pri 1 2 0 235*8617a60dSAndroid Build Coastguard Worker # lots of kernels, all same starting priority, should go to priority 1 236*8617a60dSAndroid Build Coastguard Worker make_pri 8 8 8 8 8 8 8 8 8 8 8 0 0 8 237*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" ${DEV} 238*8617a60dSAndroid Build Coastguard Worker assert_pri 1 1 1 1 1 1 1 1 1 1 1 0 0 1 239*8617a60dSAndroid Build Coastguard Worker 240*8617a60dSAndroid Build Coastguard Worker # now raise them all up again 241*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -P 4 ${DEV} 242*8617a60dSAndroid Build Coastguard Worker assert_pri 4 4 4 4 4 4 4 4 4 4 4 0 0 4 243*8617a60dSAndroid Build Coastguard Worker 244*8617a60dSAndroid Build Coastguard Worker # set one of them higher, should leave the rest alone 245*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -P 5 -i 3 ${DEV} 246*8617a60dSAndroid Build Coastguard Worker assert_pri 4 4 5 4 4 4 4 4 4 4 4 0 0 4 247*8617a60dSAndroid Build Coastguard Worker 248*8617a60dSAndroid Build Coastguard Worker # set one of them lower, should bring the rest down 249*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -P 3 -i 4 ${DEV} 250*8617a60dSAndroid Build Coastguard Worker assert_pri 1 1 2 3 1 1 1 1 1 1 1 0 0 1 251*8617a60dSAndroid Build Coastguard Worker 252*8617a60dSAndroid Build Coastguard Worker # raise a group by including the friends of one partition 253*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -P 6 -i 1 -f ${DEV} 254*8617a60dSAndroid Build Coastguard Worker assert_pri 6 6 4 5 6 6 6 6 6 6 6 0 0 6 255*8617a60dSAndroid Build Coastguard Worker 256*8617a60dSAndroid Build Coastguard Worker # resurrect one, should not affect the others 257*8617a60dSAndroid Build Coastguard Worker make_pri 0 0 0 0 0 0 0 0 0 0 0 0 0 0 258*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -i 2 ${DEV} 259*8617a60dSAndroid Build Coastguard Worker assert_pri 0 1 0 0 0 0 0 0 0 0 0 0 0 0 260*8617a60dSAndroid Build Coastguard Worker 261*8617a60dSAndroid Build Coastguard Worker # resurrect one and all its friends 262*8617a60dSAndroid Build Coastguard Worker make_pri 0 0 0 0 0 0 0 0 1 2 0 0 0 0 263*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -P 5 -i 2 -f ${DEV} 264*8617a60dSAndroid Build Coastguard Worker assert_pri 5 5 5 5 5 5 5 5 3 4 5 5 5 5 265*8617a60dSAndroid Build Coastguard Worker 266*8617a60dSAndroid Build Coastguard Worker # no options should maintain the same order 267*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" ${DEV} 268*8617a60dSAndroid Build Coastguard Worker assert_pri 3 3 3 3 3 3 3 3 1 2 3 3 3 3 269*8617a60dSAndroid Build Coastguard Worker 270*8617a60dSAndroid Build Coastguard Worker # squish all the ranks 271*8617a60dSAndroid Build Coastguard Worker make_pri 1 1 2 2 3 3 4 4 5 5 0 6 7 7 272*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -P 6 ${DEV} 273*8617a60dSAndroid Build Coastguard Worker assert_pri 1 1 1 1 2 2 3 3 4 4 0 5 6 6 274*8617a60dSAndroid Build Coastguard Worker 275*8617a60dSAndroid Build Coastguard Worker # squish the ranks by not leaving room 276*8617a60dSAndroid Build Coastguard Worker make_pri 1 1 2 2 3 3 4 4 5 5 0 6 7 7 277*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -P 7 -i 3 ${DEV} 278*8617a60dSAndroid Build Coastguard Worker assert_pri 1 1 7 1 2 2 3 3 4 4 0 5 6 6 279*8617a60dSAndroid Build Coastguard Worker 280*8617a60dSAndroid Build Coastguard Worker # squish the ranks while bringing the friends along 281*8617a60dSAndroid Build Coastguard Worker make_pri 1 1 2 2 3 3 4 4 5 5 0 6 7 7 282*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -P 6 -i 3 -f ${DEV} 283*8617a60dSAndroid Build Coastguard Worker assert_pri 1 1 6 6 1 1 2 2 3 3 0 4 5 5 284*8617a60dSAndroid Build Coastguard Worker 285*8617a60dSAndroid Build Coastguard Worker # squish them pretty hard 286*8617a60dSAndroid Build Coastguard Worker make_pri 1 1 2 2 3 3 4 4 5 5 0 6 7 7 287*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -P 2 ${DEV} 288*8617a60dSAndroid Build Coastguard Worker assert_pri 1 1 1 1 1 1 1 1 1 1 0 1 2 2 289*8617a60dSAndroid Build Coastguard Worker 290*8617a60dSAndroid Build Coastguard Worker # squish them really really hard (nobody gets reduced to zero, though) 291*8617a60dSAndroid Build Coastguard Worker make_pri 1 1 2 2 3 3 4 4 5 5 0 6 7 7 292*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -P 1 -i 3 ${DEV} 293*8617a60dSAndroid Build Coastguard Worker assert_pri 1 1 1 1 1 1 1 1 1 1 0 1 1 1 294*8617a60dSAndroid Build Coastguard Worker 295*8617a60dSAndroid Build Coastguard Worker make_pri 15 15 14 14 13 13 12 12 11 11 10 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 0 296*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -i 3 ${DEV} 297*8617a60dSAndroid Build Coastguard Worker assert_pri 14 14 15 13 12 12 11 11 10 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 1 1 0 298*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -i 5 ${DEV} 299*8617a60dSAndroid Build Coastguard Worker assert_pri 13 13 14 12 15 11 10 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 1 1 1 1 0 300*8617a60dSAndroid Build Coastguard Worker # but if I bring friends I don't have to squish 301*8617a60dSAndroid Build Coastguard Worker "${CGPT}" prioritize "${MTD[@]}" -i 1 -f ${DEV} 302*8617a60dSAndroid Build Coastguard Worker assert_pri 15 15 13 12 14 11 10 10 9 9 8 8 7 7 6 6 5 5 4 4 3 3 2 2 1 1 1 1 1 1 0 303*8617a60dSAndroid Build Coastguard Worker} 304*8617a60dSAndroid Build Coastguard Workerrun_prioritize_tests 305*8617a60dSAndroid Build Coastguard Worker 306*8617a60dSAndroid Build Coastguard Workerecho "Test cgpt repair command" 307*8617a60dSAndroid Build Coastguard Worker"${CGPT}" repair "${MTD[@]}" ${DEV} 308*8617a60dSAndroid Build Coastguard Worker("${CGPT}" show "${MTD[@]}" ${DEV} | grep -q INVALID) && error 309*8617a60dSAndroid Build Coastguard Worker 310*8617a60dSAndroid Build Coastguard Worker# Zero primary header and partition table and try to repair it. 311*8617a60dSAndroid Build Coastguard Workerdd if=/dev/zero of=${DEV} conv=notrunc bs=512 count=33 2>/dev/null 312*8617a60dSAndroid Build Coastguard Worker"${CGPT}" show "${MTD[@]}" ${DEV} | grep -q INVALID 313*8617a60dSAndroid Build Coastguard Worker"${CGPT}" repair "${MTD[@]}" ${DEV} 314*8617a60dSAndroid Build Coastguard Worker("${CGPT}" show "${MTD[@]}" ${DEV} | grep -q INVALID) && error 315*8617a60dSAndroid Build Coastguard Worker 316*8617a60dSAndroid Build Coastguard Worker# Zero secondary header and partition table and try to repair it. 317*8617a60dSAndroid Build Coastguard Workerdd if=/dev/zero of=${DEV} seek=$((NUM_SECTORS - 33)) conv=notrunc bs=512 \ 318*8617a60dSAndroid Build Coastguard Worker count=33 2>/dev/null 319*8617a60dSAndroid Build Coastguard Worker"${CGPT}" show "${MTD[@]}" ${DEV} | grep -q INVALID 320*8617a60dSAndroid Build Coastguard Worker"${CGPT}" repair "${MTD[@]}" ${DEV} 321*8617a60dSAndroid Build Coastguard Worker("${CGPT}" show "${MTD[@]}" ${DEV} | grep -q INVALID) && error 322*8617a60dSAndroid Build Coastguard Worker 323*8617a60dSAndroid Build Coastguard Workerecho "Test with IGNOREME primary GPT..." 324*8617a60dSAndroid Build Coastguard Worker"${CGPT}" create "${MTD[@]}" ${DEV} 325*8617a60dSAndroid Build Coastguard Worker"${CGPT}" legacy "${MTD[@]}" -p ${DEV} 326*8617a60dSAndroid Build Coastguard Worker"${CGPT}" show "${MTD[@]}" ${DEV} | grep -q -E "IGNORED.*Pri GPT" 2>/dev/null 327*8617a60dSAndroid Build Coastguard Worker("${CGPT}" show "${MTD[@]}" ${DEV} | grep -q "Pri GPT table" 2>/dev/null) && \ 328*8617a60dSAndroid Build Coastguard Worker error 329*8617a60dSAndroid Build Coastguard Worker"${CGPT}" repair "${MTD[@]}" ${DEV} 2>/dev/null 330*8617a60dSAndroid Build Coastguard Worker"${CGPT}" show "${MTD[@]}" ${DEV} | grep -q -E "IGNORED.*Pri GPT" 2>/dev/null 331*8617a60dSAndroid Build Coastguard Worker("${CGPT}" show "${MTD[@]}" ${DEV} | grep -q "Pri GPT table" 2>/dev/null) && \ 332*8617a60dSAndroid Build Coastguard Worker error 333*8617a60dSAndroid Build Coastguard Worker"${CGPT}" legacy "${MTD[@]}" -e ${DEV} 2>/dev/null 334*8617a60dSAndroid Build Coastguard Worker("${CGPT}" show "${MTD[@]}" ${DEV} | grep -q -E "IGNORED.*Pri GPT") && error 335*8617a60dSAndroid Build Coastguard Worker"${CGPT}" show "${MTD[@]}" ${DEV} | grep -q "Pri GPT table" 336*8617a60dSAndroid Build Coastguard Worker 337*8617a60dSAndroid Build Coastguard Worker"${CGPT}" create "${MTD[@]}" ${DEV} 338*8617a60dSAndroid Build Coastguard Worker"${CGPT}" legacy "${MTD[@]}" -p ${DEV} 339*8617a60dSAndroid Build Coastguard Workerrun_basic_tests 2>/dev/null 340*8617a60dSAndroid Build Coastguard Worker 341*8617a60dSAndroid Build Coastguard Worker"${CGPT}" create "${MTD[@]}" ${DEV} 342*8617a60dSAndroid Build Coastguard Worker"${CGPT}" legacy "${MTD[@]}" -p ${DEV} 343*8617a60dSAndroid Build Coastguard Workerrun_prioritize_tests 2>/dev/null 344*8617a60dSAndroid Build Coastguard Worker 345*8617a60dSAndroid Build Coastguard Worker# Now make sure that we don't need write access if we're just looking. 346*8617a60dSAndroid Build Coastguard Workerecho "Test read vs read-write access..." 347*8617a60dSAndroid Build Coastguard Workerchmod 0444 ${DEV} 348*8617a60dSAndroid Build Coastguard Worker 349*8617a60dSAndroid Build Coastguard Worker# These should fail 350*8617a60dSAndroid Build Coastguard Worker"${CGPT}" create "${MTD[@]}" -z ${DEV} 2>/dev/null && error 351*8617a60dSAndroid Build Coastguard Worker"${CGPT}" add "${MTD[@]}" -i 2 -P 3 ${DEV} 2>/dev/null && error 352*8617a60dSAndroid Build Coastguard Worker"${CGPT}" repair "${MTD[@]}" ${DEV} 2>/dev/null && error 353*8617a60dSAndroid Build Coastguard Worker"${CGPT}" prioritize "${MTD[@]}" -i 3 ${DEV} 2>/dev/null && error 354*8617a60dSAndroid Build Coastguard Worker 355*8617a60dSAndroid Build Coastguard Worker# Most 'boot' usage should fail too. 356*8617a60dSAndroid Build Coastguard Worker"${CGPT}" boot "${MTD[@]}" -p ${DEV} 2>/dev/null && error 357*8617a60dSAndroid Build Coastguard Workerdd if=/dev/zero of=fake_mbr.bin bs=100 count=1 2>/dev/null 358*8617a60dSAndroid Build Coastguard Worker"${CGPT}" boot "${MTD[@]}" -b fake_mbr.bin ${DEV} 2>/dev/null && error 359*8617a60dSAndroid Build Coastguard Worker"${CGPT}" boot "${MTD[@]}" -i 2 ${DEV} 2>/dev/null && error 360*8617a60dSAndroid Build Coastguard Worker 361*8617a60dSAndroid Build Coastguard Worker"${CGPT}" boot "${MTD[@]}" ${DEV} >/dev/null 362*8617a60dSAndroid Build Coastguard Worker"${CGPT}" show "${MTD[@]}" ${DEV} >/dev/null 363*8617a60dSAndroid Build Coastguard Worker"${CGPT}" find "${MTD[@]}" -t kernel ${DEV} >/dev/null 364*8617a60dSAndroid Build Coastguard Worker 365*8617a60dSAndroid Build Coastguard Worker# Enable write access again to test boundary in off device storage 366*8617a60dSAndroid Build Coastguard Workerchmod 600 ${DEV} 367*8617a60dSAndroid Build Coastguard Worker# GPT too small 368*8617a60dSAndroid Build Coastguard Workerdd if=/dev/zero of=${DEV} bs=5632 count=1 369*8617a60dSAndroid Build Coastguard Workerassert_fail ""${CGPT}"" create -D 1024 ${DEV} 370*8617a60dSAndroid Build Coastguard Worker# GPT is just right for 16 entries (512 + 512 + 16 * 128) * 2 = 6144 371*8617a60dSAndroid Build Coastguard Workerdd if=/dev/zero of=${DEV} bs=6144 count=1 372*8617a60dSAndroid Build Coastguard Worker"${CGPT}" create -D 1024 ${DEV} 373*8617a60dSAndroid Build Coastguard Worker# Create a small 8K file to simulate Flash NOR section 374*8617a60dSAndroid Build Coastguard Workerdd if=/dev/zero of=${DEV} bs=8K count=1 375*8617a60dSAndroid Build Coastguard Worker# Drive size is not multiple of 512 376*8617a60dSAndroid Build Coastguard Workerassert_fail ""${CGPT}"" create -D 511 ${DEV} 377*8617a60dSAndroid Build Coastguard Workerassert_fail ""${CGPT}"" create -D 513 ${DEV} 378*8617a60dSAndroid Build Coastguard Worker# Create a GPT table for a device of 1024 bytes (2 sectors) 379*8617a60dSAndroid Build Coastguard Worker"${CGPT}" create -D 1024 ${DEV} 380*8617a60dSAndroid Build Coastguard Worker# Make sure number of entries is reasonable for 8KiB GPT 381*8617a60dSAndroid Build Coastguard WorkerX=$("${CGPT}" show -D 1024 -d ${DEV} | grep -c "Number of entries: 24") 382*8617a60dSAndroid Build Coastguard Worker[ "$X" = "2" ] || error 383*8617a60dSAndroid Build Coastguard Worker# This fails because header verification is off due to different drive size 384*8617a60dSAndroid Build Coastguard Workerassert_fail ""${CGPT}"" show ${DEV} 385*8617a60dSAndroid Build Coastguard Worker# But this passes because we pass in correct drive size 386*8617a60dSAndroid Build Coastguard Worker"${CGPT}" show -D 1024 ${DEV} 387*8617a60dSAndroid Build Coastguard Worker# This fails because beginning sector is over the size of the device 388*8617a60dSAndroid Build Coastguard Workerassert_fail ""${CGPT}"" add -D 1024 -b 2 -s 1 -t data ${DEV} 389*8617a60dSAndroid Build Coastguard Worker# This fails because partition size is over the size of the device 390*8617a60dSAndroid Build Coastguard Workerassert_fail ""${CGPT}"" add -D 1024 -b 0 -s 3 -t data ${DEV} 391*8617a60dSAndroid Build Coastguard Worker 392*8617a60dSAndroid Build Coastguard Worker 393*8617a60dSAndroid Build Coastguard Workerecho "Done." 394*8617a60dSAndroid Build Coastguard Worker 395*8617a60dSAndroid Build Coastguard Workerhappy "All tests passed." 396