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." |