Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(26)

Unified Diff: tests/run_cgpt_tests.sh

Issue 5352005: Add 'prioritize' command to cgpt tool. (Closed) Base URL: ssh://git@gitrw.chromium.org:9222/vboot_reference.git@master
Patch Set: Created 10 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/common.sh ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/run_cgpt_tests.sh
diff --git a/tests/run_cgpt_tests.sh b/tests/run_cgpt_tests.sh
index 577d7b1674343dddf400d32906fc75703a8ca650..ffd6f68d3e8128ce7ff8f1d3d02f4c4189b5debb 100755
--- a/tests/run_cgpt_tests.sh
+++ b/tests/run_cgpt_tests.sh
@@ -81,27 +81,27 @@ echo "Extract the start and size of given partitions..."
X=$($GPT show -b -i $DATA_NUM ${DEV})
Y=$($GPT show -s -i $DATA_NUM ${DEV})
-[ "$X $Y" = "$DATA_START $DATA_SIZE" ] || error "fail at line $LINENO"
+[ "$X $Y" = "$DATA_START $DATA_SIZE" ] || error
X=$($GPT show -b -i $KERN_NUM ${DEV})
Y=$($GPT show -s -i $KERN_NUM ${DEV})
-[ "$X $Y" = "$KERN_START $KERN_SIZE" ] || error "fail at line $LINENO"
+[ "$X $Y" = "$KERN_START $KERN_SIZE" ] || error
X=$($GPT show -b -i $ROOTFS_NUM ${DEV})
Y=$($GPT show -s -i $ROOTFS_NUM ${DEV})
-[ "$X $Y" = "$ROOTFS_START $ROOTFS_SIZE" ] || error "fail at line $LINENO"
+[ "$X $Y" = "$ROOTFS_START $ROOTFS_SIZE" ] || error
X=$($GPT show -b -i $ESP_NUM ${DEV})
Y=$($GPT show -s -i $ESP_NUM ${DEV})
-[ "$X $Y" = "$ESP_START $ESP_SIZE" ] || error "fail at line $LINENO"
+[ "$X $Y" = "$ESP_START $ESP_SIZE" ] || error
X=$($GPT show -b -i $FUTURE_NUM ${DEV})
Y=$($GPT show -s -i $FUTURE_NUM ${DEV})
-[ "$X $Y" = "$FUTURE_START $FUTURE_SIZE" ] || error "fail at line $LINENO"
+[ "$X $Y" = "$FUTURE_START $FUTURE_SIZE" ] || error
X=$($GPT show -b -i $RANDOM_NUM ${DEV})
Y=$($GPT show -s -i $RANDOM_NUM ${DEV})
-[ "$X $Y" = "$RANDOM_START $RANDOM_SIZE" ] || error "fail at line $LINENO"
+[ "$X $Y" = "$RANDOM_START $RANDOM_SIZE" ] || error
echo "Set the boot partition.."
@@ -110,7 +110,127 @@ $GPT boot -i ${KERN_NUM} ${DEV} >/dev/null
echo "Check the PMBR's idea of the boot partition..."
X=$($GPT boot ${DEV})
Y=$($GPT show -u -i $KERN_NUM $DEV)
-[ "$X" = "$Y" ] || error "fail at line $LINENO"
+[ "$X" = "$Y" ] || error
+
+
+echo "Test the cgpt prioritize command..."
+
+# Input: sequence of priorities
+# Output: ${DEV} has kernel partitions with the given priorities
+make_pri() {
+ local idx=0
+ $GPT create ${DEV}
+ for pri in "$@"; do
+ idx=$((idx+1))
+ $GPT add -t kernel -l "kern$idx" -b $((100 + 2 * $idx)) -s 1 -P $pri ${DEV}
+ done
+}
+
+# Output: returns string containing priorities of all kernels
+get_pri() {
+ echo $(
+ for idx in $($GPT find -t kernel ${DEV} | sed -e s@${DEV}@@); do
+ $GPT show -i $idx -P ${DEV}
+ done
+ )
+}
+
+# Input: list of priorities
+# Operation: expects ${DEV} to contain those kernel priorities
+assert_pri() {
+ local expected="$*"
+ local actual=$(get_pri)
+ [ "$actual" = "$expected" ] || \
+ error 1 "expected priority \"$expected\", actual priority \"$actual\""
+}
+
+
+# no kernels at all. This should do nothing.
+$GPT create ${DEV}
+$GPT add -t rootfs -b 100 -s 1 ${DEV}
+$GPT prioritize ${DEV}
+assert_pri ""
+
+# common install/upgrade sequence
+make_pri 2 0 0
+$GPT prioritize -i 1 ${DEV}
+assert_pri 1 0 0
+$GPT prioritize -i 2 ${DEV}
+assert_pri 1 2 0
+$GPT prioritize -i 1 ${DEV}
+assert_pri 2 1 0
+$GPT prioritize -i 2 ${DEV}
+assert_pri 1 2 0
+
+# lots of kernels, all same starting priority, should go to priority 1
+make_pri 8 8 8 8 8 8 8 8 8 8 8 0 0 8
+$GPT prioritize ${DEV}
+assert_pri 1 1 1 1 1 1 1 1 1 1 1 0 0 1
+
+# now raise them all up again
+$GPT prioritize -P 4 ${DEV}
+assert_pri 4 4 4 4 4 4 4 4 4 4 4 0 0 4
+
+# set one of them higher, should leave the rest alone
+$GPT prioritize -P 5 -i 3 ${DEV}
+assert_pri 4 4 5 4 4 4 4 4 4 4 4 0 0 4
+
+# set one of them lower, should bring the rest down
+$GPT prioritize -P 3 -i 4 ${DEV}
+assert_pri 1 1 2 3 1 1 1 1 1 1 1 0 0 1
+
+# raise a group by including the friends of one partition
+$GPT prioritize -P 6 -i 1 -f ${DEV}
+assert_pri 6 6 4 5 6 6 6 6 6 6 6 0 0 6
+
+# resurrect one, should not affect the others
+make_pri 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+$GPT prioritize -i 2 ${DEV}
+assert_pri 0 1 0 0 0 0 0 0 0 0 0 0 0 0
+
+# resurrect one and all its friends
+make_pri 0 0 0 0 0 0 0 0 1 2 0 0 0 0
+$GPT prioritize -P 5 -i 2 -f ${DEV}
+assert_pri 5 5 5 5 5 5 5 5 3 4 5 5 5 5
+
+# no options should maintain the same order
+$GPT prioritize ${DEV}
+assert_pri 3 3 3 3 3 3 3 3 1 2 3 3 3 3
+
+# squish all the ranks
+make_pri 1 1 2 2 3 3 4 4 5 5 0 6 7 7
+$GPT prioritize -P 6 ${DEV}
+assert_pri 1 1 1 1 2 2 3 3 4 4 0 5 6 6
+
+# squish the ranks by not leaving room
+make_pri 1 1 2 2 3 3 4 4 5 5 0 6 7 7
+$GPT prioritize -P 7 -i 3 ${DEV}
+assert_pri 1 1 7 1 2 2 3 3 4 4 0 5 6 6
+
+# squish the ranks while bringing the friends along
+make_pri 1 1 2 2 3 3 4 4 5 5 0 6 7 7
+$GPT prioritize -P 6 -i 3 -f ${DEV}
+assert_pri 1 1 6 6 1 1 2 2 3 3 0 4 5 5
+
+# squish them pretty hard
+make_pri 1 1 2 2 3 3 4 4 5 5 0 6 7 7
+$GPT prioritize -P 2 ${DEV}
+assert_pri 1 1 1 1 1 1 1 1 1 1 0 1 2 2
+
+# squish them really really hard (nobody gets reduced to zero, though)
+make_pri 1 1 2 2 3 3 4 4 5 5 0 6 7 7
+$GPT prioritize -P 1 -i 3 ${DEV}
+assert_pri 1 1 1 1 1 1 1 1 1 1 0 1 1 1
+
+# squish if we try to go too high
+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
+$GPT prioritize -i 3 ${DEV}
+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
+$GPT prioritize -i 5 ${DEV}
+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
+# but if I bring friends I don't have to squish
+$GPT prioritize -i 1 -f ${DEV}
+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
echo "Done."
« no previous file with comments | « tests/common.sh ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698