Example #1
0
    def test_set_power_state_off_fail(self):
        info = ssh._parse_driver_info(self.node)
        info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]

        self.mox.StubOutWithMock(ssh, '_parse_driver_info')
        self.mox.StubOutWithMock(ssh, '_get_nodes_mac_addresses')
        self.mox.StubOutWithMock(ssh, '_get_connection')
        self.mox.StubOutWithMock(ssh, '_power_off')
        ssh._parse_driver_info(self.node).\
                AndReturn(info)
        ssh._get_nodes_mac_addresses(mox.IgnoreArg(), self.node).\
                AndReturn(info['macs'])
        ssh._get_connection(self.node).\
                AndReturn(self.sshclient)
        ssh._power_off(self.sshclient, info).\
                AndReturn(states.POWER_ON)
        self.mox.ReplayAll()

        with task_manager.acquire([info['uuid']], shared=False) as task:
            self.assertRaises(exception.PowerStateFailure,
                task.resources[0].driver.power.set_power_state,
                task,
                self.node,
                states.POWER_OFF)
        self.mox.VerifyAll()
Example #2
0
    def test_reboot_good(self):
        info = ssh._parse_driver_info(self.node)
        info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]

        self.mox.StubOutWithMock(ssh, '_parse_driver_info')
        self.mox.StubOutWithMock(ssh, '_get_nodes_mac_addresses')
        self.mox.StubOutWithMock(ssh, '_get_connection')
        self.mox.StubOutWithMock(ssh, '_get_power_status')
        self.mox.StubOutWithMock(ssh, '_power_off')
        self.mox.StubOutWithMock(ssh, '_power_on')
        ssh._parse_driver_info(self.node).\
                AndReturn(info)
        ssh._get_nodes_mac_addresses(mox.IgnoreArg(), self.node).\
                AndReturn(info['macs'])
        ssh._get_connection(self.node).\
                AndReturn(self.sshclient)
        ssh._get_power_status(self.sshclient, info).\
                AndReturn(states.POWER_ON)
        ssh._power_off(self.sshclient, info).\
                AndReturn(None)
        ssh._power_on(self.sshclient, info).\
                AndReturn(states.POWER_ON)
        self.mox.ReplayAll()

        with task_manager.acquire([info['uuid']], shared=False) as task:
            task.resources[0].driver.power.reboot(task, self.node)
        self.mox.VerifyAll()
Example #3
0
    def test__validate_info_ssh_connect_failed(self, ssh_connect_mock):
        info = ssh._parse_driver_info(self.node)

        ssh_connect_mock.side_effect = exception.SSHConnectFailed(host="fake")
        with task_manager.acquire(self.context, info["uuid"], shared=False) as task:
            self.assertRaises(exception.InvalidParameterValue, task.driver.power.validate, task)
            driver_info = ssh._parse_driver_info(task.node)
            ssh_connect_mock.assert_called_once_with(driver_info)
Example #4
0
    def test__validate_info_ssh_connect_failed(self, ssh_connect_mock):
        info = ssh._parse_driver_info(self.node)

        ssh_connect_mock.side_effect = exception.SSHConnectFailed(host='fake')
        with task_manager.acquire(self.context, info['uuid'],
                                  shared=False) as task:
            self.assertRaises(exception.InvalidParameterValue,
                              task.driver.power.validate, task)
            driver_info = ssh._parse_driver_info(task.node)
            ssh_connect_mock.assert_called_once_with(driver_info)
Example #5
0
 def test_reboot_fail(self, power_on_mock, power_off_mock,
                      get_power_stat_mock, get_conn_mock,
                      get_mac_addr_mock):
     info = ssh._parse_driver_info(self.node)
     info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]
     get_mac_addr_mock.return_value = info['macs']
     get_conn_mock.return_value = self.sshclient
     get_power_stat_mock.return_value = states.POWER_ON
     power_off_mock.return_value = None
     power_on_mock.return_value = states.POWER_OFF
     with mock.patch.object(ssh,
                            '_parse_driver_info') as parse_drv_info_mock:
         parse_drv_info_mock.return_value = info
         with task_manager.acquire(self.context, [info['uuid']],
                                   shared=False) as task:
             self.assertRaises(exception.PowerStateFailure,
                               task.resources[0].driver.power.reboot,
                               task)
             parse_drv_info_mock.assert_called_once_with(task.node)
             get_mac_addr_mock.assert_called_once_with(mock.ANY)
             get_conn_mock.assert_called_once_with(task.node)
             get_power_stat_mock.assert_called_once_with(self.sshclient,
                                                         info)
             power_off_mock.assert_called_once_with(self.sshclient, info)
             power_on_mock.assert_called_once_with(self.sshclient, info)
Example #6
0
    def test__get_power_status_exception(self, exec_ssh_mock):
        info = ssh._parse_driver_info(self.node)
        exec_ssh_mock.side_effect = processutils.ProcessExecutionError

        self.assertRaises(exception.SSHCommandFailed, ssh._get_power_status, self.sshclient, info)
        ssh_cmd = "%s %s" % (info["cmd_set"]["base_cmd"], info["cmd_set"]["list_all"])
        exec_ssh_mock.assert_called_once_with(self.sshclient, ssh_cmd)
Example #7
0
    def test__power_off_exception(self):
        info = ssh._parse_driver_info(self.node)
        info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]
        self.exec_ssh_mock.side_effect = processutils.ProcessExecutionError
        with mock.patch.object(ssh,
                               '_get_power_status') as get_power_status_mock:
            with mock.patch.object(
                    ssh, '_get_hosts_name_for_node') as get_hosts_name_mock:
                self.exec_ssh_mock.side_effect = (
                    processutils.ProcessExecutionError)
                get_power_status_mock.side_effect = [
                    states.POWER_ON, states.POWER_OFF
                ]
                get_hosts_name_mock.return_value = "NodeName"

                cmd_to_exec = "%s %s" % (info['cmd_set']['base_cmd'],
                                         info['cmd_set']['stop_cmd'])
                cmd_to_exec = cmd_to_exec.replace('{_NodeName_}', 'NodeName')

                self.assertRaises(exception.SSHCommandFailed, ssh._power_off,
                                  self.sshclient, info)
                get_power_status_mock.assert_called_once_with(
                    self.sshclient, info)
                get_hosts_name_mock.assert_called_once_with(
                    self.sshclient, info)
                self.exec_ssh_mock.assert_called_once_with(
                    self.sshclient, cmd_to_exec)
