diff --git a/tools/regression/geom_raid3/Makefile b/tools/regression/geom_raid3/Makefile new file mode 100644 index 000000000000..9eb76c66ffaa --- /dev/null +++ b/tools/regression/geom_raid3/Makefile @@ -0,0 +1,8 @@ +# +# $FreeBSD$ +# +# Regression tests for geom_raid3. +# + +test: + @sh runtests.sh diff --git a/tools/regression/geom_raid3/runtests.sh b/tools/regression/geom_raid3/runtests.sh new file mode 100644 index 000000000000..b22c1ff924be --- /dev/null +++ b/tools/regression/geom_raid3/runtests.sh @@ -0,0 +1,10 @@ +#!/bin/sh +# $FreeBSD$ + +dir=`dirname $0` + +graid3 load >/dev/null 2>&1 +for ts in `dirname $0`/test-*.sh; do + sh $ts +done +graid3 unload diff --git a/tools/regression/geom_raid3/test-1.sh b/tools/regression/geom_raid3/test-1.sh new file mode 100644 index 000000000000..7c116ad4686a --- /dev/null +++ b/tools/regression/geom_raid3/test-1.sh @@ -0,0 +1,34 @@ +#!/bin/sh +# $FreeBSD$ + +name="test" +base=`basename $0` +us0=45 +us1=`expr $us0 + 1` +us2=`expr $us0 + 2` + +mdconfig -a -t malloc -s 1M -u $us0 || exit 1 +mdconfig -a -t malloc -s 2M -u $us1 || exit 1 +mdconfig -a -t malloc -s 3M -u $us2 || exit 1 + +graid3 label $name /dev/md${us0} /dev/md${us1} /dev/md${us2} || exit 1 + +# Size of created device should be 1MB - 512b. + +mediasize=`diskinfo /dev/raid3/${name} | awk '{print $3}'` +if [ $mediasize -eq 2096128 ]; then + echo "PASS" +else + echo "FAIL" +fi +sectorsize=`diskinfo /dev/raid3/${name} | awk '{print $2}'` +if [ $sectorsize -eq 1024 ]; then + echo "PASS" +else + echo "FAIL" +fi + +graid3 stop $name +mdconfig -d -u $us0 +mdconfig -d -u $us1 +mdconfig -d -u $us2 diff --git a/tools/regression/geom_raid3/test-2.sh b/tools/regression/geom_raid3/test-2.sh new file mode 100644 index 000000000000..49a7de006529 --- /dev/null +++ b/tools/regression/geom_raid3/test-2.sh @@ -0,0 +1,36 @@ +#!/bin/sh +# $FreeBSD$ + +name="test" +base=`basename $0` +us0=45 +us1=`expr $us0 + 1` +us2=`expr $us0 + 2` +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp /tmp/$base.XXXXXX` || exit 1 +dst=`mktemp /tmp/$base.XXXXXX` || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us0 || exit 1 +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us1 || exit 1 +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us2 || exit 1 + +graid3 label $name /dev/md${us0} /dev/md${us1} /dev/md${us2} || exit 1 + +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "FAIL" +else + echo "PASS" +fi + +graid3 stop $name +mdconfig -d -u $us0 +mdconfig -d -u $us1 +mdconfig -d -u $us2 +rm -f ${src} ${dst} diff --git a/tools/regression/geom_raid3/test-3.sh b/tools/regression/geom_raid3/test-3.sh new file mode 100644 index 000000000000..d6765903b9d8 --- /dev/null +++ b/tools/regression/geom_raid3/test-3.sh @@ -0,0 +1,40 @@ +#!/bin/sh +# $FreeBSD$ + +name="test" +base=`basename $0` +us0=45 +us1=`expr $us0 + 1` +us2=`expr $us0 + 2` +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp /tmp/$base.XXXXXX` || exit 1 +dst=`mktemp /tmp/$base.XXXXXX` || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us0 || exit 1 +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us1 || exit 1 +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us2 || exit 1 + +graid3 label $name /dev/md${us0} /dev/md${us1} /dev/md${us2} || exit 1 + +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +# +# Reading without one DATA component (so with parity). +# +graid3 remove -n 1 $name +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "FAIL" +else + echo "PASS" +fi + +graid3 stop $name +mdconfig -d -u $us0 +mdconfig -d -u $us1 +mdconfig -d -u $us2 +rm -f ${src} ${dst} diff --git a/tools/regression/geom_raid3/test-4.sh b/tools/regression/geom_raid3/test-4.sh new file mode 100644 index 000000000000..19eed35a7bae --- /dev/null +++ b/tools/regression/geom_raid3/test-4.sh @@ -0,0 +1,40 @@ +#!/bin/sh +# $FreeBSD$ + +name="test" +base=`basename $0` +us0=45 +us1=`expr $us0 + 1` +us2=`expr $us0 + 2` +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp /tmp/$base.XXXXXX` || exit 1 +dst=`mktemp /tmp/$base.XXXXXX` || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us0 || exit 1 +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us1 || exit 1 +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us2 || exit 1 + +graid3 label $name /dev/md${us0} /dev/md${us1} /dev/md${us2} || exit 1 + +# +# Writing without one DATA component. +# +graid3 remove -n 1 $name +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "FAIL" +else + echo "PASS" +fi + +graid3 stop $name +mdconfig -d -u $us0 +mdconfig -d -u $us1 +mdconfig -d -u $us2 +rm -f ${src} ${dst} diff --git a/tools/regression/geom_raid3/test-5.sh b/tools/regression/geom_raid3/test-5.sh new file mode 100644 index 000000000000..5de21960debe --- /dev/null +++ b/tools/regression/geom_raid3/test-5.sh @@ -0,0 +1,40 @@ +#!/bin/sh +# $FreeBSD$ + +name="test" +base=`basename $0` +us0=45 +us1=`expr $us0 + 1` +us2=`expr $us0 + 2` +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp /tmp/$base.XXXXXX` || exit 1 +dst=`mktemp /tmp/$base.XXXXXX` || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us0 || exit 1 +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us1 || exit 1 +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us2 || exit 1 + +graid3 label $name /dev/md${us0} /dev/md${us1} /dev/md${us2} || exit 1 + +# +# Writing without PARITY component. +# +graid3 remove -n 2 $name +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "FAIL" +else + echo "PASS" +fi + +graid3 stop $name +mdconfig -d -u $us0 +mdconfig -d -u $us1 +mdconfig -d -u $us2 +rm -f ${src} ${dst} diff --git a/tools/regression/geom_raid3/test-6.sh b/tools/regression/geom_raid3/test-6.sh new file mode 100644 index 000000000000..778f38fd58a6 --- /dev/null +++ b/tools/regression/geom_raid3/test-6.sh @@ -0,0 +1,44 @@ +#!/bin/sh +# $FreeBSD$ + +name="test" +base=`basename $0` +us0=45 +us1=`expr $us0 + 1` +us2=`expr $us0 + 2` +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp /tmp/$base.XXXXXX` || exit 1 +dst=`mktemp /tmp/$base.XXXXXX` || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us0 || exit 1 +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us1 || exit 1 +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us2 || exit 1 + +graid3 label $name /dev/md${us0} /dev/md${us1} /dev/md${us2} || exit 1 + +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +# +# Rebuild of DATA component. +# +graid3 remove -n 1 $name +dd if=/dev/zero of=/dev/md${us1} bs=512 count=`expr $nblocks1 + 1` >/dev/null 2>&1 +graid3 insert -n 1 $name md${us1} +sleep 1 + +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "FAIL" +else + echo "PASS" +fi + +graid3 stop $name +mdconfig -d -u $us0 +mdconfig -d -u $us1 +mdconfig -d -u $us2 +rm -f ${src} ${dst} diff --git a/tools/regression/geom_raid3/test-7.sh b/tools/regression/geom_raid3/test-7.sh new file mode 100644 index 000000000000..b39de20da437 --- /dev/null +++ b/tools/regression/geom_raid3/test-7.sh @@ -0,0 +1,47 @@ +#!/bin/sh +# $FreeBSD$ + +name="test" +base=`basename $0` +us0=45 +us1=`expr $us0 + 1` +us2=`expr $us0 + 2` +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp /tmp/$base.XXXXXX` || exit 1 +dst=`mktemp /tmp/$base.XXXXXX` || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us0 || exit 1 +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us1 || exit 1 +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us2 || exit 1 + +graid3 label $name /dev/md${us0} /dev/md${us1} /dev/md${us2} || exit 1 + +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +# +# Rebuild of PARITY component. +# +graid3 remove -n 2 $name +dd if=/dev/zero of=/dev/md${us2} bs=512 count=`expr $nblocks1 + 1` >/dev/null 2>&1 +graid3 insert -n 2 $name md${us2} +sleep 1 +# Remove DATA component, so PARITY component can be used while reading. +graid3 remove -n 1 $name +dd if=/dev/zero of=/dev/md${us1} bs=512 count=`expr $nblocks1 + 1` >/dev/null 2>&1 + +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "FAIL" +else + echo "PASS" +fi + +graid3 stop $name +mdconfig -d -u $us0 +mdconfig -d -u $us1 +mdconfig -d -u $us2 +rm -f ${src} ${dst} diff --git a/tools/regression/geom_raid3/test-8.sh b/tools/regression/geom_raid3/test-8.sh new file mode 100644 index 000000000000..ea319686418b --- /dev/null +++ b/tools/regression/geom_raid3/test-8.sh @@ -0,0 +1,43 @@ +#!/bin/sh +# $FreeBSD$ + +name="test" +base=`basename $0` +us0=45 +us1=`expr $us0 + 1` +us2=`expr $us0 + 2` +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp /tmp/$base.XXXXXX` || exit 1 +dst=`mktemp /tmp/$base.XXXXXX` || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us0 || exit 1 +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us1 || exit 1 +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us2 || exit 1 + +graid3 label $name /dev/md${us0} /dev/md${us1} /dev/md${us2} || exit 1 + +# +# Writing without DATA component and rebuild of DATA component. +# +graid3 remove -n 1 $name +dd if=/dev/zero of=/dev/md${us1} bs=512 count=`expr $nblocks1 + 1` >/dev/null 2>&1 +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +graid3 insert -n 1 $name md${us1} +sleep 1 + +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "FAIL" +else + echo "PASS" +fi + +graid3 stop $name +mdconfig -d -u $us0 +mdconfig -d -u $us1 +mdconfig -d -u $us2 +rm -f ${src} ${dst} diff --git a/tools/regression/geom_raid3/test-9.sh b/tools/regression/geom_raid3/test-9.sh new file mode 100644 index 000000000000..eeb5429956ce --- /dev/null +++ b/tools/regression/geom_raid3/test-9.sh @@ -0,0 +1,46 @@ +#!/bin/sh +# $FreeBSD$ + +name="test" +base=`basename $0` +us0=45 +us1=`expr $us0 + 1` +us2=`expr $us0 + 2` +ddbs=2048 +nblocks1=1024 +nblocks2=`expr $nblocks1 / \( $ddbs / 512 \)` +src=`mktemp /tmp/$base.XXXXXX` || exit 1 +dst=`mktemp /tmp/$base.XXXXXX` || exit 1 + +dd if=/dev/random of=${src} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 + +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us0 || exit 1 +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us1 || exit 1 +mdconfig -a -t malloc -s `expr $nblocks1 + 1` -u $us2 || exit 1 + +graid3 label $name /dev/md${us0} /dev/md${us1} /dev/md${us2} || exit 1 + +# +# Writing without PARITY component and rebuild of PARITY component. +# +graid3 remove -n 2 $name +dd if=/dev/zero of=/dev/md${us2} bs=512 count=`expr $nblocks1 + 1` >/dev/null 2>&1 +dd if=${src} of=/dev/raid3/${name} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +graid3 insert -n 2 $name md${us2} +sleep 1 +# Remove DATA component, so PARITY component can be used while reading. +graid3 remove -n 1 $name +dd if=/dev/zero of=/dev/md${us1} bs=512 count=`expr $nblocks1 + 1` >/dev/null 2>&1 + +dd if=/dev/raid3/${name} of=${dst} bs=$ddbs count=$nblocks2 >/dev/null 2>&1 +if [ `md5 -q ${src}` != `md5 -q ${dst}` ]; then + echo "FAIL" +else + echo "PASS" +fi + +graid3 stop $name +mdconfig -d -u $us0 +mdconfig -d -u $us1 +mdconfig -d -u $us2 +rm -f ${src} ${dst}