def test_upgrade_fail(self): """Verify upgrade method exceptions.""" self._set_args({ "firmware": ["path_to_test_drive_firmware_1", "path_to_test_drive_firmware_2"] }) firmware_object = NetAppESeriesDriveFirmware() with self.assertRaisesRegexp(AnsibleFailJson, "Failed to upgrade drive firmware."): with mock.patch(self.REQUEST_FUNC, return_value=Exception()): firmware_object.upgrade()
def test_upload_firmware(self): """Verify exception is thrown""" self._set_args({ "firmware": ["path_to_test_drive_firmware_1", "path_to_test_drive_firmware_2"] }) firmware_object = NetAppESeriesDriveFirmware() with self.assertRaisesRegexp(AnsibleFailJson, "Failed to upload drive firmware"): with mock.patch(self.REQUEST_FUNC, return_value=Exception()): with mock.patch(self.CREATE_MULTIPART_FORMDATA_FUNC, return_value=("", {})): firmware_object.upload_firmware()
def test_upgrade_list_pass(self): """Verify upgrade_list method pass""" side_effects = [(200, self.FIRMWARE_DRIVES_RESPONSE), (200, { "offline": False, "available": True, "firmwareVersion": "MS00" }), (200, { "offline": False, "available": True, "firmwareVersion": "MS01" }), (200, { "offline": False, "available": True, "firmwareVersion": "MS02" })] self._set_args({"firmware": ["path/to/test_drive_firmware_1"]}) firmware_object = NetAppESeriesDriveFirmware() with mock.patch(self.REQUEST_FUNC, side_effect=side_effects): self.assertEqual(firmware_object.upgrade_list(), [{ "driveRefList": [ "010000005000C5007EDE4ECF0000000000000000", "010000005000C5007EDF9AAB0000000000000000" ], "filename": "test_drive_firmware_1" }]) side_effects = [(200, self.FIRMWARE_DRIVES_RESPONSE), (200, { "offline": False, "available": True, "firmwareVersion": "MS02" }), (200, { "offline": False, "available": True, "firmwareVersion": "MS02" }), (200, { "offline": False, "available": True, "firmwareVersion": "MS02" })] self._set_args({"firmware": ["path/to/test_drive_firmware_1"]}) firmware_object = NetAppESeriesDriveFirmware() with mock.patch(self.REQUEST_FUNC, side_effect=side_effects): self.assertEqual(firmware_object.upgrade_list(), [])
def test_upgrade_pass(self): """Verify upgrade upgrade in progress variable properly reports.""" self._set_args({ "firmware": ["path/to/test_drive_firmware_1", "path/to/test_drive_firmware_2"], "wait_for_completion": False }) firmware_object = NetAppESeriesDriveFirmware() firmware_object.upgrade_drives_online = True firmware_object.upgrade_list = lambda: {} with mock.patch(self.REQUEST_FUNC, return_value=(200, {})): firmware_object.upgrade() self.assertTrue(firmware_object.upgrade_in_progress) self._set_args({ "firmware": ["path_to_test_drive_firmware_1", "path_to_test_drive_firmware_2"], "wait_for_completion": True }) firmware_object = NetAppESeriesDriveFirmware() firmware_object.upgrade_drives_online = True firmware_object.upgrade_list = lambda: self.UPGRADE_LIST_RESPONSE with mock.patch(self.REQUEST_FUNC, side_effect=[ (200, {}), (200, { "driveStatus": [{ "driveRef": "010000005000C5007EDE4ECF0000000000000000", "status": "okay" }, { "driveRef": "010000005000C5007EDF9AAB0000000000000000", "status": "okay" }, { "driveRef": "010000005000C5007EDBE3C70000000000000000", "status": "okay" }, { "driveRef": "010000005000C5007EDE4ECF0000000000000001", "status": "okay" }, { "driveRef": "010000005000C5007EDF9AAB0000000000000001", "status": "okay" }, { "driveRef": "010000005000C5007EDBE3C70000000000000001", "status": "okay" }] }) ]): firmware_object.upgrade() self.assertFalse(firmware_object.upgrade_in_progress)
def test_wait_for_upgrade_completion_fail(self): """Verify wait for upgrade completion exceptions.""" self._set_args({ "firmware": ["path/to/test_drive_firmware_1", "path/to/test_drive_firmware_2"], "wait_for_completion": True }) firmware_object = NetAppESeriesDriveFirmware() firmware_object.upgrade_drives_online = True firmware_object.upgrade_list = lambda: self.UPGRADE_LIST_RESPONSE firmware_object.WAIT_TIMEOUT_SEC = 5 response = (200, { "driveStatus": [{ "driveRef": "010000005000C5007EDE4ECF0000000000000000", "status": "inProgress" }, { "driveRef": "010000005000C5007EDF9AAB0000000000000000", "status": "inProgressRecon" }, { "driveRef": "010000005000C5007EDBE3C70000000000000000", "status": "pending" }, { "driveRef": "010000005000C5007EDE4ECF0000000000000001", "status": "notAttempted" }, { "driveRef": "010000005000C5007EDF9AAB0000000000000001", "status": "okay" }, { "driveRef": "010000005000C5007EDBE3C70000000000000001", "status": "okay" }] }) with self.assertRaisesRegexp( AnsibleFailJson, "Timed out waiting for drive firmware upgrade."): with mock.patch(self.SLEEP_FUNC, return_value=None): with mock.patch(self.REQUEST_FUNC, return_value=response): firmware_object.wait_for_upgrade_completion() with self.assertRaisesRegexp(AnsibleFailJson, "Failed to retrieve drive status."): with mock.patch(self.SLEEP_FUNC, return_value=None): with mock.patch(self.REQUEST_FUNC, return_value=Exception()): firmware_object.wait_for_upgrade_completion() response = (200, { "driveStatus": [{ "driveRef": "010000005000C5007EDE4ECF0000000000000000", "status": "_UNDEFINED" }, { "driveRef": "010000005000C5007EDF9AAB0000000000000000", "status": "inProgressRecon" }, { "driveRef": "010000005000C5007EDBE3C70000000000000000", "status": "pending" }, { "driveRef": "010000005000C5007EDE4ECF0000000000000001", "status": "notAttempted" }, { "driveRef": "010000005000C5007EDF9AAB0000000000000001", "status": "okay" }, { "driveRef": "010000005000C5007EDBE3C70000000000000001", "status": "okay" }] }) with self.assertRaisesRegexp(AnsibleFailJson, "Drive firmware upgrade failed."): with mock.patch(self.SLEEP_FUNC, return_value=None): with mock.patch(self.REQUEST_FUNC, return_value=response): firmware_object.wait_for_upgrade_completion()
def test_wait_for_upgrade_completion_pass(self): """Verify function waits for okay status.""" self._set_args({ "firmware": ["path/to/test_drive_firmware_1", "path/to/test_drive_firmware_2"], "wait_for_completion": True }) firmware_object = NetAppESeriesDriveFirmware() firmware_object.upgrade_drives_online = True firmware_object.upgrade_list = lambda: self.UPGRADE_LIST_RESPONSE with mock.patch(self.SLEEP_FUNC, return_value=None): with mock.patch( self.REQUEST_FUNC, side_effect=[ (200, { "driveStatus": [{ "driveRef": "010000005000C5007EDE4ECF0000000000000000", "status": "inProgress" }, { "driveRef": "010000005000C5007EDF9AAB0000000000000000", "status": "okay" }, { "driveRef": "010000005000C5007EDBE3C70000000000000000", "status": "okay" }, { "driveRef": "010000005000C5007EDE4ECF0000000000000001", "status": "okay" }, { "driveRef": "010000005000C5007EDF9AAB0000000000000001", "status": "okay" }, { "driveRef": "010000005000C5007EDBE3C70000000000000001", "status": "okay" }] }), (200, { "driveStatus": [{ "driveRef": "010000005000C5007EDE4ECF0000000000000000", "status": "okay" }, { "driveRef": "010000005000C5007EDF9AAB0000000000000000", "status": "inProgressRecon" }, { "driveRef": "010000005000C5007EDBE3C70000000000000000", "status": "okay" }, { "driveRef": "010000005000C5007EDE4ECF0000000000000001", "status": "okay" }, { "driveRef": "010000005000C5007EDF9AAB0000000000000001", "status": "okay" }, { "driveRef": "010000005000C5007EDBE3C70000000000000001", "status": "okay" }] }), (200, { "driveStatus": [{ "driveRef": "010000005000C5007EDE4ECF0000000000000000", "status": "okay" }, { "driveRef": "010000005000C5007EDF9AAB0000000000000000", "status": "okay" }, { "driveRef": "010000005000C5007EDBE3C70000000000000000", "status": "pending" }, { "driveRef": "010000005000C5007EDE4ECF0000000000000001", "status": "okay" }, { "driveRef": "010000005000C5007EDF9AAB0000000000000001", "status": "okay" }, { "driveRef": "010000005000C5007EDBE3C70000000000000001", "status": "okay" }] }), (200, { "driveStatus": [{ "driveRef": "010000005000C5007EDE4ECF0000000000000000", "status": "okay" }, { "driveRef": "010000005000C5007EDF9AAB0000000000000000", "status": "okay" }, { "driveRef": "010000005000C5007EDBE3C70000000000000000", "status": "okay" }, { "driveRef": "010000005000C5007EDE4ECF0000000000000001", "status": "notAttempted" }, { "driveRef": "010000005000C5007EDF9AAB0000000000000001", "status": "okay" }, { "driveRef": "010000005000C5007EDBE3C70000000000000001", "status": "okay" }] }), (200, { "driveStatus": [{ "driveRef": "010000005000C5007EDE4ECF0000000000000000", "status": "okay" }, { "driveRef": "010000005000C5007EDF9AAB0000000000000000", "status": "okay" }, { "driveRef": "010000005000C5007EDBE3C70000000000000000", "status": "okay" }, { "driveRef": "010000005000C5007EDE4ECF0000000000000001", "status": "okay" }, { "driveRef": "010000005000C5007EDF9AAB0000000000000001", "status": "okay" }, { "driveRef": "010000005000C5007EDBE3C70000000000000001", "status": "okay" }] }) ]): firmware_object.wait_for_upgrade_completion()
def test_upgrade_list_fail(self): """Verify upgrade_list method throws expected exceptions.""" self._set_args({"firmware": ["path_to_test_drive_firmware_1"]}) firmware_object = NetAppESeriesDriveFirmware() with self.assertRaisesRegexp( AnsibleFailJson, "Failed to complete compatibility and health check."): with mock.patch(self.REQUEST_FUNC, response=Exception()): firmware_object.upgrade_list() side_effects = [(200, self.FIRMWARE_DRIVES_RESPONSE), (200, { "offline": False, "available": True, "firmwareVersion": "MS01" }), (200, { "offline": False, "available": True, "firmwareVersion": "MS00" }), Exception()] self._set_args({"firmware": ["path/to/test_drive_firmware_1"]}) firmware_object = NetAppESeriesDriveFirmware() with self.assertRaisesRegexp(AnsibleFailJson, "Failed to retrieve drive information."): with mock.patch(self.REQUEST_FUNC, side_effect=side_effects): firmware_object.upgrade_list() side_effects = [(200, self.FIRMWARE_DRIVES_RESPONSE), (200, { "offline": False, "available": True, "firmwareVersion": "MS01" }), (200, { "offline": False, "available": True, "firmwareVersion": "MS00" }), (200, { "offline": False, "available": True, "firmwareVersion": "MS00" })] self._set_args({ "firmware": ["path/to/test_drive_firmware_2"], "upgrade_drives_online": True }) firmware_object = NetAppESeriesDriveFirmware() with self.assertRaisesRegexp( AnsibleFailJson, "Drive is not capable of online upgrade."): with mock.patch(self.REQUEST_FUNC, side_effect=side_effects): firmware_object.upgrade_list()