summaryrefslogtreecommitdiff
path: root/test/shell/vgimportclone.sh
diff options
context:
space:
mode:
Diffstat (limited to 'test/shell/vgimportclone.sh')
-rw-r--r--test/shell/vgimportclone.sh134
1 files changed, 121 insertions, 13 deletions
diff --git a/test/shell/vgimportclone.sh b/test/shell/vgimportclone.sh
index 9b1c121..13924c3 100644
--- a/test/shell/vgimportclone.sh
+++ b/test/shell/vgimportclone.sh
@@ -1,5 +1,6 @@
-#!/bin/sh
-# Copyright (C) 2010-2011 Red Hat, Inc. All rights reserved.
+#!/usr/bin/env bash
+
+# Copyright (C) 2010-2014 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
@@ -7,33 +8,140 @@
#
# 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
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+
+SKIP_WITH_LVMPOLLD=1
-. lib/test
+. lib/inittest
-aux prepare_devs 2
+aux prepare_devs 3
-vgcreate -c n --metadatasize 128k $vg1 "$dev1"
+vgcreate $SHARED --metadatasize 128k $vg1 "$dev1"
lvcreate -l100%FREE -n $lv1 $vg1
+# Test plain vgexport vgimport tools
+
+# Argument is needed
+invalid vgexport
+invalid vgimport
+# Cannot combine -a and VG name
+invalid vgexport -a $vg
+invalid vgimport -a $vg1
+# Cannot export unknonw VG
+fail vgexport ${vg1}-non
+fail vgimport ${vg1}-non
+# Cannot export VG with active volumes
+fail vgexport $vg1
+
+vgchange -an $vg1
+vgexport $vg1
+# Already exported
+fail vgexport $vg1
+
+vgimport $vg1
+# Already imported
+fail vgimport $vg1
+vgchange -ay $vg1
+
+# Since the devices file is using devnames as ids,
+# it will not automatically know that dev2 is a
+# duplicate after the dd, so we need to remove dev2
+# from df, then add it again after the dd.
+if lvmdevices; then
+ lvmdevices --deldev "$dev2"
+fi
+
# Clone the LUN
dd if="$dev1" of="$dev2" bs=256K count=1
-aux notify_lvmetad "$dev2"
+
+# Requires -y to confirm prompt about adding
+# a duplicate pvid.
+if lvmdevices; then
+ lvmdevices -y --adddev "$dev2"
+fi
# Verify pvs works on each device to give us vgname
+aux hide_dev "$dev2"
check pv_field "$dev1" vg_name $vg1
+aux unhide_dev "$dev2"
+
+aux hide_dev "$dev1"
check pv_field "$dev2" vg_name $vg1
+aux unhide_dev "$dev1"
+
+lvmdevices || true
+pvs -a -o+uuid
# Import the cloned PV to a new VG
vgimportclone --basevgname $vg2 "$dev2"
-# We need to re-scan *both* $dev1 and $dev2 since a PV, as far as lvmetad is
-# concerned, can only live on a single device. With the last pvscan, we told it
-# that PV from $dev1 now lives on $dev2, but in fact this is not true anymore,
-# since we wrote a different PV over $dev2.
-aux notify_lvmetad "$dev2"
-aux notify_lvmetad "$dev1"
+lvmdevices || true
+pvs -a -o+uuid
+vgs
# Verify we can activate / deactivate the LV from both VGs
lvchange -ay $vg1/$lv1 $vg2/$lv1
vgchange -an $vg1 $vg2
+
+vgremove -ff $vg1 $vg2
+
+pvremove "$dev1"
+pvremove "$dev2"
+
+# Test vgimportclone with incomplete list of devs, and with nomda PV.
+vgcreate $SHARED --vgmetadatacopies 2 $vg1 "$dev1" "$dev2" "$dev3"
+lvcreate -l1 -an $vg1
+not vgimportclone -n newvgname "$dev1"
+not vgimportclone -n newvgname "$dev2"
+not vgimportclone -n newvgname "$dev3"
+not vgimportclone -n newvgname "$dev1" "$dev2"
+not vgimportclone -n newvgname "$dev1" "$dev3"
+not vgimportclone -n newvgname "$dev2" "$dev3"
+vgimportclone -n ${vg1}new "$dev1" "$dev2" "$dev3"
+lvs ${vg1}new
+vgremove -y ${vg1}new
+pvremove "$dev1"
+pvremove "$dev2"
+pvremove "$dev3"
+
+# Test importing a non-duplicate pv using the existing vg name
+vgcreate $vg1 "$dev1"
+vgimportclone -n $vg1 "$dev1"
+vgs ${vg1}1
+not vgs $vg1
+vgremove ${vg1}1
+
+# Test importing a non-duplicate pv using the existing vg name
+# Another existing VG is using the initial generated vgname with
+# the "1" suffix, so "2" is used.
+vgcreate $vg1 "$dev1"
+vgcreate ${vg1}1 "$dev2"
+vgimportclone -n $vg1 "$dev1"
+vgs ${vg1}1
+vgs ${vg1}2
+vgremove ${vg1}1
+vgremove ${vg1}2
+pvremove "$dev1"
+pvremove "$dev2"
+
+# Verify that if we provide the -n|--basevgname,
+# the number suffix is not added unnecessarily.
+vgcreate $SHARED --metadatasize 128k A${vg1}B "$dev1"
+
+# vg1B is not the same as Avg1B - we don't need number suffix
+dd if="$dev1" of="$dev2" bs=256K count=1
+vgimportclone -n ${vg1}B "$dev2"
+check pv_field "$dev2" vg_name ${vg1}B
+
+# Avg1 is not the same as Avg1B - we don't need number suffix
+dd if="$dev1" of="$dev2" bs=256K count=1
+vgimportclone -n A${vg1} "$dev2"
+check pv_field "$dev2" vg_name A${vg1}
+
+# Avg1B is the same as Avg1B - we need to add the number suffix
+dd if="$dev1" of="$dev2" bs=256K count=1
+vgimportclone -n A${vg1}B "$dev2"
+aux vgs
+check pv_field "$dev2" vg_name A${vg1}B1
+
+vgremove -ff A${vg1}B A${vg1}B1