Example #8
0
    def test__validate_info_ssh_connect_failed(self):
        info = ssh._parse_driver_info(self.node)
        self.get_conn_patcher.stop()
        self.get_conn_mock = None

        with mock.patch.object(utils, 'ssh_connect') \
                as ssh_connect_mock:
            ssh_connect_mock.side_effect = exception.SSHConnectFailed(
                                                                  host='fake')
            with task_manager.acquire(self.context, [info['uuid']],
                                      shared=False) as task:
                self.assertRaises(exception.InvalidParameterValue,
                                  task.resources[0].driver.power.validate,
                                  task, self.node)
                driver_info = ssh._parse_driver_info(self.node)
                ssh_connect_mock.assert_called_once_with(driver_info)
Example #9
0
    def test__power_off_fail(self):
        info = ssh._parse_driver_info(self.node)
        info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]
        with mock.patch.object(ssh, '_get_power_status') \
                as get_power_status_mock:
            with mock.patch.object(ssh, '_get_hosts_name_for_node') \
                    as get_hosts_name_mock:
                get_power_status_mock.side_effect = [states.POWER_ON,
                                                     states.POWER_ON]
                get_hosts_name_mock.return_value = "NodeName"
                expected = [mock.call(self.sshclient, info),
                            mock.call(self.sshclient, info)]

                cmd_to_exec = "%s %s" % (info['cmd_set']['base_cmd'],
                                         info['cmd_set']['stop_cmd'])
                cmd_to_exec = cmd_to_exec.replace('{_NodeName_}', 'NodeName')
                current_state = ssh._power_off(self.sshclient, info)

                self.assertEqual(states.ERROR, current_state)
                self.assertEqual(expected,
                                 get_power_status_mock.call_args_list)
                get_hosts_name_mock.assert_called_once_with(self.sshclient,
                                                            info)
                self.exec_ssh_mock.assert_called_once_with(self.sshclient,
                                                           cmd_to_exec)
Example #10
0
    def test_set_power_state_off_fail(self):
        info = ssh._parse_driver_info(self.node)
        info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]

        self.parse_drv_info_mock = self.parse_drv_info_patcher.start()
        self.parse_drv_info_mock.return_value = info
        self.get_mac_addr_mock.return_value = info['macs']
        self.get_conn_mock.return_value = self.sshclient

        with mock.patch.object(ssh, '_power_off') as power_off_mock:
            power_off_mock.return_value = states.POWER_ON

            with task_manager.acquire(self.context, [info['uuid']],
                                      shared=False) as task:
                self.assertRaises(
                        exception.PowerStateFailure,
                        task.resources[0].driver.power.set_power_state,
                        task,
                        self.node,
                        states.POWER_OFF)

            self.parse_drv_info_mock.assert_called_once_with(self.node)
            self.get_mac_addr_mock.assert_called_once_with(mock.ANY, self.node)
            self.get_conn_mock.assert_called_once_with(self.node)
            power_off_mock.assert_called_once_with(self.sshclient, info)
Example #11
0
    def test_reboot_good(self):
        info = ssh._parse_driver_info(self.node)
        info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]

        self.parse_drv_info_mock = self.parse_drv_info_patcher.start()
        self.parse_drv_info_mock.return_value = info
        self.get_mac_addr_mock.return_value = info['macs']
        self.get_conn_mock.return_value = self.sshclient

        with mock.patch.object(ssh, '_get_power_status') \
                as get_power_stat_mock:
            with mock.patch.object(ssh, '_power_off') as power_off_mock:
                with mock.patch.object(ssh, '_power_on') as power_on_mock:
                    get_power_stat_mock.return_value = states.POWER_ON
                    power_off_mock.return_value = None
                    power_on_mock.return_value = states.POWER_ON

                    with task_manager.acquire(self.context, [info['uuid']],
                                              shared=False) as task:
                        task.resources[0].driver.power.reboot(task, self.node)

                    self.parse_drv_info_mock.assert_called_once_with(self.node)
                    self.get_mac_addr_mock.assert_called_once_with(mock.ANY,
                                                                   self.node)
                    self.get_conn_mock.assert_called_once_with(self.node)
                    get_power_stat_mock.assert_called_once_with(self.sshclient,
                                                                info)
                    power_off_mock.assert_called_once_with(self.sshclient,
                                                           info)
                    power_on_mock.assert_called_once_with(self.sshclient, info)
Example #12
0
    def test__validate_info_ssh_connect_failed(self):
        info = ssh._parse_driver_info(self.node)
        self.get_conn_patcher.stop()
        self.get_conn_mock = None

        with mock.patch.object(utils, 'ssh_connect') \
                as ssh_connect_mock:
            ssh_connect_mock.side_effect = exception.SSHConnectFailed(
                host='fake')
            with task_manager.acquire(self.context, [info['uuid']],
                                      shared=False) as task:
                self.assertRaises(exception.InvalidParameterValue,
                                  task.resources[0].driver.power.validate,
                                  task, self.node)
                driver_info = ssh._parse_driver_info(self.node)
                ssh_connect_mock.assert_called_once_with(driver_info)
