fsck -fn $dev >&2
}
-setup_environment() {
- if [ -f $1 ]; then
- . $environment
- setup_env
- fi
-}
-
-reset_environment() {
- if [ -f $1 ]; then
- reset_env
- unset setup_env
- unset reset_env
- fi
-}
-
for script in tests/$prefix tests/$prefix*[^~]
do
if [ -f "$script" ]
$mdadm -Ssq 2> /dev/null
mdadm --zero $devlist 2> /dev/null
mdadm --zero $devlist 2> /dev/null
- environment="tests/env-`basename $script`"
- setup_environment $environment
# source script in a subshell, so it has access to our
# namespace, but cannot change it.
echo -ne "$script... "
if ( set -ex ; . $script ) 2> $targetdir/log
then echo "succeeded"
else echo "FAILED"
- reset_environment $environment
exit 1
fi
- reset_environment $environment
fi
done
exit 0
+imsm_check() {
+ case $1 in
+ container )
+ grep -s "$(((418 * $2)/2)) blocks super external:imsm" /proc/mdstat > /dev/null || {
+ echo >&2 "ERROR correctly formed container not found"; cat /proc/mdstat; exit 1;}
+ ;;
+ member )
+ member=$2
+ num_disks=$3
+ level=$4
+ size=$5
+ offset=$6
+ err=0
+
+ eval `stat -L -c "let major=0x%t; let minor=0x%T;" $member`
+ sysfs=/sys/dev/block/${major}:${minor}
+ if [ ! -f ${sysfs}/md/array_state ]; then
+ echo "member array $member not found" >&2
+ cat /proc/mdstat >&2
+ exit 1
+ fi
+ for i in `seq 0 $((num_disks-1))`
+ do
+ _offset=`cat ${sysfs}/md/rd${i}/offset`
+ if [ $offset -ne $((_offset/2)) ]; then
+ echo "offset mismatch expected $offset got $_offset" >&2
+ err=$((err+1))
+ fi
+ _size=`cat ${sysfs}/md/rd${i}/size`
+ if [ $size -ne $_size ]; then
+ echo "offset mismatch expected $size got $_size" >&2
+ err=$((err+1))
+ fi
+ done
+
+ if [ $err -gt 0 ]; then
+ echo "$member failed check" >&2
+ cat /proc/mdstat >&2
+ mdadm -E /dev/loop0 >&2
+ exit 1
+ fi
+ ;;
+ * ) echo >&2 ERROR unknown check $1 ; exit 1;
+ esac
+}
+
+export IMSM_DEVNAME_AS_SERIAL=1
+export IMSM_NO_PLATFORM=1
+container=/dev/md/container
+member0=/dev/md/vol0
+member1=/dev/md/vol1
+member2=/dev/md/vol2
+member3=/dev/md/vol3
+member4=/dev/md/vol4
+
+
# create raid arrays with varying degress of overlap
mdadm -CR $container -e imsm -n 6 $dev0 $dev1 $dev2 $dev3 $dev4 $dev5
imsm_check container 6
# validate the prodigal member disk scenario i.e. a former container
# member is returned after having been rebuilt on another system
+
+
+imsm_check_hold() {
+ if mdadm --remove $1 $2; then
+ echo "$2 removal from $1 should have been blocked" >&2
+ cat /proc/mdstat >&2
+ mdadm -E $2
+ exit 1
+ fi
+}
+
+imsm_check_removal() {
+ if ! mdadm --remove $1 $2 ; then
+ echo "$2 removal from $1 should have succeeded" >&2
+ cat /proc/mdstat >&2
+ mdadm -E $2
+ exit 1
+ fi
+}
+
+export IMSM_DEVNAME_AS_SERIAL=1
+export IMSM_TEST_OROM=1
+container=/dev/md/container
+member=/dev/md/vol0
+
+
num_disks=4
size=$((10*1024))
mdadm -CR $container -e imsm -n $num_disks $dev0 $dev1 $dev2 $dev3
# sanity check array creation
+imsm_check_hold() {
+ if mdadm --remove $1 $2; then
+ echo "$2 removal from $1 should have been blocked" >&2
+ cat /proc/mdstat >&2
+ mdadm -E $2
+ exit 1
+ fi
+}
+
+imsm_check_removal() {
+ if ! mdadm --remove $1 $2 ; then
+ echo "$2 removal from $1 should have succeeded" >&2
+ cat /proc/mdstat >&2
+ mdadm -E $2
+ exit 1
+ fi
+}
+
+imsm_check() {
+ udevadm settle
+ case $1 in
+ container )
+ grep -s "$(((418 * $2)/2)) blocks super external:imsm" /proc/mdstat > /dev/null || {
+ echo >&2 "ERROR correctly formed container not found"; cat /proc/mdstat; exit 1;}
+ ;;
+ member )
+ member=$2
+ num_disks=$3
+ level=$4
+ size=$5
+ offset=$6
+ chunk=$7
+ err=0
+
+ if [ $level -ne 1 ]; then
+ size=$((size & ~(chunk - 1)))
+ else
+ chunk=64
+ fi
+ eval `stat -L -c "let major=0x%t; let minor=0x%T;" $member`
+ sysfs=/sys/dev/block/${major}:${minor}
+ if [ ! -f ${sysfs}/md/array_state ]; then
+ echo "member array $member not found" >&2
+ cat /proc/mdstat >&2
+ exit 1
+ fi
+ _chunk=`cat ${sysfs}/md/chunk_size`
+ if [ $chunk -ne $((_chunk/1024)) ]; then
+ echo "chunk mismatch expected $chunk got $_chunk" >&2
+ err=$((err+1))
+ fi
+ for i in `seq 0 $((num_disks-1))`
+ do
+ _offset=`cat ${sysfs}/md/rd${i}/offset`
+ if [ $offset -ne $((_offset/2)) ]; then
+ echo "offset mismatch expected $offset got $_offset" >&2
+ err=$((err+1))
+ fi
+ _size=`cat ${sysfs}/md/rd${i}/size`
+ if [ $size -ne $_size ]; then
+ echo "size mismatch expected $size got $_size" >&2
+ err=$((err+1))
+ fi
+ done
+
+ if [ $err -gt 0 ]; then
+ echo "$member failed check" >&2
+ cat /proc/mdstat >&2
+ mdadm -E /dev/loop0 >&2
+ exit 1
+ fi
+ ;;
+ * ) echo >&2 ERROR unknown check $1 ; exit 1;
+ esac
+}
+
+export IMSM_DEVNAME_AS_SERIAL=1
+export IMSM_TEST_OROM=1
+container=/dev/md/container
+member0=/dev/md/vol0
+member1=/dev/md/vol1
+member2=/dev/md/vol2
+member3=/dev/md/vol3
+member4=/dev/md/vol4
+
# IMSM rounds to multiples of one mebibyte - 1024K
DEV_ROUND_K=1024
# above number 7 bigger again by any amount (this is not changed for now as it
# could affect other tests)
+export IMSM_DEVNAME_AS_SERIAL=1
+export IMSM_TEST_OROM=1
+export IMSM_NO_PLATFORM=1
+
. tests/utils
set -ex
verbose="yes"
+. tests/env-imsm-template
+
# RAID 0 volume, 2 disks grow to RAID 0 volume, 3 disks
# POSITIVE test
+. tests/env-imsm-template
+
# RAID 0 volume, 2 disks grow to RAID 0 volume, 4 disks
# POSITIVE test
+. tests/env-imsm-template
+
# RAID 0 volume, 2 disks grow to RAID 0 volume, 5 disks
# POSITIVE test
+. tests/env-imsm-template
+
# RAID 0 volume, 3 disks grow to RAID 0 volume, 4 disks
# POSITIVE test
+. tests/env-imsm-template
+
# RAID 5 volume, 3 disks grow to RAID 5 volume, 4 disks
# POSITIVE test
+. tests/env-imsm-template
+
# RAID 5 volume, 3 disks grow to RAID 5 volume, 5 disks
# POSITIVE test
+. tests/env-imsm-template
+
# Grow the container (arrays inside) from 2 disks to 4 disks
# POSITIVE test
+. tests/env-imsm-template
+
# Grow both members from 2 disks to 5 disks
# POSITIVE test
+. tests/env-imsm-template
+
# Grow a container (arrays inside) from 3 disks to 4 disks
# POSITIVE test
+. tests/env-imsm-template
+
# Grow the container (arrays inside) from 3 disks to 4 disks
# POSITIVE test
+. tests/env-imsm-template
+
# Grow the container (arrays inside) from 3 disks to 5 disks
# POSITIVE test
+. tests/env-imsm-template
+
# Grow the container (arrays inside) from 3 disks to 4 disks
# POSITIVE test
+. tests/env-imsm-template
+
# Grow the container (arrays inside) from 3 disks to 5 disks
# POSITIVE test
+. tests/env-imsm-template
+
# RAID 0 and RAID 5 volumes (3 disks) migrate to RAID 5 and RAID 5 volumes (4 disks)
# NEGATIVE test - migration is not allowed if there is more then one array in a container
+. tests/env-imsm-template
+
# RAID 0 volume (3 disks, no spares) migrate to RAID 5 volume (3 disks)
# NEGATIVE test
+. tests/env-imsm-template
+
# Two RAID 0 volumes (2 disks) migrate to RAID 10 volume (4 disks)
# NEGATIVE test
+. tests/env-imsm-template
+
# RAID 10 volume, 4 disks grow to RAID 10 volume, 5 disks
# NEGATIVE test
+. tests/env-imsm-template
+
# Two RAID volumes: RAID10 and RAID5 (4 disks) migrate to RAID 0 volume (2 disks)
# NEGATIVE test
+. tests/env-imsm-template
+
# RAID 1 volume, 2 disks grow to RAID 1 volume, 3 disks
# NEGATIVE test
+. tests/env-imsm-template
+
# RAID 1 volume, 2 disks change to RAID 0 volume, 2 disks
#
#NEGATIVE test
+. tests/env-imsm-template
+
# RAID 5 volume, 3 disks grow to RAID 5 volume, 4 disks
# NEGATIVE test
+. tests/env-imsm-template
+
# RAID 5 volume (3 disks) migrate to RAID 4 volume (3 disks)
# NEGATIVE test
+. tests/env-imsm-template
+
# RAID 0 volume, Migration from 64k to 256k chunk size.
# POSITIVE test
+. tests/env-imsm-template
+
# RAID 5 volume, Migration from 4k to 256 chunk size.
# POSITIVE test
+. tests/env-imsm-template
+
# RAID 5 volume, Migration from 64k to 256k chunk size.
# POSITIVE test
+. tests/env-imsm-template
+
# RAID 5 volume, Migration from 4k to 256k chunk size.
# POSITIVE test
+. tests/env-imsm-template
+
# Member 0: RAID 5 volume, Member 1: RAID 0 volume
# Migration from 64k to 256k chunk size (both members)
# POSITIVE test
+. tests/env-imsm-template
+
# RAID 0 volume (3 disks) migrate to RAID 5 volume (4 disks)
# POSITIVE test
+. tests/env-imsm-template
+
# RAID 0 volume (5 disks) migrate to RAID 5 volume (6 disks)
# POSITIVE test
+. tests/env-imsm-template
+
# RAID 5 volume (3 disks) migrate to RAID 0 volume (3 disks)
# POSITIVE test
+. tests/env-imsm-template
+
# RAID 5 volume (5 disks) migration to RAID 0 volume (5 disks)
# POSITIVE test
+. tests/env-imsm-template
+
# Create RAID 0 from a single disk.
# POSITIVE test
+. tests/env-imsm-template
+
# Create RAID 1 from a single disk
# POSITIVE test
+. tests/env-imsm-template
+
# RAID 0 volume, 2 disks change to RAID 10 volume, 4 disks
# POSITIVE test
+. tests/env-imsm-template
+
# RAID 10 volume, 4 disks change to RAID 0 volume, 2 disks
# POSITIVE test
+++ /dev/null
-imsm_check() {
- case $1 in
- container )
- grep -s "$(((418 * $2)/2)) blocks super external:imsm" /proc/mdstat > /dev/null || {
- echo >&2 "ERROR correctly formed container not found"; cat /proc/mdstat; exit 1;}
- ;;
- member )
- member=$2
- num_disks=$3
- level=$4
- size=$5
- offset=$6
- err=0
-
- eval `stat -L -c "let major=0x%t; let minor=0x%T;" $member`
- sysfs=/sys/dev/block/${major}:${minor}
- if [ ! -f ${sysfs}/md/array_state ]; then
- echo "member array $member not found" >&2
- cat /proc/mdstat >&2
- exit 1
- fi
- for i in `seq 0 $((num_disks-1))`
- do
- _offset=`cat ${sysfs}/md/rd${i}/offset`
- if [ $offset -ne $((_offset/2)) ]; then
- echo "offset mismatch expected $offset got $_offset" >&2
- err=$((err+1))
- fi
- _size=`cat ${sysfs}/md/rd${i}/size`
- if [ $size -ne $_size ]; then
- echo "offset mismatch expected $size got $_size" >&2
- err=$((err+1))
- fi
- done
-
- if [ $err -gt 0 ]; then
- echo "$member failed check" >&2
- cat /proc/mdstat >&2
- mdadm -E /dev/loop0 >&2
- exit 1
- fi
- ;;
- * ) echo >&2 ERROR unknown check $1 ; exit 1;
- esac
-}
-
-setup_env() {
- export IMSM_DEVNAME_AS_SERIAL=1
- export IMSM_NO_PLATFORM=1
- container=/dev/md/container
- member0=/dev/md/vol0
- member1=/dev/md/vol1
- member2=/dev/md/vol2
- member3=/dev/md/vol3
- member4=/dev/md/vol4
-}
-
-reset_env() {
- unset IMSM_DEVNAME_AS_SERIAL
- unset IMSM_NO_PLATFORM
- unset imsm_check
- unset container
- unset member0
- unset member1
- unset member2
- unset member3
- unset member4
-}
+++ /dev/null
-imsm_check_hold() {
- if mdadm --remove $1 $2; then
- echo "$2 removal from $1 should have been blocked" >&2
- cat /proc/mdstat >&2
- mdadm -E $2
- exit 1
- fi
-}
-
-imsm_check_removal() {
- if ! mdadm --remove $1 $2 ; then
- echo "$2 removal from $1 should have succeeded" >&2
- cat /proc/mdstat >&2
- mdadm -E $2
- exit 1
- fi
-}
-
-setup_env() {
- export IMSM_DEVNAME_AS_SERIAL=1
- export IMSM_TEST_OROM=1
- container=/dev/md/container
- member=/dev/md/vol0
-}
-
-reset_env() {
- unset IMSM_DEVNAME_AS_SERIAL
- unset IMSM_TEST_OROM
- unset imsm_check
- unset container
- unset member
-}
+++ /dev/null
-imsm_check_hold() {
- if mdadm --remove $1 $2; then
- echo "$2 removal from $1 should have been blocked" >&2
- cat /proc/mdstat >&2
- mdadm -E $2
- exit 1
- fi
-}
-
-imsm_check_removal() {
- if ! mdadm --remove $1 $2 ; then
- echo "$2 removal from $1 should have succeeded" >&2
- cat /proc/mdstat >&2
- mdadm -E $2
- exit 1
- fi
-}
-
-imsm_check() {
- udevadm settle
- case $1 in
- container )
- grep -s "$(((418 * $2)/2)) blocks super external:imsm" /proc/mdstat > /dev/null || {
- echo >&2 "ERROR correctly formed container not found"; cat /proc/mdstat; exit 1;}
- ;;
- member )
- member=$2
- num_disks=$3
- level=$4
- size=$5
- offset=$6
- chunk=$7
- err=0
-
- if [ $level -ne 1 ]; then
- size=$((size & ~(chunk - 1)))
- else
- chunk=64
- fi
- eval `stat -L -c "let major=0x%t; let minor=0x%T;" $member`
- sysfs=/sys/dev/block/${major}:${minor}
- if [ ! -f ${sysfs}/md/array_state ]; then
- echo "member array $member not found" >&2
- cat /proc/mdstat >&2
- exit 1
- fi
- _chunk=`cat ${sysfs}/md/chunk_size`
- if [ $chunk -ne $((_chunk/1024)) ]; then
- echo "chunk mismatch expected $chunk got $_chunk" >&2
- err=$((err+1))
- fi
- for i in `seq 0 $((num_disks-1))`
- do
- _offset=`cat ${sysfs}/md/rd${i}/offset`
- if [ $offset -ne $((_offset/2)) ]; then
- echo "offset mismatch expected $offset got $_offset" >&2
- err=$((err+1))
- fi
- _size=`cat ${sysfs}/md/rd${i}/size`
- if [ $size -ne $_size ]; then
- echo "size mismatch expected $size got $_size" >&2
- err=$((err+1))
- fi
- done
-
- if [ $err -gt 0 ]; then
- echo "$member failed check" >&2
- cat /proc/mdstat >&2
- mdadm -E /dev/loop0 >&2
- exit 1
- fi
- ;;
- * ) echo >&2 ERROR unknown check $1 ; exit 1;
- esac
-}
-
-setup_env() {
- export IMSM_DEVNAME_AS_SERIAL=1
- export IMSM_TEST_OROM=1
- container=/dev/md/container
- member0=/dev/md/vol0
- member1=/dev/md/vol1
- member2=/dev/md/vol2
- member3=/dev/md/vol3
- member4=/dev/md/vol4
-}
-
-reset_env() {
- unset IMSM_DEVNAME_AS_SERIAL
- unset IMSM_TEST_OROM
- unset imsm_check
- unset container
- unset member0
- unset member1
- unset member2
- unset member3
- unset member4
-}
+++ /dev/null
-setup_env() {
- export IMSM_DEVNAME_AS_SERIAL=1
- export IMSM_TEST_OROM=1
- export IMSM_NO_PLATFORM=1
- }
-
-reset_env() {
- unset IMSM_DEVNAME_AS_SERIAL
- unset IMSM_TEST_OROM
- unset IMSM_NO_PLATFORM
-}
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
+++ /dev/null
-env-imsm-template
\ No newline at end of file
esac
}
-setup_env() {
- export IMSM_NO_PLATFORM=1
- export IMSM_DEVNAME_AS_SERIAL=1
- export IMSM_TEST_OROM=1
- export MDADM_EXPERIMENTAL=1
- container=/dev/md/container
- member0=/dev/md/vol0
- member1=/dev/md/vol1
-}
-
-reset_env() {
- unset IMSM_NO_PLATFORM
- unset IMSM_DENAME_AS_SERIAL
- unset IMSM_TEST_OROM
- unset MDADM_EXPERIMENTAL
- unset member0
- unset member1
- unset imsm_check
- unset container
- rm -f /tmp/backup_imsm
-}
+export IMSM_NO_PLATFORM=1
+export IMSM_DEVNAME_AS_SERIAL=1
+export IMSM_TEST_OROM=1
+export MDADM_EXPERIMENTAL=1
+container=/dev/md/container
+member0=/dev/md/vol0
+member1=/dev/md/vol1