1#!/bin/sh
2# Copyright (C) 2008 Red Hat, Inc. All rights reserved.
3#
4# This copyrighted material is made available to anyone wishing to use,
5# modify, copy, or redistribute it subject to the terms and conditions
6# of the GNU General Public License v.2.
7#
8# You should have received a copy of the GNU General Public License
9# along with this program; if not, write to the Free Software Foundation,
10# Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
11
12# 'Exercise some lvcreate diagnostics'
13
14. ./test-utils.sh
15
16aux prepare_pvs 4
17aux pvcreate --metadatacopies 0 $dev1
18vgcreate -cn $vg $devs
19
20# "lvcreate rejects repeated invocation (run 2 times) (bz178216)"
21lvcreate -n $lv -l 4 $vg
22not lvcreate -n $lv -l 4 $vg
23lvremove -ff $vg/$lv
24# try to remove it again - should fail (but not segfault)
25not lvremove -ff $vg/$lv
26
27# "lvcreate rejects a negative stripe_size"
28not lvcreate -L 64m -n $lv -i2 --stripesize -4 $vg 2>err;
29grep "^  Negative stripesize is invalid\$" err
30
31# 'lvcreate rejects a too-large stripesize'
32not lvcreate -L 64m -n $lv -i2 --stripesize 4294967291 $vg 2>err
33grep "^  Stripe size cannot be larger than" err
34
35# 'lvcreate w/single stripe succeeds with diagnostics to stdout'
36lvcreate -L 64m -n $lv -i1 --stripesize 4 $vg >out 2>err
37grep "^  Redundant stripes argument: default is 1\$" out
38grep "^  Ignoring stripesize argument with single stripe\$" out
39lvdisplay $vg
40lvremove -ff $vg
41
42# 'lvcreate w/default (64KB) stripe size succeeds with diagnostics to stdout'
43lvcreate -L 64m -n $lv -i2 $vg > out
44grep "^  Using default stripesize" out
45lvdisplay $vg
46check_lv_field_ $vg/$lv stripesize "64.00k"
47lvremove -ff $vg
48
49# 'lvcreate rejects an invalid number of stripes'
50not lvcreate -L 64m -n $lv -i129 $vg 2>err
51grep "^  Number of stripes (129) must be between 1 and 128\$" err
52
53# The case on lvdisplay output is to verify that the LV was not created.
54# 'lvcreate rejects an invalid stripe size'
55not lvcreate -L 64m -n $lv -i2 --stripesize 3 $vg 2>err
56grep "^  Invalid stripe size" err
57case $(lvdisplay $vg) in "") true ;; *) false ;; esac
58
59# Setting max_lv works. (bz490298)
60lvremove -ff $vg
61vgchange -l 3 $vg
62lvcreate -l1 -n $lv1 $vg
63lvcreate -l1 -s -n $lv2 $vg/$lv1
64lvcreate -l1 -n $lv3 $vg
65not lvcreate -l1 -n $lv4 $vg
66
67lvremove -ff $vg/$lv3
68lvcreate -l1 -s -n $lv3 $vg/$lv1
69not lvcreate -l1 -n $lv4 $vg
70not lvcreate -l1 -m1 -n $lv4 $vg
71
72lvremove -ff $vg/$lv3
73lvcreate -l1 -m1 -n $lv3 $vg
74lvs
75vgs -o +max_lv
76not lvcreate -l1 -n $lv4 $vg
77not lvcreate -l1 -m1 -n $lv4 $vg
78
79lvconvert -m0 $vg/$lv3
80lvconvert -m2 -i 1 $vg/$lv3
81lvconvert -m1 $vg/$lv3
82
83not vgchange -l 2
84vgchange -l 4
85vgs $vg
86
87lvremove -ff $vg
88vgchange -l 0 $vg
89
90# lvcreate rejects invalid chunksize, accepts between 4K and 512K
91# validate origin_size
92vgremove -ff $vg
93vgcreate -cn $vg $devs
94lvcreate -L 32m -n $lv1 $vg
95not lvcreate -L 8m -n $lv2 -s --chunksize 3k $vg/$lv1
96not lvcreate -L 8m -n $lv2 -s --chunksize 1024k $vg/$lv1
97lvcreate -L 8m -n $lv2 -s --chunksize 4k $vg/$lv1
98check_lv_field_ $vg/$lv2 chunk_size 4.00k
99check_lv_field_ $vg/$lv2 origin_size 32.00m
100lvcreate -L 8m -n $lv3 -s --chunksize 512k $vg/$lv1
101check_lv_field_ $vg/$lv3 chunk_size 512.00k
102check_lv_field_ $vg/$lv3 origin_size 32.00m
103lvremove -ff $vg
104vgchange -l 0 $vg
105
106# regionsize must be
107# - nonzero (bz186013)
108# - a power of 2 and a multiple of page size
109# - <= size of LV
110not lvcreate -L 32m -n $lv -R0 $vg 2>err
111grep "Non-zero region size must be supplied." err
112not lvcreate -L 32m -n $lv -R 11k $vg
113not lvcreate -L 32m -n $lv -R 1k $vg
114lvcreate -L 32m -n $lv --regionsize 128m  -m 1 $vg
115check_lv_field_ $vg/$lv regionsize "32.00m"
116lvremove -ff $vg
117lvcreate -L 32m -n $lv --regionsize 4m -m 1 $vg
118check_lv_field_ $vg/$lv regionsize "4.00m"
119lvremove -ff $vg
120
121# snapshot with virtual origin works
122lvcreate -s --virtualoriginsize 64m -L 32m -n $lv1 $vg
123lvrename $vg/$lv1 $vg/$lv2
124lvcreate -s --virtualoriginsize 64m -L 32m -n $lv1 $vg
125lvchange -a n $vg/$lv1
126lvremove $vg/$lv1
127lvremove -ff $vg
128