Example #13
0
    def test_reboot_fail(self):
        info = ssh._parse_driver_info(self.node)
        info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]

        self.parse_drv_info_mock = self.parse_drv_info_patcher.start()
        self.parse_drv_info_mock.return_value = info
        self.get_mac_addr_mock.return_value = info['macs']
        self.get_conn_mock.return_value = self.sshclient

        with mock.patch.object(ssh, '_get_power_status') \
                as get_power_stat_mock:
            with mock.patch.object(ssh, '_power_off') as power_off_mock:
                with mock.patch.object(ssh, '_power_on') as power_on_mock:
                    get_power_stat_mock.return_value = states.POWER_ON
                    power_off_mock.return_value = None
                    power_on_mock.return_value = states.POWER_OFF

                    with task_manager.acquire(self.context, [info['uuid']],
                                              shared=False) as task:
                        self.assertRaises(
                            exception.PowerStateFailure,
                            task.resources[0].driver.power.reboot, task,
                            self.node)
                    self.parse_drv_info_mock.assert_called_once_with(self.node)
                    self.get_mac_addr_mock.assert_called_once_with(
                        mock.ANY, self.node)
                    self.get_conn_mock.assert_called_once_with(self.node)
                    get_power_stat_mock.assert_called_once_with(
                        self.sshclient, info)
                    power_off_mock.assert_called_once_with(
                        self.sshclient, info)
                    power_on_mock.assert_called_once_with(self.sshclient, info)
Example #14
0
    def test__power_off_fail(self):
        info = ssh._parse_driver_info(self.node)
        info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]
        with mock.patch.object(ssh, '_get_power_status') \
                as get_power_status_mock:
            with mock.patch.object(ssh, '_get_hosts_name_for_node') \
                    as get_hosts_name_mock:
                get_power_status_mock.side_effect = [
                    states.POWER_ON, states.POWER_ON
                ]
                get_hosts_name_mock.return_value = "NodeName"
                expected = [
                    mock.call(self.sshclient, info),
                    mock.call(self.sshclient, info)
                ]

                cmd_to_exec = "%s %s" % (info['cmd_set']['base_cmd'],
                                         info['cmd_set']['stop_cmd'])
                cmd_to_exec = cmd_to_exec.replace('{_NodeName_}', 'NodeName')
                current_state = ssh._power_off(self.sshclient, info)

                self.assertEqual(current_state, states.ERROR)
                self.assertEqual(get_power_status_mock.call_args_list,
                                 expected)
                get_hosts_name_mock.assert_called_once_with(
                    self.sshclient, info)
                self.exec_ssh_mock.assert_called_once_with(
                    self.sshclient, cmd_to_exec)
Example #15
0
 def test__get_connection_exception(self, ssh_connect_mock):
     ssh_connect_mock.side_effect = exception.SSHConnectFailed(host='fake')
     self.assertRaises(exception.SSHConnectFailed,
                       ssh._get_connection,
                       self.node)
     driver_info = ssh._parse_driver_info(self.node)
     ssh_connect_mock.assert_called_once_with(driver_info)
Example #16
0
    def test__power_off_exception(self):
        info = ssh._parse_driver_info(self.node)
        info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]
        self.exec_ssh_mock.side_effect = processutils.ProcessExecutionError
        with mock.patch.object(
                ssh, '_get_power_status') as get_power_status_mock:
            with mock.patch.object(
                    ssh, '_get_hosts_name_for_node') as get_hosts_name_mock:
                self.exec_ssh_mock.side_effect = (
                        processutils.ProcessExecutionError)
                get_power_status_mock.side_effect = [states.POWER_ON,
                                                     states.POWER_OFF]
                get_hosts_name_mock.return_value = "NodeName"

                cmd_to_exec = "%s %s" % (info['cmd_set']['base_cmd'],
                                         info['cmd_set']['stop_cmd'])
                cmd_to_exec = cmd_to_exec.replace('{_NodeName_}', 'NodeName')

                self.assertRaises(exception.SSHCommandFailed,
                                  ssh._power_off,
                                  self.sshclient,
                                  info)
                get_power_status_mock.assert_called_once_with(self.sshclient,
                                                            info)
                get_hosts_name_mock.assert_called_once_with(self.sshclient,
                                                            info)
                self.exec_ssh_mock.assert_called_once_with(self.sshclient,
                                                           cmd_to_exec)
Example #17
0
    def test__get_hosts_name_for_node_match_after_retry(self, exec_ssh_mock):
        self.config(group='ssh', get_vm_name_attempts=2)
        self.config(group='ssh', get_vm_name_retry_interval=0)
        info = ssh._parse_driver_info(self.node)
        info['macs'] = ["11:11:11:11:11:11", "22:22:22:22:22:22"]
        exec_ssh_mock.side_effect = iter([('NodeName', ''), ('', ''),
                                          ('NodeName', ''),
                                          ('11:11:11:11:11:11', '')])

        ssh_cmd = "%s %s" % (info['cmd_set']['base_cmd'],
                             info['cmd_set']['list_all'])

        cmd_to_exec = "%s %s" % (info['cmd_set']['base_cmd'],
                                 info['cmd_set']['get_node_macs'])

        cmd_to_exec = cmd_to_exec.replace('{_NodeName_}', 'NodeName')
        expected = [
            mock.call(self.sshclient, ssh_cmd),
            mock.call(self.sshclient, cmd_to_exec)
        ] * 2

        found_name = ssh._get_hosts_name_for_node(self.sshclient, info)

        self.assertEqual('NodeName', found_name)
        self.assertEqual(expected, exec_ssh_mock.call_args_list)
Example #18
0
 def test__get_connection_client(self):
     with mock.patch.object(utils, 'ssh_connect') as ssh_connect_mock:
         ssh_connect_mock.return_value = self.sshclient
         client = ssh._get_connection(self.node)
         self.assertEqual(self.sshclient, client)
         driver_info = ssh._parse_driver_info(self.node)
         ssh_connect_mock.assert_called_once_with(driver_info)
