summaryrefslogtreecommitdiff
path: root/ironic_python_agent/tests/unit/test_hardware.py
diff options
context:
space:
mode:
Diffstat (limited to 'ironic_python_agent/tests/unit/test_hardware.py')
-rw-r--r--ironic_python_agent/tests/unit/test_hardware.py197
1 files changed, 186 insertions, 11 deletions
diff --git a/ironic_python_agent/tests/unit/test_hardware.py b/ironic_python_agent/tests/unit/test_hardware.py
index 25782acd..50483047 100644
--- a/ironic_python_agent/tests/unit/test_hardware.py
+++ b/ironic_python_agent/tests/unit/test_hardware.py
@@ -772,8 +772,10 @@ class TestGenericHardwareManager(test_base.BaseTestCase):
'shred', '--force', '--zero', '--verbose', '--iterations', '1',
'/dev/sda')
+ @mock.patch.object(hardware.GenericHardwareManager, '_shred_block_device')
@mock.patch.object(utils, 'execute')
- def test_erase_block_device_ata_security_enabled(self, mocked_execute):
+ def test_erase_block_device_ata_security_enabled(
+ self, mocked_execute, mock_shred):
hdparm_output = HDPARM_INFO_TEMPLATE % {
'supported': '\tsupported',
'enabled': '\tenabled',
@@ -782,17 +784,143 @@ class TestGenericHardwareManager(test_base.BaseTestCase):
}
mocked_execute.side_effect = [
+ (hdparm_output, ''),
+ None,
(hdparm_output, '')
]
block_device = hardware.BlockDevice('/dev/sda', 'big', 1073741824,
True)
+
+ self.assertRaises(
+ errors.IncompatibleHardwareMethodError,
+ self.hardware.erase_block_device,
+ self.node,
+ block_device)
+ self.assertFalse(mock_shred.called)
+
+ @mock.patch.object(hardware.GenericHardwareManager, '_shred_block_device')
+ @mock.patch.object(utils, 'execute')
+ def test_erase_block_device_ata_security_enabled_unlock_attempt(
+ self, mocked_execute, mock_shred):
+ hdparm_output = HDPARM_INFO_TEMPLATE % {
+ 'supported': '\tsupported',
+ 'enabled': '\tenabled',
+ 'frozen': 'not\tfrozen',
+ 'enhanced_erase': 'not\tsupported: enhanced erase',
+ }
+
+ hdparm_output_not_enabled = HDPARM_INFO_TEMPLATE % {
+ 'supported': '\tsupported',
+ 'enabled': 'not\tenabled',
+ 'frozen': 'not\tfrozen',
+ 'enhanced_erase': 'not\tsupported: enhanced erase',
+ }
+
+ mocked_execute.side_effect = [
+ (hdparm_output, ''),
+ '',
+ (hdparm_output_not_enabled, ''),
+ '',
+ '',
+ (hdparm_output_not_enabled, '')
+ ]
+
+ block_device = hardware.BlockDevice('/dev/sda', 'big', 1073741824,
+ True)
+
+ self.hardware.erase_block_device(self.node, block_device)
+ self.assertFalse(mock_shred.called)
+
+ @mock.patch.object(utils, 'execute')
+ def test__ata_erase_security_enabled_unlock_exception(
+ self, mocked_execute):
+ hdparm_output = HDPARM_INFO_TEMPLATE % {
+ 'supported': '\tsupported',
+ 'enabled': '\tenabled',
+ 'frozen': 'not\tfrozen',
+ 'enhanced_erase': 'not\tsupported: enhanced erase',
+ }
+
+ mocked_execute.side_effect = [
+ (hdparm_output, ''),
+ processutils.ProcessExecutionError()
+ ]
+
+ block_device = hardware.BlockDevice('/dev/sda', 'big', 1073741824,
+ True)
+
+ self.assertRaises(errors.BlockDeviceEraseError,
+ self.hardware._ata_erase,
+ block_device)
+
+ @mock.patch.object(utils, 'execute')
+ def test__ata_erase_security_enabled_set_password_exception(
+ self, mocked_execute):
+ hdparm_output = HDPARM_INFO_TEMPLATE % {
+ 'supported': '\tsupported',
+ 'enabled': '\tenabled',
+ 'frozen': 'not\tfrozen',
+ 'enhanced_erase': 'not\tsupported: enhanced erase',
+ }
+
+ hdparm_output_not_enabled = HDPARM_INFO_TEMPLATE % {
+ 'supported': '\tsupported',
+ 'enabled': 'not\tenabled',
+ 'frozen': 'not\tfrozen',
+ 'enhanced_erase': 'not\tsupported: enhanced erase',
+ }
+
+ mocked_execute.side_effect = [
+ (hdparm_output, ''),
+ '',
+ (hdparm_output_not_enabled, ''),
+ '',
+ processutils.ProcessExecutionError()
+ ]
+
+ block_device = hardware.BlockDevice('/dev/sda', 'big', 1073741824,
+ True)
+
+ self.assertRaises(errors.BlockDeviceEraseError,
+ self.hardware._ata_erase,
+ block_device)
+
+ @mock.patch.object(utils, 'execute')
+ def test__ata_erase_security_erase_exec_exception(
+ self, mocked_execute):
+ hdparm_output = HDPARM_INFO_TEMPLATE % {
+ 'supported': '\tsupported',
+ 'enabled': '\tenabled',
+ 'frozen': 'not\tfrozen',
+ 'enhanced_erase': 'not\tsupported: enhanced erase',
+ }
+
+ hdparm_output_not_enabled = HDPARM_INFO_TEMPLATE % {
+ 'supported': '\tsupported',
+ 'enabled': 'not\tenabled',
+ 'frozen': 'not\tfrozen',
+ 'enhanced_erase': 'not\tsupported: enhanced erase',
+ }
+
+ mocked_execute.side_effect = [
+ (hdparm_output, '', '-1'),
+ '',
+ (hdparm_output_not_enabled, ''),
+ '',
+ processutils.ProcessExecutionError()
+ ]
+
+ block_device = hardware.BlockDevice('/dev/sda', 'big', 1073741824,
+ True)
+
self.assertRaises(errors.BlockDeviceEraseError,
- self.hardware.erase_block_device,
- self.node, block_device)
+ self.hardware._ata_erase,
+ block_device)
+ @mock.patch.object(hardware.GenericHardwareManager, '_shred_block_device')
@mock.patch.object(utils, 'execute')
- def test_erase_block_device_ata_frozen(self, mocked_execute):
+ def test_erase_block_device_ata_frozen(self, mocked_execute, mock_shred):
hdparm_output = HDPARM_INFO_TEMPLATE % {
'supported': '\tsupported',
'enabled': 'not\tenabled',
@@ -806,12 +934,59 @@ class TestGenericHardwareManager(test_base.BaseTestCase):
block_device = hardware.BlockDevice('/dev/sda', 'big', 1073741824,
True)
- self.assertRaises(errors.BlockDeviceEraseError,
- self.hardware.erase_block_device,
- self.node, block_device)
+ self.assertRaises(
+ errors.IncompatibleHardwareMethodError,
+ self.hardware.erase_block_device,
+ self.node,
+ block_device)
+ self.assertFalse(mock_shred.called)
+
+ @mock.patch.object(hardware.GenericHardwareManager, '_shred_block_device')
+ @mock.patch.object(utils, 'execute')
+ def test_erase_block_device_ata_failed(self, mocked_execute, mock_shred):
+ hdparm_output_before = HDPARM_INFO_TEMPLATE % {
+ 'supported': '\tsupported',
+ 'enabled': 'not\tenabled',
+ 'frozen': 'not\tfrozen',
+ 'enhanced_erase': 'not\tsupported: enhanced erase',
+ }
+
+ # If security mode remains enabled after the erase, it is indiciative
+ # of a failed erase.
+ hdparm_output_after = HDPARM_INFO_TEMPLATE % {
+ 'supported': '\tsupported',
+ 'enabled': '\tenabled',
+ 'frozen': 'not\tfrozen',
+ 'enhanced_erase': 'not\tsupported: enhanced erase',
+ }
+
+ mocked_execute.side_effect = [
+ (hdparm_output_before, ''),
+ ('', ''),
+ ('', ''),
+ (hdparm_output_after, ''),
+ ]
+
+ block_device = hardware.BlockDevice('/dev/sda', 'big', 1073741824,
+ True)
+ self.assertRaises(
+ errors.IncompatibleHardwareMethodError,
+ self.hardware.erase_block_device,
+ self.node,
+ block_device)
+ self.assertFalse(mock_shred.called)
+
+ @mock.patch.object(hardware.GenericHardwareManager, '_shred_block_device')
@mock.patch.object(utils, 'execute')
- def test_erase_block_device_ata_failed(self, mocked_execute):
+ def test_erase_block_device_ata_failed_continued(
+ self,
+ mocked_execute,
+ mock_shred):
+
+ info = self.node.get('driver_internal_info')
+ info['agent_continue_if_ata_erase_failed'] = True
+
hdparm_output_before = HDPARM_INFO_TEMPLATE % {
'supported': '\tsupported',
'enabled': 'not\tenabled',
@@ -837,9 +1012,9 @@ class TestGenericHardwareManager(test_base.BaseTestCase):
block_device = hardware.BlockDevice('/dev/sda', 'big', 1073741824,
True)
- self.assertRaises(errors.BlockDeviceEraseError,
- self.hardware.erase_block_device,
- self.node, block_device)
+
+ self.hardware.erase_block_device(self.node, block_device)
+ self.assertTrue(mock_shred.called)
def test_normal_vs_enhanced_security_erase(self):
@mock.patch.object(utils, 'execute')