16
16
"""Test class for common methods used by iLO modules."""
21
21
from oslo.config import cfg
23
from ironic.common import exception
23
from ironic.common import boot_devices
24
24
from ironic.common import images
25
25
from ironic.common import states
26
26
from ironic.common import swift
27
27
from ironic.common import utils
28
28
from ironic.conductor import task_manager
29
29
from ironic.conductor import utils as manager_utils
30
from ironic.db import api as dbapi
31
30
from ironic.drivers.modules import agent
32
31
from ironic.drivers.modules import deploy_utils
33
32
from ironic.drivers.modules.ilo import common as ilo_common
224
223
@mock.patch.object(ilo_deploy, '_get_single_nic_with_vif_port_id')
225
224
@mock.patch.object(iscsi_deploy, 'build_deploy_ramdisk_options')
226
225
@mock.patch.object(manager_utils, 'node_power_action')
227
@mock.patch.object(ilo_common, 'set_boot_device')
228
226
@mock.patch.object(iscsi_deploy, 'check_image_size')
229
227
@mock.patch.object(iscsi_deploy, 'cache_instance_image')
230
228
def test_deploy(self, cache_instance_image_mock, check_image_size_mock,
231
set_boot_device_mock, node_power_action_mock,
232
build_opts_mock, get_nic_mock, reboot_into_mock):
229
node_power_action_mock, build_opts_mock, get_nic_mock,
233
231
deploy_opts = {'a': 'b'}
234
232
build_opts_mock.return_value = deploy_opts
235
233
get_nic_mock.return_value = '12:34:56:78:90:ab'
328
325
super(VendorPassthruTestCase, self).setUp()
329
self.dbapi = dbapi.get_instance()
330
326
mgr_utils.mock_the_extension_manager(driver="iscsi_ilo")
331
327
self.node = obj_utils.create_test_node(self.context,
332
328
driver='iscsi_ilo', driver_info=INFO_DICT)
334
330
@mock.patch.object(deploy_utils, 'notify_deploy_complete')
335
@mock.patch.object(ilo_common, 'set_boot_device')
331
@mock.patch.object(manager_utils, 'node_set_boot_device')
336
332
@mock.patch.object(ilo_common, 'setup_vmedia_for_boot')
337
333
@mock.patch.object(ilo_deploy, '_get_boot_iso')
338
334
@mock.patch.object(iscsi_deploy, 'continue_deploy')
435
431
pxe_prepare_mock.assert_called_once_with(task)
437
433
@mock.patch.object(pxe.PXEDeploy, 'deploy')
438
@mock.patch.object(ilo_common, 'set_boot_device')
434
@mock.patch.object(manager_utils, 'node_set_boot_device')
439
435
def test_deploy_boot_mode_exists(self, set_persistent_mock,
440
436
pxe_deploy_mock):
441
437
with task_manager.acquire(self.context, self.node.uuid,
442
438
shared=False) as task:
443
439
task.driver.deploy.deploy(task)
444
set_persistent_mock.assert_called_with(task.node, 'NETWORK', False)
440
set_persistent_mock.assert_called_with(task, boot_devices.PXE)
445
441
pxe_deploy_mock.assert_called_once_with(task)
448
class IloManagementTestCase(db_base.DbTestCase):
451
super(IloManagementTestCase, self).setUp()
452
self.dbapi = dbapi.get_instance()
453
mgr_utils.mock_the_extension_manager(driver="pxe_ilo")
454
self.node = obj_utils.create_test_node(self.context,
455
driver='pxe_ilo', driver_info=INFO_DICT)
457
@mock.patch.object(ilo_common, 'set_boot_device')
458
def test_set_boot_device_ok(self, set_persistent_mock):
459
with task_manager.acquire(self.context, self.node.uuid,
460
shared=False) as task:
461
task.driver.management.set_boot_device(task, 'pxe', True)
462
set_persistent_mock.assert_called_once_with(task.node,
465
@mock.patch.object(ilo_common, 'set_boot_device')
466
def test_set_boot_device_invalid_device(self, set_persistent_mock):
467
with task_manager.acquire(self.context, self.node.uuid,
468
shared=False) as task:
469
self.assertRaises(exception.InvalidParameterValue,
470
task.driver.management.set_boot_device,
474
444
class IloPXEVendorPassthruTestCase(db_base.DbTestCase):
477
447
super(IloPXEVendorPassthruTestCase, self).setUp()
478
self.dbapi = dbapi.get_instance()
479
448
mgr_utils.mock_the_extension_manager(driver="pxe_ilo")
480
449
self.node = obj_utils.create_test_node(self.context,
481
450
driver='pxe_ilo', driver_info=INFO_DICT)
483
@mock.patch.object(pxe.VendorPassthru, 'vendor_passthru')
484
@mock.patch.object(ilo_common, 'set_boot_device')
485
def test_vendorpassthru(self, set_persistent_mock,
452
def test_vendor_routes(self):
453
expected = ['pass_deploy_info']
454
with task_manager.acquire(self.context, self.node.uuid,
455
shared=True) as task:
456
vendor_routes = task.driver.vendor.vendor_routes
457
self.assertIsInstance(vendor_routes, dict)
458
self.assertEqual(expected, list(vendor_routes))
460
def test_driver_routes(self):
461
with task_manager.acquire(self.context, self.node.uuid,
462
shared=True) as task:
463
driver_routes = task.driver.vendor.driver_routes
464
self.assertIsInstance(driver_routes, dict)
465
self.assertEqual({}, driver_routes)
467
@mock.patch.object(pxe.VendorPassthru, '_continue_deploy')
468
@mock.patch.object(manager_utils, 'node_set_boot_device')
469
def test_vendorpassthru(self, set_boot_device_mock,
486
470
pxe_vendorpassthru_mock):
487
kwargs = {'method': 'pass_deploy_info', 'address': '123456'}
471
kwargs = {'address': '123456'}
488
472
with task_manager.acquire(self.context, self.node.uuid,
489
473
shared=False) as task:
490
474
task.node.provision_state = states.DEPLOYWAIT
491
task.driver.vendor.vendor_passthru(task, **kwargs)
492
set_persistent_mock.assert_called_with(task.node, 'NETWORK', True)
475
task.driver.vendor._continue_deploy(task, **kwargs)
476
set_boot_device_mock.assert_called_with(task, boot_devices.PXE,
493
478
pxe_vendorpassthru_mock.assert_called_once_with(task, **kwargs)