Example #19
0
 def test__get_connection_exception(self, ssh_connect_mock):
     ssh_connect_mock.side_effect = iter(
         [exception.SSHConnectFailed(host='fake')])
     self.assertRaises(exception.SSHConnectFailed, ssh._get_connection,
                       self.node)
     driver_info = ssh._parse_driver_info(self.node)
     ssh_connect_mock.assert_called_once_with(driver_info)
Example #20
0
    def test__parse_driver_info_with_custom_libvirt_uri(self):
        CONF.set_override("libvirt_uri", "qemu:///foo", "ssh")
        expected_base_cmd = "LC_ALL=C /usr/bin/virsh --connect qemu:///foo"

        node = obj_utils.get_test_node(self.context, driver="fake_ssh", driver_info=db_utils.get_test_ssh_info())
        node["driver_info"]["ssh_virt_type"] = "virsh"
        info = ssh._parse_driver_info(node)
        self.assertEqual(expected_base_cmd, info["cmd_set"]["base_cmd"])
Example #21
0
 def test__get_connection_client(self):
     with mock.patch.object(
             utils, 'ssh_connect') as ssh_connect_mock:
         ssh_connect_mock.return_value = self.sshclient
         client = ssh._get_connection(self.node)
         self.assertEqual(self.sshclient, client)
         driver_info = ssh._parse_driver_info(self.node)
         ssh_connect_mock.assert_called_once_with(driver_info)
Example #22
0
 def test__get_connection_exception(self):
     with mock.patch.object(utils, 'ssh_connect') as ssh_connect_mock:
         ssh_connect_mock.side_effect = exception.SSHConnectFailed(
             host='fake')
         self.assertRaises(exception.SSHConnectFailed, ssh._get_connection,
                           self.node)
         driver_info = ssh._parse_driver_info(self.node)
         ssh_connect_mock.assert_called_once_with(driver_info)
Example #23
0
    def test__parse_driver_info_with_custom_libvirt_uri(self):
        CONF.set_override('libvirt_uri', 'qemu:///foo', 'ssh')
        expected_base_cmd = "/usr/bin/virsh --connect qemu:///foo"

        node = db_utils.get_test_node(driver='fake_ssh', driver_info=INFO_DICT)
        node['driver_info']['ssh_virt_type'] = 'virsh'
        info = ssh._parse_driver_info(node)
        self.assertEqual(expected_base_cmd, info['cmd_set']['base_cmd'])
Example #24
0
    def test_set_power_state_bad_state(self):
        info = ssh._parse_driver_info(self.node)
        info["macs"] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]

        self.mox.StubOutWithMock(ssh, "_parse_driver_info")
        self.mox.StubOutWithMock(ssh, "_get_nodes_mac_addresses")
        self.mox.StubOutWithMock(ssh, "_get_connection")
        ssh._parse_driver_info(self.node).AndReturn(info)
        ssh._get_nodes_mac_addresses(mox.IgnoreArg(), self.node).AndReturn(info["macs"])
        ssh._get_connection(self.node).AndReturn(self.sshclient)
        self.mox.ReplayAll()

        with task_manager.acquire([info["uuid"]], shared=False) as task:
            self.assertRaises(
                exception.IronicException, task.resources[0].driver.power.set_power_state, task, self.node, "BAD_PSTATE"
            )
        self.mox.VerifyAll()
Example #25
0
    def test__parse_driver_info_with_custom_libvirt_uri(self):
        CONF.set_override('libvirt_uri', 'qemu:///foo', 'ssh')
        expected_base_cmd = "/usr/bin/virsh --connect qemu:///foo"

        node = db_utils.get_test_node(driver='fake_ssh', driver_info=INFO_DICT)
        node['driver_info']['ssh_virt_type'] = 'virsh'
        info = ssh._parse_driver_info(node)
        self.assertEqual(expected_base_cmd, info['cmd_set']['base_cmd'])
Example #26
0
    def test__get_power_status_exception(self, exec_ssh_mock):
        info = ssh._parse_driver_info(self.node)
        exec_ssh_mock.side_effect = processutils.ProcessExecutionError

        self.assertRaises(exception.SSHCommandFailed, ssh._get_power_status,
                          self.sshclient, info)
        ssh_cmd = "%s %s" % (info['cmd_set']['base_cmd'],
                             info['cmd_set']['list_running'])
        exec_ssh_mock.assert_called_once_with(self.sshclient, ssh_cmd)
Example #27
0
    def test_set_power_state_off_good(self):
        info = ssh._parse_driver_info(self.node)
        info["macs"] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]

        self.mox.StubOutWithMock(ssh, "_parse_driver_info")
        self.mox.StubOutWithMock(ssh, "_get_nodes_mac_addresses")
        self.mox.StubOutWithMock(ssh, "_get_connection")
        self.mox.StubOutWithMock(ssh, "_power_off")
        ssh._parse_driver_info(self.node).AndReturn(info)
        ssh._get_nodes_mac_addresses(mox.IgnoreArg(), self.node).AndReturn(info["macs"])
        ssh._get_connection(self.node).AndReturn(self.sshclient)
        ssh._power_off(self.sshclient, info).AndReturn(states.POWER_OFF)
        self.mox.ReplayAll()

        with task_manager.acquire([info["uuid"]], shared=False) as task:
            task.resources[0].driver.power.set_power_state(task, self.node, states.POWER_OFF)
        self.assert_(True)
        self.mox.VerifyAll()
Example #28
0
    def test__get_power_status_correct_node(self, get_hosts_name_mock, exec_ssh_mock):
        # Bug: #1397834 test that get_power_status return status of
        # baremeta_1 (off) and not baremetal_11 (on)
        info = ssh._parse_driver_info(self.node)
        exec_ssh_mock.return_value = ('"baremetal_11"\n"seed"\n', "")
        get_hosts_name_mock.return_value = "baremetal_1"

        pstate = ssh._get_power_status(self.sshclient, info)
        self.assertEqual(states.POWER_OFF, pstate)
