summaryrefslogtreecommitdiff
path: root/test/shell/select-tools.sh
blob: 0ca633c93792cd948ad8d8d0d702720d06776084 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
#!/usr/bin/env bash

# Copyright (C) 2015 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
# of the GNU General Public License v.2.
#
# 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA


SKIP_WITH_LVMPOLLD=1

. lib/inittest

aux prepare_pvs 4 12

vgcreate $SHARED -s 4m $vg1 "$dev1" "$dev2"
vgcreate $SHARED -s 4m $vg2 "$dev3" "$dev4"

# vg1/lv1 mapped onto dev1
lvcreate -l1 -n "lv1" $vg1 "$dev1"

# vg1/lv2 mapped onto dev1 and dev2 (2 segments)
lvcreate -l3 -n "lv2" $vg1 "$dev1" "$dev2"

# vg2/lv3 mapped onto dev3
lvcreate -l1 -n "lv3" $vg2 "$dev3"

# vg2/lv4 mapped onto dev3
lvcreate -l1 -n "lv4" $vg2 "$dev3" "$dev4"

# vg2/lv1 mapped onto "$dev4" (same LV name as vg1/lv1)
lvcreate -l1 -n "lv1" $vg2 "$dev4"

###########################################
# exercise process_each_vg with selection #
###########################################

# select contains VGS field
# direct vg name match
vgchange --addtag 101 -S "vg_name=$vg1"
check vg_field $vg1 vg_tags 101
not check vg_field $vg2 vg_tags 101
vgchange --deltag 101

# select contains LVS fiels
vgchange --addtag 102 -S "lv_name=lv2"
check vg_field $vg1 vg_tags 102
not check vg_field $vg2 vg_tags 102
vgchange --deltag 102
vgchange --addtag 103 -S "lv_name=lv1"
check vg_field $vg1 vg_tags 103
check vg_field $vg2 vg_tags 103
vgchange --deltag 103

# select contains SEGS field
vgchange --addtag 104 -S 'seg_start=8m'
check vg_field $vg1 vg_tags 104
not check vg_field $vg2 vg_tags 104
vgchange --deltag 104
vgchange --addtag 105 -S "seg_start=0m"
check vg_field $vg1 vg_tags 105
check vg_field $vg2 vg_tags 105
vgchange --deltag 105

# select contains PVS field
vgchange --addtag 106 -S pv_name="$dev1"
check vg_field $vg1 vg_tags 106
not check vg_field $vg2 vg_tags 106
vgchange --deltag 106
vgchange --addtag 107 -S "pv_size>0m"
check vg_field $vg1 vg_tags 107
check vg_field $vg2 vg_tags 107
vgchange --deltag 107

# select contains PVSEGS field
vgchange --addtag 108 -S "pvseg_size=2"
check vg_field $vg1 vg_tags 108
not check vg_field $vg2 vg_tags 108
vgchange --deltag 108
vgchange --addtag 109 -S "pvseg_size=1"
check vg_field $vg1 vg_tags 109
check vg_field $vg2 vg_tags 109
vgchange --deltag 109

# if VG name or tag is supplied together with the
# selection, the result is an intersection of both
vgchange --addtag 110 -S "vg_name=$vg1" $vg2
not check vg_field $vg1 vg_tags 110
not check vg_field $vg2 vg_tags 110
vgchange --deltag 110
vgchange --addtag 111 -S "vg_name=$vg1" $vg1
check vg_field $vg1 vg_tags 111
not check vg_field $vg2 vg_tags 111
vgchange --deltag 111
vgchange --addtag "tag" $vg1
vgchange --addtag 112 -S "vg_name=$vg2" @tag
not check vg_field $vg1 vg_tags "tag,112"
not check vg_field $vg2 vg_tags "tag,112"
vgchange --deltag 112
vgchange --addtag 113 -S "vg_name=$vg1" @tag
check vg_field $vg1 vg_tags "113,tag"
not check vg_field $vg2 vg_tags "113,tag"
vgchange --deltag 113 --deltag tag

###########################################
# exercise process_each_lv with selection #
###########################################

