Check detach_interface/attach_interface complete

To check whether detach_interface/attach_interface
complete to keep consistent with nova underlying.

Change-Id: I62e61a2d3633fac35655a8542f93921a1ba17930
Closes-Bug: #1650439
This commit is contained in:
huangtianhua 2016-12-16 11:50:55 +08:00
parent d42b0b898e
commit 62e72a2879
3 changed files with 63 additions and 5 deletions

View File

@ -731,6 +731,9 @@ echo -e '%s\tALL=(ALL)\tNOPASSWD: ALL' >> /etc/sudoers
wait=tenacity.wait_fixed(0.5),
retry=tenacity.retry_if_result(client_plugin.retry_if_result_is_false))
def check_interface_attach(self, server_id, port_id):
if not port_id:
return True
server = self.fetch_server(server_id)
if server:
interfaces = server.interface_list()

View File

@ -1147,16 +1147,16 @@ class Server(server_base.BaseServer, sh.SchedulerHintsMixin,
updaters.append(
progress.ServerUpdateProgress(
self.resource_id, 'interface_detach',
complete=True,
handler_extra={'args': (port,)})
handler_extra={'args': (port,)},
checker_extra={'args': (port,)})
)
for args in add_nets:
updaters.append(
progress.ServerUpdateProgress(
self.resource_id, 'interface_attach',
complete=True,
handler_extra={'kwargs': args})
handler_extra={'kwargs': args},
checker_extra={'args': (args['port_id'],)})
)
return updaters

View File

