summaryrefslogtreecommitdiff
path: root/tests/unittests
diff options
context:
space:
mode:
authorRyan Harper <ryan.harper@canonical.com>2018-04-02 13:33:39 -0600
committerChad Smith <chad.smith@canonical.com>2018-04-02 13:33:39 -0600
commitc436e173c4162c940523a2978799193672ff9cd3 (patch)
tree55c043231e24fa05389a6099f3801f578a30ec6e /tests/unittests
parenta510726d622b9d1768b5417d09277d5cc786e952 (diff)
downloadvyos-cloud-init-c436e173c4162c940523a2978799193672ff9cd3.tar.gz
vyos-cloud-init-c436e173c4162c940523a2978799193672ff9cd3.zip
cc_resizefs, util: handle no /dev/zfs
The zfs/zpool commands will hang for 10 seconds if /dev/zfs is not present (bug 1760173). This is a common occurence for containers using zfs as rootfs. Additionally handle missing zpool command or other errors that may occur while executing the zpool command.
Diffstat (limited to 'tests/unittests')
-rw-r--r--tests/unittests/test_util.py29
1 files changed, 27 insertions, 2 deletions
diff --git a/tests/unittests/test_util.py b/tests/unittests/test_util.py
index 8685b8e2..50101906 100644
--- a/tests/unittests/test_util.py
+++ b/tests/unittests/test_util.py
@@ -366,8 +366,11 @@ class TestMountinfoParsing(helpers.ResourceUsingTestCase):
expected = ('none', 'tmpfs', '/run/lock')
self.assertEqual(expected, util.parse_mount_info('/run/lock', lines))
+ @mock.patch('cloudinit.util.os')
@mock.patch('cloudinit.util.subp')
- def test_get_device_info_from_zpool(self, zpool_output):
+ def test_get_device_info_from_zpool(self, zpool_output, m_os):
+ # mock /dev/zfs exists
+ m_os.path.exists.return_value = True
# mock subp command from util.get_mount_info_fs_on_zpool
zpool_output.return_value = (
self.readResource('zpool_status_simple.txt'), ''
@@ -376,9 +379,31 @@ class TestMountinfoParsing(helpers.ResourceUsingTestCase):
ret = util.get_device_info_from_zpool('vmzroot')
self.assertEqual('gpt/system', ret)
self.assertIsNotNone(ret)
+ m_os.path.exists.assert_called_with('/dev/zfs')
+ @mock.patch('cloudinit.util.os')
+ def test_get_device_info_from_zpool_no_dev_zfs(self, m_os):
+ # mock /dev/zfs missing
+ m_os.path.exists.return_value = False
+ # save function return values and do asserts
+ ret = util.get_device_info_from_zpool('vmzroot')
+ self.assertIsNone(ret)
+
+ @mock.patch('cloudinit.util.os')
+ @mock.patch('cloudinit.util.subp')
+ def test_get_device_info_from_zpool_handles_no_zpool(self, m_sub, m_os):
+ """Handle case where there is no zpool command"""
+ # mock /dev/zfs exists
+ m_os.path.exists.return_value = True
+ m_sub.side_effect = util.ProcessExecutionError("No zpool cmd")
+ ret = util.get_device_info_from_zpool('vmzroot')
+ self.assertIsNone(ret)
+
+ @mock.patch('cloudinit.util.os')
@mock.patch('cloudinit.util.subp')
- def test_get_device_info_from_zpool_on_error(self, zpool_output):
+ def test_get_device_info_from_zpool_on_error(self, zpool_output, m_os):
+ # mock /dev/zfs exists
+ m_os.path.exists.return_value = True
# mock subp command from util.get_mount_info_fs_on_zpool
zpool_output.return_value = (
self.readResource('zpool_status_simple.txt'), 'error'