Have RouterRoute object increment Router revision

When modifying RouterRoute objects on a Router (e.g. adding a route to a
router via the ExtraRoute extension), have the modification update the
Router's revision number.

Change-Id: If9bb56442375efac3043b9de0a03972552ac34bf
Closes-Bug: 1632080
This commit is contained in:
Omer Anson 2016-10-10 22:46:32 +03:00
parent 890f5ed0fd
commit 29e15f9278
3 changed files with 22 additions and 5 deletions

View File

@ -115,3 +115,4 @@ class RouterRoute(model_base.BASEV2, models_v2.Route):
backref=orm.backref("route_list",
lazy='joined',
cascade='delete'))
revises_on_change = ('router', )

View File

@ -170,12 +170,11 @@ class TestRevisions(base.BaseAdminNetworkTest, bsg.BaseSecGroupTest):
router = self.create_router(router_name='test')
self.create_router_interface(router['id'], subnet['id'])
router = self.client.show_router(router['id'])['router']
updated = self.client.update_router(
router['id'], routes=[{'destination': '2.0.0.0/24',
'nexthop': str(subgateway + 1)}])
updated = self.client.update_extra_routes(
router['id'], str(subgateway + 1), '2.0.0.0/24')
self.assertGreater(updated['router']['revision_number'],
router['revision_number'])
updated2 = self.client.update_router(router['id'], routes=[])
updated2 = self.client.delete_extra_routes(router['id'])
self.assertGreater(updated2['router']['revision_number'],
updated['router']['revision_number'])

View File

@ -23,6 +23,9 @@ from neutron.tests.unit.plugins.ml2 import test_plugin
class TestRevisionPlugin(test_plugin.Ml2PluginV2TestCase):
l3_plugin = ('neutron.tests.unit.extensions.test_extraroute.'
'TestExtraRouteL3NatServicePlugin')
def get_additional_service_plugins(self):
p = super(TestRevisionPlugin, self).get_additional_service_plugins()
p.update({'revision_plugin_name': 'revisions'})
@ -111,11 +114,25 @@ class TestRevisionPlugin(test_plugin.Ml2PluginV2TestCase):
self.assertGreater(updated['revision_number'],
router['revision_number'])
# add an intf and make sure it bumps rev
with self.subnet(tenant_id='some_tenant') as s:
with self.subnet(tenant_id='some_tenant', cidr='10.0.1.0/24') as s:
interface_info = {'subnet_id': s['subnet']['id']}
self.l3p.add_router_interface(self.ctx, router['id'], interface_info)
router = updated
updated = self.l3p.get_router(self.ctx, router['id'])
self.assertGreater(updated['revision_number'],
router['revision_number'])
# Add a route and make sure it bumps revision number
router = updated
body = {'router': {'routes': [{'destination': '192.168.2.0/24',
'nexthop': '10.0.1.3'}]}}
self.l3p.update_router(self.ctx, router['id'], body)
updated = self.l3p.get_router(self.ctx, router['id'])
self.assertGreater(updated['revision_number'],
router['revision_number'])
router = updated
body['router']['routes'] = []
self.l3p.update_router(self.ctx, router['id'], body)
updated = self.l3p.get_router(self.ctx, router['id'])
self.assertGreater(updated['revision_number'],
router['revision_number'])
self.l3p.remove_router_interface(self.ctx, router['id'],