Example #29
0
    def test__get_power_status_error(self, get_hosts_name_mock, exec_ssh_mock):

        info = ssh._parse_driver_info(self.node)

        info["macs"] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]
        get_hosts_name_mock.return_value = None
        self.assertRaises(exception.NodeNotFound, ssh._get_power_status, self.sshclient, info)

        get_hosts_name_mock.assert_called_once_with(self.sshclient, info)
        exec_ssh_mock.assert_not_called()
Example #30
0
    def test__get_power_status_correct_node(self, get_hosts_name_mock,
                                            exec_ssh_mock):
        # Bug: #1397834 test that get_power_status return status of
        # baremeta_1 (off) and not baremetal_11 (on)
        info = ssh._parse_driver_info(self.node)
        exec_ssh_mock.return_value = ('"baremetal_11"\n"seed"\n', '')
        get_hosts_name_mock.return_value = "baremetal_1"

        pstate = ssh._get_power_status(self.sshclient, info)
        self.assertEqual(states.POWER_OFF, pstate)
Example #31
0
 def test__parse_driver_info_good(self):
     # make sure we get back the expected things
     node = db_utils.get_test_node(driver='fake_ssh', driver_info=INFO_DICT)
     info = ssh._parse_driver_info(node)
     self.assertIsNotNone(info.get('host'))
     self.assertIsNotNone(info.get('username'))
     self.assertIsNotNone(info.get('password'))
     self.assertIsNotNone(info.get('port'))
     self.assertIsNotNone(info.get('virt_type'))
     self.assertIsNotNone(info.get('cmd_set'))
     self.assertIsNotNone(info.get('uuid'))
Example #32
0
 def test__parse_driver_info_good_key(self):
     # make sure we get back the expected things
     node = obj_utils.get_test_node(self.context, driver="fake_ssh", driver_info=db_utils.get_test_ssh_info("key"))
     info = ssh._parse_driver_info(node)
     self.assertIsNotNone(info.get("host"))
     self.assertIsNotNone(info.get("username"))
     self.assertIsNotNone(info.get("key_contents"))
     self.assertIsNotNone(info.get("port"))
     self.assertIsNotNone(info.get("virt_type"))
     self.assertIsNotNone(info.get("cmd_set"))
     self.assertIsNotNone(info.get("uuid"))
Example #33
0
    def test__get_power_status_error(self, get_hosts_name_mock, exec_ssh_mock):

        info = ssh._parse_driver_info(self.node)

        info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]
        get_hosts_name_mock.return_value = None
        self.assertRaises(exception.NodeNotFound, ssh._get_power_status,
                          self.sshclient, info)

        get_hosts_name_mock.assert_called_once_with(self.sshclient, info)
        exec_ssh_mock.assert_not_called()
Example #34
0
    def test__get_power_status_off(self, get_hosts_name_mock, exec_ssh_mock):
        info = ssh._parse_driver_info(self.node)
        exec_ssh_mock.return_value = ('"NodeName" {b43c4982-110c-4c29-9325-d5f41b053513}', "")
        get_hosts_name_mock.return_value = "NotNodeName"

        pstate = ssh._get_power_status(self.sshclient, info)

        ssh_cmd = "%s %s" % (info["cmd_set"]["base_cmd"], info["cmd_set"]["list_running"])
        self.assertEqual(states.POWER_OFF, pstate)
        exec_ssh_mock.assert_called_once_with(self.sshclient, ssh_cmd)
        get_hosts_name_mock.assert_called_once_with(self.sshclient, info)
Example #35
0
    def test_reboot_fail(self):
        info = ssh._parse_driver_info(self.node)
        info["macs"] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]

        self.mox.StubOutWithMock(ssh, "_parse_driver_info")
        self.mox.StubOutWithMock(ssh, "_get_nodes_mac_addresses")
        self.mox.StubOutWithMock(ssh, "_get_connection")
        self.mox.StubOutWithMock(ssh, "_get_power_status")
        self.mox.StubOutWithMock(ssh, "_power_off")
        self.mox.StubOutWithMock(ssh, "_power_on")
        ssh._parse_driver_info(self.node).AndReturn(info)
        ssh._get_nodes_mac_addresses(mox.IgnoreArg(), self.node).AndReturn(info["macs"])
        ssh._get_connection(self.node).AndReturn(self.sshclient)
        ssh._get_power_status(self.sshclient, info).AndReturn(states.POWER_ON)
        ssh._power_off(self.sshclient, info).AndReturn(None)
        ssh._power_on(self.sshclient, info).AndReturn(states.POWER_OFF)
        self.mox.ReplayAll()

        with task_manager.acquire([info["uuid"]], shared=False) as task:
            self.assertRaises(exception.PowerStateFailure, task.resources[0].driver.power.reboot, task, self.node)
        self.mox.VerifyAll()
Example #36
0
 def test__parse_driver_info_good(self):
     # make sure we get back the expected things
     node = db_utils.get_test_node(driver="fake_ssh", driver_info=db_utils.ssh_info)
     info = ssh._parse_driver_info(node)
     self.assertIsNotNone(info.get("host"))
     self.assertIsNotNone(info.get("username"))
     self.assertIsNotNone(info.get("password"))
     self.assertIsNotNone(info.get("port"))
     self.assertIsNotNone(info.get("virt_type"))
     self.assertIsNotNone(info.get("cmd_set"))
     self.assertIsNotNone(info.get("uuid"))
     self.mox.VerifyAll()
Example #37
0
 def test__parse_driver_info_good_key(self):
     # make sure we get back the expected things
     node = db_utils.get_test_node(
         driver='fake_ssh', driver_info=db_utils.get_test_ssh_info('key'))
     info = ssh._parse_driver_info(node)
     self.assertIsNotNone(info.get('host'))
     self.assertIsNotNone(info.get('username'))
     self.assertIsNotNone(info.get('key_contents'))
     self.assertIsNotNone(info.get('port'))
     self.assertIsNotNone(info.get('virt_type'))
     self.assertIsNotNone(info.get('cmd_set'))
     self.assertIsNotNone(info.get('uuid'))
