diff --git a/openstack_dashboard/dashboards/project/networks/subnets/tests.py b/openstack_dashboard/dashboards/project/networks/subnets/tests.py index d0a6c7febf..8eacab4d87 100644 --- a/openstack_dashboard/dashboards/project/networks/subnets/tests.py +++ b/openstack_dashboard/dashboards/project/networks/subnets/tests.py @@ -34,8 +34,7 @@ form_data_subnet = net_tests.form_data_subnet class NetworkSubnetTests(test.TestCase): @test.create_stubs({api.neutron: ('network_get', - 'subnet_get', - 'is_extension_supported')}) + 'subnet_get',)}) def test_subnet_detail(self): network = self.networks.first() subnet = self.subnets.first() @@ -65,6 +64,55 @@ class NetworkSubnetTests(test.TestCase): self.assertRedirectsNoFollow(res, NETWORKS_INDEX_URL) + @test.create_stubs({api.neutron: ('network_get', + 'subnet_get', 'subnetpool_get', + 'is_extension_supported')}) + def test_subnet_detail_with_subnetpool(self): + network = self.networks.first() + subnet = self.subnets.first() + subnetpool = self.subnetpools.first() + subnet.subnetpool_id = subnetpool.id + + api.neutron.network_get(IsA(http.HttpRequest), network.id)\ + .MultipleTimes().AndReturn(network) + api.neutron.subnet_get(IsA(http.HttpRequest), subnet.id)\ + .AndReturn(subnet) + api.neutron.is_extension_supported( + IsA(http.HttpRequest), 'subnet_allocation').AndReturn(True) + api.neutron.subnetpool_get(IsA(http.HttpRequest), subnetpool.id)\ + .AndReturn(subnetpool) + self.mox.ReplayAll() + + url = reverse(DETAIL_URL, args=[subnet.id]) + res = self.client.get(url) + + self.assertTemplateUsed(res, 'horizon/common/_detail.html') + self.assertEqual(subnet.id, res.context['subnet'].id) + self.assertEqual(subnetpool.id, res.context['subnet'].subnetpool_id) + self.assertEqual(subnetpool.name, + res.context['subnet'].subnetpool_name) + + @test.create_stubs({api.neutron: ('network_get', + 'subnet_get')}) + def test_subnet_detail_with_subnetpool_prefixdelegation(self): + network = self.networks.first() + subnet = self.subnets.first() + subnet.subnetpool_id = 'prefix_delegation' + + api.neutron.network_get(IsA(http.HttpRequest), network.id)\ + .MultipleTimes().AndReturn(network) + api.neutron.subnet_get(IsA(http.HttpRequest), subnet.id)\ + .AndReturn(subnet) + self.mox.ReplayAll() + + url = reverse(DETAIL_URL, args=[subnet.id]) + res = self.client.get(url) + + self.assertTemplateUsed(res, 'horizon/common/_detail.html') + self.assertEqual(subnet.id, res.context['subnet'].id) + self.assertEqual('prefix_delegation', + res.context['subnet'].subnetpool_id) + @test.create_stubs({api.neutron: ('network_get', 'is_extension_supported', 'subnetpool_list')}) diff --git a/openstack_dashboard/dashboards/project/networks/subnets/views.py b/openstack_dashboard/dashboards/project/networks/subnets/views.py index d1dff4da67..48aeb599b3 100644 --- a/openstack_dashboard/dashboards/project/networks/subnets/views.py +++ b/openstack_dashboard/dashboards/project/networks/subnets/views.py @@ -123,6 +123,9 @@ class DetailView(tabs.TabView): if ('subnetpool_id' in subnet and subnet.subnetpool_id and + # subnetpool_id = prefix_delegation is a special subnetpool + # and we cannot retrieve such subnet pool. + subnet.subnetpool_id != 'prefix_delegation' and api.neutron.is_extension_supported(self.request, 'subnet_allocation')): subnetpool = api.neutron.subnetpool_get(self.request,