aboutsummaryrefslogtreecommitdiff
path: root/tests/sys/geom/class/concat/append2.sh
diff options
context:
space:
mode:
Diffstat (limited to 'tests/sys/geom/class/concat/append2.sh')
-rw-r--r--tests/sys/geom/class/concat/append2.sh77
1 files changed, 77 insertions, 0 deletions
diff --git a/tests/sys/geom/class/concat/append2.sh b/tests/sys/geom/class/concat/append2.sh
new file mode 100644
index 000000000000..d008e976cf57
--- /dev/null
+++ b/tests/sys/geom/class/concat/append2.sh
@@ -0,0 +1,77 @@
+#!/bin/sh
+
+# A basic regression test for gconcat append using "gconcat label",
+# i.e., automatic mode.
+
+gconcat_check_size()
+{
+ local actual expected name
+
+ name=$1
+ expected=$2
+
+ actual=$(diskinfo /dev/concat/${name} | awk '{print $3}')
+ if [ $actual -eq $expected ]; then
+ echo "ok - Size is ${actual}"
+ else
+ echo "not ok - Size is ${actual}"
+ fi
+}
+
+. `dirname $0`/conf.sh
+
+echo '1..4'
+
+ss=512
+
+f1=$(mktemp) || exit 1
+truncate -s $((1024 * 1024 + $ss)) $f1
+f2=$(mktemp) || exit 1
+truncate -s $((1024 * 1024 + $ss)) $f2
+f3=$(mktemp) || exit 1
+truncate -s $((1024 * 1024 + $ss)) $f3
+
+attach_md us0 -f $f1 -S $ss || exit 1
+attach_md us1 -f $f2 -S $ss || exit 1
+attach_md us2 -f $f3 -S $ss || exit 1
+
+gconcat label $name /dev/$us0 /dev/$us1 || exit 1
+devwait
+
+# We should have a 2MB device. Add another disk and verify that the
+# reported size of the concat device grows accordingly. A sector from
+# each disk is reserved for the metadata sector.
+gconcat_check_size "${name}" $((2 * 1024 * 1024))
+gconcat append $name /dev/$us2 || exit 1
+gconcat_check_size "${name}" $((3 * 1024 * 1024))
+
+copy=$(mktemp) || exit 1
+dd if=/dev/random of=$copy bs=1M count=3 || exit 1
+dd if=$copy of=/dev/concat/${name} || exit 1
+
+# Stop the concat device and destroy the backing providers.
+gconcat stop ${name} || exit 1
+detach_md $us0
+detach_md $us1
+detach_md $us2
+
+# Re-create the providers and verify that the concat device comes
+# back and that the data is still there.
+attach_md us0 -f $f1 -S $ss || exit 1
+attach_md us1 -f $f2 -S $ss || exit 1
+attach_md us2 -f $f3 -S $ss || exit 1
+
+devwait
+
+# Make sure that the
+if [ -c /dev/concat/${name} ]; then
+ echo "ok - concat device was instantiated"
+else
+ echo "not ok - concat device was instantiated"
+fi
+
+if cmp -s $copy /dev/concat/${name}; then
+ echo "ok - Data was persisted across gconcat stop"
+else
+ echo "not ok - Data was persisted across gconcat stop"
+fi