1# Copyright (C) 2008 Red Hat, Inc. All rights reserved.
2#
3# This copyrighted material is made available to anyone wishing to use,
4# modify, copy, or redistribute it subject to the terms and conditions
5# of the GNU General Public License v.2.
6#
7# You should have received a copy of the GNU General Public License
8# along with this program; if not, write to the Free Software Foundation,
9# Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
10
11. ./test-utils.sh
12
13dmsetup_has_dm_devdir_support_ || exit 200
14
15aux prepare_vg 5
16
17
18lv_is_on_() {
19	local lv=$1 #allready vg/lv
20	shift 1
21	lvs -a -odevices --noheadings $lv | sed 's/,/\n/g' > out
22	#is on all specified devs
23	for d in $*; do grep "$d(" out; done
24	#isn't on any other dev (we are set -e remember)
25	for d in $*; do ! grep -v "$d(" out; done
26	return 0
27}
28
29mimages_are_on_ ()
30{
31	local lv=$1
32	shift
33	local pvs="$*"
34	local mimages
35	local i
36
37	echo "Check if mirror images of $lv are on PVs $pvs"
38	rm -f out1 out2
39	echo $pvs | sed 's/ /\n/g' | sort | uniq > out1
40
41	mimages=$(lvs --noheadings -a -o lv_name $vg | grep "${lv}_mimage_" | \
42		sed 's/\[//g; s/\]//g')
43	for i in $mimages; do
44		echo "Checking $vg/$i"
45		lvs -a -odevices --noheadings $vg/$i | \
46			sed 's/([^)]*)//g; s/ //g; s/,/ /g' | sort | uniq >> out2
47	done
48
49	diff --ignore-blank-lines out1 out2
50}
51
52# ---------------------------------------------------------------------
53# Common environment setup/cleanup for each sub testcases
54
55prepare_lvs_()
56{
57	lvremove -ff $vg
58	if dmsetup table|grep $vg; then
59		echo "ERROR: lvremove did leave some some mappings in DM behind!"
60		return 1
61	fi
62	:
63}
64
65check_and_cleanup_lvs_()
66{
67	lvs -a -o+devices $vg
68	lvremove -ff $vg
69	if dmsetup table|grep $vg; then
70		echo "ERROR: lvremove did leave some some mappings in DM behind!"
71		return 1
72	fi
73}
74
75prepare_lvs_
76check_and_cleanup_lvs_
77
78
79#COMM "convert from 2-way mirror to linear -- specify leg to remove (bz453643)"
80prepare_lvs_
81lvcreate -l2 -m1 -n $lv1 $vg $dev1 $dev2 $dev3:0-1
82lvconvert -m0 $vg/$lv1 $dev2
83lv_is_on_ $vg/$lv1 $dev1
84check_and_cleanup_lvs_
85
86prepare_lvs_
87lvcreate -l2 -m2 -n $lv1 $vg $dev1 $dev2 $dev4 $dev3:0-1
88lvconvert -m-1 $vg/$lv1 $dev1
89lvs -a -o+devices
90mimages_are_on_ $lv1 $dev2 $dev4
91lvconvert -m-1 $vg/$lv1 $dev2
92lvs -a -o+devices
93lv_is_on_ $vg/$lv1 $dev4
94check_and_cleanup_lvs_
95
96