Esempio n. 1
0
 def test_clear_holders_wipe_superblock_rereads_pt(self, mock_block,
                                                   mock_log, m_zfs, m_time,
                                                   mock_swap, mock_mp):
     """test clear_holders.wipe_superblock re-reads partition table"""
     mock_swap.return_value = False
     mock_block.sysfs_to_devpath.return_value = self.test_blockdev
     mock_block.is_extended_partition.return_value = False
     mock_block.get_blockdev_for_partition.return_value = (
         self.test_blockdev, None)
     mock_mp.multipath_supported.return_value = False
     mock_block.is_zfs_member.return_value = False
     mock_block.get_sysfs_partitions.side_effect = iter([
         ['p1', 'p2'],  # has partitions before wipe
         ['p1', 'p2'],  # still has partitions after wipe
         [],  # partitions are now gone
     ])
     m_zfs.zfs_supported.return_value = True
     clear_holders.wipe_superblock(self.test_syspath)
     mock_block.sysfs_to_devpath.assert_called_with(self.test_syspath)
     mock_block.wipe_volume.assert_called_with(self.test_blockdev,
                                               exclusive=True,
                                               mode='superblock',
                                               strict=True)
     mock_block.get_sysfs_partitions.assert_has_calls(
         [mock.call(self.test_syspath)] * 3)
     mock_block.rescan_block_devices.assert_has_calls(
         [mock.call(devices=[self.test_blockdev])] * 2)
Esempio n. 2
0
    def test_clear_holders_mp_enabled_and_active_wipes_dm_dev(
            self, mock_block, mock_log, m_time, mock_swap, mock_mpath,
            m_get_holders, m_zfs):
        """wipe_superblock wipes removes mp parts first and wipes dev."""
        mock_swap.return_value = False
        mock_block.sysfs_to_devpath.return_value = self.test_blockdev
        m_zfs.zfs_supported.return_value = False
        mock_block.is_zfs_member.return_value = False
        mock_block.is_extended_partition.return_value = False
        mock_block.get_blockdev_for_partition.return_value = (
            self.test_blockdev, 1)

        mock_mpath.multipath_supported.return_value = True
        mock_mpath.is_mpath_device.return_value = True
        mock_mpath.find_mpath_id_by_path.return_value = 'mpatha'
        mock_mpath.find_mpath_partitions.return_value = ['mpatha-part1']
        mock_block.get_sysfs_partitions.side_effect = iter([
            [],  # partitions are now gone
        ])
        mock_mpath.is_mpath_member.return_value = False
        m_get_holders.return_value = []
        clear_holders.wipe_superblock(self.test_syspath)
        mock_block.sysfs_to_devpath.assert_called_with(self.test_syspath)
        mock_mpath.remove_partition.assert_called_with('mpatha-part1')
        mock_block.wipe_volume.assert_called_with(self.test_blockdev,
                                                  exclusive=True,
                                                  mode='superblock',
                                                  strict=True)
Esempio n. 3
0
 def test_clear_holders_wipe_superblock_rereads_pt_oserr(
         self, mock_block, mock_log, m_time, mock_swap, mock_mp, m_zfs):
     """test clear_holders.wipe_superblock re-reads ptable handles oserr"""
     mock_swap.return_value = False
     mock_block.sysfs_to_devpath.return_value = self.test_blockdev
     mock_block.is_extended_partition.return_value = False
     mock_block.get_blockdev_for_partition.return_value = (
         self.test_blockdev, None)
     mock_mp.multipath_supported.return_value = False
     m_zfs.zfs_supported.return_value = False
     mock_block.is_zfs_member.return_value = False
     mock_block.get_sysfs_partitions.side_effect = iter([
         ['p1', 'p2'],  # has partitions before wipe
         OSError('No sysfs path for partition'),
         [],  # partitions are now gone
     ])
     clear_holders.wipe_superblock(self.test_syspath)
     mock_block.sysfs_to_devpath.assert_called_with(self.test_syspath)
     mock_block.wipe_volume.assert_called_with(self.test_blockdev,
                                               exclusive=True,
                                               mode='superblock',
                                               strict=True)
     mock_block.get_sysfs_partitions.assert_has_calls(
         [mock.call(self.test_syspath)] * 3)
     mock_block.rescan_block_devices.assert_has_calls(
         [mock.call(devices=[self.test_blockdev])] * 2)
     self.assertEqual(1, m_time.sleep.call_count)
