test: ip4 vrf instances multi-context test (CSIT-492)

- add/delete IPv4 VRF instances and verify results by parsing output
  of ip_fib_dump API command and by traffic

Change-Id: I61ed5013adca29afd00b942f65be7bf964f38d85
Signed-off-by: Jan Gelety <jgelety@cisco.com>
This commit is contained in:
Jan
2016-12-08 13:10:03 +01:00
committed by Damjan Marion
parent 8cb07c9237
commit e546d3b0f7
4 changed files with 475 additions and 15 deletions

File diff suppressed because it is too large Load Diff

View File

@ -195,12 +195,16 @@ class VppInterface(object):
self.has_ip4_config = False
self.has_ip4_config = False
def configure_ipv4_neighbors(self):
"""For every remote host assign neighbor's MAC to IPv4 addresses."""
def configure_ipv4_neighbors(self, vrf_id=0):
"""For every remote host assign neighbor's MAC to IPv4 addresses.
:param vrf_id: The FIB table / VRF ID. (Default value = 0)
"""
for host in self._remote_hosts:
macn = host.mac.replace(":", "").decode('hex')
ipn = host.ip4n
self.test.vapi.ip_neighbor_add_del(self.sw_if_index, macn, ipn)
self.test.vapi.ip_neighbor_add_del(
self.sw_if_index, macn, ipn, vrf_id)
def config_ip6(self):
"""Configure IPv6 address on the VPP interface."""

View File

@ -595,6 +595,54 @@ class VppPapiProvider(object):
}
)
def reset_vrf(self,
vrf_id,
is_ipv6=0,
):
""" Reset VRF (remove all routes etc.) request.
:param int vrf_id: ID of the FIB table / VRF to reset.
:param int is_ipv6: 1 for IPv6 neighbor, 0 for IPv4. (Default = 0)
"""
return self.api(
self.papi.reset_vrf,
{'vrf_id': vrf_id,
'is_ipv6': is_ipv6,
}
)
def reset_fib(self,
vrf_id,
is_ipv6=0,
):
""" Reset VRF (remove all routes etc.) request.
:param int vrf_id: ID of the FIB table / VRF to reset.
:param int is_ipv6: 1 for IPv6 neighbor, 0 for IPv4. (Default = 0)
"""
return self.api(
self.papi.reset_fib,
{'vrf_id': vrf_id,
'is_ipv6': is_ipv6,
}
)
def ip_dump(self,
is_ipv6=0,
):
""" Return IP dump.
:param int is_ipv6: 1 for IPv6 neighbor, 0 for IPv4. (Default = 0)
"""
return self.api(
self.papi.ip_dump,
{'is_ipv6': is_ipv6,
}
)
def sw_interface_span_enable_disable(
self, sw_if_index_from, sw_if_index_to, state=1):
"""

View File

@ -213,8 +213,7 @@ class VppPGInterface(VppInterface):
try:
capture = self.get_capture(
0, remark=remark, filter_out_fn=filter_out_fn)
if capture:
if len(capture.res) == 0:
if not capture:
# junk filtered out, we're good
return
self.test.logger.error(
@ -226,8 +225,7 @@ class VppPGInterface(VppInterface):
"Non-empty capture file present for interface %s (%s)" %
(self.name, remark))
else:
raise AssertionError(
"Non-empty capture file present for interface %s" %
raise AssertionError("Capture file present for interface %s" %
self.name)
def wait_for_capture_file(self, timeout=1):