1*86d7f5d3SJohn Marino#!/bin/sh
2*86d7f5d3SJohn Marino# Copyright (C) 2007-2008 Red Hat, Inc. All rights reserved.
3*86d7f5d3SJohn Marino#
4*86d7f5d3SJohn Marino# This copyrighted material is made available to anyone wishing to use,
5*86d7f5d3SJohn Marino# modify, copy, or redistribute it subject to the terms and conditions
6*86d7f5d3SJohn Marino# of the GNU General Public License v.2.
7*86d7f5d3SJohn Marino#
8*86d7f5d3SJohn Marino# You should have received a copy of the GNU General Public License
9*86d7f5d3SJohn Marino# along with this program; if not, write to the Free Software Foundation,
10*86d7f5d3SJohn Marino# Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
11*86d7f5d3SJohn Marino
12*86d7f5d3SJohn Marino# Test vgsplit command options for validity
13*86d7f5d3SJohn Marino
14*86d7f5d3SJohn Marino. ./test-utils.sh
15*86d7f5d3SJohn Marino
16*86d7f5d3SJohn Marinoaux prepare_devs 5
17*86d7f5d3SJohn Marino
18*86d7f5d3SJohn Marinofor mdatype in 1 2
19*86d7f5d3SJohn Marinodo
20*86d7f5d3SJohn Marino
21*86d7f5d3SJohn Marinopvcreate -M$mdatype $devs
22*86d7f5d3SJohn Marino
23*86d7f5d3SJohn Marino# ensure name order does not matter
24*86d7f5d3SJohn Marino# NOTE: if we're using lvm1, we must use -M on vgsplit
25*86d7f5d3SJohn Marinovgcreate -M$mdatype $vg1 $devs
26*86d7f5d3SJohn Marinovgsplit -M$mdatype $vg1 $vg2 $dev1
27*86d7f5d3SJohn Marinovgremove $vg1
28*86d7f5d3SJohn Marinovgremove $vg2
29*86d7f5d3SJohn Marinovgcreate -M$mdatype $vg2 $devs
30*86d7f5d3SJohn Marinovgsplit -M$mdatype $vg2 $vg1 $dev1
31*86d7f5d3SJohn Marinovgremove $vg1
32*86d7f5d3SJohn Marinovgremove $vg2
33*86d7f5d3SJohn Marino
34*86d7f5d3SJohn Marino# vgsplit accepts new vg as destination of split
35*86d7f5d3SJohn Marino# lvm1 -- bz244792
36*86d7f5d3SJohn Marinovgcreate -M$mdatype $vg1 $devs
37*86d7f5d3SJohn Marinovgsplit $vg1 $vg2 $dev1 1>err
38*86d7f5d3SJohn Marinogrep "New volume group \"$vg2\" successfully split from \"$vg1\"" err
39*86d7f5d3SJohn Marinovgremove $vg1
40*86d7f5d3SJohn Marinovgremove $vg2
41*86d7f5d3SJohn Marino
42*86d7f5d3SJohn Marino# vgsplit accepts existing vg as destination of split
43*86d7f5d3SJohn Marinovgcreate -M$mdatype $vg1 $dev1 $dev2
44*86d7f5d3SJohn Marinovgcreate -M$mdatype $vg2 $dev3 $dev4
45*86d7f5d3SJohn Marinovgsplit $vg1 $vg2 $dev1 1>err
46*86d7f5d3SJohn Marinogrep "Existing volume group \"$vg2\" successfully split from \"$vg1\"" err
47*86d7f5d3SJohn Marinovgremove $vg1
48*86d7f5d3SJohn Marinovgremove $vg2
49*86d7f5d3SJohn Marino
50*86d7f5d3SJohn Marino# vgsplit accepts --maxphysicalvolumes 128 on new VG
51*86d7f5d3SJohn Marinovgcreate -M$mdatype $vg1 $dev1 $dev2
52*86d7f5d3SJohn Marinovgsplit --maxphysicalvolumes 128 $vg1 $vg2 $dev1
53*86d7f5d3SJohn Marinocheck_vg_field_ $vg2 max_pv 128
54*86d7f5d3SJohn Marinovgremove $vg1
55*86d7f5d3SJohn Marinovgremove $vg2
56*86d7f5d3SJohn Marino
57*86d7f5d3SJohn Marino# vgsplit accepts --maxlogicalvolumes 128 on new VG
58*86d7f5d3SJohn Marinovgcreate -M$mdatype $vg1 $dev1 $dev2
59*86d7f5d3SJohn Marinovgsplit --maxlogicalvolumes 128 $vg1 $vg2 $dev1
60*86d7f5d3SJohn Marinocheck_vg_field_ $vg2 max_lv 128
61*86d7f5d3SJohn Marinovgremove $vg1
62*86d7f5d3SJohn Marinovgremove $vg2
63*86d7f5d3SJohn Marino
64*86d7f5d3SJohn Marino# vgsplit rejects split because max_pv of destination would be exceeded
65*86d7f5d3SJohn Marinovgcreate -M$mdatype --maxphysicalvolumes 2 $vg1 $dev1 $dev2
66*86d7f5d3SJohn Marinovgcreate -M$mdatype --maxphysicalvolumes 2 $vg2 $dev3 $dev4
67*86d7f5d3SJohn Marinonot vgsplit $vg1 $vg2 $dev1 2>err;
68*86d7f5d3SJohn Marinogrep "^  Maximum number of physical volumes (2) exceeded" err
69*86d7f5d3SJohn Marinovgremove $vg2
70*86d7f5d3SJohn Marinovgremove $vg1
71*86d7f5d3SJohn Marino
72*86d7f5d3SJohn Marino# vgsplit rejects split because maxphysicalvolumes given with existing vg
73*86d7f5d3SJohn Marinovgcreate -M$mdatype --maxphysicalvolumes 2 $vg1 $dev1 $dev2
74*86d7f5d3SJohn Marinovgcreate -M$mdatype --maxphysicalvolumes 2 $vg2 $dev3 $dev4
75*86d7f5d3SJohn Marinonot vgsplit --maxphysicalvolumes 2 $vg1 $vg2 $dev1 2>err;
76*86d7f5d3SJohn Marinogrep "^  Volume group \"$vg2\" exists, but new VG option specified" err
77*86d7f5d3SJohn Marinovgremove $vg2
78*86d7f5d3SJohn Marinovgremove $vg1
79*86d7f5d3SJohn Marino
80*86d7f5d3SJohn Marino# vgsplit rejects split because maxlogicalvolumes given with existing vg
81*86d7f5d3SJohn Marinovgcreate -M$mdatype --maxlogicalvolumes 2 $vg1 $dev1 $dev2
82*86d7f5d3SJohn Marinovgcreate -M$mdatype --maxlogicalvolumes 2 $vg2 $dev3 $dev4
83*86d7f5d3SJohn Marinonot vgsplit --maxlogicalvolumes 2 $vg1 $vg2 $dev1 2>err
84*86d7f5d3SJohn Marinogrep "^  Volume group \"$vg2\" exists, but new VG option specified" err
85*86d7f5d3SJohn Marinovgremove $vg2
86*86d7f5d3SJohn Marinovgremove $vg1
87*86d7f5d3SJohn Marino
88*86d7f5d3SJohn Marino# vgsplit rejects split because alloc given with existing vg
89*86d7f5d3SJohn Marinovgcreate -M$mdatype --alloc cling $vg1 $dev1 $dev2
90*86d7f5d3SJohn Marinovgcreate -M$mdatype --alloc cling $vg2 $dev3 $dev4
91*86d7f5d3SJohn Marinonot vgsplit --alloc cling $vg1 $vg2 $dev1 2>err;
92*86d7f5d3SJohn Marinogrep "^  Volume group \"$vg2\" exists, but new VG option specified" err
93*86d7f5d3SJohn Marinovgremove $vg2
94*86d7f5d3SJohn Marinovgremove $vg1
95*86d7f5d3SJohn Marino
96*86d7f5d3SJohn Marino# vgsplit rejects split because clustered given with existing vg
97*86d7f5d3SJohn Marinovgcreate -M$mdatype --clustered n $vg1 $dev1 $dev2
98*86d7f5d3SJohn Marinovgcreate -M$mdatype --clustered n $vg2 $dev3 $dev4
99*86d7f5d3SJohn Marinonot vgsplit --clustered n $vg1 $vg2 $dev1 2>err
100*86d7f5d3SJohn Marinogrep "^  Volume group \"$vg2\" exists, but new VG option specified" err
101*86d7f5d3SJohn Marinovgremove $vg2
102*86d7f5d3SJohn Marinovgremove $vg1
103*86d7f5d3SJohn Marino
104*86d7f5d3SJohn Marino# vgsplit rejects vg with active lv
105*86d7f5d3SJohn Marinopvcreate -M$mdatype -ff $dev3 $dev4
106*86d7f5d3SJohn Marinovgcreate -M$mdatype $vg1 $dev1 $dev2
107*86d7f5d3SJohn Marinovgcreate -M$mdatype $vg2 $dev3 $dev4
108*86d7f5d3SJohn Marinolvcreate -l 4 -n $lv1 $vg1
109*86d7f5d3SJohn Marinonot vgsplit $vg1 $vg2 $dev1 2>err;
110*86d7f5d3SJohn Marinogrep "^  Logical volumes in \"$vg1\" must be inactive\$" err
111*86d7f5d3SJohn Marinovgremove -f $vg2
112*86d7f5d3SJohn Marinovgremove -f $vg1
113*86d7f5d3SJohn Marino
114*86d7f5d3SJohn Marino# vgsplit rejects split because max_lv is exceeded
115*86d7f5d3SJohn Marinovgcreate -M$mdatype --maxlogicalvolumes 2 $vg1 $dev1 $dev2
116*86d7f5d3SJohn Marinovgcreate -M$mdatype --maxlogicalvolumes 2 $vg2 $dev3 $dev4
117*86d7f5d3SJohn Marinolvcreate -l 4 -n $lv1 $vg1
118*86d7f5d3SJohn Marinolvcreate -l 4 -n $lv2 $vg1
119*86d7f5d3SJohn Marinolvcreate -l 4 -n $lv3 $vg2
120*86d7f5d3SJohn Marinovgchange -an $vg1
121*86d7f5d3SJohn Marinovgchange -an $vg2
122*86d7f5d3SJohn Marinonot vgsplit $vg1 $vg2 $dev1 2>err;
123*86d7f5d3SJohn Marinogrep "^  Maximum number of logical volumes (2) exceeded" err
124*86d7f5d3SJohn Marinovgremove -f $vg2
125*86d7f5d3SJohn Marinovgremove -f $vg1
126*86d7f5d3SJohn Marino
127*86d7f5d3SJohn Marino# vgsplit verify default - max_lv attribute from new VG is same as source VG" \
128*86d7f5d3SJohn Marinovgcreate -M$mdatype $vg1 $dev1 $dev2
129*86d7f5d3SJohn Marinolvcreate -l 4 -n $lv1 $vg1
130*86d7f5d3SJohn Marinovgchange -an $vg1
131*86d7f5d3SJohn Marinovgsplit $vg1 $vg2 $dev1
132*86d7f5d3SJohn Marinocompare_vg_field_ $vg1 $vg2 max_lv
133*86d7f5d3SJohn Marinovgremove -f $vg2
134*86d7f5d3SJohn Marinovgremove -f $vg1
135*86d7f5d3SJohn Marino
136*86d7f5d3SJohn Marino# vgsplit verify default - max_pv attribute from new VG is same as source VG" \
137*86d7f5d3SJohn Marinovgcreate -M$mdatype $vg1 $dev1 $dev2
138*86d7f5d3SJohn Marinolvcreate -l 4 -n $lv1 $vg1
139*86d7f5d3SJohn Marinovgchange -an $vg1
140*86d7f5d3SJohn Marinovgsplit $vg1 $vg2 $dev1
141*86d7f5d3SJohn Marinocompare_vg_field_ $vg1 $vg2 max_pv
142*86d7f5d3SJohn Marinovgremove -f $vg2
143*86d7f5d3SJohn Marinovgremove -f $vg1
144*86d7f5d3SJohn Marino
145*86d7f5d3SJohn Marino# vgsplit verify default - vg_fmt attribute from new VG is same as source VG" \
146*86d7f5d3SJohn Marinovgcreate -M$mdatype $vg1 $dev1 $dev2
147*86d7f5d3SJohn Marinolvcreate -l 4 -n $lv1 $vg1
148*86d7f5d3SJohn Marinovgchange -an $vg1
149*86d7f5d3SJohn Marinovgsplit $vg1 $vg2 $dev1
150*86d7f5d3SJohn Marinocompare_vg_field_ $vg1 $vg2 vg_fmt
151*86d7f5d3SJohn Marinovgremove -f $vg2
152*86d7f5d3SJohn Marinovgremove -f $vg1
153*86d7f5d3SJohn Marino
154*86d7f5d3SJohn Marino# vgsplit rejects split because PV not in VG
155*86d7f5d3SJohn Marinovgcreate -M$mdatype $vg1 $dev1 $dev2
156*86d7f5d3SJohn Marinovgcreate -M$mdatype $vg2 $dev3 $dev4
157*86d7f5d3SJohn Marinolvcreate -l 4 -n $lv1 $vg1
158*86d7f5d3SJohn Marinolvcreate -l 4 -n $lv2 $vg1
159*86d7f5d3SJohn Marinovgchange -an $vg1
160*86d7f5d3SJohn Marinonot vgsplit $vg1 $vg2 $dev3 2>err;
161*86d7f5d3SJohn Marinovgremove -f $vg2
162*86d7f5d3SJohn Marinovgremove -f $vg1
163*86d7f5d3SJohn Marinodone
164*86d7f5d3SJohn Marino
165*86d7f5d3SJohn Marino# ONLY LVM2 metadata
166*86d7f5d3SJohn Marino# setup PVs" '
167*86d7f5d3SJohn Marinopvcreate --metadatacopies 0 $dev5
168*86d7f5d3SJohn Marino
169*86d7f5d3SJohn Marino# vgsplit rejects to give away pv with the last mda copy
170*86d7f5d3SJohn Marinovgcreate $vg1 $dev5 $dev2
171*86d7f5d3SJohn Marinolvcreate -l 10 -n $lv1  $vg1
172*86d7f5d3SJohn Marinolvchange -an $vg1/$lv1
173*86d7f5d3SJohn Marinovg_validate_pvlv_counts_ $vg1 2 1 0
174*86d7f5d3SJohn Marinonot vgsplit  $vg1 $vg2 $dev5;
175*86d7f5d3SJohn Marinovg_validate_pvlv_counts_ $vg1 2 1 0
176*86d7f5d3SJohn Marinovgremove -ff $vg1
177*86d7f5d3SJohn Marino
178*86d7f5d3SJohn Marino# vgsplit rejects split because metadata types differ
179*86d7f5d3SJohn Marinopvcreate -ff -M1 $dev3 $dev4
180*86d7f5d3SJohn Marinopvcreate -ff $dev1 $dev2
181*86d7f5d3SJohn Marinovgcreate -M1 $vg1 $dev3 $dev4
182*86d7f5d3SJohn Marinovgcreate $vg2 $dev1 $dev2
183*86d7f5d3SJohn Marinonot vgsplit $vg1 $vg2 $dev3 2>err;
184*86d7f5d3SJohn Marinogrep "^  Metadata types differ" err
185*86d7f5d3SJohn Marinovgremove $vg2
186*86d7f5d3SJohn Marinovgremove $vg1
187*86d7f5d3SJohn Marino
188