| #!/bin/bash |
| |
| # |
| # Copyright (C) 2010 Davidlohr Bueso <dave@gnu.org> |
| # |
| # This file is part of util-linux. |
| # |
| # This file is free software; you can redistribute it and/or modify |
| # it under the terms of the GNU General Public License as published by |
| # the Free Software Foundation; either version 2 of the License, or |
| # (at your option) any later version. |
| # |
| # This file is distributed in the hope that it will be useful, |
| # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| # GNU General Public License for more details. |
| # |
| |
| TS_TOPDIR="${0%/*}/../.." |
| TS_DESC="partitions probing" |
| PARTS=3 |
| |
| . $TS_TOPDIR/functions.sh |
| ts_init "$*" |
| |
| ts_check_test_command "$TS_CMD_PARTX" |
| ts_check_test_command "$TS_CMD_ADDPART" |
| ts_check_test_command "$TS_CMD_DELPART" |
| |
| ts_skip_nonroot |
| |
| shopt -s nullglob |
| |
| function check_partition_count |
| { |
| # this function needs shopt -s nullglob |
| local cnt_want=$1 |
| local devname=$(basename $TS_DEVICE) |
| local parts=(/sys/block/${devname}/${devname}*) |
| local cnt_have=${#parts[@]} |
| |
| if [ $cnt_have -eq $cnt_want ]; then |
| return 0 |
| fi |
| echo "error: expected $cnt_want partitions, have $cnt_have" >&2 |
| echo "${parts[@]}" >&2 |
| return 1 |
| } |
| |
| # set global variable TS_DEVICE |
| ts_scsi_debug_init dev_size_mb=50 |
| |
| ts_init_subtest "addpart" |
| { |
| $TS_CMD_ADDPART ${TS_DEVICE} 1 0 1 && |
| echo OK || |
| echo "Unable to add partition" |
| check_partition_count 1 |
| } >$TS_OUTPUT 2>&1 |
| ts_finalize_subtest |
| |
| udevadm settle |
| |
| ts_init_subtest "delpart" |
| { |
| $TS_CMD_DELPART ${TS_DEVICE} 1 && |
| echo OK || |
| echo "Unable to remove partition" |
| check_partition_count 0 |
| } >$TS_OUTPUT 2>&1 |
| ts_finalize_subtest |
| |
| ts_scsi_debug_rmmod |
| |
| # set global variable TS_DEVICE |
| ts_scsi_debug_init dev_size_mb=50 num_parts=$PARTS |
| |
| ts_init_subtest "detect-parts" |
| { |
| $TS_CMD_PARTX --show $TS_DEVICE && |
| echo OK || |
| echo "Unable to list partitions" |
| check_partition_count $PARTS |
| } >$TS_OUTPUT 2>&1 |
| ts_finalize_subtest |
| |
| udevadm settle |
| |
| ts_init_subtest "delete-all" |
| #delete partinfo |
| { |
| $TS_CMD_PARTX --delete $TS_DEVICE && |
| echo "partitions deleted" || |
| echo "Unable to delete partitions on $TS_DEVICE" |
| check_partition_count 0 |
| } >$TS_OUTPUT 2>&1 |
| ts_finalize_subtest |
| |
| udevadm settle |
| |
| ts_init_subtest "add-all" |
| #read TS_DEVICE and restore the partinfo |
| { |
| $TS_CMD_PARTX --add $TS_DEVICE && |
| echo "partitions added" || |
| echo "Unable to add partitions for $TS_DEVICE" |
| check_partition_count $PARTS |
| } >$TS_OUTPUT 2>&1 |
| ts_finalize_subtest |
| |
| udevadm settle |
| |
| ts_init_subtest "update-one" |
| #read TS_DEVICE and update second partition |
| { |
| $TS_CMD_PARTX --update ${TS_DEVICE}2 && |
| echo "partitions updated" || |
| echo "Unable to update 2nd partition for $TS_DEVICE" |
| check_partition_count $PARTS |
| } >$TS_OUTPUT 2>&1 |
| ts_finalize_subtest |
| |
| udevadm settle |
| |
| ts_init_subtest "delete-one" |
| #remove last partition only |
| { |
| $TS_CMD_PARTX -d --nr -1 $TS_DEVICE && |
| echo "last partition removed" || |
| echo "Unable to remove a partition on $TS_DEVICE" |
| check_partition_count $((PARTS-1)) |
| } >$TS_OUTPUT 2>&1 |
| ts_finalize_subtest |
| |
| udevadm settle |
| |
| ts_init_subtest "delete-non-existent" |
| #attempt to remove it again |
| { |
| $TS_CMD_PARTX -d --nr $PARTS $TS_DEVICE && |
| echo "partx failed: removed non-existing partition" || |
| echo "partx: OK" |
| } >$TS_OUTPUT 2>&1 |
| ts_finalize_subtest |
| |
| udevadm settle |
| |
| ts_init_subtest "add-existing" |
| #try adding an existing partition |
| { |
| $TS_CMD_PARTX -a --nr 1 $TS_DEVICE 2>/dev/null && |
| echo "partx failed: re-added an existing partition" || |
| echo "partx: OK" |
| } >$TS_OUTPUT 2>&1 |
| ts_finalize_subtest |
| |
| udevadm settle |
| |
| ts_init_subtest "change-by-range" |
| # {-a|-d} --nr 0 should handle all partitions |
| { |
| $TS_CMD_PARTX -d --nr 0 $TS_DEVICE && |
| echo "partitions deleted" || |
| echo "Unable to delete partitions on $TS_DEVICE" |
| check_partition_count 0 |
| $TS_CMD_PARTX -a --nr 0 $TS_DEVICE && |
| echo "partitions added" || |
| echo "Failed to add $TS_DEVICE partitions" |
| check_partition_count $PARTS |
| } >$TS_OUTPUT 2>&1 |
| ts_finalize_subtest |
| |
| ts_finalize |