From 5e012b45fc028f5a7ec4333be247acf03f9c3eac Mon Sep 17 00:00:00 2001 From: Akihiro Motoki <amotoki@gmail.com> Date: Mon, 14 May 2018 09:18:40 +0900 Subject: [PATCH] Convert admin.networks tests into mock blueprint mock-framework-in-unit-tests Change-Id: Id9b40bf44c5ab46e7af6c5fa1dea96663c38f3dd --- .../dashboards/admin/networks/tests.py | 1055 +++++++++-------- 1 file changed, 550 insertions(+), 505 deletions(-) diff --git a/openstack_dashboard/dashboards/admin/networks/tests.py b/openstack_dashboard/dashboards/admin/networks/tests.py index 68c3b646df..1cb64b9f08 100644 --- a/openstack_dashboard/dashboards/admin/networks/tests.py +++ b/openstack_dashboard/dashboards/admin/networks/tests.py @@ -12,12 +12,12 @@ # License for the specific language governing permissions and limitations # under the License. +import collections -from django import http from django.urls import reverse from django.utils.http import urlunquote -from mox3.mox import IsA +import mock from horizon import forms @@ -32,9 +32,20 @@ INDEX_URL = reverse('horizon:admin:networks:index') class NetworkTests(test.BaseAdminViewTests): - use_mox = True + def _stub_is_extension_supported(self, features): + self._features = features + self._feature_call_counts = collections.defaultdict(int) - @test.create_stubs({api.neutron: ('network_list', + def fake_extension_supported(request, alias): + self._feature_call_counts[alias] += 1 + return self._features[alias] + + self.mock_is_extension_supported.side_effect = fake_extension_supported + + def _check_is_extension_supported(self, expected_count): + self.assertEqual(expected_count, self._feature_call_counts) + + @test.create_mocks({api.neutron: ('network_list', 'list_dhcp_agent_hosting_networks', 'is_extension_supported'), api.keystone: ('tenant_list',), @@ -42,28 +53,15 @@ class NetworkTests(test.BaseAdminViewTests): def test_index(self): tenants = self.tenants.list() quota_data = self.quota_usages.first() - api.neutron.network_list(IsA(http.HttpRequest)) \ - .AndReturn(self.networks.list()) - api.keystone.tenant_list(IsA(http.HttpRequest))\ - .AndReturn([tenants, False]) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network_availability_zone').AndReturn(True) - for network in self.networks.list(): - usage.quotas.tenant_quota_usages( - IsA(http.HttpRequest), tenant_id=network.tenant_id, - targets=('subnet', )).AndReturn(quota_data) - api.neutron.list_dhcp_agent_hosting_networks(IsA(http.HttpRequest), - network.id)\ - .AndReturn(self.agents.list()) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'dhcp_agent_scheduler').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'dhcp_agent_scheduler').AndReturn(True) - self.mox.ReplayAll() + self.mock_network_list.return_value = self.networks.list() + self.mock_tenant_list.return_value = [tenants, False] + self._stub_is_extension_supported( + {'network_availability_zone': True, + 'dhcp_agent_scheduler': True}) + self.mock_tenant_quota_usages.return_value = quota_data + self.mock_list_dhcp_agent_hosting_networks.return_value = \ + self.agents.list() res = self.client.get(INDEX_URL) @@ -71,19 +69,30 @@ class NetworkTests(test.BaseAdminViewTests): networks = res.context['networks_table'].data self.assertItemsEqual(networks, self.networks.list()) - @test.create_stubs({api.neutron: ('network_list', + self.mock_network_list.assert_called_once_with(test.IsHttpRequest()) + self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) + self._check_is_extension_supported( + {'network_availability_zone': 1, + 'dhcp_agent_scheduler': len(self.networks.list()) + 1}) + self.mock_tenant_quota_usages.assert_has_calls( + [mock.call(test.IsHttpRequest(), tenant_id=network.tenant_id, + targets=('subnet', )) + for network in self.networks.list()]) + self.assertEqual(len(self.networks.list()), + self.mock_tenant_quota_usages.call_count) + self.mock_list_dhcp_agent_hosting_networks.assert_has_calls( + [mock.call(test.IsHttpRequest(), network.id) + for network in self.networks.list()]) + self.assertEqual(len(self.networks.list()), + self.mock_list_dhcp_agent_hosting_networks.call_count) + + @test.create_mocks({api.neutron: ('network_list', 'is_extension_supported',)}) def test_index_network_list_exception(self): - api.neutron.network_list(IsA(http.HttpRequest)) \ - .AndRaise(self.exceptions.neutron) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network_availability_zone').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'dhcp_agent_scheduler').AndReturn(True) - - self.mox.ReplayAll() + self.mock_network_list.side_effect = self.exceptions.neutron + self._stub_is_extension_supported( + {'network_availability_zone': True, + 'dhcp_agent_scheduler': True}) res = self.client.get(INDEX_URL) @@ -91,51 +100,26 @@ class NetworkTests(test.BaseAdminViewTests): self.assertEqual(len(res.context['networks_table'].data), 0) self.assertMessageCount(res, error=1) - @test.create_stubs({api.neutron: ('network_get', - 'subnet_list', - 'port_list', - 'show_network_ip_availability', - 'list_dhcp_agent_hosting_networks', - 'is_extension_supported'), - usage.quotas: ('tenant_quota_usages',)}) - def test_network_detail_subnets_tab(self): - self._test_network_detail_subnets_tab() + self.mock_network_list.assert_called_once_with(test.IsHttpRequest()) + self._check_is_extension_supported( + {'network_availability_zone': 1, + 'dhcp_agent_scheduler': 1}) - @test.create_stubs({api.neutron: ('network_get', - 'subnet_list', - 'port_list', - 'is_extension_supported', - 'show_network_ip_availability', - 'list_dhcp_agent_hosting_networks',), - usage.quotas: ('tenant_quota_usages',)}) - def test_network_detail_subnets_tab_with_mac_learning(self): - self._test_network_detail_subnets_tab(mac_learning=True) - - @test.create_stubs({api.neutron: ('network_get', + @test.create_mocks({api.neutron: ('network_get', 'is_extension_supported'), usage.quotas: ('tenant_quota_usages',)}) def test_network_detail_new(self, mac_learning=False): network = self.networks.first() quota_data = self.quota_usages.first() - api.neutron.network_get(IsA(http.HttpRequest), network.id) \ - .MultipleTimes().AndReturn(self.networks.first()) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'network-ip-availability') \ - .AndReturn(True) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning') \ - .AndReturn(mac_learning) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network_availability_zone').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'dhcp_agent_scheduler').AndReturn(True) - usage.quotas.tenant_quota_usages( - IsA(http.HttpRequest), tenant_id=network.tenant_id, - targets=('subnet',)).MultipleTimes().AndReturn(quota_data) - self.mox.ReplayAll() + self.mock_network_get.return_value = network + self.mock_tenant_quota_usages.return_value = quota_data + self._stub_is_extension_supported( + {'network-ip-availability': True, + 'network_availability_zone': True, + 'mac-learning': mac_learning, + 'dhcp_agent_scheduler': True}) + url = urlunquote(reverse('horizon:admin:networks:detail', args=[network.id])) @@ -146,37 +130,44 @@ class NetworkTests(test.BaseAdminViewTests): network.status_label) self.assertTemplateUsed(res, 'horizon/common/_detail.html') + self.assert_mock_multiple_calls_with_same_arguments( + self.mock_network_get, 2, + mock.call(test.IsHttpRequest(), network.id)) + self.mock_tenant_quota_usages.assert_called_once_with( + test.IsHttpRequest(), tenant_id=network.tenant_id, + targets=('subnet',)) + self._check_is_extension_supported( + {'network-ip-availability': 1, + 'network_availability_zone': 1, + 'mac-learning': 1, + 'dhcp_agent_scheduler': 1}) + + def test_network_detail_subnets_tab(self): + self._test_network_detail_subnets_tab() + + def test_network_detail_subnets_tab_with_mac_learning(self): + self._test_network_detail_subnets_tab(mac_learning=True) + + @test.create_mocks({api.neutron: ('network_get', + 'subnet_list', + 'show_network_ip_availability', + 'is_extension_supported'), + usage.quotas: ('tenant_quota_usages',)}) def _test_network_detail_subnets_tab(self, mac_learning=False): network = self.networks.first() ip_availability = self.ip_availability.get() quota_data = self.quota_usages.first() - api.neutron.show_network_ip_availability(IsA(http.HttpRequest), - network.id).\ - MultipleTimes().AndReturn(ip_availability) - api.neutron.network_get(IsA(http.HttpRequest), network.id)\ - .MultipleTimes().AndReturn(self.networks.first()) - api.neutron.subnet_list(IsA(http.HttpRequest), network_id=network.id)\ - .AndReturn([self.subnets.first()]) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network-ip-availability').AndReturn(True) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network-ip-availability').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network_availability_zone').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'dhcp_agent_scheduler').AndReturn(True) - usage.quotas.tenant_quota_usages( - IsA(http.HttpRequest), tenant_id=network.tenant_id, - targets=('subnet',)).MultipleTimes().AndReturn(quota_data) - self.mox.ReplayAll() + self.mock_show_network_ip_availability.return_value = ip_availability + self.mock_network_get.return_value = network + self.mock_subnet_list.return_value = [self.subnets.first()] + self._stub_is_extension_supported( + {'network-ip-availability': True, + 'mac-learning': mac_learning, + 'network_availability_zone': True, + 'dhcp_agent_scheduler': True}) + self.mock_tenant_quota_usages.return_value = quota_data + url = urlunquote(reverse('horizon:admin:networks:subnets_tab', args=[network.id])) res = self.client.get(url) @@ -185,39 +176,40 @@ class NetworkTests(test.BaseAdminViewTests): subnets = res.context['subnets_table'].data self.assertItemsEqual(subnets, [self.subnets.first()]) - @test.create_stubs({api.neutron: ('network_get', - 'subnet_list', + self.mock_show_network_ip_availability.assert_called_once_with( + test.IsHttpRequest(), network.id) + self.assert_mock_multiple_calls_with_same_arguments( + self.mock_network_get, 2, + mock.call(test.IsHttpRequest(), network.id)) + self.mock_subnet_list.assert_called_once_with(test.IsHttpRequest(), + network_id=network.id) + self._check_is_extension_supported( + {'network-ip-availability': 2, + 'mac-learning': 1, + 'network_availability_zone': 1, + 'dhcp_agent_scheduler': 1}) + self.assert_mock_multiple_calls_with_same_arguments( + self.mock_tenant_quota_usages, 3, + mock.call(test.IsHttpRequest(), tenant_id=network.tenant_id, + targets=('subnet',))) + + @test.create_mocks({api.neutron: ('network_get', 'port_list', - 'is_extension_supported', - 'list_dhcp_agent_hosting_networks',), + 'is_extension_supported'), usage.quotas: ('tenant_quota_usages',)}) def test_network_detail_ports_tab(self, mac_learning=False): network = self.networks.first() - api.neutron.network_get(IsA(http.HttpRequest), network.id)\ - .MultipleTimes().AndReturn(self.networks.first()) - api.neutron.port_list(IsA(http.HttpRequest), network_id=network.id)\ - .AndReturn([self.ports.first()]) quota_data = self.neutron_quota_usages.first() - usage.quotas.tenant_quota_usages( - IsA(http.HttpRequest), tenant_id=network.tenant_id, - targets=('port',)).MultipleTimes().AndReturn(quota_data) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network-ip-availability').AndReturn(True) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network_availability_zone').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'dhcp_agent_scheduler').AndReturn(True) - usage.quotas.tenant_quota_usages( - IsA(http.HttpRequest), tenant_id=network.tenant_id, - targets=('subnet',)).MultipleTimes().AndReturn(quota_data) - self.mox.ReplayAll() + self.mock_network_get.return_value = network + self.mock_port_list.return_value = [self.ports.first()] + self.mock_tenant_quota_usages.return_value = quota_data + self._stub_is_extension_supported( + {'network-ip-availability': True, + 'mac-learning': mac_learning, + 'network_availability_zone': True, + 'dhcp_agent_scheduler': True}) + url = reverse('horizon:admin:networks:ports_tab', args=[network.id]) res = self.client.get(urlunquote(url)) @@ -226,40 +218,44 @@ class NetworkTests(test.BaseAdminViewTests): ports = res.context['ports_table'].data self.assertItemsEqual(ports, [self.ports.first()]) - @test.create_stubs({api.neutron: ('network_get', - 'subnet_list', - 'port_list', + self.assert_mock_multiple_calls_with_same_arguments( + self.mock_network_get, 2, + mock.call(test.IsHttpRequest(), network.id)) + self.mock_port_list.assert_called_once_with(test.IsHttpRequest(), + network_id=network.id) + self.assertEqual(3, self.mock_tenant_quota_usages.call_count) + self.mock_tenant_quota_usages.assert_has_calls([ + mock.call(test.IsHttpRequest(), tenant_id=network.tenant_id, + targets=('subnet',)), + mock.call(test.IsHttpRequest(), tenant_id=network.tenant_id, + targets=('port',)), + mock.call(test.IsHttpRequest(), tenant_id=network.tenant_id, + targets=('port',)), + ]) + self._check_is_extension_supported( + {'network-ip-availability': 1, + 'mac-learning': 1, + 'network_availability_zone': 1, + 'dhcp_agent_scheduler': 1}) + + @test.create_mocks({api.neutron: ('network_get', 'is_extension_supported', 'list_dhcp_agent_hosting_networks',), usage.quotas: ('tenant_quota_usages',)}) def test_network_detail_agents_tab(self, mac_learning=False): network = self.networks.first() quota_data = self.quota_usages.first() - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'network-ip-availability') \ - .AndReturn(True) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - api.neutron.list_dhcp_agent_hosting_networks(IsA(http.HttpRequest), - network.id)\ - .AndReturn(self.agents.list()) - api.neutron.network_get(IsA(http.HttpRequest), network.id)\ - .MultipleTimes().AndReturn(self.networks.first()) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'dhcp_agent_scheduler').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network_availability_zone').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'dhcp_agent_scheduler').AndReturn(True) - usage.quotas.tenant_quota_usages( - IsA(http.HttpRequest), tenant_id=network.tenant_id, - targets=('subnet',)).MultipleTimes().AndReturn(quota_data) - self.mox.ReplayAll() + self._stub_is_extension_supported( + {'network-ip-availability': True, + 'mac-learning': mac_learning, + 'network_availability_zone': True, + 'dhcp_agent_scheduler': True}) + self.mock_list_dhcp_agent_hosting_networks.return_value = \ + self.agents.list() + self.mock_network_get.return_value = network + self.mock_tenant_quota_usages.return_value = quota_data + url = reverse('horizon:admin:networks:agents_tab', args=[network.id]) res = self.client.get(urlunquote(url)) @@ -269,47 +265,41 @@ class NetworkTests(test.BaseAdminViewTests): self.assertItemsEqual(result_agents, expected_agents) - @test.create_stubs({api.neutron: ('network_get', - 'subnet_list', - 'port_list', - 'is_extension_supported', - 'show_network_ip_availability', - 'list_dhcp_agent_hosting_networks',)}) + self._check_is_extension_supported( + {'network-ip-availability': 1, + 'mac-learning': 1, + 'network_availability_zone': 1, + 'dhcp_agent_scheduler': 2}) + self.mock_list_dhcp_agent_hosting_networks.assert_called_once_with( + test.IsHttpRequest(), network.id) + self.mock_network_get.assert_called_once_with( + test.IsHttpRequest(), network.id) + self.mock_tenant_quota_usages.assert_called_once_with( + test.IsHttpRequest(), tenant_id=network.tenant_id, + targets=('subnet',)) + def test_network_detail_subnets_tab_network_exception(self): self._test_network_detail_subnets_tab_network_exception() - @test.create_stubs({api.neutron: ('network_get', - 'subnet_list', - 'port_list', - 'is_extension_supported', - 'show_network_ip_availability', - 'list_dhcp_agent_hosting_networks',)}) def test_network_detail_network_exception_with_mac_learning(self): self._test_network_detail_subnets_tab_network_exception( mac_learning=True) + @test.create_mocks({api.neutron: ('network_get', + 'subnet_list', + 'is_extension_supported', + 'show_network_ip_availability')}) def _test_network_detail_subnets_tab_network_exception(self, mac_learning=False): network_id = self.networks.first().id ip_availability = self.ip_availability.get() - api.neutron.show_network_ip_availability(IsA(http.HttpRequest), - network_id).\ - MultipleTimes().AndReturn(ip_availability) - api.neutron.network_get(IsA(http.HttpRequest), network_id)\ - .AndRaise(self.exceptions.neutron) - api.neutron.subnet_list(IsA(http.HttpRequest), network_id=network_id)\ - .AndReturn([self.subnets.first()]) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network-ip-availability').AndReturn(True) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network-ip-availability').AndReturn(True) - self.mox.ReplayAll() + self.mock_show_network_ip_availability.return_value = ip_availability + self.mock_network_get.side_effect = self.exceptions.neutron + self.mock_subnet_list.return_value = [self.subnets.first()] + self._stub_is_extension_supported( + {'network-ip-availability': True, + 'mac-learning': mac_learning}) url = urlunquote(reverse('horizon:admin:networks:subnets_tab', args=[network_id])) @@ -318,52 +308,44 @@ class NetworkTests(test.BaseAdminViewTests): redir_url = INDEX_URL self.assertRedirectsNoFollow(res, redir_url) - @test.create_stubs({api.neutron: ('network_get', - 'subnet_list', - 'port_list', - 'list_dhcp_agent_hosting_networks', - 'is_extension_supported'), - usage.quotas: ('tenant_quota_usages',)}) + self.mock_show_network_ip_availability.assert_called_once_with( + test.IsHttpRequest(), network_id) + self.mock_network_get.assert_called_once_with(test.IsHttpRequest(), + network_id) + self.mock_subnet_list.assert_called_once_with(test.IsHttpRequest(), + network_id=network_id) + self._check_is_extension_supported( + {'network-ip-availability': 2, + 'mac-learning': 1}) + def test_network_detail_subnets_tab_subnet_exception(self): self._test_network_detail_subnets_tab_subnet_exception() - @test.create_stubs({api.neutron: ('network_get', - 'subnet_list', - 'port_list', - 'is_extension_supported', - 'list_dhcp_agent_hosting_networks',), - usage.quotas: ('tenant_quota_usages',)}) def test_network_detail_subnets_tab_subnet_exception_w_mac_learning(self): self._test_network_detail_subnets_tab_subnet_exception( mac_learning=True) + @test.create_mocks({api.neutron: ('network_get', + 'subnet_list', + 'show_network_ip_availability', + 'is_extension_supported'), + usage.quotas: ('tenant_quota_usages',)}) def _test_network_detail_subnets_tab_subnet_exception(self, mac_learning=False): network = self.networks.first() quota_data = self.quota_usages.first() - api.neutron.network_get(IsA(http.HttpRequest), network.id)\ - .MultipleTimes().AndReturn(self.networks.first()) - api.neutron.subnet_list(IsA(http.HttpRequest), network_id=network.id).\ - AndRaise(self.exceptions.neutron) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network-ip-availability').AndReturn(True) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'dhcp_agent_scheduler').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network_availability_zone').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'dhcp_agent_scheduler').AndReturn(True) - usage.quotas.tenant_quota_usages( - IsA(http.HttpRequest), tenant_id=network.tenant_id, - targets=('subnet',)).MultipleTimes().AndReturn(quota_data) - self.mox.ReplayAll() + + self.mock_show_network_ip_availability.return_value = \ + self.ip_availability.get() + self.mock_network_get.return_value = network + self.mock_subnet_list.side_effect = self.exceptions.neutron + self._stub_is_extension_supported( + {'network-ip-availability': True, + 'mac-learning': mac_learning, + 'dhcp_agent_scheduler': True, + 'network_availability_zone': True}) + self.mock_tenant_quota_usages.return_value = quota_data + url = urlunquote(reverse('horizon:admin:networks:subnets_tab', args=[network.id])) res = self.client.get(url) @@ -372,57 +354,50 @@ class NetworkTests(test.BaseAdminViewTests): subnets = res.context['subnets_table'].data self.assertEqual(len(subnets), 0) - @test.create_stubs({api.neutron: ('network_get', - 'subnet_list', - 'port_list', - 'is_extension_supported', - 'show_network_ip_availability', - 'list_dhcp_agent_hosting_networks',), - usage.quotas: ('tenant_quota_usages',)}) + self.mock_show_network_ip_availability.assert_called_once_with( + test.IsHttpRequest(), network.id) + self.assert_mock_multiple_calls_with_same_arguments( + self.mock_network_get, 2, + mock.call(test.IsHttpRequest(), network.id)) + self.mock_subnet_list.assert_called_once_with(test.IsHttpRequest(), + network_id=network.id) + self.assert_mock_multiple_calls_with_same_arguments( + self.mock_tenant_quota_usages, 3, + mock.call(test.IsHttpRequest(), tenant_id=network.tenant_id, + targets=('subnet',))) + self._stub_is_extension_supported( + {'network-ip-availability': 1, + 'mac-learning': 1, + 'dhcp_agent_scheduler': 2, + 'network_availability_zone': 1}) + def test_network_detail_port_exception(self): self._test_network_detail_subnets_tab_port_exception() - @test.create_stubs({api.neutron: ('network_get', - 'subnet_list', - 'port_list', - 'is_extension_supported', - 'show_network_ip_availability', - 'list_dhcp_agent_hosting_networks',), - usage.quotas: ('tenant_quota_usages',)}) def test_network_detail_subnets_tab_port_exception_with_mac_learning(self): self._test_network_detail_subnets_tab_port_exception(mac_learning=True) + @test.create_mocks({api.neutron: ('network_get', + 'subnet_list', + 'is_extension_supported', + 'show_network_ip_availability'), + usage.quotas: ('tenant_quota_usages',)}) def _test_network_detail_subnets_tab_port_exception(self, mac_learning=False): network = self.networks.first() ip_availability = self.ip_availability.get() quota_data = self.quota_usages.first() - api.neutron.show_network_ip_availability(IsA(http.HttpRequest), - network.id). \ - MultipleTimes().AndReturn(ip_availability) - api.neutron.network_get(IsA(http.HttpRequest), network.id)\ - .MultipleTimes().AndReturn(self.networks.first()) - api.neutron.subnet_list(IsA(http.HttpRequest), network_id=network.id).\ - AndReturn([self.subnets.first()]) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network-ip-availability').AndReturn(True) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'mac-learning')\ - .AndReturn(mac_learning) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network-ip-availability').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network_availability_zone').AndReturn(True) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'dhcp_agent_scheduler')\ - .AndReturn(True) - usage.quotas.tenant_quota_usages( - IsA(http.HttpRequest), tenant_id=network.tenant_id, - targets=('subnet',)).MultipleTimes().AndReturn(quota_data) - self.mox.ReplayAll() + + self.mock_show_network_ip_availability.return_value = ip_availability + self.mock_network_get.return_value = network + self.mock_subnet_list.return_value = [self.subnets.first()] + self._stub_is_extension_supported( + {'network-ip-availability': True, + 'mac-learning': mac_learning, + 'network_availability_zone': True, + 'dhcp_agent_scheduler': True}) + self.mock_tenant_quota_usages.return_value = quota_data + url = urlunquote(reverse('horizon:admin:networks:subnets_tab', args=[network.id])) res = self.client.get(url) @@ -431,22 +406,45 @@ class NetworkTests(test.BaseAdminViewTests): subnets = res.context['subnets_table'].data self.assertItemsEqual(subnets, [self.subnets.first()]) - @test.create_stubs({api.neutron: ('is_extension_supported',), + self.mock_show_network_ip_availability.assert_called_once_with( + test.IsHttpRequest(), network.id) + self.assert_mock_multiple_calls_with_same_arguments( + self.mock_network_get, 2, + mock.call(test.IsHttpRequest(), network.id)) + self.mock_subnet_list.assert_called_once_with(test.IsHttpRequest(), + network_id=network.id) + self._check_is_extension_supported( + {'network-ip-availability': 2, + 'mac-learning': 1, + 'network_availability_zone': 1, + 'dhcp_agent_scheduler': 1}) + self.assert_mock_multiple_calls_with_same_arguments( + self.mock_tenant_quota_usages, 3, + mock.call(test.IsHttpRequest(), tenant_id=network.tenant_id, + targets=('subnet',))) + + @test.create_mocks({api.neutron: ('is_extension_supported',), api.keystone: ('tenant_list',)}) def test_network_create_get(self): tenants = self.tenants.list() - api.keystone.tenant_list(IsA( - http.HttpRequest)).AndReturn([tenants, False]) - api.neutron.is_extension_supported(IsA(http.HttpRequest), 'provider').\ - AndReturn(True) - self.mox.ReplayAll() + self.mock_tenant_list.return_value = [tenants, False] + self._stub_is_extension_supported( + {'provider': True, + 'network_availability_zone': False, + 'subnet_allocation': False}) url = reverse('horizon:admin:networks:create') res = self.client.get(url) self.assertTemplateUsed(res, 'horizon/common/_workflow_base.html') - @test.create_stubs({api.neutron: ('network_create', + self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) + self._check_is_extension_supported( + {'provider': 1, + 'network_availability_zone': 2, + 'subnet_allocation': 1}) + + @test.create_mocks({api.neutron: ('network_create', 'is_extension_supported', 'subnetpool_list'), api.keystone: ('tenant_list',)}) @@ -455,29 +453,13 @@ class NetworkTests(test.BaseAdminViewTests): tenant_id = self.tenants.first().id network = self.networks.first() - api.keystone.tenant_list(IsA(http.HttpRequest))\ - .AndReturn([tenants, False]) - params = {'name': network.name, - 'tenant_id': tenant_id, - 'admin_state_up': network.admin_state_up, - 'router:external': True, - 'shared': True, - 'provider:network_type': 'local', - 'with_subnet': False} - api.neutron.is_extension_supported(IsA(http.HttpRequest), 'provider').\ - MultipleTimes().AndReturn(True) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'network_availability_zone').\ - MultipleTimes().AndReturn(False) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'subnet_allocation').\ - MultipleTimes().AndReturn(True) - api.neutron.subnetpool_list(IsA(http.HttpRequest)).\ - AndReturn(self.subnetpools.list()) - api.neutron.network_create(IsA(http.HttpRequest), **params)\ - .AndReturn(network) - - self.mox.ReplayAll() + self.mock_tenant_list.return_value = [tenants, False] + self._stub_is_extension_supported( + {'provider': True, + 'network_availability_zone': False, + 'subnet_allocation': True}) + self.mock_subnetpool_list.return_value = self.subnetpools.list() + self.mock_network_create.return_value = network form_data = {'tenant_id': tenant_id, 'name': network.name, @@ -491,7 +473,22 @@ class NetworkTests(test.BaseAdminViewTests): self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api.neutron: ('network_create', + self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) + self.mock_subnetpool_list.assert_called_once_with(test.IsHttpRequest()) + params = {'name': network.name, + 'tenant_id': tenant_id, + 'admin_state_up': network.admin_state_up, + 'router:external': True, + 'shared': True, + 'provider:network_type': 'local'} + self.mock_network_create.assert_called_once_with(test.IsHttpRequest(), + **params) + self._check_is_extension_supported( + {'provider': 3, + 'network_availability_zone': 2, + 'subnet_allocation': 1}) + + @test.create_mocks({api.neutron: ('network_create', 'is_extension_supported', 'list_availability_zones', 'subnetpool_list'), @@ -501,33 +498,15 @@ class NetworkTests(test.BaseAdminViewTests): tenant_id = self.tenants.first().id network = self.networks.first() - api.keystone.tenant_list(IsA(http.HttpRequest))\ - .AndReturn([tenants, False]) - params = {'name': network.name, - 'tenant_id': tenant_id, - 'admin_state_up': network.admin_state_up, - 'router:external': True, - 'shared': True, - 'provider:network_type': 'local', - 'with_subnet': False, - 'az_hints': ['nova']} - api.neutron.is_extension_supported(IsA(http.HttpRequest), 'provider').\ - MultipleTimes().AndReturn(True) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'network_availability_zone').\ - MultipleTimes().AndReturn(True) - api.neutron.list_availability_zones(IsA(http.HttpRequest), - "network", "available")\ - .AndReturn(self.neutron_availability_zones.list()) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'subnet_allocation').\ - MultipleTimes().AndReturn(True) - api.neutron.subnetpool_list(IsA(http.HttpRequest)).\ - AndReturn(self.subnetpools.list()) - api.neutron.network_create(IsA(http.HttpRequest), **params)\ - .AndReturn(network) - - self.mox.ReplayAll() + self.mock_tenant_list.return_value = [tenants, False] + self._stub_is_extension_supported( + {'provider': True, + 'network_availability_zone': True, + 'subnet_allocation': True}) + self.mock_list_availability_zones.return_value = \ + self.neutron_availability_zones.list() + self.mock_subnetpool_list.return_value = self.subnetpools.list() + self.mock_network_create.return_value = network form_data = {'tenant_id': tenant_id, 'name': network.name, @@ -535,14 +514,33 @@ class NetworkTests(test.BaseAdminViewTests): 'external': True, 'shared': True, 'network_type': 'local', - 'availability_zone_hints': ['nova']} + 'az_hints': ['nova']} url = reverse('horizon:admin:networks:create') res = self.client.post(url, form_data) self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api.neutron: ('network_create', + self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) + self._stub_is_extension_supported( + {'provider': 1, + 'network_availability_zone': 1, + 'subnet_allocation': 1}) + self.assert_mock_multiple_calls_with_same_arguments( + self.mock_list_availability_zones, 2, + mock.call(test.IsHttpRequest(), "network", "available")) + self.mock_subnetpool_list.assert_called_once_with(test.IsHttpRequest()) + params = {'name': network.name, + 'tenant_id': tenant_id, + 'admin_state_up': network.admin_state_up, + 'router:external': True, + 'shared': True, + 'provider:network_type': 'local', + 'availability_zone_hints': ['nova']} + self.mock_network_create.assert_called_once_with(test.IsHttpRequest(), + **params) + + @test.create_mocks({api.neutron: ('network_create', 'subnet_create', 'is_extension_supported', 'subnetpool_list'), @@ -552,30 +550,15 @@ class NetworkTests(test.BaseAdminViewTests): tenant_id = self.tenants.first().id network = self.networks.first() subnet = self.subnets.first() - params = {'name': network.name, - 'tenant_id': tenant_id, - 'admin_state_up': network.admin_state_up, - 'router:external': True, - 'shared': True, - 'provider:network_type': 'local', - 'with_subnet': True} - api.keystone.tenant_list(IsA(http.HttpRequest))\ - .AndReturn([tenants, False]) - - api.neutron.is_extension_supported(IsA(http.HttpRequest), 'provider').\ - MultipleTimes().AndReturn(True) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'network_availability_zone').\ - MultipleTimes().AndReturn(False) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'subnet_allocation').\ - MultipleTimes().AndReturn(True) - api.neutron.subnetpool_list(IsA(http.HttpRequest)).\ - AndReturn(self.subnetpools.list()) - api.neutron.network_create(IsA(http.HttpRequest), **params)\ - .AndReturn(network) - self.mox.ReplayAll() + self._stub_is_extension_supported( + {'provider': True, + 'network_availability_zone': False, + 'subnet_allocation': True}) + self.mock_tenant_list.return_value = [tenants, False] + self.mock_subnetpool_list.return_value = self.subnetpools.list() + self.mock_network_create.return_value = network + self.mock_subnet_create.return_value = subnet form_data = {'tenant_id': tenant_id, 'name': network.name, @@ -591,7 +574,30 @@ class NetworkTests(test.BaseAdminViewTests): self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api.neutron: ('network_create', + self._check_is_extension_supported( + {'provider': 3, + 'network_availability_zone': 2, + 'subnet_allocation': 1}) + self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) + self.mock_subnetpool_list.assert_called_once_with(test.IsHttpRequest()) + params = {'name': network.name, + 'tenant_id': tenant_id, + 'admin_state_up': network.admin_state_up, + 'router:external': True, + 'shared': True, + 'provider:network_type': 'local'} + self.mock_network_create.assert_called_once_with(test.IsHttpRequest(), + **params) + subnet_params = {'name': subnet.name, + 'network_id': subnet.network_id, + 'cidr': subnet.cidr, + 'enable_dhcp': subnet.enable_dhcp, + 'gateway_ip': subnet.gateway_ip, + 'ip_version': subnet.ip_version} + self.mock_subnet_create.assert_called_once_with(test.IsHttpRequest(), + **subnet_params) + + @test.create_mocks({api.neutron: ('network_create', 'is_extension_supported', 'subnetpool_list'), api.keystone: ('tenant_list',)}) @@ -600,28 +606,13 @@ class NetworkTests(test.BaseAdminViewTests): tenant_id = self.tenants.first().id network = self.networks.first() - api.keystone.tenant_list(IsA(http.HttpRequest)).AndReturn([tenants, - False]) - params = {'name': network.name, - 'tenant_id': tenant_id, - 'admin_state_up': network.admin_state_up, - 'router:external': True, - 'shared': False, - 'provider:network_type': 'local', - 'with_subnet': False} - api.neutron.is_extension_supported(IsA(http.HttpRequest), 'provider').\ - MultipleTimes().AndReturn(True) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'network_availability_zone').\ - MultipleTimes().AndReturn(False) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'subnet_allocation').\ - MultipleTimes().AndReturn(True) - api.neutron.subnetpool_list(IsA(http.HttpRequest)).\ - AndReturn(self.subnetpools.list()) - api.neutron.network_create(IsA(http.HttpRequest), - **params).AndRaise(self.exceptions.neutron) - self.mox.ReplayAll() + self.mock_tenant_list.return_value = [tenants, False] + self._stub_is_extension_supported( + {'provider': True, + 'network_availability_zone': False, + 'subnet_allocation': True}) + self.mock_subnetpool_list.return_value = self.subnetpools.list() + self.mock_network_create.side_effect = self.exceptions.neutron form_data = {'tenant_id': tenant_id, 'name': network.name, @@ -635,22 +626,33 @@ class NetworkTests(test.BaseAdminViewTests): self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api.neutron: ('is_extension_supported',), + self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) + self._check_is_extension_supported( + {'provider': 3, + 'network_availability_zone': 2, + 'subnet_allocation': 1}) + self.mock_subnetpool_list.assert_called_once_with(test.IsHttpRequest()) + params = {'name': network.name, + 'tenant_id': tenant_id, + 'admin_state_up': network.admin_state_up, + 'router:external': True, + 'shared': False, + 'provider:network_type': 'local'} + self.mock_network_create.assert_called_once_with(test.IsHttpRequest(), + **params) + + @test.create_mocks({api.neutron: ('is_extension_supported',), api.keystone: ('tenant_list',)}) def test_network_create_vlan_segmentation_id_invalid(self): tenants = self.tenants.list() tenant_id = self.tenants.first().id network = self.networks.first() - api.keystone.tenant_list( - IsA(http.HttpRequest) - ).MultipleTimes().AndReturn([tenants, False]) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'network_availability_zone').\ - MultipleTimes().AndReturn(False) - api.neutron.is_extension_supported(IsA(http.HttpRequest), 'provider')\ - .MultipleTimes().AndReturn(True) - self.mox.ReplayAll() + self.mock_tenant_list.return_value = [tenants, False] + self._stub_is_extension_supported( + {'network_availability_zone': False, + 'subnet_allocation': False, + 'provider': True}) form_data = {'tenant_id': tenant_id, 'name': network.name, @@ -666,23 +668,24 @@ class NetworkTests(test.BaseAdminViewTests): self.assertFormErrors(res, 1) self.assertContains(res, "1 through 4094") - @test.create_stubs({api.neutron: ('is_extension_supported',), + self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) + self._check_is_extension_supported( + {'network_availability_zone': 2, + 'subnet_allocation': 1, + 'provider': 2}) + + @test.create_mocks({api.neutron: ('is_extension_supported',), api.keystone: ('tenant_list',)}) def test_network_create_gre_segmentation_id_invalid(self): tenants = self.tenants.list() tenant_id = self.tenants.first().id network = self.networks.first() - api.keystone.tenant_list( - IsA(http.HttpRequest) - ).MultipleTimes().AndReturn([tenants, False]) - - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'network_availability_zone').\ - MultipleTimes().AndReturn(False) - api.neutron.is_extension_supported(IsA(http.HttpRequest), 'provider').\ - MultipleTimes().AndReturn(True) - self.mox.ReplayAll() + self.mock_tenant_list.return_value = [tenants, False] + self._stub_is_extension_supported( + {'network_availability_zone': False, + 'subnet_allocation': False, + 'provider': True}) form_data = {'tenant_id': tenant_id, 'name': network.name, @@ -698,7 +701,13 @@ class NetworkTests(test.BaseAdminViewTests): self.assertFormErrors(res, 1) self.assertContains(res, "1 through %s" % ((2 ** 32) - 1)) - @test.create_stubs({api.neutron: ('is_extension_supported',), + self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) + self._check_is_extension_supported( + {'network_availability_zone': 2, + 'subnet_allocation': 1, + 'provider': 2}) + + @test.create_mocks({api.neutron: ('is_extension_supported',), api.keystone: ('tenant_list',)}) @test.update_settings( OPENSTACK_NEUTRON_NETWORK={ @@ -707,17 +716,12 @@ class NetworkTests(test.BaseAdminViewTests): tenants = self.tenants.list() tenant_id = self.tenants.first().id network = self.networks.first() - api.keystone.tenant_list( - IsA(http.HttpRequest) - ).MultipleTimes().AndReturn([tenants, False]) - api.neutron.is_extension_supported(IsA(http.HttpRequest), - 'network_availability_zone').\ - MultipleTimes().AndReturn(False) - api.neutron.is_extension_supported(IsA(http.HttpRequest), 'provider')\ - .MultipleTimes().AndReturn(True) - - self.mox.ReplayAll() + self.mock_tenant_list.return_value = [tenants, False] + self._stub_is_extension_supported( + {'network_availability_zone': False, + 'subnet_allocation': False, + 'provider': True}) form_data = {'tenant_id': tenant_id, 'name': network.name, @@ -733,7 +737,13 @@ class NetworkTests(test.BaseAdminViewTests): self.assertFormErrors(res, 1) self.assertContains(res, "10 through 20") - @test.create_stubs({api.neutron: ('is_extension_supported',), + self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) + self._check_is_extension_supported( + {'network_availability_zone': 2, + 'subnet_allocation': 1, + 'provider': 2}) + + @test.create_mocks({api.neutron: ('is_extension_supported',), api.keystone: ('tenant_list',)}) @test.update_settings( OPENSTACK_NEUTRON_NETWORK={ @@ -741,11 +751,11 @@ class NetworkTests(test.BaseAdminViewTests): def test_network_create_no_provider_types(self): tenants = self.tenants.list() - api.keystone.tenant_list(IsA(http.HttpRequest)).AndReturn([tenants, - False]) - api.neutron.is_extension_supported(IsA(http.HttpRequest), 'provider').\ - AndReturn(True) - self.mox.ReplayAll() + self.mock_tenant_list.return_value = [tenants, False] + self._stub_is_extension_supported( + {'network_availability_zone': False, + 'subnet_allocation': False, + 'provider': True}) url = reverse('horizon:admin:networks:create') res = self.client.get(url) @@ -756,18 +766,25 @@ class NetworkTests(test.BaseAdminViewTests): '<input type="hidden" name="network_type" id="id_network_type" />', html=True) - @test.create_stubs({api.neutron: ('is_extension_supported',), + self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) + self._check_is_extension_supported( + {'network_availability_zone': 2, + 'subnet_allocation': 1, + 'provider': 1}) + + @test.create_mocks({api.neutron: ('is_extension_supported',), api.keystone: ('tenant_list',)}) @test.update_settings( OPENSTACK_NEUTRON_NETWORK={ 'supported_provider_types': ['local', 'flat', 'gre']}) def test_network_create_unsupported_provider_types(self): tenants = self.tenants.list() - api.keystone.tenant_list(IsA(http.HttpRequest)).AndReturn([tenants, - False]) - api.neutron.is_extension_supported(IsA(http.HttpRequest), 'provider').\ - AndReturn(True) - self.mox.ReplayAll() + + self.mock_tenant_list.return_value = [tenants, False] + self._stub_is_extension_supported( + {'network_availability_zone': False, + 'subnet_allocation': False, + 'provider': True}) url = reverse('horizon:admin:networks:create') res = self.client.get(url) @@ -778,26 +795,30 @@ class NetworkTests(test.BaseAdminViewTests): ('flat', 'Flat'), ('gre', 'GRE')]) - @test.create_stubs({api.neutron: ('network_get',)}) + self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) + self._check_is_extension_supported( + {'network_availability_zone': 2, + 'subnet_allocation': 1, + 'provider': 1}) + + @test.create_mocks({api.neutron: ('network_get',)}) def test_network_update_get(self): network = self.networks.first() - api.neutron.network_get(IsA(http.HttpRequest), network.id, - expand_subnet=False).AndReturn(network) - - self.mox.ReplayAll() + self.mock_network_get.return_value = network url = reverse('horizon:admin:networks:update', args=[network.id]) res = self.client.get(url) self.assertTemplateUsed(res, 'admin/networks/update.html') - @test.create_stubs({api.neutron: ('network_get',)}) + self.mock_network_get.assert_called_once_with(test.IsHttpRequest(), + network.id, + expand_subnet=False) + + @test.create_mocks({api.neutron: ('network_get',)}) def test_network_update_get_exception(self): network = self.networks.first() - api.neutron.network_get(IsA(http.HttpRequest), network.id)\ - .AndRaise(self.exceptions.neutron) - - self.mox.ReplayAll() + self.mock_network_get.side_effect = self.exceptions.neutron url = reverse('horizon:admin:networks:update', args=[network.id]) res = self.client.get(url) @@ -805,20 +826,17 @@ class NetworkTests(test.BaseAdminViewTests): redir_url = INDEX_URL self.assertRedirectsNoFollow(res, redir_url) - @test.create_stubs({api.neutron: ('network_update', + self.mock_network_get.assert_called_once_with(test.IsHttpRequest(), + network.id, + expand_subnet=False) + + @test.create_mocks({api.neutron: ('network_update', 'network_get',)}) def test_network_update_post(self): network = self.networks.first() - params = {'name': network.name, - 'shared': True, - 'admin_state_up': network.admin_state_up, - 'router:external': True} - api.neutron.network_update(IsA(http.HttpRequest), network.id, - **params)\ - .AndReturn(network) - api.neutron.network_get(IsA(http.HttpRequest), network.id, - expand_subnet=False).AndReturn(network) - self.mox.ReplayAll() + + self.mock_network_update.return_value = network + self.mock_network_get.return_value = network form_data = {'network_id': network.id, 'name': network.name, @@ -831,7 +849,18 @@ class NetworkTests(test.BaseAdminViewTests): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api.neutron: ('network_update', + params = {'name': network.name, + 'shared': True, + 'admin_state_up': network.admin_state_up, + 'router:external': True} + self.mock_network_update.assert_called_once_with(test.IsHttpRequest(), + network.id, + **params) + self.mock_network_get.assert_called_once_with(test.IsHttpRequest(), + network.id, + expand_subnet=False) + + @test.create_mocks({api.neutron: ('network_update', 'network_get',)}) def test_network_update_post_exception(self): network = self.networks.first() @@ -839,12 +868,8 @@ class NetworkTests(test.BaseAdminViewTests): 'shared': False, 'admin_state_up': network.admin_state_up, 'router:external': False} - api.neutron.network_update(IsA(http.HttpRequest), network.id, - **params)\ - .AndRaise(self.exceptions.neutron) - api.neutron.network_get(IsA(http.HttpRequest), network.id, - expand_subnet=False).AndReturn(network) - self.mox.ReplayAll() + self.mock_network_update.side_effect = self.exceptions.neutron + self.mock_network_get.return_value = network form_data = {'network_id': network.id, 'name': network.name, @@ -857,7 +882,14 @@ class NetworkTests(test.BaseAdminViewTests): self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api.neutron: ('network_list', + self.mock_network_update.assert_called_once_with(test.IsHttpRequest(), + network.id, + **params) + self.mock_network_get.assert_called_once_with(test.IsHttpRequest(), + network.id, + expand_subnet=False) + + @test.create_mocks({api.neutron: ('network_list', 'network_delete', 'list_dhcp_agent_hosting_networks', 'is_extension_supported'), @@ -865,32 +897,32 @@ class NetworkTests(test.BaseAdminViewTests): def test_delete_network(self): tenants = self.tenants.list() network = self.networks.first() - api.neutron.list_dhcp_agent_hosting_networks(IsA(http.HttpRequest), - network.id).\ - AndReturn(self.agents.list()) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network_availability_zone').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'dhcp_agent_scheduler').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'dhcp_agent_scheduler').AndReturn(True) - api.keystone.tenant_list(IsA(http.HttpRequest))\ - .AndReturn([tenants, False]) - api.neutron.network_list(IsA(http.HttpRequest))\ - .AndReturn([network]) - api.neutron.network_delete(IsA(http.HttpRequest), network.id) - self.mox.ReplayAll() + self.mock_list_dhcp_agent_hosting_networks.return_value = \ + self.agents.list() + self._stub_is_extension_supported( + {'network_availability_zone': True, + 'dhcp_agent_scheduler': True}) + self.mock_tenant_list.return_value = [tenants, False] + self.mock_network_list.return_value = [network] + self.mock_network_delete.return_value = None form_data = {'action': 'networks__delete__%s' % network.id} res = self.client.post(INDEX_URL, form_data) self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api.neutron: ('network_list', + self.mock_list_dhcp_agent_hosting_networks.assert_called_once_with( + test.IsHttpRequest(), network.id) + self._check_is_extension_supported( + {'network_availability_zone': 1, + 'dhcp_agent_scheduler': 2}) + self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) + self.mock_network_list.assert_called_once_with(test.IsHttpRequest()) + self.mock_network_delete.assert_called_once_with(test.IsHttpRequest(), + network.id) + + @test.create_mocks({api.neutron: ('network_list', 'network_delete', 'list_dhcp_agent_hosting_networks', 'is_extension_supported'), @@ -898,59 +930,55 @@ class NetworkTests(test.BaseAdminViewTests): def test_delete_network_exception(self): tenants = self.tenants.list() network = self.networks.first() - api.neutron.list_dhcp_agent_hosting_networks(IsA(http.HttpRequest), - network.id).\ - AndReturn(self.agents.list()) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network_availability_zone').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'dhcp_agent_scheduler').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'dhcp_agent_scheduler').AndReturn(True) - api.keystone.tenant_list(IsA(http.HttpRequest))\ - .AndReturn([tenants, False]) - api.neutron.network_list(IsA(http.HttpRequest))\ - .AndReturn([network]) - api.neutron.network_delete(IsA(http.HttpRequest), network.id)\ - .AndRaise(self.exceptions.neutron) - self.mox.ReplayAll() + self.mock_list_dhcp_agent_hosting_networks.return_value = \ + self.agents.list() + self._stub_is_extension_supported( + {'network_availability_zone': True, + 'dhcp_agent_scheduler': True}) + self.mock_tenant_list.return_value = [tenants, False] + self.mock_network_list.return_value = [network] + self.mock_network_delete.side_effect = self.exceptions.neutron form_data = {'action': 'networks__delete__%s' % network.id} res = self.client.post(INDEX_URL, form_data) self.assertRedirectsNoFollow(res, INDEX_URL) - @test.create_stubs({api.neutron: ('is_extension_supported',)}) + self.mock_list_dhcp_agent_hosting_networks.assert_called_once_with( + test.IsHttpRequest(), network.id) + self._check_is_extension_supported( + {'network_availability_zone': 1, + 'dhcp_agent_scheduler': 2}) + self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) + self.mock_network_list.assert_called_once_with(test.IsHttpRequest()) + self.mock_network_delete.assert_called_once_with(test.IsHttpRequest(), + network.id) + + @test.create_mocks({api.neutron: ('is_extension_supported',)}) @test.update_settings(FILTER_DATA_FIRST={'admin.networks': True}) def test_networks_list_with_admin_filter_first(self): - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network_availability_zone').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'dhcp_agent_scheduler').AndReturn(True) - self.mox.ReplayAll() + self._stub_is_extension_supported( + {'network_availability_zone': True, + 'dhcp_agent_scheduler': True}) + res = self.client.get(reverse('horizon:admin:networks:index')) self.assertTemplateUsed(res, INDEX_TEMPLATE) networks = res.context['networks_table'].data self.assertItemsEqual(networks, []) - @test.create_stubs({api.keystone: ('tenant_list',), + self._check_is_extension_supported( + {'network_availability_zone': 1, + 'dhcp_agent_scheduler': 1}) + + @test.create_mocks({api.keystone: ('tenant_list',), api.neutron: ('is_extension_supported',)}) def test_networks_list_with_non_exist_tenant_filter(self): - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'network_availability_zone').AndReturn(True) - api.neutron.is_extension_supported( - IsA(http.HttpRequest), - 'dhcp_agent_scheduler').AndReturn(True) - api.keystone.tenant_list(IsA(http.HttpRequest))\ - .AndReturn([self.tenants.list(), False]) - self.mox.ReplayAll() + self._stub_is_extension_supported( + {'network_availability_zone': True, + 'dhcp_agent_scheduler': True}) + self.mock_tenant_list.return_value = [self.tenants.list(), False] + self.client.post( reverse('horizon:admin:networks:index'), data={'networks__filter_admin_networks__q_field': 'project', @@ -960,33 +988,44 @@ class NetworkTests(test.BaseAdminViewTests): networks = res.context['networks_table'].data self.assertItemsEqual(networks, []) - @test.create_stubs({api.neutron: ('is_extension_supported',), + self._check_is_extension_supported( + {'network_availability_zone': 2, + 'dhcp_agent_scheduler': 2}) + self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) + + @test.create_mocks({api.neutron: ('is_extension_supported',), api.keystone: ('tenant_list',)}) def test_network_create_without_physical_networks(self): tenants = self.tenants.list() - api.keystone.tenant_list(IsA(http.HttpRequest)).AndReturn([tenants, - False]) - api.neutron.is_extension_supported(IsA(http.HttpRequest), 'provider').\ - AndReturn(True) - self.mox.ReplayAll() + self.mock_tenant_list.return_value = [tenants, False] + self._stub_is_extension_supported( + {'provider': True, + 'network_availability_zone': False, + 'subnet_allocation': False}) url = reverse('horizon:admin:networks:create') res = self.client.get(url) physical_network = res.context['form'].fields['physical_network'] self.assertEqual(type(physical_network), forms.CharField) - @test.create_stubs({api.neutron: ('is_extension_supported',), + self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) + self._check_is_extension_supported( + {'provider': 1, + 'network_availability_zone': 2, + 'subnet_allocation': 1}) + + @test.create_mocks({api.neutron: ('is_extension_supported',), api.keystone: ('tenant_list',)}) @test.update_settings( OPENSTACK_NEUTRON_NETWORK={ 'physical_networks': ['default', 'test']}) def test_network_create_with_physical_networks(self): tenants = self.tenants.list() - api.keystone.tenant_list(IsA(http.HttpRequest)).AndReturn([tenants, - False]) - api.neutron.is_extension_supported(IsA(http.HttpRequest), 'provider').\ - AndReturn(True) - self.mox.ReplayAll() + self.mock_tenant_list.return_value = [tenants, False] + self._stub_is_extension_supported( + {'provider': True, + 'network_availability_zone': False, + 'subnet_allocation': False}) url = reverse('horizon:admin:networks:create') res = self.client.get(url) @@ -994,3 +1033,9 @@ class NetworkTests(test.BaseAdminViewTests): self.assertEqual(type(physical_network), forms.ThemableChoiceField) self.assertListEqual(list(physical_network.choices), [('default', 'default'), ('test', 'test')]) + + self.mock_tenant_list.assert_called_once_with(test.IsHttpRequest()) + self._check_is_extension_supported( + {'provider': 1, + 'network_availability_zone': 2, + 'subnet_allocation': 1})