Example #38
0
    def test__get_power_status_exception(self):
        info = ssh._parse_driver_info(self.node)
        self.exec_ssh_mock.side_effect = processutils.ProcessExecutionError

        self.assertRaises(exception.SSHCommandFailed,
                          ssh._get_power_status,
                          self.sshclient,
                          info)
        ssh_cmd = "%s %s" % (info['cmd_set']['base_cmd'],
                             info['cmd_set']['list_running'])
        self.exec_ssh_mock.assert_called_once_with(
                self.sshclient, ssh_cmd)
Example #39
0
    def test__get_hosts_name_for_node_no_match(self):
        info = ssh._parse_driver_info(self.node)
        info["macs"] = ["11:11:11:11:11:11", "22:22:22:22:22:22"]
        self.mox.StubOutWithMock(ssh, "_exec_ssh_command")
        ssh._exec_ssh_command(self.sshclient, info["cmd_set"]["list_all"]).AndReturn(["NodeName"])
        cmd_to_exec = info["cmd_set"]["get_node_macs"]
        cmd_to_exec = cmd_to_exec.replace("{_NodeName_}", "NodeName")
        ssh._exec_ssh_command(self.sshclient, cmd_to_exec).AndReturn(["52:54:00:cf:2d:31"])
        self.mox.ReplayAll()

        found_name = ssh._get_hosts_name_for_node(self.sshclient, info)
        self.assertEqual(found_name, None)
        self.mox.VerifyAll()
Example #40
0
 def test__parse_driver_info_good_key(self):
     # make sure we get back the expected things
     node = db_utils.get_test_node(
                 driver='fake_ssh',
                 driver_info=db_utils.get_test_ssh_info('key'))
     info = ssh._parse_driver_info(node)
     self.assertIsNotNone(info.get('host'))
     self.assertIsNotNone(info.get('username'))
     self.assertIsNotNone(info.get('key_contents'))
     self.assertIsNotNone(info.get('port'))
     self.assertIsNotNone(info.get('virt_type'))
     self.assertIsNotNone(info.get('cmd_set'))
     self.assertIsNotNone(info.get('uuid'))
Example #41
0
    def test__get_power_status_off(self, get_hosts_name_mock, exec_ssh_mock):
        info = ssh._parse_driver_info(self.node)
        exec_ssh_mock.return_value = (
            '"NodeName" {b43c4982-110c-4c29-9325-d5f41b053513}', '')
        get_hosts_name_mock.return_value = "NotNodeName"

        pstate = ssh._get_power_status(self.sshclient, info)

        ssh_cmd = "%s %s" % (info['cmd_set']['base_cmd'],
                             info['cmd_set']['list_running'])
        self.assertEqual(states.POWER_OFF, pstate)
        exec_ssh_mock.assert_called_once_with(self.sshclient, ssh_cmd)
        get_hosts_name_mock.assert_called_once_with(self.sshclient, info)
Example #42
0
    def test_set_power_state_bad_state(self):
        info = ssh._parse_driver_info(self.node)
        info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]

        self.mox.StubOutWithMock(ssh, '_parse_driver_info')
        self.mox.StubOutWithMock(ssh, '_get_nodes_mac_addresses')
        self.mox.StubOutWithMock(ssh, '_get_connection')
        ssh._parse_driver_info(self.node).\
                AndReturn(info)
        ssh._get_nodes_mac_addresses(mox.IgnoreArg(), self.node).\
                AndReturn(info['macs'])
        ssh._get_connection(self.node).\
                AndReturn(self.sshclient)
        self.mox.ReplayAll()

        with task_manager.acquire([info['uuid']], shared=False) as task:
            self.assertRaises(exception.IronicException,
                task.resources[0].driver.power.set_power_state,
                task,
                self.node,
                "BAD_PSTATE")
        self.mox.VerifyAll()
Example #43
0
    def test__get_power_status_on_unquoted(self, get_hosts_name_mock,
                                           exec_ssh_mock):
        info = ssh._parse_driver_info(self.node)
        exec_ssh_mock.return_value = ('ExactNodeName', '')
        get_hosts_name_mock.return_value = "ExactNodeName"

        pstate = ssh._get_power_status(self.sshclient, info)

        ssh_cmd = "%s %s" % (info['cmd_set']['base_cmd'],
                             info['cmd_set']['list_running'])
        self.assertEqual(states.POWER_ON, pstate)
        exec_ssh_mock.assert_called_once_with(self.sshclient, ssh_cmd)
        get_hosts_name_mock.assert_called_once_with(self.sshclient, info)
Example #44
0
 def test__parse_driver_info_good(self):
     # make sure we get back the expected things
     node = db_utils.get_test_node(
                 driver='fake_ssh',
                 driver_info=INFO_DICT)
     info = ssh._parse_driver_info(node)
     self.assertIsNotNone(info.get('host'))
     self.assertIsNotNone(info.get('username'))
     self.assertIsNotNone(info.get('password'))
     self.assertIsNotNone(info.get('port'))
     self.assertIsNotNone(info.get('virt_type'))
     self.assertIsNotNone(info.get('cmd_set'))
     self.assertIsNotNone(info.get('uuid'))
