diff --git a/django-openstack/django_openstack/api.py b/django-openstack/django_openstack/api.py index a11ddd224..4e57b2bb6 100644 --- a/django-openstack/django_openstack/api.py +++ b/django-openstack/django_openstack/api.py @@ -248,7 +248,7 @@ class ServiceCatalogException(api_exceptions.ApiException): class VirtualInterface(APIResourceWrapper): - _attrs = ['id','mac_address'] + _attrs = ['id', 'mac_address'] def url_for(request, service_name, admin=False): @@ -358,7 +358,7 @@ def quantum_api(request): else: tenant = settings.QUANTUM_TENANT - return quantum.client.Client(settings.QUANTUM_URL, settings.QUANTUM_PORT, + return quantum.client.Client(settings.QUANTUM_URL, settings.QUANTUM_PORT, False, tenant, 'json') @@ -407,6 +407,7 @@ def snapshot_list_detailed(request): return [Image(i) for i in glance_api(request) .get_images_detailed(filters=filters)] + def snapshot_create(request, instance_id, name): return extras_api(request).snapshots.create(instance_id, name) @@ -659,45 +660,59 @@ def swift_get_object_data(request, container_name, object_name): container = swift_api(request).get_container(container_name) return container.get_object(object_name).stream() + def quantum_list_networks(request): return quantum_api(request).list_networks() + def quantum_network_details(request, network_id): return quantum_api(request).show_network_details(network_id) + def quantum_list_ports(request, network_id): return quantum_api(request).list_ports(network_id) + def quantum_port_details(request, network_id, port_id): return quantum_api(request).show_port_details(network_id, port_id) + def quantum_create_network(request, data): return quantum_api(request).create_network(data) + def quantum_delete_network(request, network_id): return quantum_api(request).delete_network(network_id) + def quantum_update_network(request, network_id, data): return quantum_api(request).update_network(network_id, data) + def quantum_create_port(request, network_id): return quantum_api(request).create_port(network_id) + def quantum_delete_port(request, network_id, port_id): return quantum_api(request).delete_port(network_id, port_id) + def quantum_attach_port(request, network_id, port_id, data): return quantum_api(request).attach_resource(network_id, port_id, data) + def quantum_detach_port(request, network_id, port_id): return quantum_api(request).detach_resource(network_id, port_id) -def quantum_set_port_state(request, network_id, port_id ,data): - return quantum_api(request).set_port_state(network_id, port_id, body) + +def quantum_set_port_state(request, network_id, port_id, data): + return quantum_api(request).set_port_state(network_id, port_id, data) + def quantum_port_attachment(request, network_id, port_id): return quantum_api(request).show_port_attachment(network_id, port_id) + def get_vif_ids(request): vifs = [] attached_vifs = [] @@ -707,32 +722,37 @@ def get_vif_ids(request): ports = quantum_api(request).list_ports(network['id']) # Get port attachments for port in ports['ports']: - port_attachment = quantum_api(request).show_port_attachment(network['id'], port['id']) + port_attachment = quantum_api(request).show_port_attachment( + network['id'], + port['id']) if port_attachment['attachment']: - attached_vifs.append(port_attachment['attachment']['id'].encode('ascii')) + attached_vifs.append( + port_attachment['attachment']['id'].encode('ascii')) # Get all instances instances = server_list(request) # Get virtual interface ids by instance for instance in instances: - instance_vifs = extras_api(request).virtual_interfaces.list(instance.id) + id = instance.id + instance_vifs = extras_api(request).virtual_interfaces.list(id) for vif in instance_vifs: # Check if this VIF is already connected to any port if str(vif.id) in attached_vifs: vifs.append({ - 'id' : vif.id, - 'instance' : instance.id, - 'instance_name' : instance.name, - 'available' : False + 'id': vif.id, + 'instance': instance.id, + 'instance_name': instance.name, + 'available': False }) else: vifs.append({ - 'id' : vif.id, - 'instance' : instance.id, - 'instance_name' : instance.name, - 'available' : True + 'id': vif.id, + 'instance': instance.id, + 'instance_name': instance.name, + 'available': True }) return vifs - + + class GlobalSummary(object): node_resources = ['vcpus', 'disk_size', 'ram_size'] unit_mem_size = {'disk_size': ['GiB', 'TiB'], 'ram_size': ['MiB', 'GiB']} diff --git a/django-openstack/django_openstack/dash/views/networks.py b/django-openstack/django_openstack/dash/views/networks.py index e11d3c4b0..1cca5dac9 100644 --- a/django-openstack/django_openstack/dash/views/networks.py +++ b/django-openstack/django_openstack/dash/views/networks.py @@ -44,9 +44,10 @@ import warnings LOG = logging.getLogger('django_openstack.dash.views.networks') + class CreateNetwork(forms.SelfHandlingForm): name = forms.CharField(required=True, label="Network Name") - + def handle(self, request, data): network_name = data['name'] @@ -63,8 +64,9 @@ class CreateNetwork(forms.SelfHandlingForm): msg = 'Network %s has been created.' % network_name LOG.info(msg) messages.success(request, msg) - return shortcuts.redirect('dash_networks', tenant_id=request.user.tenant) - + return shortcuts.redirect('dash_networks', + tenant_id=request.user.tenant) + class DeleteNetwork(forms.SelfHandlingForm): network = forms.CharField(widget=forms.HiddenInput()) @@ -83,15 +85,16 @@ class DeleteNetwork(forms.SelfHandlingForm): messages.success(request, msg) return shortcuts.redirect(request.build_absolute_uri()) - + class RenameNetwork(forms.SelfHandlingForm): network = forms.CharField(widget=forms.HiddenInput()) new_name = forms.CharField(required=True) - + def handle(self, request, data): try: - LOG.info('Renaming network %s to %s' % (data['network'], data['new_name'])) + LOG.info('Renaming network %s to %s' % + (data['network'], data['new_name'])) send_data = {'network': {'name': '%s' % data['new_name']}} api.quantum_update_network(request, data['network'], send_data) except Exception, e: @@ -99,20 +102,21 @@ class RenameNetwork(forms.SelfHandlingForm): 'Unable to rename network %s: %s' % (data['network'], e.message,)) else: - msg = 'Network %s has been renamed to %s.' % (data['network'], data['new_name']) + msg = 'Network %s has been renamed to %s.' % \ + (data['network'], data['new_name']) LOG.info(msg) messages.success(request, msg) return shortcuts.redirect(request.build_absolute_uri()) - - + + @login_required def index(request, tenant_id): delete_form, delete_handled = DeleteNetwork.maybe_handle(request) - + networks = [] instances = [] - + try: networks_list = api.quantum_list_networks(request) details = [] @@ -121,20 +125,20 @@ def index(request, tenant_id): # Get network details like name and id details = api.quantum_network_details(request, network['id']) networks.append({ - 'name' : details['network']['name'], - 'id' : network['id'], - 'total' : net_stats['total'], - 'available' : net_stats['available'], - 'used' : net_stats['used'], - 'tenant' : tenant_id + 'name': details['network']['name'], + 'id': network['id'], + 'total': net_stats['total'], + 'available': net_stats['available'], + 'used': net_stats['used'], + 'tenant': tenant_id }) - + except Exception, e: messages.error(request, 'Unable to get network list: %s' % e.message) return shortcuts.render_to_response('dash_networks.html', { 'networks': networks, - 'delete_form' : delete_form, + 'delete_form': delete_form, }, context_instance=template.RequestContext(request)) @@ -143,34 +147,34 @@ def create(request, tenant_id): network_form, handled = CreateNetwork.maybe_handle(request) if handled: return shortcuts.redirect('dash_networks', request.user.tenant) - + return shortcuts.render_to_response('dash_network_create.html', { - 'network_form' : network_form + 'network_form': network_form }, context_instance=template.RequestContext(request)) - + @login_required def detail(request, tenant_id, network_id): - delete_port_form, delete_handled = DeletePort.maybe_handle(request) - detach_port_form, detach_handled = DetachPort.maybe_handle(request) + delete_port_form, delete_handled = DeletePort.maybe_handle(request) + detach_port_form, detach_handled = DetachPort.maybe_handle(request) toggle_port_form, port_toggle_handled = TogglePort.maybe_handle(request) - + network = {} - + try: network_details = api.quantum_network_details(request, network_id) network['name'] = network_details['network']['name'] network['id'] = network_id network['ports'] = _get_port_states(request, tenant_id, network_id) except Exception, e: - messages.error(request, 'Unable to get network details: %s' % e.message) + messages.error(request, 'Unable to get network details:%s' % e.message) return shortcuts.render_to_response('dash_networks_detail.html', { 'network': network, - 'tenant' : tenant_id, - 'delete_port_form' : delete_port_form, - 'detach_port_form' : detach_port_form, - 'toggle_port_form' : toggle_port_form + 'tenant': tenant_id, + 'delete_port_form': delete_port_form, + 'detach_port_form': detach_port_form, + 'toggle_port_form': toggle_port_form }, context_instance=template.RequestContext(request)) @@ -178,29 +182,32 @@ def detail(request, tenant_id, network_id): def rename(request, tenant_id, network_id): rename_form, handled = RenameNetwork.maybe_handle(request) network_details = api.quantum_network_details(request, network_id) - + if handled: return shortcuts.redirect('dash_networks', request.user.tenant) - + return shortcuts.render_to_response('dash_network_rename.html', { - 'network' : network_details, - 'rename_form' : rename_form + 'network': network_details, + 'rename_form': rename_form }, context_instance=template.RequestContext(request)) -""" -Helper method to find port states for a network -""" + def _get_port_states(request, tenant_id, network_id): + """ + Helper method to find port states for a network + """ network_ports = [] # Get all vifs for comparison with port attachments vifs = api.get_vif_ids(request) - + # Get all ports on this network ports = api.quantum_list_ports(request, network_id) for port in ports['ports']: - port_details = api.quantum_port_details(request, network_id, port['id']) + port_details = api.quantum_port_details(request, + network_id, port['id']) # Get port attachments - port_attachment = api.quantum_port_attachment(request, network_id, port['id']) + port_attachment = api.quantum_port_attachment(request, + network_id, port['id']) # Find instance the attachment belongs to connected_instance = None if port_attachment['attachment']: @@ -209,17 +216,18 @@ def _get_port_states(request, tenant_id, network_id): connected_instance = vif['instance_name'] break network_ports.append({ - 'id' : port_details['port']['id'], - 'state' : port_details['port']['state'], - 'attachment' : port_attachment['attachment'], - 'instance' : connected_instance + 'id': port_details['port']['id'], + 'state': port_details['port']['state'], + 'attachment': port_attachment['attachment'], + 'instance': connected_instance }) return network_ports -""" -Helper method to calculate statistics for a network -""" + def _calc_network_stats(request, tenant_id, network_id): + """ + Helper method to calculate statistics for a network + """ # Get all ports statistics for the network total = 0 available = 0 @@ -228,10 +236,11 @@ def _calc_network_stats(request, tenant_id, network_id): for port in ports['ports']: total += 1 # Get port attachment - port_attachment = api.quantum_port_attachment(request, network_id, port['id']) + port_attachment = api.quantum_port_attachment(request, + network_id, port['id']) if port_attachment['attachment']: used += 1 else: available += 1 - - return { 'total' : total, 'used' : used, 'available': available } + + return {'total': total, 'used': used, 'available': available} diff --git a/django-openstack/django_openstack/dash/views/ports.py b/django-openstack/django_openstack/dash/views/ports.py index 868b77716..30cbd4a46 100644 --- a/django-openstack/django_openstack/dash/views/ports.py +++ b/django-openstack/django_openstack/dash/views/ports.py @@ -41,38 +41,42 @@ LOG = logging.getLogger('django_openstack.dash.views.ports') class CreatePort(forms.SelfHandlingForm): network = forms.CharField(widget=forms.HiddenInput()) ports_num = forms.IntegerField(required=True, label="Number of Ports") - + def handle(self, request, data): try: - LOG.info('Creating %s ports on network %s' % (data['ports_num'], data['network'])) + LOG.info('Creating %s ports on network %s' % + (data['ports_num'], data['network'])) for i in range(0, data['ports_num']): api.quantum_create_port(request, data['network']) except Exception, e: messages.error(request, 'Unable to create ports on network %s: %s' % - (data['network'], e.message,)) + (data['network'], e.message)) else: - msg = '%s ports created on network %s.' % (data['ports_num'], data['network']) + msg = '%s ports created on network %s.' % \ + (data['ports_num'], data['network']) LOG.info(msg) messages.success(request, msg) - + return shortcuts.redirect(request.build_absolute_uri()) class DeletePort(forms.SelfHandlingForm): network = forms.CharField(widget=forms.HiddenInput()) port = forms.CharField(widget=forms.HiddenInput()) - + def handle(self, request, data): try: - LOG.info('Deleting %s ports on network %s' % (data['port'], data['network'])) + LOG.info('Deleting %s ports on network %s' % + (data['port'], data['network'])) api.quantum_delete_port(request, data['network'], data['port']) except Exception, e: messages.error(request, 'Unable to delete port %s: %s' % (data['port'], e.message,)) else: - msg = 'Port %s deleted from network %s.' % (data['port'], data['network']) + msg = 'Port %s deleted from network %s.' % \ + (data['port'], data['network']) LOG.info(msg) messages.success(request, msg) return shortcuts.redirect(request.build_absolute_uri()) @@ -81,32 +85,36 @@ class DeletePort(forms.SelfHandlingForm): class AttachPort(forms.SelfHandlingForm): network = forms.CharField(widget=forms.HiddenInput()) port = forms.CharField(widget=forms.HiddenInput()) - vif_id = forms.CharField(widget=forms.Select(), label="Select VIF to connect") - + vif_id = forms.CharField(widget=forms.Select(), + label="Select VIF to connect") + def handle(self, request, data): try: - LOG.info('Attaching %s port to VIF %s' % (data['port'], data['vif_id'])) + LOG.info('Attaching %s port to VIF %s' % + (data['port'], data['vif_id'])) body = {'attachment': {'id': '%s' % data['vif_id']}} - api.quantum_attach_resource(request, data['network'], data['port'], body) + api.quantum_attach_port(request, + data['network'], data['port'], body) except Exception, e: messages.error(request, 'Unable to attach port %s to VIF %s: %s' % (data['port'], data['vif_id'], e.message,)) else: - msg = 'Port %s connected to VIF %s.' % (data['port'], data['vif_id']) + msg = 'Port %s connected to VIF %s.' % \ + (data['port'], data['vif_id']) LOG.info(msg) messages.success(request, msg) return shortcuts.redirect(request.build_absolute_uri()) - + class DetachPort(forms.SelfHandlingForm): network = forms.CharField(widget=forms.HiddenInput()) port = forms.CharField(widget=forms.HiddenInput()) - + def handle(self, request, data): try: LOG.info('Detaching port %s' % data['port']) - api.quantum_detach_resource(request, data['network'], data['port']) + api.quantum_detach_port(request, data['network'], data['port']) except Exception, e: messages.error(request, 'Unable to detach port %s: %s' % @@ -122,71 +130,74 @@ class TogglePort(forms.SelfHandlingForm): network = forms.CharField(widget=forms.HiddenInput()) port = forms.CharField(widget=forms.HiddenInput()) state = forms.CharField(widget=forms.HiddenInput()) - + def handle(self, request, data): try: LOG.info('Toggling port state to %s' % data['state']) body = {'port': {'state': '%s' % data['state']}} - api.quantum_set_port_state(request, data['network'], data['port'], body) + api.quantum_set_port_state(request, + data['network'], data['port'], body) except Exception, e: messages.error(request, 'Unable to set port state to %s: %s' % (data['state'], e.message,)) else: - msg = 'Port %s state set to %s.' % (data['port'],data['state']) + msg = 'Port %s state set to %s.' % (data['port'], data['state']) LOG.info(msg) messages.success(request, msg) return shortcuts.redirect(request.build_absolute_uri()) - + @login_required def create(request, tenant_id, network_id): - create_form, handled = CreatePort.maybe_handle(request) - + create_form, handled = CreatePort.maybe_handle(request) + if handled: return shortcuts.redirect( - 'dash_networks_detail', - tenant_id=request.user.tenant, + 'dash_networks_detail', + tenant_id=request.user.tenant, network_id=network_id ) - + return shortcuts.render_to_response('dash_ports_create.html', { - 'network_id' : network_id, - 'create_form' : create_form + 'network_id': network_id, + 'create_form': create_form }, context_instance=template.RequestContext(request)) @login_required def attach(request, tenant_id, network_id, port_id): - attach_form, handled = AttachPort.maybe_handle(request) - + attach_form, handled = AttachPort.maybe_handle(request) + if handled: - return shortcuts.redirect('dash_networks_detail', request.user.tenant, network_id) - + return shortcuts.redirect('dash_networks_detail', + request.user.tenant, network_id) + # Get all avaliable vifs vifs = _get_available_vifs(request) - + return shortcuts.render_to_response('dash_port_attach.html', { - 'network' : network_id, - 'port' : port_id, - 'attach_form' : attach_form, - 'vifs' : vifs, + 'network': network_id, + 'port': port_id, + 'attach_form': attach_form, + 'vifs': vifs, }, context_instance=template.RequestContext(request)) -""" -Method to get a list of available virtual interfaces -""" def _get_available_vifs(request): + """ + Method to get a list of available virtual interfaces + """ vif_choices = [] vifs = api.get_vif_ids(request) - + for vif in vifs: if vif['available']: - name = "Instance %s VIF %s" % (str(vif['instance_name']), str(vif['id'])) + name = "Instance %s VIF %s" % \ + (str(vif['instance_name']), str(vif['id'])) vif_choices.append({ - 'name' : str(name), - 'id' : str(vif['id']) + 'name': str(name), + 'id': str(vif['id']) }) return vif_choices diff --git a/django-openstack/django_openstack/tests/view_tests/dash/network_tests.py b/django-openstack/django_openstack/tests/view_tests/dash/network_tests.py index e207b8782..eeb7a23e1 100644 --- a/django-openstack/django_openstack/tests/view_tests/dash/network_tests.py +++ b/django-openstack/django_openstack/tests/view_tests/dash/network_tests.py @@ -6,42 +6,47 @@ from django_openstack.tests.view_tests import base from mox import IgnoreArg, IsA import quantum.client + class NetworkViewTests(base.BaseViewTests): def setUp(self): super(NetworkViewTests, self).setUp() self.network = {} self.network['networks'] = [] - self.network['networks'].append({'id' : 'n1'}) - self.network_details = {'network' : {'name' : 'test_network'}} + self.network['networks'].append({'id': 'n1'}) + self.network_details = {'network': {'name': 'test_network'}} self.ports = {} self.ports['ports'] = [] - self.ports['ports'].append({'id' : 'p1'}) + self.ports['ports'].append({'id': 'p1'}) self.port_details = { - 'port' : { - 'id' : 'p1', - 'state' : 'DOWN' + 'port': { + 'id': 'p1', + 'state': 'DOWN' } } self.port_attachment = { - 'attachment' : { - 'id' : 'vif1' + 'attachment': { + 'id': 'vif1' } } - self.vifs = [{ 'id' : 'vif1' }] - + self.vifs = [{'id': 'vif1'}] + def test_network_index(self): self.mox.StubOutWithMock(api, 'quantum_list_networks') - api.quantum_list_networks(IsA(http.HttpRequest)).AndReturn(self.network) - + api.quantum_list_networks(IsA(http.HttpRequest)).\ + AndReturn(self.network) + self.mox.StubOutWithMock(api, 'quantum_network_details') - api.quantum_network_details(IsA(http.HttpRequest), 'n1').AndReturn(self.network_details) - + api.quantum_network_details(IsA(http.HttpRequest), + 'n1').AndReturn(self.network_details) + self.mox.StubOutWithMock(api, 'quantum_list_ports') - api.quantum_list_ports(IsA(http.HttpRequest), 'n1').AndReturn(self.ports) - + api.quantum_list_ports(IsA(http.HttpRequest), + 'n1').AndReturn(self.ports) + self.mox.StubOutWithMock(api, 'quantum_port_attachment') - api.quantum_port_attachment(IsA(http.HttpRequest), 'n1', 'p1').AndReturn(self.port_attachment) - + api.quantum_port_attachment(IsA(http.HttpRequest), + 'n1', 'p1').AndReturn(self.port_attachment) + self.mox.ReplayAll() res = self.client.get(reverse('dash_networks', args=['tenant'])) @@ -49,29 +54,29 @@ class NetworkViewTests(base.BaseViewTests): self.assertTemplateUsed(res, 'dash_networks.html') self.assertIn('networks', res.context) networks = res.context['networks'] - + self.assertEqual(len(networks), 1) self.assertEqual(networks[0]['name'], 'test_network') self.assertEqual(networks[0]['id'], 'n1') self.assertEqual(networks[0]['total'], 1) self.assertEqual(networks[0]['used'], 1) self.assertEqual(networks[0]['available'], 0) - + self.mox.VerifyAll() - + def test_network_create(self): self.mox.StubOutWithMock(api, "quantum_create_network") api.quantum_create_network(IsA(http.HttpRequest), dict).AndReturn(True) - + self.mox.ReplayAll() - + formData = {'name': 'Test', 'method': 'CreateNetwork'} res = self.client.post(reverse('dash_network_create', args=[self.request.user.tenant]), formData) - + self.assertRedirectsNoFollow(res, reverse('dash_networks', args=[self.request.user.tenant])) self.mox.VerifyAll() @@ -79,47 +84,56 @@ class NetworkViewTests(base.BaseViewTests): def test_network_delete(self): self.mox.StubOutWithMock(api, "quantum_delete_network") api.quantum_delete_network(IsA(http.HttpRequest), 'n1').AndReturn(True) - + self.mox.StubOutWithMock(api, 'quantum_list_networks') - api.quantum_list_networks(IsA(http.HttpRequest)).AndReturn(self.network) - + api.quantum_list_networks(IsA(http.HttpRequest)).\ + AndReturn(self.network) + self.mox.StubOutWithMock(api, 'quantum_network_details') - api.quantum_network_details(IsA(http.HttpRequest), 'n1').AndReturn(self.network_details) - + api.quantum_network_details(IsA(http.HttpRequest), + 'n1').AndReturn(self.network_details) + self.mox.StubOutWithMock(api, 'quantum_list_ports') - api.quantum_list_ports(IsA(http.HttpRequest), 'n1').AndReturn(self.ports) - + api.quantum_list_ports(IsA(http.HttpRequest), + 'n1').AndReturn(self.ports) + self.mox.StubOutWithMock(api, 'quantum_port_attachment') - api.quantum_port_attachment(IsA(http.HttpRequest), 'n1', 'p1').AndReturn(self.port_attachment) - + api.quantum_port_attachment(IsA(http.HttpRequest), + 'n1', 'p1').AndReturn(self.port_attachment) + self.mox.ReplayAll() - + formData = {'id': 'n1', 'method': 'DeleteNetwork'} res = self.client.post(reverse('dash_networks', args=[self.request.user.tenant]), formData) - + def test_network_rename(self): self.mox.StubOutWithMock(api, "quantum_update_network") - api.quantum_update_network(IsA(http.HttpRequest), 'n1', dict).AndReturn(True) - + api.quantum_update_network(IsA(http.HttpRequest), + 'n1', dict).AndReturn(True) + self.mox.StubOutWithMock(api, 'quantum_list_networks') - api.quantum_list_networks(IsA(http.HttpRequest)).AndReturn(self.network) - + api.quantum_list_networks(IsA(http.HttpRequest)).\ + AndReturn(self.network) + self.mox.StubOutWithMock(api, 'quantum_network_details') - api.quantum_network_details(IsA(http.HttpRequest), 'n1').AndReturn(self.network_details) - + api.quantum_network_details(IsA(http.HttpRequest), + 'n1').AndReturn(self.network_details) + self.mox.StubOutWithMock(api, 'quantum_list_ports') - api.quantum_list_ports(IsA(http.HttpRequest), 'n1').AndReturn(self.ports) - + api.quantum_list_ports(IsA(http.HttpRequest), + 'n1').AndReturn(self.ports) + self.mox.StubOutWithMock(api, 'quantum_port_attachment') - api.quantum_port_attachment(IsA(http.HttpRequest), 'n1', 'p1').AndReturn(self.port_attachment) - + api.quantum_port_attachment(IsA(http.HttpRequest), + 'n1', 'p1').AndReturn(self.port_attachment) + self.mox.ReplayAll() - - formData = {'new_name' : 'Test1', + + formData = {'new_name': 'Test1', 'method': 'RenameNetwork'} res = self.client.post(reverse('dash_network_rename', @@ -128,30 +142,35 @@ class NetworkViewTests(base.BaseViewTests): def test_network_details(self): self.mox.StubOutWithMock(api, 'quantum_network_details') - api.quantum_network_details(IsA(http.HttpRequest), 'n1').AndReturn(self.network_details) - + api.quantum_network_details(IsA(http.HttpRequest), + 'n1').AndReturn(self.network_details) + self.mox.StubOutWithMock(api, 'quantum_list_ports') - api.quantum_list_ports(IsA(http.HttpRequest), 'n1').AndReturn(self.ports) - + api.quantum_list_ports(IsA(http.HttpRequest), + 'n1').AndReturn(self.ports) + self.mox.StubOutWithMock(api, 'quantum_port_attachment') - api.quantum_port_attachment(IsA(http.HttpRequest), 'n1', 'p1').AndReturn(self.port_attachment) + api.quantum_port_attachment(IsA(http.HttpRequest), + 'n1', 'p1').AndReturn(self.port_attachment) self.mox.StubOutWithMock(api, 'quantum_port_details') - api.quantum_port_details(IsA(http.HttpRequest), 'n1', 'p1').AndReturn(self.port_details) - + api.quantum_port_details(IsA(http.HttpRequest), + 'n1', 'p1').AndReturn(self.port_details) + self.mox.StubOutWithMock(api, 'get_vif_ids') api.get_vif_ids(IsA(http.HttpRequest)).AndReturn(self.vifs) - + self.mox.ReplayAll() - - res = self.client.get(reverse('dash_networks_detail', args=['tenant', 'n1'])) + + res = self.client.get(reverse('dash_networks_detail', + args=['tenant', 'n1'])) self.assertTemplateUsed(res, 'dash_networks_detail.html') self.assertIn('network', res.context) - + network = res.context['network'] self.assertEqual(network['name'], 'test_network') self.assertEqual(network['id'], 'n1') - + self.mox.VerifyAll() diff --git a/django-openstack/django_openstack/tests/view_tests/dash/port_tests.py b/django-openstack/django_openstack/tests/view_tests/dash/port_tests.py index 79d8157ed..1ea070332 100644 --- a/django-openstack/django_openstack/tests/view_tests/dash/port_tests.py +++ b/django-openstack/django_openstack/tests/view_tests/dash/port_tests.py @@ -6,6 +6,7 @@ from django_openstack.tests.view_tests import base from mox import IgnoreArg, IsA import quantum.client + class PortViewTests(base.BaseViewTests): def setUp(self): super(PortViewTests, self).setUp() @@ -13,9 +14,9 @@ class PortViewTests(base.BaseViewTests): def test_port_create(self): self.mox.StubOutWithMock(api, "quantum_create_port") api.quantum_create_port(IsA(http.HttpRequest), 'n1').AndReturn(True) - - formData = {'ports_num' : 1, - 'network' : 'n1', + + formData = {'ports_num': 1, + 'network': 'n1', 'method': 'CreatePort'} self.mox.StubOutWithMock(messages, 'success') @@ -26,14 +27,16 @@ class PortViewTests(base.BaseViewTests): formData) self.assertRedirectsNoFollow(res, reverse('dash_networks_detail', - args=[self.request.user.tenant, "n1"])) + args=[self.request.user.tenant, + "n1"])) def test_port_delete(self): self.mox.StubOutWithMock(api, "quantum_delete_port") - api.quantum_delete_port(IsA(http.HttpRequest), 'n1', 'p1').AndReturn(True) - - formData = {'port' : 'p1', - 'network' : 'n1', + api.quantum_delete_port(IsA(http.HttpRequest), + 'n1', 'p1').AndReturn(True) + + formData = {'port': 'p1', + 'network': 'n1', 'method': 'DeletePort'} self.mox.StubOutWithMock(messages, 'success') @@ -43,14 +46,14 @@ class PortViewTests(base.BaseViewTests): args=[self.request.user.tenant, "n1"]), formData) - def test_port_attach(self): self.mox.StubOutWithMock(api, "quantum_attach_port") - api.quantum_attach_port(IsA(http.HttpRequest), 'n1', 'p1', dict).AndReturn(True) - - formData = {'port' : 'p1', - 'network' : 'n1', - 'vif_id' : 'v1', + api.quantum_attach_port(IsA(http.HttpRequest), + 'n1', 'p1', dict).AndReturn(True) + + formData = {'port': 'p1', + 'network': 'n1', + 'vif_id': 'v1', 'method': 'AttachPort'} self.mox.StubOutWithMock(messages, 'success') @@ -61,14 +64,16 @@ class PortViewTests(base.BaseViewTests): formData) self.assertRedirectsNoFollow(res, reverse('dash_networks_detail', - args=[self.request.user.tenant, "n1"])) + args=[self.request.user.tenant, + "n1"])) def test_port_detach(self): self.mox.StubOutWithMock(api, "quantum_detach_port") - api.quantum_detach_port(IsA(http.HttpRequest), 'n1', 'p1').AndReturn(True) - - formData = {'port' : 'p1', - 'network' : 'n1', + api.quantum_detach_port(IsA(http.HttpRequest), + 'n1', 'p1').AndReturn(True) + + formData = {'port': 'p1', + 'network': 'n1', 'method': 'DetachPort'} self.mox.StubOutWithMock(messages, 'success')