Merge "Handle IPMI transient failures better."
This commit is contained in:
		@@ -22,6 +22,7 @@
 | 
			
		||||
 | 
			
		||||
from oslo.config import cfg
 | 
			
		||||
 | 
			
		||||
from nova.compute import power_state
 | 
			
		||||
from nova import exception
 | 
			
		||||
from nova import test
 | 
			
		||||
from nova.tests.baremetal.db import base as bm_db_base
 | 
			
		||||
@@ -327,3 +328,36 @@ class BareMetalDriverWithDBTestCase(bm_db_base.BMDBTestCase):
 | 
			
		||||
 | 
			
		||||
        self.driver.destroy(**node2['destroy_params'])
 | 
			
		||||
        self.assertEqual([], self.driver.list_instances())
 | 
			
		||||
 | 
			
		||||
    def test_get_info_no_such_node(self):
 | 
			
		||||
        node = self._create_node()
 | 
			
		||||
        self.assertRaises(exception.InstanceNotFound,
 | 
			
		||||
                self.driver.get_info,
 | 
			
		||||
                node['instance'])
 | 
			
		||||
 | 
			
		||||
    def test_get_info_ok(self):
 | 
			
		||||
        node = self._create_node()
 | 
			
		||||
        db.bm_node_associate_and_update(self.context, node['node']['uuid'],
 | 
			
		||||
                {'instance_uuid': node['instance']['uuid'],
 | 
			
		||||
                 'instance_name': node['instance']['hostname'],
 | 
			
		||||
                 'task_state': baremetal_states.ACTIVE})
 | 
			
		||||
        res = self.driver.get_info(node['instance'])
 | 
			
		||||
        self.assertEqual(res['state'], power_state.RUNNING)
 | 
			
		||||
 | 
			
		||||
    def test_get_info_with_defunct_pm(self):
 | 
			
		||||
        # test fix for bug 1178378
 | 
			
		||||
        node = self._create_node()
 | 
			
		||||
        db.bm_node_associate_and_update(self.context, node['node']['uuid'],
 | 
			
		||||
                {'instance_uuid': node['instance']['uuid'],
 | 
			
		||||
                 'instance_name': node['instance']['hostname'],
 | 
			
		||||
                 'task_state': baremetal_states.ACTIVE})
 | 
			
		||||
 | 
			
		||||
        # fake the power manager and don't get a power state
 | 
			
		||||
        self.mox.StubOutWithMock(fake.FakePowerManager, 'is_power_on')
 | 
			
		||||
        fake.FakePowerManager.is_power_on().AndReturn(None)
 | 
			
		||||
        self.mox.ReplayAll()
 | 
			
		||||
 | 
			
		||||
        res = self.driver.get_info(node['instance'])
 | 
			
		||||
        # prior to the fix, returned power_state was SHUTDOWN
 | 
			
		||||
        self.assertEqual(res['state'], power_state.NOSTATE)
 | 
			
		||||
        self.mox.VerifyAll()
 | 
			
		||||
 
 | 
			
		||||
@@ -85,13 +85,24 @@ class BareMetalIPMITestCase(test.TestCase):
 | 
			
		||||
        self.ipmi._exec_ipmitool('A B C')
 | 
			
		||||
        self.mox.VerifyAll()
 | 
			
		||||
 | 
			
		||||
    def test_is_power(self):
 | 
			
		||||
    def test_is_power_on_ok(self):
 | 
			
		||||
        self.mox.StubOutWithMock(self.ipmi, '_exec_ipmitool')
 | 
			
		||||
        self.ipmi._exec_ipmitool("power status").AndReturn(
 | 
			
		||||
                ["Chassis Power is on\n"])
 | 
			
		||||
        self.mox.ReplayAll()
 | 
			
		||||
 | 
			
		||||
        self.ipmi._is_power("on")
 | 
			
		||||
        res = self.ipmi.is_power_on()
 | 
			
		||||
        self.assertEqual(res, True)
 | 
			
		||||
        self.mox.VerifyAll()
 | 
			
		||||
 | 
			
		||||
    def test_is_power_no_answer(self):
 | 
			
		||||
        self.mox.StubOutWithMock(self.ipmi, '_exec_ipmitool')
 | 
			
		||||
        self.ipmi._exec_ipmitool("power status").AndReturn(
 | 
			
		||||
                ["Fake reply\n"])
 | 
			
		||||
        self.mox.ReplayAll()
 | 
			
		||||
 | 
			
		||||
        res = self.ipmi.is_power_on()
 | 
			
		||||
        self.assertEqual(res, None)
 | 
			
		||||
        self.mox.VerifyAll()
 | 
			
		||||
 | 
			
		||||
    def test_power_already_on(self):
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user