diff options
Diffstat (limited to 'tests/unittests/test_handler/test_handler_mounts.py')
| -rw-r--r-- | tests/unittests/test_handler/test_handler_mounts.py | 107 | 
1 files changed, 107 insertions, 0 deletions
| diff --git a/tests/unittests/test_handler/test_handler_mounts.py b/tests/unittests/test_handler/test_handler_mounts.py index e193f4d4..e87069f6 100644 --- a/tests/unittests/test_handler/test_handler_mounts.py +++ b/tests/unittests/test_handler/test_handler_mounts.py @@ -134,6 +134,113 @@ class TestSanitizeDevname(test_helpers.FilesystemMockingTestCase):              cc_mounts.sanitize_devname(disk_path, None, mock.Mock())) +class TestSwapFileCreation(test_helpers.FilesystemMockingTestCase): + +    def setUp(self): +        super(TestSwapFileCreation, self).setUp() +        self.new_root = self.tmp_dir() +        self.patchOS(self.new_root) + +        self.fstab_path = os.path.join(self.new_root, 'etc/fstab') +        self.swap_path = os.path.join(self.new_root, 'swap.img') +        self._makedirs('/etc') + +        self.add_patch('cloudinit.config.cc_mounts.FSTAB_PATH', +                       'mock_fstab_path', +                       self.fstab_path, +                       autospec=False) + +        self.add_patch('cloudinit.config.cc_mounts.subp.subp', +                       'm_subp_subp') + +        self.add_patch('cloudinit.config.cc_mounts.util.mounts', +                       'mock_util_mounts', +                       return_value={ +                           '/dev/sda1': {'fstype': 'ext4', +                                         'mountpoint': '/', +                                         'opts': 'rw,relatime,discard' +                                         }}) + +        self.mock_cloud = mock.Mock() +        self.mock_log = mock.Mock() +        self.mock_cloud.device_name_to_device = self.device_name_to_device + +        self.cc = { +            'swap': { +                'filename': self.swap_path, +                'size': '512', +                'maxsize': '512'}} + +    def _makedirs(self, directory): +        directory = os.path.join(self.new_root, directory.lstrip('/')) +        if not os.path.exists(directory): +            os.makedirs(directory) + +    def device_name_to_device(self, path): +        if path == 'swap': +            return self.swap_path +        else: +            dev = None + +        return dev + +    @mock.patch('cloudinit.util.get_mount_info') +    @mock.patch('cloudinit.util.kernel_version') +    def test_swap_creation_method_fallocate_on_xfs(self, m_kernel_version, +                                                   m_get_mount_info): +        m_kernel_version.return_value = (4, 20) +        m_get_mount_info.return_value = ["", "xfs"] + +        cc_mounts.handle(None, self.cc, self.mock_cloud, self.mock_log, []) +        self.m_subp_subp.assert_has_calls([ +            mock.call(['fallocate', '-l', '0M', self.swap_path], capture=True), +            mock.call(['mkswap', self.swap_path]), +            mock.call(['swapon', '-a'])]) + +    @mock.patch('cloudinit.util.get_mount_info') +    @mock.patch('cloudinit.util.kernel_version') +    def test_swap_creation_method_xfs(self, m_kernel_version, +                                      m_get_mount_info): +        m_kernel_version.return_value = (3, 18) +        m_get_mount_info.return_value = ["", "xfs"] + +        cc_mounts.handle(None, self.cc, self.mock_cloud, self.mock_log, []) +        self.m_subp_subp.assert_has_calls([ +            mock.call(['dd', 'if=/dev/zero', +                       'of=' + self.swap_path, +                       'bs=1M', 'count=0'], capture=True), +            mock.call(['mkswap', self.swap_path]), +            mock.call(['swapon', '-a'])]) + +    @mock.patch('cloudinit.util.get_mount_info') +    @mock.patch('cloudinit.util.kernel_version') +    def test_swap_creation_method_btrfs(self, m_kernel_version, +                                        m_get_mount_info): +        m_kernel_version.return_value = (4, 20) +        m_get_mount_info.return_value = ["", "btrfs"] + +        cc_mounts.handle(None, self.cc, self.mock_cloud, self.mock_log, []) +        self.m_subp_subp.assert_has_calls([ +            mock.call(['dd', 'if=/dev/zero', +                       'of=' + self.swap_path, +                       'bs=1M', 'count=0'], capture=True), +            mock.call(['mkswap', self.swap_path]), +            mock.call(['swapon', '-a'])]) + +    @mock.patch('cloudinit.util.get_mount_info') +    @mock.patch('cloudinit.util.kernel_version') +    def test_swap_creation_method_ext4(self, m_kernel_version, +                                       m_get_mount_info): +        m_kernel_version.return_value = (5, 14) +        m_get_mount_info.return_value = ["", "ext4"] + +        cc_mounts.handle(None, self.cc, self.mock_cloud, self.mock_log, []) +        self.m_subp_subp.assert_has_calls([ +            mock.call(['fallocate', '-l', '0M', self.swap_path], capture=True), +            mock.call(['mkswap', self.swap_path]), +            mock.call(['swapon', '-a'])]) + +  class TestFstabHandling(test_helpers.FilesystemMockingTestCase):      swap_path = '/dev/sdb1' | 
