Check ERROR state from driver in _do_sync_power_state

Power driver can returns ERROR state. This error is not checked
in manager._do_sync_power_state.

Partial-Bug: #1358816
Change-Id: I0672da6159252a1a2901f31ae11e2b29bc6147ef
This commit is contained in:
Yuriy Zveryanskyy 2014-08-26 14:59:01 +03:00
parent c6b478d8b2
commit 134c2e8b0f
2 changed files with 14 additions and 1 deletions

View File

@ -636,11 +636,14 @@ class ConductorManager(periodic_task.PeriodicTasks):
try:
task.driver.power.validate(task)
except (exception.InvalidParameterValue,
exception.MissingParameterValue) as e:
exception.MissingParameterValue):
return
try:
power_state = task.driver.power.get_power_state(task)
if power_state == states.ERROR:
raise exception.PowerStateFailure(_("Driver returns ERROR"
" state."))
except Exception as e:
# TODO(rloo): change to IronicException, after
# https://bugs.launchpad.net/ironic/+bug/1267693

View File

@ -1548,6 +1548,16 @@ class ManagerDoSyncPowerStateTestCase(tests_base.TestCase):
self.assertEqual(1,
self.service.power_state_sync_count[self.node.uuid])
def test_get_power_state_error(self, node_power_action):
self._do_sync_power_state('fake', states.ERROR)
self.assertFalse(self.power.validate.called)
self.power.get_power_state.assert_called_once_with(self.task)
self.assertFalse(self.node.save.called)
self.assertFalse(node_power_action.called)
self.assertEqual('fake', self.node.power_state)
self.assertEqual(1,
self.service.power_state_sync_count[self.node.uuid])
def test_state_changed_no_sync(self, node_power_action):
self._do_sync_power_state(states.POWER_ON, states.POWER_OFF)