# select contains VGS field
lvchange --addtag 201 -S "vg_name=$vg1"
check lv_field $vg1/lv1 lv_tags 201
check lv_field $vg1/lv2 lv_tags 201
not check lv_field $vg2/lv3 lv_tags 201
not check lv_field $vg2/lv4 lv_tags 201
not check lv_field $vg2/lv1 lv_tags 201
lvchange --deltag 201 $vg1 $vg2

# select contains LVS fiels
lvchange --addtag 202 -S "lv_name=lv2"
not check lv_field $vg1/lv1 lv_tags 202
check lv_field $vg1/lv2 lv_tags 202
not check lv_field $vg2/lv3 lv_tags 202
not check lv_field $vg2/lv4 lv_tags 202
not check lv_field $vg2/lv1 lv_tags 202
lvchange --deltag 202 $vg1 $vg2
lvchange --addtag 203 -S "lv_name=lv1"
check lv_field $vg1/lv1 lv_tags 203
not check lv_field $vg1/lv2 lv_tags 203
not check lv_field $vg2/lv3 lv_tags 203
not check lv_field $vg2/lv4 lv_tags 203
check lv_field $vg2/lv1 lv_tags 203
lvchange --deltag 203 $vg1 $vg2

# select contains SEGS field
lvchange --addtag 204 -S "seg_start=8m"
not check lv_field $vg1/lv1 lv_tags 204
check lv_field $vg1/lv2 lv_tags 204
not check lv_field $vg2/lv3 lv_tags 204
not check lv_field $vg2/lv4 lv_tags 204
not check lv_field $vg2/lv1 lv_tags 204
lvchange --deltag 204 $vg1 $vg2

# select contains PVS field - COMBINATION NOT ALLOWED!
lvchange --addtag 205 -S pv_name="$dev1" 2>err
grep "Can't report LV and PV fields at the same time" err
grep "Selection failed for LV" err
not check lv_field $vg1/lv1 lv_tags 205
not check lv_field $vg1/lv2 lv_tags 205
not check lv_field $vg2/lv3 lv_tags 205
not check lv_field $vg2/lv4 lv_tags 205
not check lv_field $vg2/lv1 lv_tags 205

# select contains PVSEGS field - COMBINATION NOT ALLOWED!
lvchange --addtag 206 -S "pvseg_start>=0" 2>err
grep "Can't report LV and PV fields at the same time" err
grep "Selection failed for LV" err
not check lv_field $vg1/lv1 lv_tags 206
not check lv_field $vg1/lv2 lv_tags 206
not check lv_field $vg2/lv3 lv_tags 206
not check lv_field $vg2/lv4 lv_tags 206
not check lv_field $vg2/lv1 lv_tags 206

# if LV name or tag is supplied together with the
# selection, the result is an intersection of both
lvchange --addtag 207 -S "lv_name=lv2" $vg1/lv1
not check lv_field $vg1/lv1 lv_tags 207
not check lv_field $vg1/lv2 lv_tags 207
not check lv_field $vg2/lv3 lv_tags 207
not check lv_field $vg2/lv4 lv_tags 207
not check lv_field $vg2/lv1 lv_tags 207
lvchange --deltag 207 $vg1 $vg2
lvchange --addtag 208 -S "lv_name=lv2" $vg1/lv2
not check lv_field $vg1/lv1 lv_tags 208
check lv_field $vg1/lv2 lv_tags 208
not check lv_field $vg2/lv3 lv_tags 208
not check lv_field $vg2/lv4 lv_tags 208
not check lv_field $vg2/lv1 lv_tags 208
lvchange --deltag 208 $vg1 $vg2
lvchange --addtag "tag" $vg1/lv2
lvchange --addtag 209 -S "lv_name=lv3" @tag
not check lv_field $vg1/lv1 lv_tags "209,tag"
not check lv_field $vg1/lv2 lv_tags "209,tag"
not check lv_field $vg2/lv3 lv_tags "209,tag"
not check lv_field $vg2/lv4 lv_tags "209,tag"
not check lv_field $vg2/lv1 lv_tags "209,tag"
lvchange --deltag 209 $vg1 $vg2
lvchange --addtag 210 -S "lv_name=lv2" @tag
not check lv_field $vg1/lv1 lv_tags "210,tag"
check lv_field $vg1/lv2 lv_tags "210,tag"
not check lv_field $vg2/lv3 lv_tags "210,tag"
not check lv_field $vg2/lv4 lv_tags "210,tag"
not check lv_field $vg2/lv1 lv_tags "210,tag"
lvchange --deltag 210 --deltag tag $vg1 $vg2

