From 8cd284edab47a6ac828607ebbfbbdee9fc6c8bc5 Mon Sep 17 00:00:00 2001 From: Petr Rockai Date: Tue, 11 Nov 2008 15:29:24 +0000 Subject: [PATCH] Import a bunch of new tests by jstava. Mostly everything pass, they however tend to expose the lvremove -ff vg ordering bug. --- test/t-listings.sh | 79 ++++++++++++++++++++++++++ test/t-lvcreate-operation.sh | 33 +++++++++++ test/t-mirror-lvconvert-usage.sh | 95 ++++++++++++++++++++++++++++++++ test/t-vgcfgbackup-usage.sh | 24 ++++++++ test/t-vgchange-usage.sh | 51 +++++++++++++++++ 5 files changed, 282 insertions(+) create mode 100644 test/t-listings.sh create mode 100644 test/t-lvcreate-operation.sh create mode 100644 test/t-mirror-lvconvert-usage.sh create mode 100644 test/t-vgcfgbackup-usage.sh create mode 100644 test/t-vgchange-usage.sh diff --git a/test/t-listings.sh b/test/t-listings.sh new file mode 100644 index 000000000..e6da5b0ef --- /dev/null +++ b/test/t-listings.sh @@ -0,0 +1,79 @@ +# Copyright (C) 2008 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 + +# +# tests functionality of lvs, pvs, vgs, *display tools +# + +. ./test-utils.sh + +get_lvs_() +{ + case $(lvs --units s --nosuffix --noheadings -o $1_read_ahead "$vg"/"$lv") in + *$2) true ;; + *) false ;; + esac +} + +aux prepare_devs 5 + +pvcreate $dev1 +pvcreate --metadatacopies 0 $dev2 +pvcreate --metadatacopies 0 $dev3 +pvcreate $dev4 +pvcreate --metadatacopies 0 $dev5 + +#COMM bz195276 -- pvs doesn't show PVs until a VG is created +pvs --noheadings|tee out +test $(wc -l out +pvdisplay --maps $devs >out2 +not diff out out2 + diff --git a/test/t-lvcreate-operation.sh b/test/t-lvcreate-operation.sh new file mode 100644 index 000000000..4ff05f916 --- /dev/null +++ b/test/t-lvcreate-operation.sh @@ -0,0 +1,33 @@ +#!/bin/sh +# Copyright (C) 2008 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 + +# 'Exercise some lvcreate diagnostics' + +. ./test-utils.sh + +cleanup_lvs() { + lvremove -ff $vg + if dmsetup table|grep $vg; then + echo "ERROR: lvremove did leave some some mappings in DM behind!" + return 1 + fi +} + +aux prepare_pvs 2 +aux pvcreate --metadatacopies 0 $dev1 +aux vgcreate $vg $devs + +#COMM create snapshots of LVs on --metadatacopies 0 PV (bz450651) +lvcreate -n$lv1 -l4 $vg $dev1 +lvcreate -n$lv2 -l4 -s $vg/$lv1 +#lvremove -f $vg/$lv2 +cleanup_lvs + diff --git a/test/t-mirror-lvconvert-usage.sh b/test/t-mirror-lvconvert-usage.sh new file mode 100644 index 000000000..d27c1b30a --- /dev/null +++ b/test/t-mirror-lvconvert-usage.sh @@ -0,0 +1,95 @@ +# Copyright (C) 2008 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 + +. ./test-utils.sh + +dmsetup_has_dm_devdir_support_ || exit 200 + +aux prepare_vg 5 + + +lv_is_on_() { + local lv=$1 #allready vg/lv + shift 1 + lvs -a -odevices --noheadings $lv | sed 's/,/\n/g' > out + #is on all specified devs + for d in $*; do grep "$d(" out; done + #isn't on any other dev (we are set -e remember) + for d in $*; do ! grep -v "$d(" out; done + return 0 +} + +mimages_are_on_ () +{ + local lv=$1 + shift + local pvs="$*" + local mimages + local i + + echo "Check if mirror images of $lv are on PVs $pvs" + rm -f out1 out2 + echo $pvs | sed 's/ /\n/g' | sort | uniq > out1 + + mimages=$(lvs --noheadings -a -o lv_name $vg | grep "${lv}_mimage_" | \ + sed 's/\[//g; s/\]//g') + for i in $mimages; do + echo "Checking $vg/$i" + lvs -a -odevices --noheadings $vg/$i | \ + sed 's/([^)]*)//g; s/ //g; s/,/ /g' | sort | uniq >> out2 + done + + diff --ignore-blank-lines out1 out2 +} + +# --------------------------------------------------------------------- +# Common environment setup/cleanup for each sub testcases + +prepare_lvs_() +{ + lvremove -ff $vg + if dmsetup table|grep $vg; then + echo "ERROR: lvremove did leave some some mappings in DM behind!" + return 1 + fi + : +} + +check_and_cleanup_lvs_() +{ + lvs -a -o+devices $vg + lvremove -ff $vg + if dmsetup table|grep $vg; then + echo "ERROR: lvremove did leave some some mappings in DM behind!" + return 1 + fi +} + +prepare_lvs_ +check_and_cleanup_lvs_ + + +#COMM "convert from 2-way mirror to linear -- specify leg to remove (bz453643)" +prepare_lvs_ +lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0-1 +lvconvert -m0 $vg/$lv1 $dev2 +lv_is_on_ $vg/$lv1 $dev1 +check_and_cleanup_lvs_ + +prepare_lvs_ +lvcreate -l2 -m2 -n $lv1 $vg $dev1 $dev2 $dev4 $dev3:0-1 +lvconvert -m-1 $vg/$lv1 $dev1 +lvs -a -o+devices +mimages_are_on_ $lv1 $dev2 $dev4 +lvconvert -m-1 $vg/$lv1 $dev2 +lvs -a -o+devices +lv_is_on_ $vg/$lv1 $dev4 +check_and_cleanup_lvs_ + diff --git a/test/t-vgcfgbackup-usage.sh b/test/t-vgcfgbackup-usage.sh new file mode 100644 index 000000000..0242d557b --- /dev/null +++ b/test/t-vgcfgbackup-usage.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# Copyright (C) 2008 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 + +. ./test-utils.sh + +aux prepare_pvs 2 + +# vgcfgbackup handles similar VG names (bz458941) +vg1=${PREFIX}vg00 +vg1=${PREFIX}vg01 +vgcreate $vg1 $dev1 +vgcreate $vg2 $dev2 +vgcfgbackup -f /tmp/bak-%s >out +grep "Volume group \"$vg1\" successfully backed up." out +grep "Volume group \"$vg2\" successfully backed up." out + diff --git a/test/t-vgchange-usage.sh b/test/t-vgchange-usage.sh new file mode 100644 index 000000000..ebabf90fd --- /dev/null +++ b/test/t-vgchange-usage.sh @@ -0,0 +1,51 @@ +#!/bin/sh +# Copyright (C) 2008 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 + +test_description='Exercise some vgchange diagnostics' + +. ./test-utils.sh + +aux prepare_pvs 3 +pvcreate --metadatacopies 0 $dev1 +vgcreate $vg $devs + +get_vg_field() { + local vg=$1 + local field=$2 + local value + vgs --noheading -o $field $vg | sed 's/^ *//' +} + +vgdisplay $vg + +# vgchange -p MaxPhysicalVolumes (bz202232) +aux check_vg_field_ $vg max_pv 0 +vgchange -p 128 $vg +aux check_vg_field_ $vg max_pv 128 + +pv_count=$(get_vg_field $vg pv_count) +not vgchange -p 2 $vg 2>err +grep "MaxPhysicalVolumes is less than the current number $pv_count of PVs for" err +aux check_vg_field_ $vg max_pv 128 + +# vgchange -l MaxLogicalVolumes +aux check_vg_field_ $vg max_lv 0 +vgchange -l 128 $vg +aux check_vg_field_ $vg max_lv 128 + +lvcreate -l4 -n$lv1 $vg +lvcreate -l4 -n$lv2 $vg + +lv_count=$(get_vg_field $vg lv_count) +not vgchange -l 1 $vg 2>err +grep "MaxLogicalVolume is less than the current number $lv_count of LVs for" err +aux check_vg_field_ $vg max_lv 128 + -- 2.43.5