@ -3349,11 +3349,19 @@ class ServersTest(common.HeatTestCase):
self.patchobject(return_server, 'interface_list', return_value=[iface])
mock_detach = self.patchobject(return_server, 'interface_detach')
mock_attach = self.patchobject(return_server, 'interface_attach')
mock_detach_check = self.patchobject(nova.NovaClientPlugin,
'check_interface_detach',
return_value=True)
mock_attach_check = self.patchobject(nova.NovaClientPlugin,
'check_interface_attach',
return_value=True)
scheduler.TaskRunner(server.update, update_template)()
self.assertEqual((server.UPDATE, server.COMPLETE), server.state)
self.assertEqual(1, mock_detach.call_count)
self.assertEqual(1, mock_attach.call_count)
self.assertEqual(1, mock_detach_check.call_count)
self.assertEqual(1, mock_attach_check.call_count)
def test_server_update_None_networks_with_network_id(self):
return_server = self.fc.servers.list()[3]
@ -3378,11 +3386,19 @@ class ServersTest(common.HeatTestCase):
self.patchobject(return_server, 'interface_list', return_value=[iface])
mock_detach = self.patchobject(return_server, 'interface_detach')
mock_attach = self.patchobject(return_server, 'interface_attach')
mock_detach_check = self.patchobject(nova.NovaClientPlugin,
'check_interface_detach',
return_value=True)
mock_attach_check = self.patchobject(nova.NovaClientPlugin,
'check_interface_attach',
return_value=True)
scheduler.TaskRunner(server.update, update_template)()
self.assertEqual((server.UPDATE, server.COMPLETE), server.state)
self.assertEqual(1, mock_detach.call_count)
self.assertEqual(1, mock_attach.call_count)
self.assertEqual(1, mock_detach_check.call_count)
self.assertEqual(1, mock_attach_check.call_count)
def test_server_update_subnet_with_security_group(self):
return_server = self.fc.servers.list()[3]
@ -3427,11 +3443,19 @@ class ServersTest(common.HeatTestCase):
self.patchobject(return_server, 'interface_list', return_value=[iface])
mock_detach = self.patchobject(return_server, 'interface_detach')
mock_attach = self.patchobject(return_server, 'interface_attach')
mock_detach_check = self.patchobject(nova.NovaClientPlugin,
'check_interface_detach',
return_value=True)
mock_attach_check = self.patchobject(nova.NovaClientPlugin,
'check_interface_attach',
return_value=True)
scheduler.TaskRunner(server.update, update_template, before=server.t)()
self.assertEqual((server.UPDATE, server.COMPLETE), server.state)
self.assertEqual(1, mock_detach.call_count)
self.assertEqual(1, mock_attach.call_count)
self.assertEqual(1, mock_detach_check.call_count)
self.assertEqual(1, mock_attach_check.call_count)
self.assertEqual(3, mock_find.call_count)
kwargs = {'network_id': '05d8e681-4b37-4570-bc8d-810089f706b2',
'fixed_ips': [
@ -3461,10 +3485,18 @@ class ServersTest(common.HeatTestCase):
self.patchobject(return_server, 'interface_list', return_value=[iface])
mock_detach = self.patchobject(return_server, 'interface_detach')
mock_attach = self.patchobject(return_server, 'interface_attach')
mock_detach_check = self.patchobject(nova.NovaClientPlugin,
'check_interface_detach',
return_value=True)
mock_attach_check = self.patchobject(nova.NovaClientPlugin,
'check_interface_attach',
return_value=True)
scheduler.TaskRunner(server.update, update_template)()
self.assertEqual((server.UPDATE, server.COMPLETE), server.state)
self.assertEqual(1, mock_detach.call_count)
self.assertEqual(1, mock_attach.call_count)
self.assertEqual(1, mock_detach_check.call_count)
self.assertEqual(1, mock_attach_check.call_count)
def test_server_update_networks_with_complex_parameters(self):
return_server = self.fc.servers.list()[1]
@ -3513,10 +3545,18 @@ class ServersTest(common.HeatTestCase):
return_value=poor_interfaces)
mock_detach = self.patchobject(return_server, 'interface_detach')
mock_attach = self.patchobject(return_server, 'interface_attach')
mock_detach_check = self.patchobject(nova.NovaClientPlugin,
'check_interface_detach',
return_value=True)
mock_attach_check = self.patchobject(nova.NovaClientPlugin,
'check_interface_attach',
return_value=True)
scheduler.TaskRunner(server.update, update_template)()
self.assertEqual((server.UPDATE, server.COMPLETE), server.state)
self.assertEqual(4, mock_detach.call_count)
self.assertEqual(2, mock_attach.call_count)
self.assertEqual(4, mock_detach_check.call_count)
self.assertEqual(2, mock_attach_check.call_count)
def test_server_update_networks_with_None(self):
return_server = self.fc.servers.list()[1]
@ -3553,11 +3593,18 @@ class ServersTest(common.HeatTestCase):
return_value=poor_interfaces)
mock_detach = self.patchobject(return_server, 'interface_detach')
mock_attach = self.patchobject(return_server, 'interface_attach')
mock_detach_check = self.patchobject(nova.NovaClientPlugin,
'check_interface_detach',
return_value=True)
mock_attach_check = self.patchobject(nova.NovaClientPlugin,
'check_interface_attach',
return_value=True)
scheduler.TaskRunner(server.update, update_template)()
self.assertEqual((server.UPDATE, server.COMPLETE), server.state)
self.assertEqual(3, mock_detach.call_count)
self.assertEqual(1, mock_attach.call_count)
self.assertEqual(3, mock_detach_check.call_count)
self.assertEqual(1, mock_attach_check.call_count)
def test_server_update_networks_with_empty_list(self):
return_server = self.fc.servers.list()[1]
@ -3595,11 +3642,19 @@ class ServersTest(common.HeatTestCase):
return_value=poor_interfaces)
mock_detach = self.patchobject(return_server, 'interface_detach')
mock_attach = self.patchobject(return_server, 'interface_attach')
mock_detach_check = self.patchobject(nova.NovaClientPlugin,
'check_interface_detach',
return_value=True)
mock_attach_check = self.patchobject(nova.NovaClientPlugin,
'check_interface_attach',
return_value=True)
scheduler.TaskRunner(server.update, update_template)()
self.assertEqual((server.UPDATE, server.COMPLETE), server.state)
self.assertEqual(3, mock_detach.call_count)
self.assertEqual(1, mock_attach.call_count)
self.assertEqual(3, mock_detach_check.call_count)
self.assertEqual(1, mock_attach_check.call_count)
def test_server_properties_validation_create_and_update(self):
return_server = self.fc.servers.list()[1]