[PATCH] add basic device mapper tests

Guido Guenther agx at sigxcpu.org
Tue May 13 17:01:36 UTC 2008


---
 tests/Makefile.am |    3 +-
 tests/dm-utils.sh |   95 +++++++++++++++++++++++++++++++++++++++++
 tests/t6000-dm.sh |  122 +++++++++++++++++++++++++++++++++++++++++++++++++++++
 tests/test-lib.sh |    4 ++
 4 files changed, 223 insertions(+), 1 deletions(-)
 create mode 100644 tests/dm-utils.sh
 create mode 100755 tests/t6000-dm.sh

diff --git a/tests/Makefile.am b/tests/Makefile.am
index d9b0878..fa656c2 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -10,7 +10,8 @@ TESTS = \
   t3100-resize-ext2-partion.sh \
   t4100-msdos-partition-limits.sh \
   t4100-dvh-partition-limits.sh \
-  t5000-tags.sh
+  t5000-tags.sh \
+  t6000-dm.sh
 
 EXTRA_DIST = \
   $(TESTS) test-lib.sh mkdtemp
diff --git a/tests/dm-utils.sh b/tests/dm-utils.sh
new file mode 100644
index 0000000..146fcc6
--- /dev/null
+++ b/tests/dm-utils.sh
@@ -0,0 +1,95 @@
+# Put lvm-related utilities here.
+# This file is sourced from test-lib.sh.
+
+# Copyright (C) 2007 Red Hat, Inc. All rights reserved.
+#
+# This copyrighted material is made available to anyone wishing to use,
+# modify, copy, or redistribute it subject to the terms and conditions
+# of the GNU General Public License v.2.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+export LVM_SUPPRESS_FD_WARNINGS=1
+
+ME=$(basename "$0")
+warn() { echo >&2 "$ME: $@"; }
+
+unsafe_losetup_()
+{
+  f=$1
+
+  test -n "$G_dev_" \
+    || error "Internal error: unsafe_losetup_ called before init_root_dir_"
+
+  # Iterate through $G_dev_/loop{,/}{0,1,2,3,4,5,6,7,8,9}
+  for slash in '' /; do
+    for i in 0 1 2 3 4 5 6 7 8 9; do
+      dev=$G_dev_/loop$slash$i
+      losetup $dev > /dev/null 2>&1 && continue;
+      losetup "$dev" "$f" > /dev/null && { echo "$dev"; return 0; }
+      break
+    done
+  done
+
+  return 1
+}
+
+loop_setup_()
+{
+  file=$1
+  dd if=/dev/zero of="$file" bs=1M count=1 seek=1000 > /dev/null 2>&1 \
+    || { warn "loop_setup_ failed: Unable to create tmp file $file"; return 1; }
+
+  # NOTE: this requires a new enough version of losetup
+  dev=$(unsafe_losetup_ "$file" 2>/dev/null) \
+    || { warn "loop_setup_ failed: Unable to create loopback device"; return 1; }
+
+  echo "$dev"
+  return 0;
+}
+
+dmsetup_has_dm_devdir_support_()
+{
+  # Detect support for the envvar.  If it's supported, the
+  # following command will fail with the expected diagnostic.
+  out=$(DM_DEV_DIR=j dmsetup version 2>&1)
+  test "$?:$out" = "1:Invalid DM_DEV_DIR envvar value." -o \
+       "$?:$out" = "1:Invalid DM_DEV_DIR environment variable value."
+}
+
+# set up private /dev and /etc
+init_root_dir_()
+{
+  test -n "$test_dir_" \
+    || error "Internal error: called init_root_dir_ before" \
+      " defining $test_dir_"
+
+  # Define these two globals.
+  G_root_=$test_dir_/root
+  G_dev_=$G_root_/dev
+
+  export LVM_SYSTEM_DIR=$G_root_/etc
+  export DM_DEV_DIR=$G_dev_
+
+  # Only the first caller does anything.
+  mkdir -p $G_root_/etc $G_dev_ $G_dev_/mapper
+  for i in 0 1 2 3 4 5 6 7; do
+    mknod $G_root_/dev/loop$i b 7 $i
+  done
+  cat > $G_root_/etc/lvm.conf <<-EOF
+  devices {
+    dir = "$G_dev_"
+    scan = "$G_dev_"
+    filter = [ "a/loop/", "a/mirror/", "a/mapper/", "r/.*/" ]
+    cache_dir = "$G_root_/etc"
+    sysfs_scan = 0
+  }
+EOF
+}
+
+if test $(this_test_) = t6000; then
+  init_root_dir_
+fi
+
diff --git a/tests/t6000-dm.sh b/tests/t6000-dm.sh
new file mode 100755
index 0000000..cfb3ecf
--- /dev/null
+++ b/tests/t6000-dm.sh
@@ -0,0 +1,122 @@
+#!/bin/sh
+
+# Copyright (C) 2008 Free Software Foundation, Inc.
+
+# This program 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 3 of the License, or
+# (at your option) any later version.
+
+# This program 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.
+
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+test_description='determine type of devicemaps.'
+
+privileges_required_=1
+device_mapper_required_=1
+
+. ./init.sh
+
+# Device maps names - should be random to not conflict with existing ones on
+# the system
+linear_=plinear
+mpath_=mpath
+
+cleanup_() {
+	dmsetup remove $linear_
+	dmsetup remove $mpath_
+	test -n "$d1" && losetup -d "$d1"
+  	test -n "$d2" && losetup -d "$d2"
+  	test -n "$d3" && losetup -d "$d3"
+	rm -f "$f1" "$f2" "$f3";
+}
+
+test_expect_success \
+    "setup: create loop devices" \
+    'f1=$(pwd)/1 && d1=$(loop_setup_ "$f1") && \
+     f2=$(pwd)/2 && d2=$(loop_setup_ "$f2") && \
+     f3=$(pwd)/3 && d3=$(loop_setup_ "$f3")'
+
+#
+# Linear Map
+#
+
+test_expect_success \
+    "setup: create a linear mapping" \
+    'echo 0 1024 linear "$d1" 0 | dmsetup create "$linear_" &&
+     dev="$DM_DEV_DIR"/mapper/"$linear_"'
+
+test_expect_success \
+    'run parted -s "$dev" mklabel msdos' \
+    'parted -s $dev mklabel msdos > out 2>&1'
+test_expect_success 'check for empty output' '$compare out /dev/null'
+
+test_expect_success \
+    "determine the map type" \
+    'parted -s "$dev" print > out 2>&1'
+
+# Create expected output file.
+fail=0
+{ emit_superuser_warning > exp; } || fail=1
+cat <<EOF >> exp || fail=1
+Model: Linux device-mapper (linear) (dm)
+Disk $dev: 524kB
+Sector size (logical/physical): 512B/512B
+Partition Table: msdos
+
+Number  Start  End  Size  Type  File system  Flags
+
+EOF
+test_expect_success \
+    'create expected output file' \
+    'test $fail = 0'
+
+test_expect_success \
+    'check its output' \
+    '$compare out exp'
+
+#
+# Multipath Map
+#
+
+test_expect_success \
+    "setup: create a multipath mapping" \
+    'echo 0 1024 multipath 0 0 1 1 round-robin 0 2 0 "$d2" "$d3" \
+            | dmsetup create "$mpath_" &&
+     dev="$DM_DEV_DIR"/mapper/"$mpath_"'
+
+test_expect_success \
+    'run parted -s "$dev" mklabel msdos' \
+    'parted -s $dev mklabel msdos > out 2>&1'
+test_expect_success 'check for empty output' '$compare out /dev/null'
+
+test_expect_success \
+    "determine the map type" \
+    'parted -s "$dev" print > out 2>&1'
+
+# Create expected output file.
+fail=0
+{ emit_superuser_warning > exp; } || fail=1
+cat <<EOF >> exp || fail=1
+Model: Linux device-mapper (multipath) (dm)
+Disk $dev: 524kB
+Sector size (logical/physical): 512B/512B
+Partition Table: msdos
+
+Number  Start  End  Size  Type  File system  Flags
+
+EOF
+test_expect_success \
+    'create expected output file' \
+    'test $fail = 0'
+
+test_expect_success \
+    'check its output' \
+    '$compare out exp'
+
+test_done
diff --git a/tests/test-lib.sh b/tests/test-lib.sh
index 9ce10e2..3ca8b4f 100644
--- a/tests/test-lib.sh
+++ b/tests/test-lib.sh
@@ -258,6 +258,10 @@ if test $skip_ = 0 && test "$erasable_device_required_" != ''; then
   fi
 fi
 
+if test $skip_ = 0 && test "$device_mapper_required_" != ''; then
+  . $abs_top_srcdir/tests/dm-utils.sh || exit 1
+fi
+
 # This is a stub function that is run upon trap (upon regular exit and
 # interrupt).  Override it with a per-test function, e.g., to unmount
 # a partition, or to undo any other global state changes.
-- 
1.5.5.1


--2oS5YaxWCcQjTEyO--



More information about the parted-devel mailing list