xref: /aosp_15_r20/external/vboot_reference/tests/run_cgpt_tests.sh (revision 8617a60d3594060b7ecbd21bc622a7c14f3cf2bc)
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