Example #45
0
    def test__get_hosts_name_for_node_exception(self, exec_ssh_mock):
        info = ssh._parse_driver_info(self.node)
        info["macs"] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]
        ssh_cmd = "%s %s" % (info["cmd_set"]["base_cmd"], info["cmd_set"]["list_all"])

        cmd_to_exec = "%s %s" % (info["cmd_set"]["base_cmd"], info["cmd_set"]["get_node_macs"])
        cmd_to_exec = cmd_to_exec.replace("{_NodeName_}", "NodeName")

        exec_ssh_mock.side_effect = [("NodeName", ""), processutils.ProcessExecutionError]
        expected = [mock.call(self.sshclient, ssh_cmd), mock.call(self.sshclient, cmd_to_exec)]

        self.assertRaises(exception.SSHCommandFailed, ssh._get_hosts_name_for_node, self.sshclient, info)
        self.assertEqual(expected, exec_ssh_mock.call_args_list)
Example #46
0
    def test__get_power_status_error(self):
        info = ssh._parse_driver_info(self.node)
        self.mox.StubOutWithMock(ssh, "_exec_ssh_command")
        self.mox.StubOutWithMock(ssh, "_get_hosts_name_for_node")

        ssh._exec_ssh_command(self.sshclient, info["cmd_set"]["list_running"]).AndReturn(
            ['"NodeName" {b43c4982-110c-4c29-9325-d5f41b053513}']
        )
        ssh._get_hosts_name_for_node(self.sshclient, info).AndReturn(None)
        self.mox.ReplayAll()

        pstate = ssh._get_power_status(self.sshclient, info)
        self.assertEqual(pstate, states.ERROR)
        self.mox.VerifyAll()
Example #47
0
    def test__power_off_exception(self, get_hosts_name_mock, get_power_status_mock, exec_ssh_mock):
        info = ssh._parse_driver_info(self.node)
        info["macs"] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]
        exec_ssh_mock.side_effect = processutils.ProcessExecutionError
        get_power_status_mock.side_effect = [states.POWER_ON, states.POWER_OFF]
        get_hosts_name_mock.return_value = "NodeName"

        cmd_to_exec = "%s %s" % (info["cmd_set"]["base_cmd"], info["cmd_set"]["stop_cmd"])
        cmd_to_exec = cmd_to_exec.replace("{_NodeName_}", "NodeName")

        self.assertRaises(exception.SSHCommandFailed, ssh._power_off, self.sshclient, info)
        get_power_status_mock.assert_called_once_with(self.sshclient, info)
        get_hosts_name_mock.assert_called_once_with(self.sshclient, info)
        exec_ssh_mock.assert_called_once_with(self.sshclient, cmd_to_exec)
Example #48
0
    def test__get_power_status_on_unquoted(self, get_hosts_name_mock,
                                           exec_ssh_mock):
        info = ssh._parse_driver_info(self.node)
        exec_ssh_mock.return_value = (
            'ExactNodeName', '')
        get_hosts_name_mock.return_value = "ExactNodeName"

        pstate = ssh._get_power_status(self.sshclient, info)

        ssh_cmd = "%s %s" % (info['cmd_set']['base_cmd'],
                             info['cmd_set']['list_running'])
        self.assertEqual(states.POWER_ON, pstate)
        exec_ssh_mock.assert_called_once_with(self.sshclient, ssh_cmd)
        get_hosts_name_mock.assert_called_once_with(self.sshclient, info)
Example #49
0
    def test__get_hosts_name_for_node_no_match(self):
        info = ssh._parse_driver_info(self.node)
        info['macs'] = ["11:11:11:11:11:11", "22:22:22:22:22:22"]
        self.mox.StubOutWithMock(ssh, '_exec_ssh_command')
        ssh._exec_ssh_command(self.sshclient, info['cmd_set']['list_all']).\
                AndReturn(['NodeName'])
        cmd_to_exec = info['cmd_set']['get_node_macs']
        cmd_to_exec = cmd_to_exec.replace('{_NodeName_}', 'NodeName')
        ssh._exec_ssh_command(self.sshclient, cmd_to_exec).\
                AndReturn(['52:54:00:cf:2d:31'])
        self.mox.ReplayAll()

        found_name = ssh._get_hosts_name_for_node(self.sshclient, info)
        self.assertEqual(found_name, None)
        self.mox.VerifyAll()
Example #50
0
    def test__get_power_status_error(self):
        info = ssh._parse_driver_info(self.node)
        self.mox.StubOutWithMock(ssh, '_exec_ssh_command')
        self.mox.StubOutWithMock(ssh, '_get_hosts_name_for_node')

        ssh._exec_ssh_command(
            self.sshclient, info['cmd_set']['list_running']).AndReturn(
            ['"NodeName" {b43c4982-110c-4c29-9325-d5f41b053513}'])
        ssh._get_hosts_name_for_node(self.sshclient, info).\
                AndReturn(None)
        self.mox.ReplayAll()

        pstate = ssh._get_power_status(self.sshclient, info)
        self.assertEqual(pstate, states.ERROR)
        self.mox.VerifyAll()
Example #51
0
    def test__get_power_status_on(self):
        info = ssh._parse_driver_info(self.node)
        with mock.patch.object(ssh, '_get_hosts_name_for_node') \
                as get_hosts_name_mock:
            self.exec_ssh_mock.return_value = (
                '"NodeName" {b43c4982-110c-4c29-9325-d5f41b053513}', '')
            get_hosts_name_mock.return_value = "NodeName"

            pstate = ssh._get_power_status(self.sshclient, info)

            ssh_cmd = "%s %s" % (info['cmd_set']['base_cmd'],
                                 info['cmd_set']['list_running'])
            self.assertEqual(pstate, states.POWER_ON)
            self.exec_ssh_mock.assert_called_once_with(self.sshclient, ssh_cmd)
            get_hosts_name_mock.assert_called_once_with(self.sshclient, info)
