From 7f3267f502413bb44cb35c8e03a24557257a7212 Mon Sep 17 00:00:00 2001 From: Rob Cresswell Date: Tue, 3 Nov 2015 14:46:22 +0900 Subject: [PATCH] Separate Ports tests from Networks tests This patch separates the Ports tests from the Networks tests files due to file bloat. Similar patches will also split Subnets and Agents tests to make them more manageable. I've chosen to keep these patches separate so as to make them more easily reviewable. There are separate patches to improve the navigation, tab the Networks details page, and add more content to Port edit/create. Partial-Bug: 1514048 Change-Id: Ida677f503c22de6d1160f2c972af3f99c04ee389 --- .../dashboards/admin/networks/ports/tests.py | 442 ++++++++++++++++++ .../dashboards/admin/networks/tests.py | 425 ----------------- .../project/networks/ports/tests.py | 197 ++++++++ .../dashboards/project/networks/tests.py | 175 ------- 4 files changed, 639 insertions(+), 600 deletions(-) create mode 100644 openstack_dashboard/dashboards/admin/networks/ports/tests.py create mode 100644 openstack_dashboard/dashboards/project/networks/ports/tests.py diff --git a/openstack_dashboard/dashboards/admin/networks/ports/tests.py b/openstack_dashboard/dashboards/admin/networks/ports/tests.py new file mode 100644 index 0000000000..a85139fbe0 --- /dev/null +++ b/openstack_dashboard/dashboards/admin/networks/ports/tests.py @@ -0,0 +1,442 @@ +# Copyright 2015 Cisco Systems, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from django.core.urlresolvers import reverse +from django import http + +from mox3.mox import IsA # noqa + +from openstack_dashboard import api +from openstack_dashboard.test import helpers as test + +DETAIL_URL = 'horizon:admin:networks:ports:detail' + +NETWORKS_INDEX_URL = reverse('horizon:admin:networks:index') +NETWORKS_DETAIL_URL = 'horizon:admin:networks:detail' + + +class NetworkPortTests(test.BaseAdminViewTests): + + @test.create_stubs({api.neutron: ('port_get', + 'is_extension_supported',)}) + def test_port_detail(self): + self._test_port_detail() + + @test.create_stubs({api.neutron: ('port_get', + 'is_extension_supported',)}) + def test_port_detail_with_mac_learning(self): + self._test_port_detail(mac_learning=True) + + def _test_port_detail(self, mac_learning=False): + port = self.ports.first() + api.neutron.port_get(IsA(http.HttpRequest), port.id)\ + .AndReturn(self.ports.first()) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'mac-learning')\ + .MultipleTimes().AndReturn(mac_learning) + self.mox.ReplayAll() + + res = self.client.get(reverse(DETAIL_URL, args=[port.id])) + + self.assertTemplateUsed(res, 'project/networks/ports/detail.html') + self.assertEqual(res.context['port'].id, port.id) + + @test.create_stubs({api.neutron: ('port_get',)}) + def test_port_detail_exception(self): + port = self.ports.first() + api.neutron.port_get(IsA(http.HttpRequest), port.id)\ + .AndRaise(self.exceptions.neutron) + + self.mox.ReplayAll() + + res = self.client.get(reverse(DETAIL_URL, args=[port.id])) + + redir_url = NETWORKS_INDEX_URL + self.assertRedirectsNoFollow(res, redir_url) + + @test.create_stubs({api.neutron: ('network_get', + 'is_extension_supported',)}) + def test_port_create_get(self): + self._test_port_create_get() + + @test.create_stubs({api.neutron: ('network_get', + 'is_extension_supported',)}) + def test_port_create_get_with_mac_learning(self): + self._test_port_create_get(mac_learning=True) + + def _test_port_create_get(self, mac_learning=False, binding=False): + network = self.networks.first() + api.neutron.network_get(IsA(http.HttpRequest), + network.id)\ + .AndReturn(self.networks.first()) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'binding')\ + .AndReturn(binding) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'mac-learning')\ + .AndReturn(mac_learning) + self.mox.ReplayAll() + + url = reverse('horizon:admin:networks:addport', + args=[network.id]) + res = self.client.get(url) + + self.assertTemplateUsed(res, 'admin/networks/ports/create.html') + + @test.create_stubs({api.neutron: ('network_get', + 'is_extension_supported', + 'port_create',)}) + def test_port_create_post(self): + self._test_port_create_post() + + @test.create_stubs({api.neutron: ('network_get', + 'is_extension_supported', + 'port_create',)}) + def test_port_create_post_with_mac_learning(self): + self._test_port_create_post(mac_learning=True, binding=False) + + def _test_port_create_post(self, mac_learning=False, binding=False): + network = self.networks.first() + port = self.ports.first() + api.neutron.network_get(IsA(http.HttpRequest), + network.id)\ + .AndReturn(self.networks.first()) + api.neutron.network_get(IsA(http.HttpRequest), + network.id)\ + .AndReturn(self.networks.first()) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'binding')\ + .AndReturn(binding) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'mac-learning')\ + .AndReturn(mac_learning) + extension_kwargs = {} + if binding: + extension_kwargs['binding__vnic_type'] = \ + port.binding__vnic_type + if mac_learning: + extension_kwargs['mac_learning_enabled'] = True + api.neutron.port_create(IsA(http.HttpRequest), + tenant_id=network.tenant_id, + network_id=network.id, + name=port.name, + admin_state_up=port.admin_state_up, + device_id=port.device_id, + device_owner=port.device_owner, + binding__host_id=port.binding__host_id, + **extension_kwargs)\ + .AndReturn(port) + self.mox.ReplayAll() + + form_data = {'network_id': port.network_id, + 'network_name': network.name, + 'name': port.name, + 'admin_state': port.admin_state_up, + 'device_id': port.device_id, + 'device_owner': port.device_owner, + 'binding__host_id': port.binding__host_id} + if binding: + form_data['binding__vnic_type'] = port.binding__vnic_type + if mac_learning: + form_data['mac_state'] = True + url = reverse('horizon:admin:networks:addport', + args=[port.network_id]) + res = self.client.post(url, form_data) + + self.assertNoFormErrors(res) + redir_url = reverse(NETWORKS_DETAIL_URL, args=[port.network_id]) + self.assertRedirectsNoFollow(res, redir_url) + + @test.create_stubs({api.neutron: ('network_get', + 'port_create', + 'is_extension_supported',)}) + def test_port_create_post_exception(self): + self._test_port_create_post_exception() + + @test.create_stubs({api.neutron: ('network_get', + 'port_create', + 'is_extension_supported',)}) + def test_port_create_post_exception_with_mac_learning(self): + self._test_port_create_post_exception(mac_learning=True) + + def _test_port_create_post_exception(self, mac_learning=False, + binding=False): + network = self.networks.first() + port = self.ports.first() + api.neutron.network_get(IsA(http.HttpRequest), + network.id)\ + .AndReturn(self.networks.first()) + api.neutron.network_get(IsA(http.HttpRequest), + network.id)\ + .AndReturn(self.networks.first()) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'binding')\ + .AndReturn(binding) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'mac-learning')\ + .AndReturn(mac_learning) + extension_kwargs = {} + if binding: + extension_kwargs['binding__vnic_type'] = port.binding__vnic_type + if mac_learning: + extension_kwargs['mac_learning_enabled'] = True + api.neutron.port_create(IsA(http.HttpRequest), + tenant_id=network.tenant_id, + network_id=network.id, + name=port.name, + admin_state_up=port.admin_state_up, + device_id=port.device_id, + device_owner=port.device_owner, + binding__host_id=port.binding__host_id, + **extension_kwargs)\ + .AndRaise(self.exceptions.neutron) + self.mox.ReplayAll() + + form_data = {'network_id': port.network_id, + 'network_name': network.name, + 'name': port.name, + 'admin_state': port.admin_state_up, + 'mac_state': True, + 'device_id': port.device_id, + 'device_owner': port.device_owner, + 'binding__host_id': port.binding__host_id} + if binding: + form_data['binding__vnic_type'] = port.binding__vnic_type + if mac_learning: + form_data['mac_learning_enabled'] = True + url = reverse('horizon:admin:networks:addport', + args=[port.network_id]) + res = self.client.post(url, form_data) + + self.assertNoFormErrors(res) + redir_url = reverse(NETWORKS_DETAIL_URL, args=[port.network_id]) + self.assertRedirectsNoFollow(res, redir_url) + + @test.create_stubs({api.neutron: ('port_get', + 'is_extension_supported',)}) + def test_port_update_get(self): + self._test_port_update_get() + + @test.create_stubs({api.neutron: ('port_get', + 'is_extension_supported',)}) + def test_port_update_get_with_mac_learning(self): + self._test_port_update_get(mac_learning=True) + + def _test_port_update_get(self, mac_learning=False, binding=False): + port = self.ports.first() + api.neutron.port_get(IsA(http.HttpRequest), + port.id)\ + .AndReturn(port) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'binding')\ + .AndReturn(binding) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'mac-learning')\ + .AndReturn(mac_learning) + self.mox.ReplayAll() + + url = reverse('horizon:admin:networks:editport', + args=[port.network_id, port.id]) + res = self.client.get(url) + + self.assertTemplateUsed(res, 'admin/networks/ports/update.html') + + @test.create_stubs({api.neutron: ('port_get', + 'is_extension_supported', + 'port_update')}) + def test_port_update_post(self): + self._test_port_update_post() + + @test.create_stubs({api.neutron: ('port_get', + 'is_extension_supported', + 'port_update')}) + def test_port_update_post_with_mac_learning(self): + self._test_port_update_post(mac_learning=True) + + def _test_port_update_post(self, mac_learning=False, binding=False): + port = self.ports.first() + api.neutron.port_get(IsA(http.HttpRequest), port.id)\ + .AndReturn(port) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'binding')\ + .AndReturn(binding) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'mac-learning')\ + .AndReturn(mac_learning) + extension_kwargs = {} + if binding: + extension_kwargs['binding__vnic_type'] = port.binding__vnic_type + if mac_learning: + extension_kwargs['mac_learning_enabled'] = True + api.neutron.port_update(IsA(http.HttpRequest), port.id, + name=port.name, + admin_state_up=port.admin_state_up, + device_id=port.device_id, + device_owner=port.device_owner, + binding__host_id=port.binding__host_id, + **extension_kwargs)\ + .AndReturn(port) + self.mox.ReplayAll() + + form_data = {'network_id': port.network_id, + 'port_id': port.id, + 'name': port.name, + 'admin_state': port.admin_state_up, + 'device_id': port.device_id, + 'device_owner': port.device_owner, + 'binding__host_id': port.binding__host_id} + + if binding: + form_data['binding__vnic_type'] = port.binding__vnic_type + if mac_learning: + form_data['mac_state'] = True + url = reverse('horizon:admin:networks:editport', + args=[port.network_id, port.id]) + res = self.client.post(url, form_data) + + redir_url = reverse(NETWORKS_DETAIL_URL, args=[port.network_id]) + self.assertRedirectsNoFollow(res, redir_url) + + @test.create_stubs({api.neutron: ('port_get', + 'is_extension_supported', + 'port_update')}) + def test_port_update_post_exception(self): + self._test_port_update_post_exception() + + @test.create_stubs({api.neutron: ('port_get', + 'is_extension_supported', + 'port_update')}) + def test_port_update_post_exception_with_mac_learning(self): + self._test_port_update_post_exception(mac_learning=True, binding=False) + + def _test_port_update_post_exception(self, mac_learning=False, + binding=False): + port = self.ports.first() + api.neutron.port_get(IsA(http.HttpRequest), port.id)\ + .AndReturn(port) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'binding')\ + .AndReturn(binding) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'mac-learning')\ + .AndReturn(mac_learning) + extension_kwargs = {} + if binding: + extension_kwargs['binding__vnic_type'] = port.binding__vnic_type + if mac_learning: + extension_kwargs['mac_learning_enabled'] = True + api.neutron.port_update(IsA(http.HttpRequest), port.id, + name=port.name, + admin_state_up=port.admin_state_up, + device_id=port.device_id, + device_owner=port.device_owner, + binding__host_id=port.binding__host_id, + **extension_kwargs)\ + .AndRaise(self.exceptions.neutron) + self.mox.ReplayAll() + + form_data = {'network_id': port.network_id, + 'port_id': port.id, + 'name': port.name, + 'admin_state': port.admin_state_up, + 'device_id': port.device_id, + 'device_owner': port.device_owner, + 'binding__host_id': port.binding__host_id} + if binding: + form_data['binding__vnic_type'] = port.binding__vnic_type + if mac_learning: + form_data['mac_state'] = True + url = reverse('horizon:admin:networks:editport', + args=[port.network_id, port.id]) + res = self.client.post(url, form_data) + + redir_url = reverse(NETWORKS_DETAIL_URL, args=[port.network_id]) + self.assertRedirectsNoFollow(res, redir_url) + + @test.create_stubs({api.neutron: ('port_delete', + 'subnet_list', + 'port_list', + 'is_extension_supported', + 'list_dhcp_agent_hosting_networks',)}) + def test_port_delete(self): + self._test_port_delete() + + @test.create_stubs({api.neutron: ('port_delete', + 'subnet_list', + 'port_list', + 'is_extension_supported', + 'list_dhcp_agent_hosting_networks',)}) + def test_port_delete_with_mac_learning(self): + self._test_port_delete(mac_learning=True) + + def _test_port_delete(self, mac_learning=False): + port = self.ports.first() + network_id = port.network_id + api.neutron.list_dhcp_agent_hosting_networks(IsA(http.HttpRequest), + network_id).\ + AndReturn(self.agents.list()) + api.neutron.port_delete(IsA(http.HttpRequest), port.id) + api.neutron.subnet_list(IsA(http.HttpRequest), network_id=network_id)\ + .AndReturn([self.subnets.first()]) + api.neutron.port_list(IsA(http.HttpRequest), network_id=network_id)\ + .AndReturn([self.ports.first()]) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'mac-learning')\ + .AndReturn(mac_learning) + self.mox.ReplayAll() + + form_data = {'action': 'ports__delete__%s' % port.id} + url = reverse(NETWORKS_DETAIL_URL, args=[network_id]) + res = self.client.post(url, form_data) + + self.assertRedirectsNoFollow(res, url) + + @test.create_stubs({api.neutron: ('port_delete', + 'subnet_list', + 'port_list', + 'is_extension_supported', + 'list_dhcp_agent_hosting_networks',)}) + def test_port_delete_exception(self): + self._test_port_delete_exception() + + @test.create_stubs({api.neutron: ('port_delete', + 'subnet_list', + 'port_list', + 'is_extension_supported', + 'list_dhcp_agent_hosting_networks')}) + def test_port_delete_exception_with_mac_learning(self): + self._test_port_delete_exception(mac_learning=True) + + def _test_port_delete_exception(self, mac_learning=False): + port = self.ports.first() + network_id = port.network_id + api.neutron.list_dhcp_agent_hosting_networks(IsA(http.HttpRequest), + network_id).\ + AndReturn(self.agents.list()) + api.neutron.port_delete(IsA(http.HttpRequest), port.id)\ + .AndRaise(self.exceptions.neutron) + api.neutron.subnet_list(IsA(http.HttpRequest), network_id=network_id)\ + .AndReturn([self.subnets.first()]) + api.neutron.port_list(IsA(http.HttpRequest), network_id=network_id)\ + .AndReturn([self.ports.first()]) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'mac-learning')\ + .AndReturn(mac_learning) + self.mox.ReplayAll() + + form_data = {'action': 'ports__delete__%s' % port.id} + url = reverse(NETWORKS_DETAIL_URL, args=[network_id]) + res = self.client.post(url, form_data) + + self.assertRedirectsNoFollow(res, url) diff --git a/openstack_dashboard/dashboards/admin/networks/tests.py b/openstack_dashboard/dashboards/admin/networks/tests.py index 45381489d6..f8d4a7c7f1 100644 --- a/openstack_dashboard/dashboards/admin/networks/tests.py +++ b/openstack_dashboard/dashboards/admin/networks/tests.py @@ -951,431 +951,6 @@ class NetworkSubnetTests(test.BaseAdminViewTests): self.assertRedirectsNoFollow(res, url) -class NetworkPortTests(test.BaseAdminViewTests): - - @test.create_stubs({api.neutron: ('port_get', - 'is_extension_supported',)}) - def test_port_detail(self): - self._test_port_detail() - - @test.create_stubs({api.neutron: ('port_get', - 'is_extension_supported',)}) - def test_port_detail_with_mac_learning(self): - self._test_port_detail(mac_learning=True) - - def _test_port_detail(self, mac_learning=False): - port = self.ports.first() - api.neutron.port_get(IsA(http.HttpRequest), port.id)\ - .AndReturn(self.ports.first()) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .MultipleTimes().AndReturn(mac_learning) - self.mox.ReplayAll() - - res = self.client.get(reverse('horizon:admin:networks:ports:detail', - args=[port.id])) - - self.assertTemplateUsed(res, 'project/networks/ports/detail.html') - self.assertEqual(res.context['port'].id, port.id) - - @test.create_stubs({api.neutron: ('port_get',)}) - def test_port_detail_exception(self): - port = self.ports.first() - api.neutron.port_get(IsA(http.HttpRequest), port.id)\ - .AndRaise(self.exceptions.neutron) - - self.mox.ReplayAll() - - res = self.client.get(reverse('horizon:admin:networks:ports:detail', - args=[port.id])) - - # admin DetailView is shared with userpanel one, so - # redirection URL on error is userpanel index. - redir_url = reverse('horizon:admin:networks:index') - self.assertRedirectsNoFollow(res, redir_url) - - @test.create_stubs({api.neutron: ('network_get', - 'is_extension_supported',)}) - def test_port_create_get(self): - self._test_port_create_get() - - @test.create_stubs({api.neutron: ('network_get', - 'is_extension_supported',)}) - def test_port_create_get_with_mac_learning(self): - self._test_port_create_get(mac_learning=True) - - def _test_port_create_get(self, mac_learning=False, binding=False): - network = self.networks.first() - api.neutron.network_get(IsA(http.HttpRequest), - network.id)\ - .AndReturn(self.networks.first()) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'binding')\ - .AndReturn(binding) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - self.mox.ReplayAll() - - url = reverse('horizon:admin:networks:addport', - args=[network.id]) - res = self.client.get(url) - - self.assertTemplateUsed(res, 'admin/networks/ports/create.html') - - @test.create_stubs({api.neutron: ('network_get', - 'is_extension_supported', - 'port_create',)}) - def test_port_create_post(self): - self._test_port_create_post() - - @test.create_stubs({api.neutron: ('network_get', - 'is_extension_supported', - 'port_create',)}) - def test_port_create_post_with_mac_learning(self): - self._test_port_create_post(mac_learning=True, binding=False) - - def _test_port_create_post(self, mac_learning=False, binding=False): - network = self.networks.first() - port = self.ports.first() - api.neutron.network_get(IsA(http.HttpRequest), - network.id)\ - .AndReturn(self.networks.first()) - api.neutron.network_get(IsA(http.HttpRequest), - network.id)\ - .AndReturn(self.networks.first()) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'binding')\ - .AndReturn(binding) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - extension_kwargs = {} - if binding: - extension_kwargs['binding__vnic_type'] = \ - port.binding__vnic_type - if mac_learning: - extension_kwargs['mac_learning_enabled'] = True - api.neutron.port_create(IsA(http.HttpRequest), - tenant_id=network.tenant_id, - network_id=network.id, - name=port.name, - admin_state_up=port.admin_state_up, - device_id=port.device_id, - device_owner=port.device_owner, - binding__host_id=port.binding__host_id, - **extension_kwargs)\ - .AndReturn(port) - self.mox.ReplayAll() - - form_data = {'network_id': port.network_id, - 'network_name': network.name, - 'name': port.name, - 'admin_state': port.admin_state_up, - 'device_id': port.device_id, - 'device_owner': port.device_owner, - 'binding__host_id': port.binding__host_id} - if binding: - form_data['binding__vnic_type'] = port.binding__vnic_type - if mac_learning: - form_data['mac_state'] = True - url = reverse('horizon:admin:networks:addport', - args=[port.network_id]) - res = self.client.post(url, form_data) - - self.assertNoFormErrors(res) - redir_url = reverse('horizon:admin:networks:detail', - args=[port.network_id]) - self.assertRedirectsNoFollow(res, redir_url) - - @test.create_stubs({api.neutron: ('network_get', - 'port_create', - 'is_extension_supported',)}) - def test_port_create_post_exception(self): - self._test_port_create_post_exception() - - @test.create_stubs({api.neutron: ('network_get', - 'port_create', - 'is_extension_supported',)}) - def test_port_create_post_exception_with_mac_learning(self): - self._test_port_create_post_exception(mac_learning=True) - - def _test_port_create_post_exception(self, mac_learning=False, - binding=False): - network = self.networks.first() - port = self.ports.first() - api.neutron.network_get(IsA(http.HttpRequest), - network.id)\ - .AndReturn(self.networks.first()) - api.neutron.network_get(IsA(http.HttpRequest), - network.id)\ - .AndReturn(self.networks.first()) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'binding')\ - .AndReturn(binding) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - extension_kwargs = {} - if binding: - extension_kwargs['binding__vnic_type'] = port.binding__vnic_type - if mac_learning: - extension_kwargs['mac_learning_enabled'] = True - api.neutron.port_create(IsA(http.HttpRequest), - tenant_id=network.tenant_id, - network_id=network.id, - name=port.name, - admin_state_up=port.admin_state_up, - device_id=port.device_id, - device_owner=port.device_owner, - binding__host_id=port.binding__host_id, - **extension_kwargs)\ - .AndRaise(self.exceptions.neutron) - self.mox.ReplayAll() - - form_data = {'network_id': port.network_id, - 'network_name': network.name, - 'name': port.name, - 'admin_state': port.admin_state_up, - 'mac_state': True, - 'device_id': port.device_id, - 'device_owner': port.device_owner, - 'binding__host_id': port.binding__host_id} - if binding: - form_data['binding__vnic_type'] = port.binding__vnic_type - if mac_learning: - form_data['mac_learning_enabled'] = True - url = reverse('horizon:admin:networks:addport', - args=[port.network_id]) - res = self.client.post(url, form_data) - - self.assertNoFormErrors(res) - redir_url = reverse('horizon:admin:networks:detail', - args=[port.network_id]) - self.assertRedirectsNoFollow(res, redir_url) - - @test.create_stubs({api.neutron: ('port_get', - 'is_extension_supported',)}) - def test_port_update_get(self): - self._test_port_update_get() - - @test.create_stubs({api.neutron: ('port_get', - 'is_extension_supported',)}) - def test_port_update_get_with_mac_learning(self): - self._test_port_update_get(mac_learning=True) - - def _test_port_update_get(self, mac_learning=False, binding=False): - port = self.ports.first() - api.neutron.port_get(IsA(http.HttpRequest), - port.id)\ - .AndReturn(port) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'binding')\ - .AndReturn(binding) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - self.mox.ReplayAll() - - url = reverse('horizon:admin:networks:editport', - args=[port.network_id, port.id]) - res = self.client.get(url) - - self.assertTemplateUsed(res, 'admin/networks/ports/update.html') - - @test.create_stubs({api.neutron: ('port_get', - 'is_extension_supported', - 'port_update')}) - def test_port_update_post(self): - self._test_port_update_post() - - @test.create_stubs({api.neutron: ('port_get', - 'is_extension_supported', - 'port_update')}) - def test_port_update_post_with_mac_learning(self): - self._test_port_update_post(mac_learning=True) - - def _test_port_update_post(self, mac_learning=False, binding=False): - port = self.ports.first() - api.neutron.port_get(IsA(http.HttpRequest), port.id)\ - .AndReturn(port) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'binding')\ - .AndReturn(binding) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - extension_kwargs = {} - if binding: - extension_kwargs['binding__vnic_type'] = port.binding__vnic_type - if mac_learning: - extension_kwargs['mac_learning_enabled'] = True - api.neutron.port_update(IsA(http.HttpRequest), port.id, - name=port.name, - admin_state_up=port.admin_state_up, - device_id=port.device_id, - device_owner=port.device_owner, - binding__host_id=port.binding__host_id, - **extension_kwargs)\ - .AndReturn(port) - self.mox.ReplayAll() - - form_data = {'network_id': port.network_id, - 'port_id': port.id, - 'name': port.name, - 'admin_state': port.admin_state_up, - 'device_id': port.device_id, - 'device_owner': port.device_owner, - 'binding__host_id': port.binding__host_id} - if binding: - form_data['binding__vnic_type'] = port.binding__vnic_type - if mac_learning: - form_data['mac_state'] = True - url = reverse('horizon:admin:networks:editport', - args=[port.network_id, port.id]) - res = self.client.post(url, form_data) - - redir_url = reverse('horizon:admin:networks:detail', - args=[port.network_id]) - self.assertRedirectsNoFollow(res, redir_url) - - @test.create_stubs({api.neutron: ('port_get', - 'is_extension_supported', - 'port_update')}) - def test_port_update_post_exception(self): - self._test_port_update_post_exception() - - @test.create_stubs({api.neutron: ('port_get', - 'is_extension_supported', - 'port_update')}) - def test_port_update_post_exception_with_mac_learning(self): - self._test_port_update_post_exception(mac_learning=True, binding=False) - - def _test_port_update_post_exception(self, mac_learning=False, - binding=False): - port = self.ports.first() - api.neutron.port_get(IsA(http.HttpRequest), port.id)\ - .AndReturn(port) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'binding')\ - .AndReturn(binding) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - extension_kwargs = {} - if binding: - extension_kwargs['binding__vnic_type'] = port.binding__vnic_type - if mac_learning: - extension_kwargs['mac_learning_enabled'] = True - api.neutron.port_update(IsA(http.HttpRequest), port.id, - name=port.name, - admin_state_up=port.admin_state_up, - device_id=port.device_id, - device_owner=port.device_owner, - binding__host_id=port.binding__host_id, - **extension_kwargs)\ - .AndRaise(self.exceptions.neutron) - self.mox.ReplayAll() - - form_data = {'network_id': port.network_id, - 'port_id': port.id, - 'name': port.name, - 'admin_state': port.admin_state_up, - 'device_id': port.device_id, - 'device_owner': port.device_owner, - 'binding__host_id': port.binding__host_id} - if binding: - form_data['binding__vnic_type'] = port.binding__vnic_type - if mac_learning: - form_data['mac_state'] = True - url = reverse('horizon:admin:networks:editport', - args=[port.network_id, port.id]) - res = self.client.post(url, form_data) - - redir_url = reverse('horizon:admin:networks:detail', - args=[port.network_id]) - self.assertRedirectsNoFollow(res, redir_url) - - @test.create_stubs({api.neutron: ('port_delete', - 'subnet_list', - 'port_list', - 'is_extension_supported', - 'list_dhcp_agent_hosting_networks',)}) - def test_port_delete(self): - self._test_port_delete() - - @test.create_stubs({api.neutron: ('port_delete', - 'subnet_list', - 'port_list', - 'is_extension_supported', - 'list_dhcp_agent_hosting_networks',)}) - def test_port_delete_with_mac_learning(self): - self._test_port_delete(mac_learning=True) - - def _test_port_delete(self, mac_learning=False): - port = self.ports.first() - network_id = port.network_id - api.neutron.list_dhcp_agent_hosting_networks(IsA(http.HttpRequest), - network_id).\ - AndReturn(self.agents.list()) - api.neutron.port_delete(IsA(http.HttpRequest), port.id) - api.neutron.subnet_list(IsA(http.HttpRequest), network_id=network_id)\ - .AndReturn([self.subnets.first()]) - api.neutron.port_list(IsA(http.HttpRequest), network_id=network_id)\ - .AndReturn([self.ports.first()]) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - self.mox.ReplayAll() - - form_data = {'action': 'ports__delete__%s' % port.id} - url = reverse('horizon:admin:networks:detail', - args=[network_id]) - res = self.client.post(url, form_data) - - self.assertRedirectsNoFollow(res, url) - - @test.create_stubs({api.neutron: ('port_delete', - 'subnet_list', - 'port_list', - 'is_extension_supported', - 'list_dhcp_agent_hosting_networks',)}) - def test_port_delete_exception(self): - self._test_port_delete_exception() - - @test.create_stubs({api.neutron: ('port_delete', - 'subnet_list', - 'port_list', - 'is_extension_supported', - 'list_dhcp_agent_hosting_networks')}) - def test_port_delete_exception_with_mac_learning(self): - self._test_port_delete_exception(mac_learning=True) - - def _test_port_delete_exception(self, mac_learning=False): - port = self.ports.first() - network_id = port.network_id - api.neutron.list_dhcp_agent_hosting_networks(IsA(http.HttpRequest), - network_id).\ - AndReturn(self.agents.list()) - api.neutron.port_delete(IsA(http.HttpRequest), port.id)\ - .AndRaise(self.exceptions.neutron) - api.neutron.subnet_list(IsA(http.HttpRequest), network_id=network_id)\ - .AndReturn([self.subnets.first()]) - api.neutron.port_list(IsA(http.HttpRequest), network_id=network_id)\ - .AndReturn([self.ports.first()]) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - self.mox.ReplayAll() - - form_data = {'action': 'ports__delete__%s' % port.id} - url = reverse('horizon:admin:networks:detail', - args=[network_id]) - res = self.client.post(url, form_data) - - self.assertRedirectsNoFollow(res, url) - - class NetworkAgentTests(test.BaseAdminViewTests): @test.create_stubs({api.neutron: ('agent_list', diff --git a/openstack_dashboard/dashboards/project/networks/ports/tests.py b/openstack_dashboard/dashboards/project/networks/ports/tests.py new file mode 100644 index 0000000000..06f3941b9f --- /dev/null +++ b/openstack_dashboard/dashboards/project/networks/ports/tests.py @@ -0,0 +1,197 @@ +# Copyright 2015 Cisco Systems, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from django.core.urlresolvers import reverse +from django import http + +from mox3.mox import IsA # noqa + +from openstack_dashboard import api +from openstack_dashboard.test import helpers as test + +DETAIL_URL = 'horizon:project:networks:ports:detail' + +NETWORKS_INDEX_URL = reverse('horizon:project:networks:index') +NETWORKS_DETAIL_URL = 'horizon:project:networks:detail' + + +class NetworkPortTests(test.TestCase): + + @test.create_stubs({api.neutron: ('port_get', + 'is_extension_supported',)}) + def test_port_detail(self): + self._test_port_detail() + + @test.create_stubs({api.neutron: ('port_get', + 'is_extension_supported',)}) + def test_port_detail_with_mac_learning(self): + self._test_port_detail(mac_learning=True) + + def _test_port_detail(self, mac_learning=False): + port = self.ports.first() + api.neutron.port_get(IsA(http.HttpRequest), port.id)\ + .AndReturn(self.ports.first()) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'mac-learning')\ + .AndReturn(mac_learning) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'mac-learning')\ + .AndReturn(mac_learning) + self.mox.ReplayAll() + + res = self.client.get(reverse(DETAIL_URL, args=[port.id])) + + self.assertTemplateUsed(res, 'project/networks/ports/detail.html') + self.assertEqual(res.context['port'].id, port.id) + + @test.create_stubs({api.neutron: ('port_get',)}) + def test_port_detail_exception(self): + port = self.ports.first() + api.neutron.port_get(IsA(http.HttpRequest), port.id)\ + .AndRaise(self.exceptions.neutron) + + self.mox.ReplayAll() + + res = self.client.get(reverse(DETAIL_URL, args=[port.id])) + + self.assertRedirectsNoFollow(res, NETWORKS_INDEX_URL) + + @test.create_stubs({api.neutron: ('port_get', + 'is_extension_supported',)}) + def test_port_update_get(self): + self._test_port_update_get() + + @test.create_stubs({api.neutron: ('port_get', + 'is_extension_supported',)}) + def test_port_update_get_with_mac_learning(self): + self._test_port_update_get(mac_learning=True) + + def _test_port_update_get(self, mac_learning=False, binding=False): + port = self.ports.first() + api.neutron.port_get(IsA(http.HttpRequest), + port.id)\ + .AndReturn(port) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'binding')\ + .AndReturn(binding) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'mac-learning')\ + .AndReturn(mac_learning) + self.mox.ReplayAll() + + url = reverse('horizon:project:networks:editport', + args=[port.network_id, port.id]) + res = self.client.get(url) + + self.assertTemplateUsed(res, 'project/networks/ports/update.html') + + @test.create_stubs({api.neutron: ('port_get', + 'is_extension_supported', + 'port_update')}) + def test_port_update_post(self): + self._test_port_update_post() + + @test.create_stubs({api.neutron: ('port_get', + 'is_extension_supported', + 'port_update')}) + def test_port_update_post_with_mac_learning(self): + self._test_port_update_post(mac_learning=True) + + def _test_port_update_post(self, mac_learning=False, binding=False): + port = self.ports.first() + api.neutron.port_get(IsA(http.HttpRequest), port.id)\ + .AndReturn(port) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'binding')\ + .AndReturn(binding) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'mac-learning')\ + .AndReturn(mac_learning) + extension_kwargs = {} + if binding: + extension_kwargs['binding__vnic_type'] = port.binding__vnic_type + if mac_learning: + extension_kwargs['mac_learning_enabled'] = True + api.neutron.port_update(IsA(http.HttpRequest), port.id, + name=port.name, + admin_state_up=port.admin_state_up, + **extension_kwargs)\ + .AndReturn(port) + self.mox.ReplayAll() + + form_data = {'network_id': port.network_id, + 'port_id': port.id, + 'name': port.name, + 'admin_state': port.admin_state_up} + if binding: + form_data['binding__vnic_type'] = port.binding__vnic_type + if mac_learning: + form_data['mac_state'] = True + url = reverse('horizon:project:networks:editport', + args=[port.network_id, port.id]) + res = self.client.post(url, form_data) + + redir_url = reverse(NETWORKS_DETAIL_URL, args=[port.network_id]) + self.assertRedirectsNoFollow(res, redir_url) + + @test.create_stubs({api.neutron: ('port_get', + 'is_extension_supported', + 'port_update')}) + def test_port_update_post_exception(self): + self._test_port_update_post_exception() + + @test.create_stubs({api.neutron: ('port_get', + 'is_extension_supported', + 'port_update')}) + def test_port_update_post_exception_with_mac_learning(self): + self._test_port_update_post_exception(mac_learning=True) + + def _test_port_update_post_exception(self, mac_learning=False, + binding=False): + + port = self.ports.first() + api.neutron.port_get(IsA(http.HttpRequest), port.id)\ + .AndReturn(port) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'binding')\ + .AndReturn(binding) + api.neutron.is_extension_supported(IsA(http.HttpRequest), + 'mac-learning')\ + .AndReturn(mac_learning) + extension_kwargs = {} + if binding: + extension_kwargs['binding__vnic_type'] = port.binding__vnic_type + if mac_learning: + extension_kwargs['mac_learning_enabled'] = True + api.neutron.port_update(IsA(http.HttpRequest), port.id, + name=port.name, + admin_state_up=port.admin_state_up, + **extension_kwargs)\ + .AndRaise(self.exceptions.neutron) + self.mox.ReplayAll() + + form_data = {'network_id': port.network_id, + 'port_id': port.id, + 'name': port.name, + 'admin_state': port.admin_state_up} + if binding: + form_data['binding__vnic_type'] = port.binding__vnic_type + if mac_learning: + form_data['mac_state'] = True + url = reverse('horizon:project:networks:editport', + args=[port.network_id, port.id]) + res = self.client.post(url, form_data) + + redir_url = reverse(NETWORKS_DETAIL_URL, args=[port.network_id]) + self.assertRedirectsNoFollow(res, redir_url) diff --git a/openstack_dashboard/dashboards/project/networks/tests.py b/openstack_dashboard/dashboards/project/networks/tests.py index 7bfcd662f0..9635c8584d 100644 --- a/openstack_dashboard/dashboards/project/networks/tests.py +++ b/openstack_dashboard/dashboards/project/networks/tests.py @@ -1961,181 +1961,6 @@ class NetworkSubnetTests(test.TestCase): self.assertRedirectsNoFollow(res, url) -class NetworkPortTests(test.TestCase): - - @test.create_stubs({api.neutron: ('port_get', - 'is_extension_supported',)}) - def test_port_detail(self): - self._test_port_detail() - - @test.create_stubs({api.neutron: ('port_get', - 'is_extension_supported',)}) - def test_port_detail_with_mac_learning(self): - self._test_port_detail(mac_learning=True) - - def _test_port_detail(self, mac_learning=False): - port = self.ports.first() - api.neutron.port_get(IsA(http.HttpRequest), port.id)\ - .AndReturn(self.ports.first()) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - self.mox.ReplayAll() - - res = self.client.get(reverse('horizon:project:networks:ports:detail', - args=[port.id])) - - self.assertTemplateUsed(res, 'project/networks/ports/detail.html') - self.assertEqual(res.context['port'].id, port.id) - - @test.create_stubs({api.neutron: ('port_get',)}) - def test_port_detail_exception(self): - port = self.ports.first() - api.neutron.port_get(IsA(http.HttpRequest), port.id)\ - .AndRaise(self.exceptions.neutron) - - self.mox.ReplayAll() - - res = self.client.get(reverse('horizon:project:networks:ports:detail', - args=[port.id])) - - self.assertRedirectsNoFollow(res, INDEX_URL) - - @test.create_stubs({api.neutron: ('port_get', - 'is_extension_supported',)}) - def test_port_update_get(self): - self._test_port_update_get() - - @test.create_stubs({api.neutron: ('port_get', - 'is_extension_supported',)}) - def test_port_update_get_with_mac_learning(self): - self._test_port_update_get(mac_learning=True) - - def _test_port_update_get(self, mac_learning=False, binding=False): - port = self.ports.first() - api.neutron.port_get(IsA(http.HttpRequest), - port.id)\ - .AndReturn(port) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'binding')\ - .AndReturn(binding) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - self.mox.ReplayAll() - - url = reverse('horizon:project:networks:editport', - args=[port.network_id, port.id]) - res = self.client.get(url) - - self.assertTemplateUsed(res, 'project/networks/ports/update.html') - - @test.create_stubs({api.neutron: ('port_get', - 'is_extension_supported', - 'port_update')}) - def test_port_update_post(self): - self._test_port_update_post() - - @test.create_stubs({api.neutron: ('port_get', - 'is_extension_supported', - 'port_update')}) - def test_port_update_post_with_mac_learning(self): - self._test_port_update_post(mac_learning=True) - - def _test_port_update_post(self, mac_learning=False, binding=False): - port = self.ports.first() - api.neutron.port_get(IsA(http.HttpRequest), port.id)\ - .AndReturn(port) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'binding')\ - .AndReturn(binding) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - extension_kwargs = {} - if binding: - extension_kwargs['binding__vnic_type'] = port.binding__vnic_type - if mac_learning: - extension_kwargs['mac_learning_enabled'] = True - api.neutron.port_update(IsA(http.HttpRequest), port.id, - name=port.name, - admin_state_up=port.admin_state_up, - **extension_kwargs)\ - .AndReturn(port) - self.mox.ReplayAll() - - form_data = {'network_id': port.network_id, - 'port_id': port.id, - 'name': port.name, - 'admin_state': port.admin_state_up} - if binding: - form_data['binding__vnic_type'] = port.binding__vnic_type - if mac_learning: - form_data['mac_state'] = True - url = reverse('horizon:project:networks:editport', - args=[port.network_id, port.id]) - res = self.client.post(url, form_data) - - redir_url = reverse('horizon:project:networks:detail', - args=[port.network_id]) - self.assertRedirectsNoFollow(res, redir_url) - - @test.create_stubs({api.neutron: ('port_get', - 'is_extension_supported', - 'port_update')}) - def test_port_update_post_exception(self): - self._test_port_update_post_exception() - - @test.create_stubs({api.neutron: ('port_get', - 'is_extension_supported', - 'port_update')}) - def test_port_update_post_exception_with_mac_learning(self): - self._test_port_update_post_exception(mac_learning=True) - - def _test_port_update_post_exception(self, mac_learning=False, - binding=False): - - port = self.ports.first() - api.neutron.port_get(IsA(http.HttpRequest), port.id)\ - .AndReturn(port) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'binding')\ - .AndReturn(binding) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - extension_kwargs = {} - if binding: - extension_kwargs['binding__vnic_type'] = port.binding__vnic_type - if mac_learning: - extension_kwargs['mac_learning_enabled'] = True - api.neutron.port_update(IsA(http.HttpRequest), port.id, - name=port.name, - admin_state_up=port.admin_state_up, - **extension_kwargs)\ - .AndRaise(self.exceptions.neutron) - self.mox.ReplayAll() - - form_data = {'network_id': port.network_id, - 'port_id': port.id, - 'name': port.name, - 'admin_state': port.admin_state_up} - if binding: - form_data['binding__vnic_type'] = port.binding__vnic_type - if mac_learning: - form_data['mac_state'] = True - url = reverse('horizon:project:networks:editport', - args=[port.network_id, port.id]) - res = self.client.post(url, form_data) - - redir_url = reverse('horizon:project:networks:detail', - args=[port.network_id]) - self.assertRedirectsNoFollow(res, redir_url) - - class NetworkViewTests(test.TestCase, NetworkStubMixin): def _test_create_button_shown_when_quota_disabled(