156a34939Shaad#!/bin/sh
256a34939Shaad# Copyright (C) 2008 Red Hat, Inc. All rights reserved.
356a34939Shaad#
456a34939Shaad# This copyrighted material is made available to anyone wishing to use,
556a34939Shaad# modify, copy, or redistribute it subject to the terms and conditions
656a34939Shaad# of the GNU General Public License v.2.
756a34939Shaad#
856a34939Shaad# You should have received a copy of the GNU General Public License
956a34939Shaad# along with this program; if not, write to the Free Software Foundation,
1056a34939Shaad# Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
1156a34939Shaad
1256a34939Shaadtest_description='Test pvcreate option values'
13*7c604eeaShaadPAGESIZE=$(getconf PAGESIZE)
1456a34939Shaad
1556a34939Shaad. ./test-utils.sh
1656a34939Shaad
1756a34939Shaadaux prepare_devs 4
1856a34939Shaad
1956a34939Shaad#COMM 'pvcreate rejects negative setphysicalvolumesize'
2056a34939Shaadnot pvcreate --setphysicalvolumesize -1024 $dev1
2156a34939Shaad
2256a34939Shaad#COMM 'pvcreate rejects negative metadatasize'
2356a34939Shaadnot pvcreate --metadatasize -1024 $dev1
2456a34939Shaad
2556a34939Shaad# x. metadatasize 0, defaults to 255
2656a34939Shaad# FIXME: unable to check default value, not in reporting cmds
2756a34939Shaad# should default to 255 according to code
2856a34939Shaad#   check_pv_field_ pv_mda_size 255
2956a34939Shaad#COMM 'pvcreate accepts metadatasize 0'
3056a34939Shaadpvcreate --metadatasize 0 $dev1
3156a34939Shaadpvremove $dev1
3256a34939Shaad
33*7c604eeaShaad#Verify vg_mda_size is smaller pv_mda_size
34*7c604eeaShaadpvcreate --metadatasize 512k $dev1
35*7c604eeaShaadpvcreate --metadatasize 96k $dev2
36*7c604eeaShaadvgcreate $vg $dev1 $dev2
37*7c604eeaShaadcompare_two_fields_ vgs $vg vg_mda_size pvs $dev2 pv_mda_size
38*7c604eeaShaadvgremove -ff $vg
39*7c604eeaShaad
4056a34939Shaad# x. metadatasize too large
4156a34939Shaad# For some reason we allow this, even though there's no room for data?
4256a34939Shaad##COMM  'pvcreate rejects metadatasize too large'
4356a34939Shaad#not pvcreate --metadatasize 100000000000000 $dev1
4456a34939Shaad
4556a34939Shaad#COMM 'pvcreate rejects metadatacopies < 0'
4656a34939Shaadnot pvcreate --metadatacopies -1 $dev1
4756a34939Shaad
4856a34939Shaad#COMM 'pvcreate accepts metadatacopies = 0, 1, 2'
49*7c604eeaShaadfor j in metadatacopies pvmetadatacopies
50*7c604eeaShaaddo
51*7c604eeaShaadpvcreate --$j 0 $dev1
52*7c604eeaShaadpvcreate --$j 1 $dev2
53*7c604eeaShaadpvcreate --$j 2 $dev3
5456a34939Shaadcheck_pv_field_ $dev1 pv_mda_count 0
5556a34939Shaadcheck_pv_field_ $dev2 pv_mda_count 1
5656a34939Shaadcheck_pv_field_ $dev3 pv_mda_count 2
5756a34939Shaadpvremove $dev1
5856a34939Shaadpvremove $dev2
5956a34939Shaadpvremove $dev3
60*7c604eeaShaaddone
6156a34939Shaad
6256a34939Shaad#COMM 'pvcreate rejects metadatacopies > 2'
6356a34939Shaadnot pvcreate --metadatacopies 3 $dev1
6456a34939Shaad
6556a34939Shaad#COMM 'pvcreate rejects invalid device'
6656a34939Shaadnot pvcreate $dev1bogus
6756a34939Shaad
6856a34939Shaad#COMM 'pvcreate rejects labelsector < 0'
6956a34939Shaadnot pvcreate --labelsector -1 $dev1
7056a34939Shaad
7156a34939Shaad#COMM 'pvcreate rejects labelsector > 1000000000000'
7256a34939Shaadnot pvcreate --labelsector 1000000000000 $dev1
7356a34939Shaad
7456a34939Shaad# other possibilites based on code inspection (not sure how hard)
7556a34939Shaad# x. device too small (min of 512 * 1024 KB)
7656a34939Shaad# x. device filtered out
7756a34939Shaad# x. unable to open /dev/urandom RDONLY
7856a34939Shaad# x. device too large (pe_count > UINT32_MAX)
7956a34939Shaad# x. device read-only
8056a34939Shaad# x. unable to open device readonly
8156a34939Shaad# x. BLKGETSIZE64 fails
8256a34939Shaad# x. set size to value inconsistent with device / PE size
8356a34939Shaad
84*7c604eeaShaad#COMM 'pvcreate basic dataalignment sanity checks'
85*7c604eeaShaadnot pvcreate --dataalignment -1 $dev1
86*7c604eeaShaadnot pvcreate -M 1 --dataalignment 1 $dev1
87*7c604eeaShaadnot pvcreate --dataalignment 1e $dev1
88*7c604eeaShaad
89*7c604eeaShaad#COMM 'pvcreate always rounded up to page size for start of device'
90*7c604eeaShaad#pvcreate --metadatacopies 0 --dataalignment 1 $dev1
91*7c604eeaShaad# amuse shell experts
92*7c604eeaShaad#check_pv_field_ $dev1 pe_start $(($(getconf PAGESIZE)/1024))".00k"
93*7c604eeaShaad
94*7c604eeaShaad#COMM 'pvcreate sets data offset directly'
95*7c604eeaShaadpvcreate --dataalignment 512k $dev1
96*7c604eeaShaadcheck_pv_field_ $dev1 pe_start 512.00k
97*7c604eeaShaad
98*7c604eeaShaad#COMM 'vgcreate/vgremove do not modify data offset of existing PV'
99*7c604eeaShaadvgcreate $vg $dev1  --config 'devices { data_alignment = 1024 }'
100*7c604eeaShaadcheck_pv_field_ $dev1 pe_start 512.00k
101*7c604eeaShaadvgremove $vg --config 'devices { data_alignment = 1024 }'
102*7c604eeaShaadcheck_pv_field_ $dev1 pe_start 512.00k
103*7c604eeaShaad
104*7c604eeaShaad#COMM 'pvcreate sets data offset next to mda area'
105*7c604eeaShaadpvcreate --metadatasize 100k --dataalignment 100k $dev1
106*7c604eeaShaadcheck_pv_field_ $dev1 pe_start 200.00k
107*7c604eeaShaad
108*7c604eeaShaad# metadata area start is aligned according to pagesize
109*7c604eeaShaad# pagesize should be 64k or 4k ...
110*7c604eeaShaadif [ $PAGESIZE -eq 65536 ] ; then
111*7c604eeaShaad	pv_align="192.50k"
112*7c604eeaShaadelse
113*7c604eeaShaad	pv_align="133.00k"
114*7c604eeaShaadfi
115*7c604eeaShaad
116*7c604eeaShaadpvcreate --metadatasize 128k --dataalignment 3.5k $dev1
117*7c604eeaShaadcheck_pv_field_ $dev1 pe_start $pv_align
118*7c604eeaShaad
119*7c604eeaShaadpvcreate --metadatasize 128k --metadatacopies 2 --dataalignment 3.5k $dev1
120*7c604eeaShaadcheck_pv_field_ $dev1 pe_start $pv_align
121*7c604eeaShaad
122*7c604eeaShaad# data area is aligned to 64k by default,
123*7c604eeaShaad# data area start is shifted by the specified alignment_offset
124*7c604eeaShaadpv_align="195.50k"
125*7c604eeaShaadpvcreate --metadatasize 128k --dataalignmentoffset 7s $dev1
126*7c604eeaShaadcheck_pv_field_ $dev1 pe_start $pv_align
127*7c604eeaShaad
128*7c604eeaShaad# 2nd metadata area is created without problems when
129*7c604eeaShaad# data area start is shifted by the specified alignment_offset
130*7c604eeaShaadpvcreate --metadatasize 128k --metadatacopies 2 --dataalignmentoffset 7s $dev1
131*7c604eeaShaadcheck_pv_field_ $dev1 pv_mda_count 2
132*7c604eeaShaad# FIXME: compare start of 2nd mda with and without --dataalignmentoffset
133*7c604eeaShaad
134*7c604eeaShaad#COMM 'pv with LVM1 compatible data alignment can be convereted'
135*7c604eeaShaad#compatible == LVM1_PE_ALIGN == 64k
136*7c604eeaShaadpvcreate --dataalignment 256k $dev1
137*7c604eeaShaadvgcreate -s 1m $vg $dev1
138*7c604eeaShaadvgconvert -M1 $vg
139*7c604eeaShaadvgconvert -M2 $vg
140*7c604eeaShaadcheck_pv_field_ $dev1 pe_start 256.00k
141*7c604eeaShaadvgremove $vg
142*7c604eeaShaad
143*7c604eeaShaad#COMM 'pv with LVM1 incompatible data alignment cannot be convereted'
144*7c604eeaShaadpvcreate --dataalignment 10k $dev1
145*7c604eeaShaadvgcreate -s 1m $vg $dev1
146*7c604eeaShaadnot vgconvert -M1 $vg
147*7c604eeaShaadvgremove $vg
148*7c604eeaShaad
149*7c604eeaShaad#COMM 'vgcfgrestore allows pe_start=0'
150*7c604eeaShaad#basically it produces nonsense, but it tests vgcfgrestore,
151*7c604eeaShaad#not that final cfg is usable...
152*7c604eeaShaadpvcreate --metadatacopies 0 $dev1
153*7c604eeaShaadpvcreate $dev2
154*7c604eeaShaadvgcreate $vg $dev1 $dev2
155*7c604eeaShaadvgcfgbackup -f "$(pwd)/backup.$$" $vg
156*7c604eeaShaadsed 's/pe_start = [0-9]*/pe_start = 0/' "$(pwd)/backup.$$" > "$(pwd)/backup.$$1"
157*7c604eeaShaadvgcfgrestore -f "$(pwd)/backup.$$1" $vg
158*7c604eeaShaadcheck_pv_field_ $dev1 pe_start 0
159*7c604eeaShaadcheck_pv_field_ $dev2 pe_start 0
160*7c604eeaShaadvgremove $vg
161