Example #52
0
 def test__parse_driver_info_good_file(self):
     # make sure we get back the expected things
     d_info = db_utils.get_test_ssh_info('file')
     tempdir = self.useFixture(fixtures.TempDir())
     key_path = tempdir.path + '/foo'
     open(key_path, 'wt').close()
     d_info['ssh_key_filename'] = key_path
     node = db_utils.get_test_node(driver='fake_ssh', driver_info=d_info)
     info = ssh._parse_driver_info(node)
     self.assertIsNotNone(info.get('host'))
     self.assertIsNotNone(info.get('username'))
     self.assertIsNotNone(info.get('key_filename'))
     self.assertIsNotNone(info.get('port'))
     self.assertIsNotNone(info.get('virt_type'))
     self.assertIsNotNone(info.get('cmd_set'))
     self.assertIsNotNone(info.get('uuid'))
Example #53
0
    def test__get_power_status_error(self, get_hosts_name_mock, exec_ssh_mock):

        info = ssh._parse_driver_info(self.node)

        exec_ssh_mock.return_value = (
            '"NodeName" {b43c4982-110c-4c29-9325-d5f41b053513}', '')
        info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]
        get_hosts_name_mock.return_value = None
        self.assertRaises(exception.NodeNotFound, ssh._get_power_status,
                          self.sshclient, info)

        ssh_cmd = "%s %s" % (info['cmd_set']['base_cmd'],
                             info['cmd_set']['list_running'])

        exec_ssh_mock.assert_called_once_with(self.sshclient, ssh_cmd)
        get_hosts_name_mock.assert_called_once_with(self.sshclient, info)
Example #54
0
    def test_set_power_state_bad_state(self, get_conn_mock, get_mac_addr_mock):
        info = ssh._parse_driver_info(self.node)
        info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]
        get_mac_addr_mock.return_value = info['macs']
        get_conn_mock.return_value = self.sshclient
        with mock.patch.object(ssh,
                               '_parse_driver_info') as parse_drv_info_mock:
            parse_drv_info_mock.return_value = info
            with task_manager.acquire(self.context, info['uuid'],
                                      shared=False) as task:
                self.assertRaises(exception.InvalidParameterValue,
                                  task.driver.power.set_power_state, task,
                                  "BAD_PSTATE")

                parse_drv_info_mock.assert_called_once_with(task.node)
                get_mac_addr_mock.assert_called_once_with(mock.ANY)
                get_conn_mock.assert_called_once_with(task.node)
Example #55
0
    def test__power_on_exception(self, get_hosts_name_mock,
                                 get_power_status_mock, exec_ssh_mock):
        info = ssh._parse_driver_info(self.node)
        info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]

        exec_ssh_mock.side_effect = processutils.ProcessExecutionError
        get_power_status_mock.side_effect = [states.POWER_OFF, states.POWER_ON]
        get_hosts_name_mock.return_value = "NodeName"

        cmd_to_exec = "%s %s" % (info['cmd_set']['base_cmd'],
                                 info['cmd_set']['start_cmd'])
        cmd_to_exec = cmd_to_exec.replace('{_NodeName_}', 'NodeName')

        self.assertRaises(exception.SSHCommandFailed, ssh._power_on,
                          self.sshclient, info)
        get_power_status_mock.assert_called_once_with(self.sshclient, info)
        get_hosts_name_mock.assert_called_once_with(self.sshclient, info)
        exec_ssh_mock.assert_called_once_with(self.sshclient, cmd_to_exec)
Example #56
0
 def test_reboot_fail(self, power_on_mock, get_conn_mock,
                      get_mac_addr_mock):
     info = ssh._parse_driver_info(self.node)
     info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]
     get_mac_addr_mock.return_value = info['macs']
     get_conn_mock.return_value = self.sshclient
     power_on_mock.return_value = states.POWER_OFF
     with mock.patch.object(ssh, '_parse_driver_info',
                            autospec=True) as parse_drv_info_mock:
         parse_drv_info_mock.return_value = info
         with task_manager.acquire(self.context, info['uuid'],
                                   shared=False) as task:
             self.assertRaises(exception.PowerStateFailure,
                               task.driver.power.reboot, task)
             parse_drv_info_mock.assert_called_once_with(task.node)
             get_mac_addr_mock.assert_called_once_with(mock.ANY)
             get_conn_mock.assert_called_once_with(task.node)
             power_on_mock.assert_called_once_with(self.sshclient, info)
Example #57
0
    def test_set_power_state_bad_state(self):
        info = ssh._parse_driver_info(self.node)
        info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]

        self.parse_drv_info_mock = self.parse_drv_info_patcher.start()
        self.parse_drv_info_mock.return_value = info
        self.get_mac_addr_mock.return_value = info['macs']
        self.get_conn_mock.return_value = self.sshclient

        with task_manager.acquire(self.context, [info['uuid']],
                                  shared=False) as task:
            self.assertRaises(exception.InvalidParameterValue,
                              task.resources[0].driver.power.set_power_state,
                              task, self.node, "BAD_PSTATE")

        self.parse_drv_info_mock.assert_called_once_with(self.node)
        self.get_mac_addr_mock.assert_called_once_with(mock.ANY, self.node)
        self.get_conn_mock.assert_called_once_with(self.node)
Example #58
0
    def test_set_power_state_off_good(self, power_off_mock, get_conn_mock,
                                      get_mac_addr_mock):
        info = ssh._parse_driver_info(self.node)
        info['macs'] = ["11:11:11:11:11:11", "52:54:00:cf:2d:31"]
        get_mac_addr_mock.return_value = info['macs']
        get_conn_mock.return_value = self.sshclient
        power_off_mock.return_value = states.POWER_OFF
        with mock.patch.object(ssh,
                               '_parse_driver_info') as parse_drv_info_mock:
            parse_drv_info_mock.return_value = info
            with task_manager.acquire(self.context, info['uuid'],
                                      shared=False) as task:
                task.driver.power.set_power_state(task, states.POWER_OFF)

                parse_drv_info_mock.assert_called_once_with(task.node)
                get_mac_addr_mock.assert_called_once_with(mock.ANY)
                get_conn_mock.assert_called_once_with(task.node)
                power_off_mock.assert_called_once_with(self.sshclient, info)