From 14966a13f3ac907f9f80e5c124511ec20dd5bf23 Mon Sep 17 00:00:00 2001 From: Rajaram Mallya and Gavri Fernandez Date: Thu, 5 Jan 2012 16:13:17 +0530 Subject: [PATCH] fixes bug 911255 show on deallocated ip fails Change-Id: I92d6ebc44414bc15989a4a9dd90acf24250d38fb --- melange/ipam/models.py | 4 ++++ melange/ipam/views.py | 2 +- melange/tests/__init__.py | 2 ++ melange/tests/unit/test_ipam_models.py | 8 +++++++- melange/tests/unit/test_ipam_service.py | 2 +- melange/tests/unit/test_ipam_views.py | 14 +++++++++++++- 6 files changed, 28 insertions(+), 4 deletions(-) diff --git a/melange/ipam/models.py b/melange/ipam/models.py index eae5511d..8f2fd9d8 100644 --- a/melange/ipam/models.py +++ b/melange/ipam/models.py @@ -644,6 +644,10 @@ class IpAddress(ModelBase): def interface(self): return Interface.get(self.interface_id) + @property + def virtual_interface_id(self): + return self.interface.virtual_interface_id if self.interface else None + @utils.cached_property def mac_address(self): return MacAddress.get_by(interface_id=self.interface_id) diff --git a/melange/ipam/views.py b/melange/ipam/views.py index 397b8192..bca2cdad 100644 --- a/melange/ipam/views.py +++ b/melange/ipam/views.py @@ -38,7 +38,7 @@ class IpConfigurationView(object): def _ip_address_data(self, ip): return { 'id': ip.id, - 'interface_id': ip.interface.virtual_interface_id, + 'interface_id': ip.virtual_interface_id, 'address': ip.address, 'version': ip.version, } diff --git a/melange/tests/__init__.py b/melange/tests/__init__.py index 8156c25b..3256727b 100644 --- a/melange/tests/__init__.py +++ b/melange/tests/__init__.py @@ -25,7 +25,9 @@ from melange.db import db_api class BaseTest(unittest.TestCase): def setUp(self): + #maxDiff=None ensures diff output of assert methods are not truncated self.maxDiff = None + self.mock = mox.Mox() db_api.clean_db() super(BaseTest, self).setUp() diff --git a/melange/tests/unit/test_ipam_models.py b/melange/tests/unit/test_ipam_models.py index bb5c59ee..fef315fd 100644 --- a/melange/tests/unit/test_ipam_models.py +++ b/melange/tests/unit/test_ipam_models.py @@ -1313,13 +1313,19 @@ class TestIpAddress(tests.BaseTest): self.assertEqual(ipv4.version, 4) self.assertEqual(ipv6.version, 6) - def test_retrives_interface(self): + def test_retrieves_interface(self): interface = factory_models.InterfaceFactory(virtual_interface_id="112") ip = factory_models.IpAddressFactory(interface_id=interface.id) self.assertEqual(ip.interface, interface) self.assertEqual(ip.interface.virtual_interface_id, "112") + def test_virtual_interface_id(self): + interface = factory_models.InterfaceFactory(virtual_interface_id="112") + ip = factory_models.IpAddressFactory(interface_id=interface.id) + + self.assertEqual(ip.virtual_interface_id, "112") + def test_mac_address(self): mac_range = factory_models.MacAddressRangeFactory() interface = factory_models.InterfaceFactory() diff --git a/melange/tests/unit/test_ipam_service.py b/melange/tests/unit/test_ipam_service.py index f675cfc2..185fe344 100644 --- a/melange/tests/unit/test_ipam_service.py +++ b/melange/tests/unit/test_ipam_service.py @@ -47,7 +47,7 @@ class ControllerTestBase(tests.BaseTest): class DummyApp(wsgi.Router): - def __init__(self, controller ): + def __init__(self, controller): mapper = routes.Mapper() mapper.resource("resource", "/resources", controller=controller.create_resource()) diff --git a/melange/tests/unit/test_ipam_views.py b/melange/tests/unit/test_ipam_views.py index 2e0a43a1..23504dd9 100644 --- a/melange/tests/unit/test_ipam_views.py +++ b/melange/tests/unit/test_ipam_views.py @@ -39,6 +39,18 @@ class TestIpConfigurationView(tests.BaseTest): self.assertEqual(expected_ip1_config, ip_configuration_view.data()[0]) self.assertEqual(expected_ip2_config, ip_configuration_view.data()[1]) + def test_data_returns_deallocated_ip_info(self): + block = factory_models.IpBlockFactory() + interface = factory_models.InterfaceFactory(virtual_interface_id="123") + ip = factory_models.IpAddressFactory(ip_block_id=block.id, + interface_id=interface.id) + ip.deallocate() + deallocated_ip = models.IpAddress.find(ip.id) + expected_ip_config = _ip_data(deallocated_ip, block) + ip_configuration_view = views.IpConfigurationView(deallocated_ip) + + self.assertEqual(expected_ip_config, ip_configuration_view.data()[0]) + def test_data_returns_route_info(self): block = factory_models.IpBlockFactory() interface = factory_models.InterfaceFactory(virtual_interface_id="123") @@ -57,7 +69,7 @@ class TestIpConfigurationView(tests.BaseTest): def _ip_data(ip, block): return { 'id': ip.id, - 'interface_id': ip.interface.virtual_interface_id, + 'interface_id': ip.virtual_interface_id, 'address': ip.address, 'version': ip.version, 'ip_block': {