Merge "Avoid OSError in get_blkdev_major_minor with network filesystems"

This commit is contained in:
Jenkins 2014-08-03 22:21:18 +00:00 committed by Gerrit Code Review
commit b28ee394f2
2 changed files with 21 additions and 10 deletions

View File

@ -577,18 +577,17 @@ class GenericUtilsTestCase(test.TestCase):
mock_stat.return_value = stat_result
dev = utils.get_blkdev_major_minor(test_device)
self.assertEqual('253:7', dev)
mock_stat.aseert_called_once_with(test_device)
mock_stat.assert_called_once_with(test_device)
@mock.patch('os.stat')
@mock.patch.object(utils, 'execute')
def test_get_blkdev_major_minor_file(self, mock_exec, mock_stat):
def _test_get_blkdev_major_minor_file(self, test_partition,
mock_exec, mock_stat):
mock_exec.return_value = (
'Filesystem Size Used Avail Use% Mounted on\n'
'/dev/made_up_disk1 4096 2048 2048 50% /tmp\n', None)
'Filesystem Size Used Avail Use%% Mounted on\n'
'%s 4096 2048 2048 50%% /tmp\n' % test_partition, None)
test_file = '/tmp/file'
test_partition = '/dev/made_up_disk1'
test_disk = '/dev/made_up_disk'
class stat_result_file:
@ -613,11 +612,20 @@ class GenericUtilsTestCase(test.TestCase):
mock_stat.side_effect = fake_stat
dev = utils.get_blkdev_major_minor(test_file)
mock_stat.assert_any_call(test_file)
mock_exec.assert_called_once_with('df', test_file)
if test_partition.startswith('/'):
mock_stat.assert_any_call(test_partition)
mock_stat.assert_any_call(test_disk)
return dev
def test_get_blkdev_major_minor_file(self):
dev = self._test_get_blkdev_major_minor_file('/dev/made_up_disk1')
self.assertEqual('8:64', dev)
mock_exec.aseert_called_once_with(test_file)
mock_stat.aseert_called_once_with(test_file)
mock_stat.aseert_called_once_with(test_partition)
mock_stat.aseert_called_once_with(test_disk)
def test_get_blkdev_major_minor_file_nfs(self):
dev = self._test_get_blkdev_major_minor_file('nfs-server:/export/path')
self.assertIsNone(dev)
class MonkeyPatchTestCase(test.TestCase):

View File

@ -679,6 +679,9 @@ def get_blkdev_major_minor(path, lookup_for_file=True):
# lookup the mounted disk which the file lies on
out, _err = execute('df', path)
devpath = out.split("\n")[1].split()[0]
if devpath[0] is not '/':
# the file is on a network file system
return None
return get_blkdev_major_minor(devpath, False)
else:
msg = _("Unable to get a block device for file \'%s\'") % path