@@ -28,6 +28,18 @@ def setUp(self):
28
28
self .assertIsNone (disk .format .type )
29
29
self .assertFalse (disk .children )
30
30
31
+ def _get_pv_size (self , pv ):
32
+ out = subprocess .check_output (["pvs" , "-o" , "pv_size" , "--noheadings" , "--nosuffix" , "--units=b" , pv ])
33
+ return blivet .size .Size (out .decode ().strip ())
34
+
35
+ def _get_vg_size (self , vg ):
36
+ out = subprocess .check_output (["vgs" , "-o" , "vg_size" , "--noheadings" , "--nosuffix" , "--units=b" , vg ])
37
+ return blivet .size .Size (out .decode ().strip ())
38
+
39
+ def _get_vg_free (self , vg ):
40
+ out = subprocess .check_output (["vgs" , "-o" , "vg_free" , "--noheadings" , "--nosuffix" , "--units=b" , vg ])
41
+ return blivet .size .Size (out .decode ().strip ())
42
+
31
43
def _clean_up (self ):
32
44
self .storage .reset ()
33
45
for disk in self .storage .disks :
@@ -77,6 +89,8 @@ def test_lvm_basic(self):
77
89
self .assertIsInstance (pv , blivet .devices .PartitionDevice )
78
90
self .assertIsNotNone (pv .format )
79
91
self .assertEqual (pv .format .type , "lvmpv" )
92
+ pv_size = self ._get_pv_size (pv .path )
93
+ self .assertEqual (pv .format .size , pv_size )
80
94
81
95
vg = self .storage .devicetree .get_device_by_name (self .vgname )
82
96
self .assertIsNotNone (vg )
@@ -87,6 +101,10 @@ def test_lvm_basic(self):
87
101
self .assertEqual (pv .format .vg_uuid , vg .uuid )
88
102
self .assertEqual (len (vg .parents ), 1 )
89
103
self .assertEqual (vg .parents [0 ], pv )
104
+ vg_size = self ._get_vg_size (vg .name )
105
+ self .assertEqual (vg_size , vg .size )
106
+ vg_free = self ._get_vg_free (vg .name )
107
+ self .assertEqual (vg_free , vg .free_space )
90
108
91
109
lv = self .storage .devicetree .get_device_by_name ("%s-blivetTestLV" % self .vgname )
92
110
self .assertIsNotNone (lv )
@@ -139,6 +157,13 @@ def test_lvm_thin(self):
139
157
self .storage .do_it ()
140
158
self .storage .reset ()
141
159
160
+ vg = self .storage .devicetree .get_device_by_name (self .vgname )
161
+ self .assertIsNotNone (vg )
162
+ vg_size = self ._get_vg_size (vg .name )
163
+ self .assertEqual (vg_size , vg .size )
164
+ vg_free = self ._get_vg_free (vg .name )
165
+ self .assertEqual (vg_free , vg .free_space )
166
+
142
167
pool = self .storage .devicetree .get_device_by_name ("%s-blivetTestPool" % self .vgname )
143
168
self .assertIsNotNone (pool )
144
169
self .assertTrue (pool .is_thin_pool )
@@ -185,6 +210,14 @@ def _test_lvm_raid(self, seg_type, raid_level, stripe_size=0):
185
210
self .storage .do_it ()
186
211
self .storage .reset ()
187
212
213
+ vg = self .storage .devicetree .get_device_by_name (self .vgname )
214
+ self .assertIsNotNone (vg )
215
+
216
+ vg_size = self ._get_vg_size (vg .name )
217
+ self .assertEqual (vg_size , vg .size )
218
+ vg_free = self ._get_vg_free (vg .name )
219
+ self .assertEqual (vg_free , vg .free_space + vg .reserved_space )
220
+
188
221
raidlv = self .storage .devicetree .get_device_by_name ("%s-blivetTestRAIDLV" % self .vgname )
189
222
self .assertIsNotNone (raidlv )
190
223
self .assertTrue (raidlv .is_raid_lv )
@@ -241,6 +274,13 @@ def test_lvm_cache(self):
241
274
self .storage .do_it ()
242
275
self .storage .reset ()
243
276
277
+ vg = self .storage .devicetree .get_device_by_name (self .vgname )
278
+ self .assertIsNotNone (vg )
279
+ vg_size = self ._get_vg_size (vg .name )
280
+ self .assertEqual (vg_size , vg .size )
281
+ vg_free = self ._get_vg_free (vg .name )
282
+ self .assertEqual (vg_free , vg .free_space )
283
+
244
284
cachedlv = self .storage .devicetree .get_device_by_name ("%s-blivetTestCachedLV" % self .vgname )
245
285
self .assertIsNotNone (cachedlv )
246
286
self .assertTrue (cachedlv .cached )
@@ -280,6 +320,13 @@ def test_lvm_cache_attach(self):
280
320
self .storage .do_it ()
281
321
self .storage .reset ()
282
322
323
+ vg = self .storage .devicetree .get_device_by_name (self .vgname )
324
+ self .assertIsNotNone (vg )
325
+ vg_size = self ._get_vg_size (vg .name )
326
+ self .assertEqual (vg_size , vg .size )
327
+ vg_free = self ._get_vg_free (vg .name )
328
+ self .assertEqual (vg_free , vg .free_space )
329
+
283
330
cachedlv = self .storage .devicetree .get_device_by_name ("%s-blivetTestCachedLV" % self .vgname )
284
331
self .assertIsNotNone (cachedlv )
285
332
cachepool = self .storage .devicetree .get_device_by_name ("%s-blivetTestFastLV" % self .vgname )
@@ -334,6 +381,13 @@ def test_lvm_cache_create_and_attach(self):
334
381
self .storage .do_it ()
335
382
self .storage .reset ()
336
383
384
+ vg = self .storage .devicetree .get_device_by_name (self .vgname )
385
+ self .assertIsNotNone (vg )
386
+ vg_size = self ._get_vg_size (vg .name )
387
+ self .assertEqual (vg_size , vg .size )
388
+ vg_free = self ._get_vg_free (vg .name )
389
+ self .assertEqual (vg_free , vg .free_space )
390
+
337
391
cachedlv = self .storage .devicetree .get_device_by_name ("%s-blivetTestCachedLV" % self .vgname )
338
392
self .assertIsNotNone (cachedlv )
339
393
@@ -349,6 +403,13 @@ def test_lvm_cache_create_and_attach(self):
349
403
self .storage .do_it ()
350
404
self .storage .reset ()
351
405
406
+ vg = self .storage .devicetree .get_device_by_name (self .vgname )
407
+ self .assertIsNotNone (vg )
408
+ vg_size = self ._get_vg_size (vg .name )
409
+ self .assertEqual (vg_size , vg .size )
410
+ vg_free = self ._get_vg_free (vg .name )
411
+ self .assertEqual (vg_free , vg .free_space )
412
+
352
413
cachedlv = self .storage .devicetree .get_device_by_name ("%s-blivetTestCachedLV" % self .vgname )
353
414
self .assertIsNotNone (cachedlv )
354
415
self .assertTrue (cachedlv .cached )
@@ -378,6 +439,13 @@ def test_lvm_pvs_add_remove(self):
378
439
379
440
self .storage .do_it ()
380
441
442
+ vg = self .storage .devicetree .get_device_by_name (self .vgname )
443
+ self .assertIsNotNone (vg )
444
+ vg_size = self ._get_vg_size (vg .name )
445
+ self .assertEqual (vg_size , vg .size )
446
+ vg_free = self ._get_vg_free (vg .name )
447
+ self .assertEqual (vg_free , vg .free_space )
448
+
381
449
# create a second PV
382
450
disk2 = self .storage .devicetree .get_device_by_path (self .vdevs [1 ])
383
451
self .assertIsNotNone (disk2 )
@@ -392,6 +460,17 @@ def test_lvm_pvs_add_remove(self):
392
460
self .storage .do_it ()
393
461
self .storage .reset ()
394
462
463
+ pv1 = self .storage .devicetree .get_device_by_name (pv1 .name )
464
+ pv1_size = self ._get_pv_size (pv1 .path )
465
+ self .assertEqual (pv1 .format .size , pv1_size )
466
+
467
+ vg = self .storage .devicetree .get_device_by_name (self .vgname )
468
+ self .assertIsNotNone (vg )
469
+ vg_size = self ._get_vg_size (vg .name )
470
+ self .assertEqual (vg_size , vg .size )
471
+ vg_free = self ._get_vg_free (vg .name )
472
+ self .assertEqual (vg_free , vg .free_space )
473
+
395
474
# add the PV to the existing VG
396
475
vg = self .storage .devicetree .get_device_by_name (self .vgname )
397
476
pv2 = self .storage .devicetree .get_device_by_name (pv2 .name )
@@ -400,6 +479,17 @@ def test_lvm_pvs_add_remove(self):
400
479
self .storage .devicetree .actions .add (ac )
401
480
self .storage .do_it ()
402
481
482
+ pv2 = self .storage .devicetree .get_device_by_name (pv2 .name )
483
+ pv2_size = self ._get_pv_size (pv2 .path )
484
+ self .assertEqual (pv2 .format .size , pv2_size )
485
+
486
+ vg = self .storage .devicetree .get_device_by_name (self .vgname )
487
+ self .assertIsNotNone (vg )
488
+ vg_size = self ._get_vg_size (vg .name )
489
+ self .assertEqual (vg_size , vg .size )
490
+ vg_free = self ._get_vg_free (vg .name )
491
+ self .assertEqual (vg_free , vg .free_space )
492
+
403
493
self .assertEqual (pv2 .format .vg_name , vg .name )
404
494
405
495
self .storage .reset ()
@@ -421,6 +511,17 @@ def test_lvm_pvs_add_remove(self):
421
511
422
512
self .storage .do_it ()
423
513
514
+ pv2 = self .storage .devicetree .get_device_by_name (pv2 .name )
515
+ pv2_size = self ._get_pv_size (pv2 .path )
516
+ self .assertEqual (pv2 .format .size , pv2_size )
517
+
518
+ vg = self .storage .devicetree .get_device_by_name (self .vgname )
519
+ self .assertIsNotNone (vg )
520
+ vg_size = self ._get_vg_size (vg .name )
521
+ self .assertEqual (vg_size , vg .size )
522
+ vg_free = self ._get_vg_free (vg .name )
523
+ self .assertEqual (vg_free , vg .free_space )
524
+
424
525
self .assertIsNone (pv1 .format .type )
425
526
426
527
self .storage .reset ()
@@ -430,3 +531,53 @@ def test_lvm_pvs_add_remove(self):
430
531
self .assertIsNotNone (vg )
431
532
self .assertEqual (len (vg .pvs ), 1 )
432
533
self .assertEqual (vg .pvs [0 ].name , pv2 .name )
534
+
535
+ def test_lvm_pv_size (self ):
536
+ disk = self .storage .devicetree .get_device_by_path (self .vdevs [0 ])
537
+ self .assertIsNotNone (disk )
538
+ self .storage .initialize_disk (disk )
539
+
540
+ pv = self .storage .new_partition (size = blivet .size .Size ("100 MiB" ), fmt_type = "lvmpv" ,
541
+ parents = [disk ])
542
+ self .storage .create_device (pv )
543
+
544
+ blivet .partitioning .do_partitioning (self .storage )
545
+
546
+ self .storage .do_it ()
547
+ self .storage .reset ()
548
+
549
+ pv = self .storage .devicetree .get_device_by_name (pv .name )
550
+ self .assertIsNotNone (pv )
551
+
552
+ pv .format .update_size_info ()
553
+ self .assertTrue (pv .format .resizable )
554
+
555
+ ac = blivet .deviceaction .ActionResizeFormat (pv , blivet .size .Size ("50 MiB" ))
556
+ self .storage .devicetree .actions .add (ac )
557
+
558
+ self .storage .do_it ()
559
+ self .storage .reset ()
560
+
561
+ pv = self .storage .devicetree .get_device_by_name (pv .name )
562
+ self .assertIsNotNone (pv )
563
+ self .assertEqual (pv .format .size , blivet .size .Size ("50 MiB" ))
564
+ pv_size = self ._get_pv_size (pv .path )
565
+ self .assertEqual (pv_size , pv .format .size )
566
+
567
+ vg = self .storage .new_vg (name = self .vgname , parents = [pv ])
568
+ self .storage .create_device (vg )
569
+
570
+ self .storage .do_it ()
571
+ self .storage .reset ()
572
+
573
+ pv = self .storage .devicetree .get_device_by_name (pv .name )
574
+ self .assertIsNotNone (pv )
575
+ pv_size = self ._get_pv_size (pv .path )
576
+ self .assertEqual (pv_size , pv .format .size )
577
+
578
+ vg = self .storage .devicetree .get_device_by_name (self .vgname )
579
+ self .assertIsNotNone (vg )
580
+ vg_size = self ._get_vg_size (vg .name )
581
+ self .assertEqual (vg_size , vg .size )
582
+ vg_free = self ._get_vg_free (vg .name )
583
+ self .assertEqual (vg_free , vg .free_space )
0 commit comments