VirtualPowerDriver catches ProcessExecutionError.
Baremetal virtual_power_driver now catches ProcessExecutionError coming from ssh_execute and logs an exception. Requested actions (eg, power_on) return an error state instead of raising an exception. Change-Id: I8f66ba843e12de13f9a14d736f7bef2eda4ef85c
This commit is contained in:
		| @@ -101,7 +101,7 @@ class BareMetalVPDTestCase(bm_db_base.BMDBTestCase): | |||||||
|         return self.pm |         return self.pm | ||||||
|  |  | ||||||
|  |  | ||||||
| class VPDClassMethodsTestCase(BareMetalVPDTestCase): | class VPDMissingOptionsTestCase(BareMetalVPDTestCase): | ||||||
|  |  | ||||||
|     def test_get_conn_missing_options(self): |     def test_get_conn_missing_options(self): | ||||||
|         self.flags(virtual_power_ssh_host=None, group="baremetal") |         self.flags(virtual_power_ssh_host=None, group="baremetal") | ||||||
| @@ -121,10 +121,16 @@ class VPDClassMethodsTestCase(BareMetalVPDTestCase): | |||||||
|         self.assertRaises(exception.NovaException, |         self.assertRaises(exception.NovaException, | ||||||
|                 self.pm._get_conn) |                 self.pm._get_conn) | ||||||
|  |  | ||||||
|     def test_get_conn_success(self): |  | ||||||
|  | class VPDClassMethodsTestCase(BareMetalVPDTestCase): | ||||||
|  |  | ||||||
|  |     def setUp(self): | ||||||
|  |         super(VPDClassMethodsTestCase, self).setUp() | ||||||
|         self.flags(virtual_power_ssh_host='127.0.0.1', group="baremetal") |         self.flags(virtual_power_ssh_host='127.0.0.1', group="baremetal") | ||||||
|         self.flags(virtual_power_host_user='user', group="baremetal") |         self.flags(virtual_power_host_user='user', group="baremetal") | ||||||
|         self.flags(virtual_power_host_pass='password', group="baremetal") |         self.flags(virtual_power_host_pass='password', group="baremetal") | ||||||
|  |  | ||||||
|  |     def test_get_conn_success(self): | ||||||
|         self._create_node() |         self._create_node() | ||||||
|         self._create_pm() |         self._create_pm() | ||||||
|         self._conn = self.pm._get_conn() |         self._conn = self.pm._get_conn() | ||||||
| @@ -138,9 +144,6 @@ class VPDClassMethodsTestCase(BareMetalVPDTestCase): | |||||||
|         self.mox.VerifyAll() |         self.mox.VerifyAll() | ||||||
|  |  | ||||||
|     def test_get_full_node_list(self): |     def test_get_full_node_list(self): | ||||||
|         self.flags(virtual_power_ssh_host='127.0.0.1', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_user='user', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_pass='password', group="baremetal") |  | ||||||
|         self._create_node() |         self._create_node() | ||||||
|         self._create_pm() |         self._create_pm() | ||||||
|  |  | ||||||
| @@ -154,9 +157,6 @@ class VPDClassMethodsTestCase(BareMetalVPDTestCase): | |||||||
|         self.mox.VerifyAll() |         self.mox.VerifyAll() | ||||||
|  |  | ||||||
|     def test_check_for_node(self): |     def test_check_for_node(self): | ||||||
|         self.flags(virtual_power_ssh_host='127.0.0.1', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_user='user', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_pass='password', group="baremetal") |  | ||||||
|         self._create_node() |         self._create_node() | ||||||
|         self._create_pm() |         self._create_pm() | ||||||
|  |  | ||||||
| @@ -175,9 +175,6 @@ class VPDClassMethodsTestCase(BareMetalVPDTestCase): | |||||||
|         self.mox.VerifyAll() |         self.mox.VerifyAll() | ||||||
|  |  | ||||||
|     def test_check_for_node_not_found(self): |     def test_check_for_node_not_found(self): | ||||||
|         self.flags(virtual_power_ssh_host='127.0.0.1', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_user='user', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_pass='password', group="baremetal") |  | ||||||
|         self._create_node() |         self._create_node() | ||||||
|         self._create_pm() |         self._create_pm() | ||||||
|  |  | ||||||
| @@ -194,9 +191,6 @@ class VPDClassMethodsTestCase(BareMetalVPDTestCase): | |||||||
|         self.mox.VerifyAll() |         self.mox.VerifyAll() | ||||||
|  |  | ||||||
|     def test_activate_node(self): |     def test_activate_node(self): | ||||||
|         self.flags(virtual_power_ssh_host='127.0.0.1', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_user='user', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_pass='password', group="baremetal") |  | ||||||
|         self._create_node() |         self._create_node() | ||||||
|         self._create_pm() |         self._create_pm() | ||||||
|  |  | ||||||
| @@ -212,9 +206,6 @@ class VPDClassMethodsTestCase(BareMetalVPDTestCase): | |||||||
|         self.mox.VerifyAll() |         self.mox.VerifyAll() | ||||||
|  |  | ||||||
|     def test_activate_node_fail(self): |     def test_activate_node_fail(self): | ||||||
|         self.flags(virtual_power_ssh_host='127.0.0.1', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_user='user', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_pass='password', group="baremetal") |  | ||||||
|         self._create_node() |         self._create_node() | ||||||
|         self._create_pm() |         self._create_pm() | ||||||
|  |  | ||||||
| @@ -230,9 +221,6 @@ class VPDClassMethodsTestCase(BareMetalVPDTestCase): | |||||||
|         self.mox.VerifyAll() |         self.mox.VerifyAll() | ||||||
|  |  | ||||||
|     def test_deactivate_node(self): |     def test_deactivate_node(self): | ||||||
|         self.flags(virtual_power_ssh_host='127.0.0.1', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_user='user', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_pass='password', group="baremetal") |  | ||||||
|         self._create_node() |         self._create_node() | ||||||
|         self._create_pm() |         self._create_pm() | ||||||
|  |  | ||||||
| @@ -249,9 +237,6 @@ class VPDClassMethodsTestCase(BareMetalVPDTestCase): | |||||||
|         self.mox.VerifyAll() |         self.mox.VerifyAll() | ||||||
|  |  | ||||||
|     def test_deactivate_node_fail(self): |     def test_deactivate_node_fail(self): | ||||||
|         self.flags(virtual_power_ssh_host='127.0.0.1', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_user='user', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_pass='password', group="baremetal") |  | ||||||
|         self._create_node() |         self._create_node() | ||||||
|         self._create_pm() |         self._create_pm() | ||||||
|  |  | ||||||
| @@ -268,9 +253,6 @@ class VPDClassMethodsTestCase(BareMetalVPDTestCase): | |||||||
|         self.mox.VerifyAll() |         self.mox.VerifyAll() | ||||||
|  |  | ||||||
|     def test_reboot_node(self): |     def test_reboot_node(self): | ||||||
|         self.flags(virtual_power_ssh_host='127.0.0.1', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_user='user', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_pass='password', group="baremetal") |  | ||||||
|         self._create_node() |         self._create_node() | ||||||
|         self._create_pm() |         self._create_pm() | ||||||
|  |  | ||||||
| @@ -286,9 +268,6 @@ class VPDClassMethodsTestCase(BareMetalVPDTestCase): | |||||||
|         self.mox.VerifyAll() |         self.mox.VerifyAll() | ||||||
|  |  | ||||||
|     def test_reboot_node_fail(self): |     def test_reboot_node_fail(self): | ||||||
|         self.flags(virtual_power_ssh_host='127.0.0.1', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_user='user', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_pass='password', group="baremetal") |  | ||||||
|         self._create_node() |         self._create_node() | ||||||
|         self._create_pm() |         self._create_pm() | ||||||
|  |  | ||||||
| @@ -304,9 +283,6 @@ class VPDClassMethodsTestCase(BareMetalVPDTestCase): | |||||||
|         self.mox.VerifyAll() |         self.mox.VerifyAll() | ||||||
|  |  | ||||||
|     def test_is_power_on(self): |     def test_is_power_on(self): | ||||||
|         self.flags(virtual_power_ssh_host='127.0.0.1', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_user='user', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_pass='password', group="baremetal") |  | ||||||
|         self._create_node() |         self._create_node() | ||||||
|         self._create_pm() |         self._create_pm() | ||||||
|  |  | ||||||
| @@ -322,9 +298,6 @@ class VPDClassMethodsTestCase(BareMetalVPDTestCase): | |||||||
|         self.mox.VerifyAll() |         self.mox.VerifyAll() | ||||||
|  |  | ||||||
|     def test_is_power_on_fail(self): |     def test_is_power_on_fail(self): | ||||||
|         self.flags(virtual_power_ssh_host='127.0.0.1', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_user='user', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_pass='password', group="baremetal") |  | ||||||
|         self._create_node() |         self._create_node() | ||||||
|         self._create_pm() |         self._create_pm() | ||||||
|  |  | ||||||
| @@ -340,9 +313,6 @@ class VPDClassMethodsTestCase(BareMetalVPDTestCase): | |||||||
|         self.mox.VerifyAll() |         self.mox.VerifyAll() | ||||||
|  |  | ||||||
|     def test_run_command(self): |     def test_run_command(self): | ||||||
|         self.flags(virtual_power_ssh_host='127.0.0.1', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_user='user', group="baremetal") |  | ||||||
|         self.flags(virtual_power_host_pass='password', group="baremetal") |  | ||||||
|         self._create_node() |         self._create_node() | ||||||
|         self._create_pm() |         self._create_pm() | ||||||
|  |  | ||||||
| @@ -356,3 +326,42 @@ class VPDClassMethodsTestCase(BareMetalVPDTestCase): | |||||||
|         result = self.pm._run_command("test return") |         result = self.pm._run_command("test return") | ||||||
|         self.assertEqual(result, ['test', 'return']) |         self.assertEqual(result, ['test', 'return']) | ||||||
|         self.mox.VerifyAll() |         self.mox.VerifyAll() | ||||||
|  |  | ||||||
|  |     def test_run_command_raises_exception(self): | ||||||
|  |         self._create_node() | ||||||
|  |         self._create_pm() | ||||||
|  |  | ||||||
|  |         self.mox.StubOutWithMock(self.pm, '_set_connection') | ||||||
|  |         self.mox.StubOutWithMock(nutils, 'ssh_execute') | ||||||
|  |  | ||||||
|  |         self.pm._set_connection().AndReturn(True) | ||||||
|  |         nutils.ssh_execute(None, '/usr/bin/VBoxManage test return', | ||||||
|  |                 check_exit_code=True).\ | ||||||
|  |                 AndRaise(exception.ProcessExecutionError) | ||||||
|  |         self.mox.ReplayAll() | ||||||
|  |  | ||||||
|  |         result = self.pm._run_command("test return") | ||||||
|  |         self.assertEqual(result, []) | ||||||
|  |         self.mox.VerifyAll() | ||||||
|  |  | ||||||
|  |     def test_activate_node_with_exception(self): | ||||||
|  |         self._create_node() | ||||||
|  |         self._create_pm() | ||||||
|  |  | ||||||
|  |         self.mox.StubOutWithMock(self.pm, '_check_for_node') | ||||||
|  |         self.mox.StubOutWithMock(nutils, 'ssh_execute') | ||||||
|  |  | ||||||
|  |         self.pm._check_for_node().AndReturn(["testNode"]) | ||||||
|  |         self.pm._check_for_node().AndReturn(["testNode"]) | ||||||
|  |         nutils.ssh_execute('test', '/usr/bin/VBoxManage startvm ', | ||||||
|  |                 check_exit_code=True).\ | ||||||
|  |                 AndRaise(exception.ProcessExecutionError) | ||||||
|  |         nutils.ssh_execute('test', '/usr/bin/VBoxManage list runningvms', | ||||||
|  |                 check_exit_code=True).\ | ||||||
|  |                 AndRaise(exception.ProcessExecutionError) | ||||||
|  |  | ||||||
|  |         self.mox.ReplayAll() | ||||||
|  |         self.pm._connection = 'test' | ||||||
|  |         state = self.pm.activate_node() | ||||||
|  |         self.assertEqual(state, 'error') | ||||||
|  |         self.mox.VerifyAll() | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Devananda van der Veen
					Devananda van der Veen