Esempio n. 4
0
 def test_clear_holders_wipe_superblock_zfs_no_utils(
         self, mock_block, mock_log, mock_zfs, mock_swap, mock_mp,
         mock_udev):
     """test clear_holders.wipe_superblock handles missing zpool cmd"""
     mock_swap.return_value = False
     mock_block.sysfs_to_devpath.return_value = self.test_blockdev
     mock_block.is_extended_partition.return_value = True
     clear_holders.wipe_superblock(self.test_syspath)
     self.assertFalse(mock_block.wipe_volume.called)
     mock_block.is_extended_partition.return_value = False
     mock_block.get_blockdev_for_partition.return_value = (
         self.test_blockdev, None)
     mock_mp.multipath_supported.return_value = False
     mock_block.is_zfs_member.return_value = True
     mock_zfs.zfs_supported.return_value = True
     mock_zfs.device_to_poolname.return_value = 'fake_pool'
     mock_zfs.zpool_list.return_value = ['fake_pool']
     mock_zfs.zpool_export.side_effect = [
         ProcessExecutionError(cmd=['zpool', 'export', 'fake_pool'],
                               stdout="",
                               stderr=("cannot open 'fake_pool': "
                                       "no such pool"))
     ]
     clear_holders.wipe_superblock(self.test_syspath)
     mock_block.sysfs_to_devpath.assert_called_with(self.test_syspath)
     mock_block.wipe_volume.assert_called_with(self.test_blockdev,
                                               exclusive=True,
                                               mode='superblock',
                                               strict=True)
Esempio n. 5
0
 def test_clear_holders_wipe_superblock_no_zfs(self, mock_block, mock_log,
                                               mock_zfs, mock_swap,
                                               mock_mp):
     """test clear_holders.wipe_superblock checks zfs supported"""
     mock_swap.return_value = False
     mock_block.sysfs_to_devpath.return_value = self.test_blockdev
     mock_block.is_extended_partition.return_value = True
     mock_block.get_blockdev_for_partition.return_value = (
         self.test_blockdev, None)
     mock_mp.multipath_supported.return_value = False
     clear_holders.wipe_superblock(self.test_syspath)
     self.assertFalse(mock_block.wipe_volume.called)
     mock_block.is_extended_partition.return_value = False
     mock_block.is_zfs_member.return_value = True
     mock_zfs.zfs_supported.return_value = False
     clear_holders.wipe_superblock(self.test_syspath)
     mock_block.sysfs_to_devpath.assert_called_with(self.test_syspath)
     self.assertEqual(1, mock_zfs.zfs_supported.call_count)
     self.assertEqual(0, mock_block.is_zfs_member.call_count)
     self.assertEqual(0, mock_zfs.device_to_poolname.call_count)
     self.assertEqual(0, mock_zfs.zpool_list.call_count)
     mock_block.wipe_volume.assert_called_with(self.test_blockdev,
                                               exclusive=True,
                                               mode='superblock',
                                               strict=True)
Esempio n. 6
0
 def test_clear_holders_wipe_superblock(self, mock_block, mock_log,
                                        mock_os_path, mock_swap):
     """test clear_holders.wipe_superblock handles errors right"""
     mock_swap.return_value = False
     mock_os_path.return_value = False
     mock_block.sysfs_to_devpath.return_value = self.test_blockdev
     mock_block.is_extended_partition.return_value = True
     clear_holders.wipe_superblock(self.test_syspath)
     self.assertFalse(mock_block.wipe_volume.called)
     mock_block.is_extended_partition.return_value = False
     mock_block.is_zfs_member.return_value = False
     clear_holders.wipe_superblock(self.test_syspath)
     mock_block.sysfs_to_devpath.assert_called_with(self.test_syspath)
     mock_block.wipe_volume.assert_called_with(self.test_blockdev,
                                               exclusive=True,
                                               mode='superblock')
