22import unittest
33import overrides_hack
44
5- from utils import create_sparse_tempfile , TestTags , tag_test , required_plugins
5+ from utils import create_sparse_tempfile , create_sparse_file , TestTags , tag_test , required_plugins
66
77import gi
88gi .require_version ('BlockDev' , '3.0' )
1111
1212@required_plugins (("loop" ,))
1313class LoopTestCase (unittest .TestCase ):
14+ _loop_size = 100 * 1024 ** 2
1415
1516 requested_plugins = BlockDev .plugin_specs_from_names (("loop" ,))
1617
@@ -23,7 +24,7 @@ def setUpClass(cls):
2324
2425 def setUp (self ):
2526 self .addCleanup (self ._clean_up )
26- self .dev_file = create_sparse_tempfile ("loop_test" , 1024 ** 3 )
27+ self .dev_file = create_sparse_tempfile ("loop_test" , self . _loop_size )
2728 self .loop = None
2829
2930 def _clean_up (self ):
@@ -77,7 +78,7 @@ def test_loop_setup_with_offset(self):
7778 # should have smaller size due to the offset
7879 with open ("/sys/block/%s/size" % self .loop , "r" ) as f :
7980 size = int (f .read ()) * 512
80- self .assertEqual (size , 1024 ** 3 - 10 * 1024 ** 2 )
81+ self .assertEqual (size , self . _loop_size - 10 * 1024 ** 2 )
8182
8283 succ = BlockDev .loop_teardown (self .loop )
8384 self .assertTrue (succ )
@@ -219,3 +220,30 @@ def test_loop_get_set_autoclear(self):
219220 info = BlockDev .loop_info (self .loop )
220221 self .assertIsNotNone (info )
221222 self .assertFalse (info .autoclear )
223+
224+
225+ class LoopTestSetCapacity (LoopTestCase ):
226+ def test_loop_set_capacity (self ):
227+ succ , self .loop = BlockDev .loop_setup (self .dev_file )
228+ self .assertTrue (succ )
229+ self .assertTrue (self .loop )
230+
231+ with open ("/sys/block/%s/size" % self .loop , "r" ) as f :
232+ size = int (f .read ()) * 512
233+ self .assertEqual (size , self ._loop_size )
234+
235+ # enlarge the backing file
236+ create_sparse_file (self .dev_file , self ._loop_size * 2 )
237+
238+ # size shouldn't change without forcing re-read
239+ with open ("/sys/block/%s/size" % self .loop , "r" ) as f :
240+ size = int (f .read ()) * 512
241+ self .assertEqual (size , self ._loop_size )
242+
243+ succ = BlockDev .loop_set_capacity (self .loop )
244+ self .assertTrue (succ )
245+
246+ # now the size should be updated
247+ with open ("/sys/block/%s/size" % self .loop , "r" ) as f :
248+ size = int (f .read ()) * 512
249+ self .assertEqual (size , self ._loop_size * 2 )
0 commit comments