diff --git a/ansible/roles/test/files/ptftests/arista.py b/ansible/roles/test/files/ptftests/arista.py index e38dce29da6..a16d879ee89 100644 --- a/ansible/roles/test/files/ptftests/arista.py +++ b/ansible/roles/test/files/ptftests/arista.py @@ -6,6 +6,7 @@ import paramiko import pickle import ast +import six from operator import itemgetter from collections import defaultdict @@ -104,7 +105,7 @@ def do_cmd(self, cmd, prompt=None): continue try: - input_buffer += self.shell.recv(16384) + input_buffer += six.ensure_str(self.shell.recv(16384)) except Exception as err: msg = 'Receive ssh command result error: cmd={} msg={} type={}'.format( cmd, err, type(err)) @@ -391,7 +392,7 @@ def parse_logs(self, data): return result def parse_lacp(self, output): - return output.find('Bundled') != -1 + return six.ensure_str(output).find('Bundled') != -1 def parse_bgp_neighbor_once(self, output): is_gr_ipv4_enabled = False diff --git a/ansible/roles/test/files/ptftests/advanced-reboot.py b/ansible/roles/test/files/ptftests/py3/advanced-reboot.py similarity index 98% rename from ansible/roles/test/files/ptftests/advanced-reboot.py rename to ansible/roles/test/files/ptftests/py3/advanced-reboot.py index 87fe77ebef7..cc615a4c96c 100644 --- a/ansible/roles/test/files/ptftests/advanced-reboot.py +++ b/ansible/roles/test/files/ptftests/py3/advanced-reboot.py @@ -679,7 +679,7 @@ def setUp(self): self.random_vlan = random.choice(self.vlan_ports) self.from_server_src_port = self.random_vlan - self.from_server_src_addr = random.choice(self.vlan_host_map[self.random_vlan].keys()) + self.from_server_src_addr = random.choice(list(self.vlan_host_map[self.random_vlan].keys())) self.from_server_src_mac = self.hex_to_mac(self.vlan_host_map[self.random_vlan][self.from_server_src_addr]) self.from_server_dst_addr = self.random_ip(self.test_params['default_ip_range']) self.from_server_dst_ports = self.dualtor_portchannel_ports if self.is_dualtor else self.portchannel_ports @@ -791,7 +791,7 @@ def generate_from_t1(self): ip_ttl=255, tcp_dport=5000) - self.from_t1.append((src_port, str(packet))) + self.from_t1.append((src_port, bytes(packet))) # expect any packet with dport 5000 exp_packet = simple_tcp_packet( @@ -828,21 +828,21 @@ def generate_from_vlan(self): self.from_vlan_exp_packet.set_do_not_care_scapy(scapy.Ether, "src") self.from_vlan_exp_packet.set_do_not_care_scapy(scapy.Ether, "dst") - self.from_vlan_packet = str(packet) + self.from_vlan_packet = bytes(packet) def generate_ping_dut_lo(self): self.ping_dut_packets = [] dut_lo_ipv4 = self.lo_prefix.split('/')[0] for src_port in self.active_port_indices if self.is_dualtor else self.vlan_host_ping_map: - src_addr = random.choice(self.vlan_host_ping_map[src_port].keys()) + src_addr = random.choice(list(self.vlan_host_ping_map[src_port].keys())) src_mac = self.hex_to_mac( self.vlan_host_ping_map[src_port][src_addr]) packet = simple_icmp_packet(eth_src=src_mac, eth_dst=self.vlan_mac, ip_src=src_addr, ip_dst=dut_lo_ipv4) - self.ping_dut_packets.append((src_port, str(packet))) + self.ping_dut_packets.append((src_port, bytes(packet))) exp_packet = simple_icmp_packet(eth_src=self.vlan_mac, ip_src=dut_lo_ipv4, @@ -862,7 +862,7 @@ def generate_arp_ping_packet(self): vlan = next(k for k, v in self.ports_per_vlan.items() if v) vlan_ip_range = self.vlan_ip_range[vlan] - vlan_port_canadiates = range(len(self.ports_per_vlan[vlan])) + vlan_port_canadiates = list(range(len(self.ports_per_vlan[vlan]))) vlan_port_canadiates.remove(0) # subnet prefix vlan_port_canadiates.remove(1) # subnet IP on dut src_idx = random.choice(vlan_port_canadiates) @@ -881,7 +881,7 @@ def generate_arp_ping_packet(self): (src_idx, src_port, src_mac, src_addr)) self.log("ARP ping: dst idx %d port %d addr %s" % (dst_idx, dst_port, dst_addr)) - self.arp_ping = str(packet) + self.arp_ping = bytes(packet) self.arp_resp = Mask(expect) self.arp_resp.set_do_not_care_scapy(scapy.Ether, 'src') self.arp_resp.set_do_not_care_scapy(scapy.ARP, 'hwtype') @@ -1673,7 +1673,7 @@ def send_in_background(self, packets_list=None): packet.load = payload from_port = src_port sent_count_t1_to_vlan += 1 - testutils.send_packet(self, from_port, str(packet)) + testutils.send_packet(self, from_port, bytes(packet)) self.sent_packet_count = self.sent_packet_count + 1 self.log("Sent count vlan to t1: {}".format(sent_count_vlan_to_t1)) @@ -1825,7 +1825,7 @@ def check_tcp_payload(self, packet): It returns True if a packet is not corrupted and has a valid TCP sequential TCP Payload """ try: - int(str(packet[scapyall.TCP].payload) + int(bytes(packet[scapyall.TCP].payload) ) in range(self.sent_packet_count) return True except Exception: @@ -1835,12 +1835,12 @@ def no_flood(self, packet): """ This method filters packets which are unique (i.e. no floods). """ - if (not int(str(packet[scapyall.TCP].payload)) in self.unique_id) and \ + if (not int(bytes(packet[scapyall.TCP].payload)) in self.unique_id) and \ (packet[scapyall.Ether].src == self.dut_mac or packet[scapyall.Ether].src == self.vlan_mac): # This is a unique (no flooded) received packet. # for dualtor, t1->server rcvd pkt will have src MAC as vlan_mac, # and server->t1 rcvd pkt will have src MAC as dut_mac - self.unique_id.append(int(str(packet[scapyall.TCP].payload))) + self.unique_id.append(int(bytes(packet[scapyall.TCP].payload))) return True elif packet[scapyall.Ether].dst == self.dut_mac or packet[scapyall.Ether].dst == self.vlan_mac: # This is a sent packet. @@ -1895,7 +1895,7 @@ def examine_flow(self, filename=None): # Re-arrange packets, if delayed, by Payload ID and Timestamp: packets = sorted(filtered_packets, key=lambda packet: ( - int(str(packet[scapyall.TCP].payload)), packet.time)) + int(bytes(packet[scapyall.TCP].payload)), packet.time)) self.lost_packets = dict() self.max_disrupt, self.total_disruption = 0, 0 sent_packets = dict() @@ -1919,7 +1919,7 @@ def examine_flow(self, filename=None): # for dualtor both MACs are needed: # t1->server sent pkt will have dst MAC as dut_mac, # and server->t1 sent pkt will have dst MAC as vlan_mac - sent_payload = int(str(packet[scapyall.TCP].payload)) + sent_payload = int(bytes(packet[scapyall.TCP].payload)) sent_packets[sent_payload] = packet.time sent_counter += 1 continue @@ -1929,7 +1929,7 @@ def examine_flow(self, filename=None): # t1->server rcvd pkt will have src MAC as vlan_mac, # and server->t1 rcvd pkt will have src MAC as dut_mac received_time = packet.time - received_payload = int(str(packet[scapyall.TCP].payload)) + received_payload = int(bytes(packet[scapyall.TCP].payload)) if (received_payload % 5) == 0: # From vlan to T1. received_vlan_to_t1 += 1 else: @@ -2250,8 +2250,10 @@ def log_vlan_state_change(self, reachable): def reachability_watcher(self): # This function watches the reachability of the CPU port, and ASIC. It logs the state # changes for future analysis + self.log('Reachability watcher started') self.watcher_is_stopped.clear() # Watcher is running. while self.watching: + self.log('Reachability watcher - checking data plane') if self.dataplane_io_lock.acquire(False): vlan_to_t1, t1_to_vlan = self.ping_data_plane(self.light_probe) reachable = (t1_to_vlan > self.nr_vl_pkts * 0.7 and @@ -2265,6 +2267,9 @@ def reachability_watcher(self): self.log_asic_state_change( reachable, partial, t1_to_vlan, flooding) self.dataplane_io_lock.release() + else: + self.log("Reachability watcher - Dataplane is busy. Skipping the check") + self.log('Reachability watcher - checking control plane') total_rcv_pkt_cnt = self.pingDut() reachable = total_rcv_pkt_cnt > 0 and total_rcv_pkt_cnt > self.ping_dut_pkts * 0.7 partial = total_rcv_pkt_cnt > 0 and total_rcv_pkt_cnt < self.ping_dut_pkts @@ -2274,6 +2279,7 @@ def reachability_watcher(self): reachable = total_rcv_pkt_cnt >= self.arp_ping_pkts self.log_vlan_state_change(reachable) self.watcher_is_running.set() # Watcher is running. + self.log('Reachability watcher stopped') self.watcher_is_stopped.set() # Watcher has stopped. self.watcher_is_running.clear() # Watcher has stopped. diff --git a/ansible/roles/test/files/ptftests/py3/arista.py b/ansible/roles/test/files/ptftests/py3/arista.py new file mode 120000 index 00000000000..f4706de8587 --- /dev/null +++ b/ansible/roles/test/files/ptftests/py3/arista.py @@ -0,0 +1 @@ +../arista.py \ No newline at end of file diff --git a/ansible/roles/test/files/ptftests/py3/host_device.py b/ansible/roles/test/files/ptftests/py3/host_device.py new file mode 120000 index 00000000000..1faa74b4d4f --- /dev/null +++ b/ansible/roles/test/files/ptftests/py3/host_device.py @@ -0,0 +1 @@ +../host_device.py \ No newline at end of file diff --git a/ansible/roles/test/files/ptftests/py3/sad_path.py b/ansible/roles/test/files/ptftests/py3/sad_path.py new file mode 120000 index 00000000000..fb6b23d4944 --- /dev/null +++ b/ansible/roles/test/files/ptftests/py3/sad_path.py @@ -0,0 +1 @@ +../sad_path.py \ No newline at end of file diff --git a/ansible/roles/test/files/ptftests/sonic.py b/ansible/roles/test/files/ptftests/sonic.py index 5569782217c..2c6ad83b24c 100644 --- a/ansible/roles/test/files/ptftests/sonic.py +++ b/ansible/roles/test/files/ptftests/sonic.py @@ -10,7 +10,7 @@ import scapy.all as scapyall import ast import socket - +import six import host_device @@ -309,7 +309,7 @@ def check_lag_flaps(self, interface, log_lines, start_time): return 0, num_lag_flaps def parse_lacp(self, output): - return output.find('Bundled') != -1 + return six.ensure_str(output).find('Bundled') != -1 def parse_bgp_neighbor_once(self, output): is_gr_ipv4_enabled = False diff --git a/tests/common/fixtures/advanced_reboot.py b/tests/common/fixtures/advanced_reboot.py index 260f1c520bd..61397533581 100644 --- a/tests/common/fixtures/advanced_reboot.py +++ b/tests/common/fixtures/advanced_reboot.py @@ -756,7 +756,8 @@ def __runPtfRunner(self, rebootOper=None): params=params, log_file='/tmp/advanced-reboot.ReloadTest.log', module_ignore_errors=self.moduleIgnoreErrors, - timeout=REBOOT_CASE_TIMEOUT + timeout=REBOOT_CASE_TIMEOUT, + is_python3=True ) return result