aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTibor Frank <tifrank@cisco.com>2019-12-09 11:21:37 +0100
committerTibor Frank <tifrank@cisco.com>2019-12-09 12:46:42 +0100
commit762c67cae040358876e470822ad50a77d4f03c12 (patch)
treeabcd79d4f35972888ad6fe9cecc04ebfaf2b566e
parentc0e53d575541d37bcd29b1c5a8f822a0204949c3 (diff)
Trending: Fix Alerts
Change-Id: I963022c386928b7f29b176bfb4a4e2bfb0a55409 Signed-off-by: Tibor Frank <tifrank@cisco.com>
-rw-r--r--resources/tools/presentation/generator_alerts.py2
-rw-r--r--resources/tools/presentation/input_data_parser.py6
-rw-r--r--resources/tools/presentation/specification_CPTA.yaml47
3 files changed, 24 insertions, 31 deletions
diff --git a/resources/tools/presentation/generator_alerts.py b/resources/tools/presentation/generator_alerts.py
index 10c6734aad..b0606b6fd7 100644
--- a/resources/tools/presentation/generator_alerts.py
+++ b/resources/tools/presentation/generator_alerts.py
@@ -314,7 +314,7 @@ class Alerting:
in_file = (
f"{self.configs[alert[u'way']][u'output-dir']}/"
- f"cpta-{re_pro}-{alert[u'urls'][idx].split(u'/')[-1]}.txt"
+ f"{re_pro}-{alert[u'urls'][idx].split(u'/')[-1]}.txt"
)
out_file = (
f"{self.configs[alert[u'way']][u'output-dir']}/"
diff --git a/resources/tools/presentation/input_data_parser.py b/resources/tools/presentation/input_data_parser.py
index af8a854ce9..d23fa8454d 100644
--- a/resources/tools/presentation/input_data_parser.py
+++ b/resources/tools/presentation/input_data_parser.py
@@ -452,10 +452,12 @@ class ExecutionChecker(ResultVisitor):
host = str(re.search(self.REGEX_TC_PAPI_CLI, msg.message).
group(1))
except (AttributeError, IndexError):
- host = u""
+ host = self._data[u"tests"][self._test_id][u"show-run"].\
+ count(u"DUT:") + 1
try:
socket = str(re.search(self.REGEX_TC_PAPI_CLI, msg.message).
group(2))
+ socket = f"/{socket}"
except (AttributeError, IndexError):
socket = u""
runtime = loads(
@@ -526,7 +528,7 @@ class ExecutionChecker(ResultVisitor):
txt_table.align[u"Vectors/Calls"] = u"r"
text += txt_table.get_string(sortby=u"Name") + u'\n'
- text = f" \n **DUT: {host}/{socket}** \n {text}".\
+ text = f" \n**DUT: {host}{socket}**\n{text}".\
replace(u'\n', u' |br| ').\
replace(u'\r', u'').\
replace(u'"', u"'")
diff --git a/resources/tools/presentation/specification_CPTA.yaml b/resources/tools/presentation/specification_CPTA.yaml
index c52270146d..ac7fb5d402 100644
--- a/resources/tools/presentation/specification_CPTA.yaml
+++ b/resources/tools/presentation/specification_CPTA.yaml
@@ -196,10 +196,9 @@
# 3n-hsw
plot-performance-trending-all-3n-hsw:
csit-vpp-perf-mrr-daily-master:
- start: 851
+ start: 853
end: "lastCompletedBuild"
skip:
- - 852
- 855
- 856
- 860
@@ -232,10 +231,9 @@
plot-performance-trending-vpp-3n-hsw:
csit-vpp-perf-mrr-daily-master:
- start: 851
+ start: 853
end: "lastCompletedBuild"
skip:
- - 852
- 855
- 856
- 860
@@ -271,11 +269,9 @@
# 3n-skx
plot-performance-trending-all-3n-skx:
csit-vpp-perf-mrr-daily-master-3n-skx:
- start: 598
+ start: 602
end: "lastCompletedBuild"
skip:
- - 600
- - 601
- 603
- 604
- 612
@@ -299,6 +295,7 @@
- 696
- 697
- 705
+ - 743
csit-dpdk-perf-mrr-weekly-master-3n-skx:
start: 57
end: "lastCompletedBuild"
@@ -307,11 +304,9 @@
plot-performance-trending-vpp-3n-skx:
csit-vpp-perf-mrr-daily-master-3n-skx:
- start: 598
+ start: 602
end: "lastCompletedBuild"
skip:
- - 600
- - 601
- 603
- 604
- 612
@@ -335,6 +330,7 @@
- 696
- 697
- 705
+ - 743
plot-performance-trending-dpdk-3n-skx:
csit-dpdk-perf-mrr-weekly-master-3n-skx:
@@ -346,7 +342,7 @@
# 2n-skx
plot-performance-trending-all-2n-skx:
csit-vpp-perf-mrr-daily-master-2n-skx:
- start: 606
+ start: 607
end: "lastCompletedBuild"
skip:
- 608
@@ -374,6 +370,7 @@
- 700
- 701
- 702
+ - 768
csit-dpdk-perf-mrr-weekly-master-2n-skx:
start: 57
end: "lastCompletedBuild"
@@ -383,7 +380,7 @@
plot-performance-trending-vpp-2n-skx:
csit-vpp-perf-mrr-daily-master-2n-skx:
- start: 606
+ start: 607
end: "lastCompletedBuild"
skip:
- 608
@@ -411,6 +408,7 @@
- 700
- 701
- 702
+ - 768
plot-performance-trending-vpp-2n-clx:
csit-vpp-perf-mrr-daily-master-2n-clx:
@@ -452,10 +450,9 @@
plot-performance-trending-vpp-3n-dnv:
csit-vpp-perf-mrr-daily-master-3n-dnv:
- start: 79
+ start: 82
end: "lastCompletedBuild"
skip:
- - 80
- 83
- 84
- 91
@@ -504,11 +501,9 @@
plot-performance-trending-vpp-2n-dnv:
csit-vpp-perf-mrr-daily-master-2n-dnv:
- start: 78
+ start: 81
end: "lastCompletedBuild"
skip:
- - 79
- - 80
- 83
- 90
- 91
@@ -649,10 +644,9 @@
# 3n-hsw
csit-vpp-perf-mrr-daily-master:
- start: 851
+ start: 853
end: "lastCompletedBuild"
skip:
- - 852
- 855
- 856
- 860
@@ -685,11 +679,9 @@
# 3n-skx
csit-vpp-perf-mrr-daily-master-3n-skx:
- start: 598
+ start: 602
end: "lastCompletedBuild"
skip:
- - 600
- - 601
- 603
- 604
- 612
@@ -713,6 +705,7 @@
- 696
- 697
- 705
+ - 743
csit-dpdk-perf-mrr-weekly-master-3n-skx:
start: 57
end: "lastCompletedBuild"
@@ -721,7 +714,7 @@
# 2n-skx
csit-vpp-perf-mrr-daily-master-2n-skx:
- start: 606
+ start: 607
end: "lastCompletedBuild"
skip:
- 608
@@ -749,6 +742,7 @@
- 700
- 701
- 702
+ - 768
csit-vpp-perf-mrr-weekly-master-2n-skx:
start: 30
end: "lastCompletedBuild"
@@ -777,10 +771,9 @@
# 3n-dnv
csit-vpp-perf-mrr-daily-master-3n-dnv:
- start: 79
+ start: 82
end: "lastCompletedBuild"
skip:
- - 80
- 83
- 84
- 91
@@ -829,11 +822,9 @@
# 2n-dnv
csit-vpp-perf-mrr-daily-master-2n-dnv:
- start: 78
+ start: 81
end: "lastCompletedBuild"
skip:
- - 79
- - 80
- 83
- 90
- 91
): """ L2XC Multi-instance Test Case """ @classmethod def setUpClass(cls): """ Perform standard class setup (defined by class method setUpClass in class VppTestCase) before running the test case, set test case related variables and configure VPP. """ super(TestL2xcMultiInst, cls).setUpClass() try: # Create pg interfaces cls.create_pg_interfaces(range(14)) # Packet flows mapping pg0 -> pg1 etc. cls.flows = dict() for i in range(len(cls.pg_interfaces)): delta = 1 if i % 2 == 0 else -1 cls.flows[cls.pg_interfaces[i]] =\ [cls.pg_interfaces[i + delta]] # Mapping between packet-generator index and lists of test hosts cls.hosts_by_pg_idx = dict() for pg_if in cls.pg_interfaces: cls.hosts_by_pg_idx[pg_if.sw_if_index] = [] # Create test host entries cls.create_hosts(70) # Packet sizes - jumbo packet (9018 bytes) skipped cls.pg_if_packet_sizes = [64, 512, 1518] # Set up all interfaces for i in cls.pg_interfaces: i.admin_up() # Create list of x-connected pg_interfaces cls.pg_in_xc = list() # Create list of not x-connected pg_interfaces cls.pg_not_in_xc = list() for pg_if in cls.pg_interfaces: cls.pg_not_in_xc.append(pg_if) except Exception: super(TestL2xcMultiInst, cls).tearDownClass() raise def setUp(self): """ Clear trace and packet infos before running each test. """ super(TestL2xcMultiInst, self).setUp() self.reset_packet_infos() def tearDown(self): """ Show various debug prints after each test. """ super(TestL2xcMultiInst, self).tearDown() if not self.vpp_dead: self.logger.info(self.vapi.ppcli("show l2patch")) @classmethod def create_hosts(cls, count): """ Create required number of host MAC addresses and distribute them among interfaces. Create host IPv4 address for every host MAC address. :param int count: Number of hosts to create MAC/IPv4 addresses for. """ n_int = len(cls.pg_interfaces) macs_per_if = count / n_int i = -1 for pg_if in cls.pg_interfaces: i += 1 start_nr = macs_per_if * i end_nr = count if i == (n_int - 1) else macs_per_if * (i + 1) hosts = cls.hosts_by_pg_idx[pg_if.sw_if_index] for j in range(start_nr, end_nr): host = Host( "00:00:00:ff:%02x:%02x" % (pg_if.sw_if_index, j), "172.17.1%02u.%u" % (pg_if.sw_if_index, j)) hosts.append(host) def create_xconnects(self, count, start=0): """ Create required number of cross-connects (always two cross-connects per pair of packet-generator interfaces). :param int count: Number of cross-connects to be created. :param int start: Starting index of packet-generator interfaces. \ (Default value = 0) """ for i in range(count): rx_if = self.pg_interfaces[i + start] delta = 1 if i % 2 == 0 else -1 tx_if = self.pg_interfaces[i + start + delta] self.vapi.sw_interface_set_l2_xconnect(rx_if.sw_if_index, tx_if.sw_if_index, 1) self.logger.info("Cross-connect from %s to %s created" % (tx_if.name, rx_if.name)) if self.pg_in_xc.count(rx_if) == 0: self.pg_in_xc.append(rx_if) if self.pg_not_in_xc.count(rx_if) == 1: self.pg_not_in_xc.remove(rx_if) def delete_xconnects(self, count, start=0): """ Delete required number of cross-connects (always two cross-connects per pair of packet-generator interfaces). :param int count: Number of cross-connects to be deleted. :param int start: Starting index of packet-generator interfaces. \ (Default value = 0) """ for i in range(count): rx_if = self.pg_interfaces[i + start] delta = 1 if i % 2 == 0 else -1 tx_if = self.pg_interfaces[i + start + delta] self.vapi.sw_interface_set_l2_xconnect(rx_if.sw_if_index, tx_if.sw_if_index, 0) self.logger.info("Cross-connect from %s to %s deleted" % (tx_if.name, rx_if.name)) if self.pg_not_in_xc.count(rx_if) == 0: self.pg_not_in_xc.append(rx_if) if self.pg_in_xc.count(rx_if) == 1: self.pg_in_xc.remove(rx_if) def create_stream(self, src_if, packet_sizes): """ Create input packet stream for defined interface using hosts list. :param object src_if: Interface to create packet stream for. :param list packet_sizes: List of required packet sizes. :return: Stream of packets. """ pkts = [] src_hosts = self.hosts_by_pg_idx[src_if.sw_if_index] for dst_if in self.flows[src_if]: dst_hosts = self.hosts_by_pg_idx[dst_if.sw_if_index] n_int = len(dst_hosts) for i in range(0, n_int): dst_host = dst_hosts[i] src_host = random.choice(src_hosts) pkt_info = self.create_packet_info(src_if, dst_if) payload = self.info_to_payload(pkt_info) p = (Ether(dst=dst_host.mac, src=src_host.mac) / IP(src=src_host.ip4, dst=dst_host.ip4) / UDP(sport=1234, dport=1234) / Raw(payload)) pkt_info.data = p.copy() size = random.choice(packet_sizes) self.extend_packet(p, size) pkts.append(p) self.logger.debug("Input stream created for port %s. Length: %u pkt(s)" % (src_if.name, len(pkts))) return pkts def verify_capture(self, pg_if, capture): """ Verify captured input packet stream for defined interface. :param object pg_if: Interface to verify captured packet stream for. :param list capture: Captured packet stream. """ last_info = dict() for i in self.pg_interfaces: last_info[i.sw_if_index] = None dst_sw_if_index = pg_if.sw_if_index for packet in capture: payload_info = self.payload_to_info(str(packet[Raw])) try: ip = packet[IP] udp = packet[UDP] packet_index = payload_info.index self.assertEqual(payload_info.dst, dst_sw_if_index) self.logger.debug("Got packet on port %s: src=%u (id=%u)" % (pg_if.name, payload_info.src, packet_index)) next_info = self.get_next_packet_info_for_interface2( payload_info.src, dst_sw_if_index, last_info[payload_info.src]) last_info[payload_info.src] = next_info self.assertTrue(next_info is not None) self.assertEqual(packet_index, next_info.index) saved_packet = next_info.data # Check standard fields self.assertEqual(ip.src, saved_packet[IP].src) self.assertEqual(ip.dst, saved_packet[IP].dst) self.assertEqual(udp.sport, saved_packet[UDP].sport) self.assertEqual(udp.dport, saved_packet[UDP].dport) except: self.logger.error(ppp("Unexpected or invalid packet:", packet)) raise for i in self.pg_interfaces: remaining_packet = self.get_next_packet_info_for_interface2( i, dst_sw_if_index, last_info[i.sw_if_index]) self.assertTrue( remaining_packet is None, "Port %u: Packet expected from source %u didn't arrive" % (dst_sw_if_index, i.sw_if_index)) def run_verify_test(self): """ Create packet streams for all configured l2-pg interfaces, send all \ prepared packet streams and verify that: - all packets received correctly on all pg-l2 interfaces assigned to cross-connects - no packet received on all pg-l2 interfaces not assigned to cross-connects :raise RuntimeError: if no packet captured on l2-pg interface assigned to the cross-connect or if any packet is captured on l2-pg interface not assigned to the cross-connect. """ # Test # Create incoming packet streams for packet-generator interfaces for pg_if in self.pg_interfaces: pkts = self.create_stream(pg_if, self.pg_if_packet_sizes) pg_if.add_stream(pkts) # Enable packet capture and start packet sending self.pg_enable_capture(self.pg_interfaces) self.pg_start() # Verify # Verify outgoing packet streams per packet-generator interface for pg_if in self.pg_interfaces: if pg_if in self.pg_in_xc: capture = pg_if.get_capture( remark="interface is a cross-connect sink") self.verify_capture(pg_if, capture) elif pg_if in self.pg_not_in_xc: pg_if.assert_nothing_captured( remark="interface is not a cross-connect sink") else: raise Exception("Unexpected interface: %s" % pg_if.name) def test_l2xc_inst_01(self): """ L2XC Multi-instance test 1 - create 10 cross-connects """ # Config 1 # Create 10 cross-connects self.create_xconnects(10) # Test 1 self.run_verify_test() def test_l2xc_inst_02(self): """ L2XC Multi-instance test 2 - delete 4 cross-connects """ # Config 2 # Delete 4 cross-connects self.delete_xconnects(4) # Test 2 self.run_verify_test() def test_l2xc_inst_03(self): """ L2BD Multi-instance 3 - add new 4 cross-connects """ # Config 3 # Add new 4 cross-connects self.create_xconnects(4, start=10) # Test 3 self.run_verify_test() def test_l2xc_inst_04(self): """ L2XC Multi-instance test 4 - delete 10 cross-connects """ # Config 4 # Delete 10 cross-connects self.delete_xconnects(10, start=4) # Test 4 self.run_verify_test() if __name__ == '__main__': unittest.main(testRunner=VppTestRunner)