###########################################
# exercise process_each_pv with selection #
###########################################

# select contains VGS field
pvchange --addtag 301 -S "vg_name=$vg1"
check pv_field "$dev1" pv_tags 301
check pv_field "$dev2" pv_tags 301
not check pv_field "$dev3" pv_tags 301
not check pv_field "$dev4" pv_tags 301
pvchange -a --deltag 301

# select contains LVS field
pvchange --addtag 302 -S "lv_name=lv2"
check pv_field "$dev1" pv_tags 302
check pv_field "$dev2" pv_tags 302
not check pv_field "$dev3" pv_tags 302
not check pv_field "$dev4" pv_tags 302
pvchange -a --deltag 302

# select contains SEGS field
pvchange --addtag 303 -S "seg_start=8m"
check pv_field "$dev1" pv_tags 303
not check pv_field "$dev2" pv_tags 303
not check pv_field "$dev3" pv_tags 303
not check pv_field "$dev4" pv_tags 303
pvchange -a --deltag 303

# select contains PVS field
pvchange --addtag 304 -S pv_name="$dev1"
check pv_field "$dev1" pv_tags 304
not check pv_field "$dev2" pv_tags 304
not check pv_field "$dev3" pv_tags 304
not check pv_field "$dev4" pv_tags 304
pvchange -a --deltag 304

# select contains PVSEGS field
pvchange --addtag 305 -S "pvseg_size=2"
not check pv_field "$dev1" pv_tags 305
check pv_field "$dev2" pv_tags 305
not check pv_field "$dev3" pv_tags 305
not check pv_field "$dev4" pv_tags 305
pvchange -a --deltag 305

# if PV name or tag is supplied together with the
# selection, the result is an intersection of both
pvchange --addtag 306 -S pv_name="$dev1" "$dev2"
not check pv_field "$dev1" pv_tags 306
not check pv_field "$dev2" pv_tags 306
not check pv_field "$dev3" pv_tags 306
not check pv_field "$dev4" pv_tags 306
pvchange -a --deltag 306
pvchange --addtag 307 -S pv_name="$dev1" "$dev1"
check pv_field "$dev1" pv_tags 307
not check pv_field "$dev2" pv_tags 307
not check pv_field "$dev3" pv_tags 307
not check pv_field "$dev4" pv_tags 307
pvchange -a --deltag 307
pvchange --addtag "tag" "$dev1"
pvchange --addtag 308 -S pv_name="$dev2" @tag
not check pv_field "$dev1" pv_tags "308,tag"
not check pv_field "$dev2" pv_tags "308,tag"
not check pv_field "$dev3" pv_tags "308,tag"
not check pv_field "$dev4" pv_tags "308,tag"
pvchange --deltag 308 "$dev1"
pvchange --addtag 309 -S pv_name="$dev1" @tag
check pv_field "$dev1" pv_tags "309,tag"
not check pv_field "$dev2" pv_tags "309,tag"
not check pv_field "$dev3" pv_tags "309,tag"
not check pv_field "$dev4" pv_tags "309,tag"
pvchange -a --deltag 309 --deltag tag

#########################
# special cases to test #
#########################

# if calling vgremove, make sure we're doing selection per-VG, not per-LV
# (vgremove calls process_each_vg with vgremove_single which itself
# iterates over LVs with process_each_lv_in_vg - so internally it actually
# operates per-LV, but we still need the selection to be done per-VG)
vgremove --yes -S 'lv_name=lv2' # should remove whole vg1, not just the lv2
vgremove --yes $vg2