Add check that external gw port exist when metering-agent adds a rule
If router has no gateway port when metering-agent wants to add a metering-label-rule method _process_metering_label_rules() fails with error "cannot concatenate 'str' and 'NoneType' objects" because there is no check that router has an external gateway port. This patch adds this check and adds some unit test. Closes-bug: #1527274 Change-Id: Ic9f626db41bfb6343187742e209402dd7d5232d1
This commit is contained in:
parent
df05797324
commit
f73dae0a65
|
@ -135,7 +135,11 @@ class IptablesMeteringDriver(abstract_driver.MeteringAbstractDriver):
|
|||
def _process_metering_label_rules(self, rm, rules, label_chain,
|
||||
rules_chain):
|
||||
im = rm.iptables_manager
|
||||
ext_dev = self.get_external_device_name(rm.router['gw_port_id'])
|
||||
ex_gw_port = rm.router.get('gw_port_id')
|
||||
if not ex_gw_port:
|
||||
return
|
||||
|
||||
ext_dev = self.get_external_device_name(ex_gw_port)
|
||||
if not ext_dev:
|
||||
return
|
||||
|
||||
|
|
|
@ -166,6 +166,36 @@ class IptablesDriverTestCase(base.BaseTestCase):
|
|||
|
||||
self.v4filter_inst.assert_has_calls(calls)
|
||||
|
||||
def test_process_metering_label_rules_with_no_gateway_router(self):
|
||||
routers = copy.deepcopy(TEST_ROUTERS)
|
||||
for router in routers:
|
||||
router['gw_port_id'] = None
|
||||
|
||||
self.metering.add_metering_label(None, routers)
|
||||
|
||||
calls = [mock.call.add_chain('neutron-meter-l-c5df2fe5-c60',
|
||||
wrap=False),
|
||||
mock.call.add_chain('neutron-meter-r-c5df2fe5-c60',
|
||||
wrap=False),
|
||||
mock.call.add_rule('neutron-meter-FORWARD', '-j '
|
||||
'neutron-meter-r-c5df2fe5-c60',
|
||||
wrap=False),
|
||||
mock.call.add_rule('neutron-meter-l-c5df2fe5-c60',
|
||||
'',
|
||||
wrap=False),
|
||||
mock.call.add_chain('neutron-meter-l-eeef45da-c60',
|
||||
wrap=False),
|
||||
mock.call.add_chain('neutron-meter-r-eeef45da-c60',
|
||||
wrap=False),
|
||||
mock.call.add_rule('neutron-meter-FORWARD', '-j '
|
||||
'neutron-meter-r-eeef45da-c60',
|
||||
wrap=False),
|
||||
mock.call.add_rule('neutron-meter-l-eeef45da-c60',
|
||||
'',
|
||||
wrap=False)]
|
||||
|
||||
self.v4filter_inst.assert_has_calls(calls, any_order=False)
|
||||
|
||||
def test_add_metering_label_with_rules(self):
|
||||
routers = copy.deepcopy(TEST_ROUTERS)
|
||||
routers[1]['_metering_labels'][0]['rules'][0].update({
|
||||
|
|
Loading…
Reference in New Issue