Ensure PortBindingChassis Events consider the port up status
There may be cases where the port is not up, so it does not matter if the chassis is set, we don't need to expose the IP, and the opposite for the deletion. This also avoid races where the chassis gets re-added but the port is still down, avoiding to process extra events that are not needed Change-Id: I64680c4ce8d776e57c16e06e0f376d7d9fba3733
This commit is contained in:
parent
e3828acc48
commit
b5ac73f138
@ -35,8 +35,17 @@ class PortBindingChassisCreatedEvent(base_watcher.PortBindingChassisEvent):
|
||||
# single and dual-stack format
|
||||
if not self._check_ip_associated(row.mac[0]):
|
||||
return False
|
||||
return (row.chassis[0].name == self.agent.chassis and
|
||||
(not old.chassis or row.chassis != old.chassis))
|
||||
if not bool(row.up[0]):
|
||||
return False
|
||||
|
||||
if row.chassis[0].name != self.agent.chassis:
|
||||
return False
|
||||
if hasattr(old, 'chassis'):
|
||||
if not old.chassis or row.chassis != old.chassis:
|
||||
return True
|
||||
if hasattr(old, 'up'):
|
||||
if not bool(old.up[0]):
|
||||
return True
|
||||
except (IndexError, AttributeError):
|
||||
return False
|
||||
|
||||
@ -59,11 +68,16 @@ class PortBindingChassisDeletedEvent(base_watcher.PortBindingChassisEvent):
|
||||
# single and dual-stack format
|
||||
if not self._check_ip_associated(row.mac[0]):
|
||||
return False
|
||||
if event == self.ROW_UPDATE:
|
||||
return (old.chassis[0].name == self.agent.chassis and
|
||||
(not row.chassis or row.chassis != old.chassis))
|
||||
else:
|
||||
if event == self.ROW_DELETE:
|
||||
return row.chassis[0].name == self.agent.chassis
|
||||
|
||||
if hasattr(old, 'chassis'):
|
||||
if (old.chassis[0].name == self.agent.chassis and
|
||||
(not row.chassis or row.chassis != old.chassis)):
|
||||
return True
|
||||
if hasattr(old, 'up'):
|
||||
if bool(old.up[0]) and not bool(row.up[0]):
|
||||
return True
|
||||
except (IndexError, AttributeError):
|
||||
return False
|
||||
|
||||
|
@ -37,7 +37,8 @@ class TestPortBindingChassisCreatedEvent(test_base.TestCase):
|
||||
def test_match_fn(self):
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
row = utils.create_row(chassis=[ch],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'])
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'],
|
||||
up=[True])
|
||||
old = utils.create_row(chassis=[])
|
||||
self.assertTrue(self.event.match_fn(mock.Mock(), row, old))
|
||||
|
||||
@ -51,14 +52,16 @@ class TestPortBindingChassisCreatedEvent(test_base.TestCase):
|
||||
def test_match_fn_old_chassis_set(self):
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
row = utils.create_row(chassis=[ch],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'])
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'],
|
||||
up=[True])
|
||||
old = utils.create_row(chassis=[ch])
|
||||
self.assertFalse(self.event.match_fn(mock.Mock(), row, old))
|
||||
|
||||
def test_match_fn_no_old_chassis(self):
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
row = utils.create_row(chassis=[ch],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'])
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'],
|
||||
up=[True])
|
||||
old = utils.create_row(chassis=[])
|
||||
self.assertTrue(self.event.match_fn(mock.Mock(), row, old))
|
||||
|
||||
@ -66,10 +69,27 @@ class TestPortBindingChassisCreatedEvent(test_base.TestCase):
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
ch_old = utils.create_row(name='old-chassis')
|
||||
row = utils.create_row(chassis=[ch],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'])
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'],
|
||||
up=[True])
|
||||
old = utils.create_row(chassis=[ch_old])
|
||||
self.assertTrue(self.event.match_fn(mock.Mock(), row, old))
|
||||
|
||||
def test_match_fn_no_up(self):
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
row = utils.create_row(chassis=[ch],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'],
|
||||
up=[False])
|
||||
self.assertFalse(self.event.match_fn(mock.Mock(), row, mock.Mock))
|
||||
|
||||
def test_match_fn_no_old_up(self):
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
row = utils.create_row(chassis=[ch],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'],
|
||||
up=[True])
|
||||
old = utils.create_row(chassis=[ch],
|
||||
up=[False])
|
||||
self.assertTrue(self.event.match_fn(mock.Mock(), row, old))
|
||||
|
||||
def test_match_fn_index_error(self):
|
||||
row = utils.create_row(chassis=[],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'])
|
||||
@ -106,11 +126,12 @@ class TestPortBindingChassisDeletedEvent(test_base.TestCase):
|
||||
self.event = bgp_watcher.PortBindingChassisDeletedEvent(self.agent)
|
||||
|
||||
def test_match_fn(self):
|
||||
event = self.event.ROW_DELETE
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
row = utils.create_row(chassis=[ch],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'])
|
||||
old = utils.create_row(chassis=[])
|
||||
self.assertTrue(self.event.match_fn(mock.Mock(), row, old))
|
||||
self.assertTrue(self.event.match_fn(event, row, old))
|
||||
|
||||
def test_match_fn_not_single_or_dual_stack(self):
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
@ -127,14 +148,26 @@ class TestPortBindingChassisDeletedEvent(test_base.TestCase):
|
||||
old = utils.create_row(chassis=[ch])
|
||||
self.assertTrue(self.event.match_fn(event, row, old))
|
||||
|
||||
def test_match_fn_update_old_chassis_set(self):
|
||||
def test_match_fn_update_old_chassis_set_up_false(self):
|
||||
event = self.event.ROW_UPDATE
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
row = utils.create_row(chassis=[ch],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'])
|
||||
old = utils.create_row(chassis=[ch])
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'],
|
||||
up=[True])
|
||||
old = utils.create_row(chassis=[ch],
|
||||
up=[False])
|
||||
self.assertFalse(self.event.match_fn(event, row, old))
|
||||
|
||||
def test_match_fn_update_old_chassis_set_up_true(self):
|
||||
event = self.event.ROW_UPDATE
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
row = utils.create_row(chassis=[ch],
|
||||
mac=['aa:bb:cc:dd:ee:ff 10.10.1.16'],
|
||||
up=[False])
|
||||
old = utils.create_row(chassis=[ch],
|
||||
up=[True])
|
||||
self.assertTrue(self.event.match_fn(event, row, old))
|
||||
|
||||
def test_match_fn_update_no_chassis(self):
|
||||
event = self.event.ROW_UPDATE
|
||||
ch = utils.create_row(name=self.chassis)
|
||||
|
Loading…
x
Reference in New Issue
Block a user