377
377
'network_id': '00000000-0000-0000-0000-000000000000',
378
378
'admin_state_up': True, 'mac_address': self.ports[0].address}})
380
@mock.patch('ironic.conductor.manager.cleaning_error_handler')
380
@mock.patch.object(neutron.NeutronDHCPApi, '_rollback_cleaning_ports')
381
381
@mock.patch.object(client.Client, 'create_port')
382
def test_create_cleaning_ports_fail(self, create_mock, error_mock):
383
# Check that if creating a port fails, the node goes to cleanfail
382
def test_create_cleaning_ports_fail(self, create_mock, rollback_mock):
383
# Check that if creating a port fails, the ports are cleaned up
384
384
create_mock.side_effect = neutron_client_exc.ConnectionFailed
385
385
api = dhcp_factory.DHCPFactory().provider
387
387
with task_manager.acquire(self.context, self.node.uuid) as task:
388
api.create_cleaning_ports(task)
389
error_mock.assert_called_once_with(task, mock.ANY)
388
self.assertRaises(exception.NodeCleaningFailure,
389
api.create_cleaning_ports,
390
391
create_mock.assert_called_once_with({'port': {
391
392
'network_id': '00000000-0000-0000-0000-000000000000',
392
393
'admin_state_up': True, 'mac_address': self.ports[0].address}})
394
rollback_mock.assert_called_once_with(task)
394
@mock.patch('ironic.conductor.manager.cleaning_error_handler')
395
396
@mock.patch.object(client.Client, 'create_port')
396
def test_create_cleaning_ports_bad_config(self, create_mock, error_mock):
397
def test_create_cleaning_ports_bad_config(self, create_mock):
398
# Check an error is raised if the cleaning network is not set
397
399
self.config(cleaning_network_uuid=None, group='neutron')
398
400
api = dhcp_factory.DHCPFactory().provider
417
419
network_id='00000000-0000-0000-0000-000000000000')
418
420
delete_mock.assert_called_once_with(self.neutron_port['id'])
420
@mock.patch('ironic.conductor.manager.cleaning_error_handler')
421
422
@mock.patch.object(client.Client, 'list_ports')
422
def test_delete_cleaning_ports_list_fail(self, list_mock, error_mock):
423
def test_delete_cleaning_ports_list_fail(self, list_mock):
423
424
# Check that if listing ports fails, the node goes to cleanfail
424
425
list_mock.side_effect = neutron_client_exc.ConnectionFailed
425
426
api = dhcp_factory.DHCPFactory().provider
427
428
with task_manager.acquire(self.context, self.node.uuid) as task:
428
api.delete_cleaning_ports(task)
429
self.assertRaises(exception.NodeCleaningFailure,
430
api.delete_cleaning_ports,
429
432
list_mock.assert_called_once_with(
430
433
network_id='00000000-0000-0000-0000-000000000000')
431
error_mock.assert_called_once_with(task, mock.ANY)
433
@mock.patch('ironic.conductor.manager.cleaning_error_handler')
434
435
@mock.patch.object(client.Client, 'delete_port')
435
436
@mock.patch.object(client.Client, 'list_ports')
436
def test_delete_cleaning_ports_delete_fail(self, list_mock, delete_mock,
437
def test_delete_cleaning_ports_delete_fail(self, list_mock, delete_mock):
438
438
# Check that if deleting ports fails, the node goes to cleanfail
439
439
list_mock.return_value = {'ports': [self.neutron_port]}
440
440
delete_mock.side_effect = neutron_client_exc.ConnectionFailed
441
441
api = dhcp_factory.DHCPFactory().provider
443
443
with task_manager.acquire(self.context, self.node.uuid) as task:
444
api.delete_cleaning_ports(task)
444
self.assertRaises(exception.NodeCleaningFailure,
445
api.delete_cleaning_ports,
445
447
list_mock.assert_called_once_with(
446
448
network_id='00000000-0000-0000-0000-000000000000')
447
449
delete_mock.assert_called_once_with(self.neutron_port['id'])
448
error_mock.assert_called_once_with(task, mock.ANY)