Esempio n. 7
0
 def test_clear_holders_wipe_superblock_zfs(self, mock_block, mock_log,
                                            mock_zfs, mock_swap):
     """test clear_holders.wipe_superblock handles zfs member"""
     mock_swap.return_value = False
     mock_block.sysfs_to_devpath.return_value = self.test_blockdev
     mock_block.is_extended_partition.return_value = True
     clear_holders.wipe_superblock(self.test_syspath)
     self.assertFalse(mock_block.wipe_volume.called)
     mock_block.is_extended_partition.return_value = False
     mock_block.is_zfs_member.return_value = True
     mock_zfs.zfs_supported.return_value = True
     mock_zfs.device_to_poolname.return_value = 'fake_pool'
     mock_zfs.zpool_list.return_value = ['fake_pool']
     clear_holders.wipe_superblock(self.test_syspath)
     mock_block.sysfs_to_devpath.assert_called_with(self.test_syspath)
     mock_zfs.zpool_export.assert_called_with('fake_pool')
     mock_block.wipe_volume.assert_called_with(self.test_blockdev,
                                               exclusive=True,
                                               mode='superblock')
Esempio n. 8
0
 def test_clear_holders_mp_enabled_not_active_wipes_dev(
         self, mock_block, mock_log, m_time, mock_swap, mock_mpath, m_zfs):
     """wipe_superblock skips wiping multipath member path."""
     mock_swap.return_value = False
     mock_block.sysfs_to_devpath.return_value = self.test_blockdev
     mock_block.is_extended_partition.return_value = False
     mock_mpath.multipath_supported.return_value = True
     mock_mpath.find_mpath_id_by_path.return_value = None
     mock_block.get_blockdev_for_partition.return_value = (
         self.test_blockdev, 1)
     m_zfs.zfs_supported.return_value = False
     mock_block.is_zfs_member.return_value = False
     mock_block.get_sysfs_partitions.side_effect = iter([
         ['p1', 'p2'],  # has partitions before wipe
         ['p1', 'p2'],  # still has partitions after wipe
         [],  # partitions are now gone
     ])
     clear_holders.wipe_superblock(self.test_syspath)
     mock_block.sysfs_to_devpath.assert_called_with(self.test_syspath)
     self.assertEqual(0, mock_block.wipe_volume.call_count)
Esempio n. 9
0
 def test_clear_holders_mp_disabled_wipes_dev(self, mock_block, mock_log,
                                              m_time, mock_swap, mock_mpath,
                                              m_zfs):
     """wipe_superblock wipes blockdev with multipath disabled."""
     mock_swap.return_value = False
     mock_block.sysfs_to_devpath.return_value = self.test_blockdev
     mock_block.is_extended_partition.return_value = False
     mock_mpath.multipath_supported.return_value = False
     mock_block.get_blockdev_for_partition.return_value = (
         self.test_blockdev, 1)
     m_zfs.zfs_supported.return_value = False
     mock_block.is_zfs_member.return_value = False
     mock_block.get_sysfs_partitions.side_effect = iter([
         ['p1', 'p2'],  # has partitions before wipe
         ['p1', 'p2'],  # still has partitions after wipe
         [],  # partitions are now gone
     ])
     clear_holders.wipe_superblock(self.test_syspath)
     mock_block.sysfs_to_devpath.assert_called_with(self.test_syspath)
     mock_block.wipe_volume.assert_called_with(self.test_blockdev,
                                               exclusive=True,
                                               mode='superblock')