Skip to content
5 changes: 3 additions & 2 deletions ansible/roles/test/files/ptftests/arista.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
import paramiko
import pickle
import ast
import six

from operator import itemgetter
from collections import defaultdict
Expand Down Expand Up @@ -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))
Expand Down Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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(
Expand Down Expand Up @@ -824,7 +824,7 @@ def generate_from_vlan(self):
tcp_dport=5000
)

self.from_servers.append((from_port, str(packet)))
self.from_servers.append((from_port, bytes(packet)))

exp_packet = simple_tcp_packet(
ip_dst=self.from_server_dst_addr,
Expand All @@ -849,14 +849,14 @@ def generate_ping_dut_lo(self):
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,
Expand All @@ -876,7 +876,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)
Expand All @@ -895,7 +895,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')
Expand Down Expand Up @@ -1687,7 +1687,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))
Expand Down Expand Up @@ -1839,7 +1839,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:
Expand All @@ -1849,12 +1849,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.
Expand Down Expand Up @@ -1909,7 +1909,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()
Expand All @@ -1933,7 +1933,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
Expand All @@ -1943,7 +1943,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:
Expand Down Expand Up @@ -2264,8 +2264,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
Expand All @@ -2279,6 +2281,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
Expand All @@ -2288,14 +2293,14 @@ 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.

def pingFromServers(self):
for _ in range(self.nr_pc_pkts):
entry = next(self.watcher_from_server_iter)
testutils.send_packet(self, *entry)

total_rcv_pkt_cnt = testutils.count_matched_packets_all_ports(
self, self.from_vlan_exp_packet, self.from_server_dst_ports, timeout=self.PKT_TOUT)

Expand Down
1 change: 1 addition & 0 deletions ansible/roles/test/files/ptftests/py3/arista.py
1 change: 1 addition & 0 deletions ansible/roles/test/files/ptftests/py3/host_device.py
1 change: 1 addition & 0 deletions ansible/roles/test/files/ptftests/py3/sad_path.py
4 changes: 2 additions & 2 deletions ansible/roles/test/files/ptftests/sonic.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
import scapy.all as scapyall
import ast
import socket

import six
import host_device


Expand Down Expand Up @@ -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
Expand Down
3 changes: 2 additions & 1 deletion tests/common/fixtures/advanced_reboot.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Where is this is_python3 argument being used?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In ptf_runner.py, if is_python3==true, Python3 is used to run the PTF script.

)

return result
Expand Down