Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 25 additions & 5 deletions ansible/roles/test/files/ptftests/advanced-reboot.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
#
#ptf --test-dir ptftests fast-reboot --qlen=1000 --platform remote -t 'verbose=True;dut_username="admin";dut_hostname="10.0.0.243";reboot_limit_in_seconds=30;portchannel_ports_file="/tmp/portchannel_interfaces.json";vlan_ports_file="/tmp/vlan_interfaces.json";ports_file="/tmp/ports.json";dut_mac="4c:76:25:f5:48:80";default_ip_range="192.168.0.0/16";vlan_ip_range="172.0.0.0/22";arista_vms="[\"10.0.0.200\",\"10.0.0.201\",\"10.0.0.202\",\"10.0.0.203\"]"' --platform-dir ptftests --disable-vxlan --disable-geneve --disable-erspan --disable-mpls --disable-nvgre
#ptf --test-dir ptftests fast-reboot --qlen=1000 --platform remote -t 'verbose=True;dut_username="admin";dut_hostname="10.0.0.243";reboot_limit_in_seconds=30;portchannel_ports_file="/tmp/portchannel_interfaces.json";vlan_ports_file="/tmp/vlan_interfaces.json";ports_file="/tmp/ports.json";dut_mac="4c:76:25:f5:48:80";vlan_ip_range="172.0.0.0/22";arista_vms="[\"10.0.0.200\",\"10.0.0.201\",\"10.0.0.202\",\"10.0.0.203\"]"' --platform-dir ptftests --disable-vxlan --disable-geneve --disable-erspan --disable-mpls --disable-nvgre
#
#
# This test checks that DUT is able to make FastReboot procedure
Expand Down Expand Up @@ -67,6 +67,7 @@
from arista import Arista
import sad_path as sp

import fib

class StateMachine():
def __init__(self, init_state='init'):
Expand Down Expand Up @@ -133,9 +134,11 @@ def __init__(self):
self.check_param('portchannel_ports_file', '', required=True)
self.check_param('vlan_ports_file', '', required=True)
self.check_param('ports_file', '', required=True)
self.check_param('fib_info', '', required=True)

self.check_param('dut_mac', '', required=True)
self.check_param('dut_vlan_ip', '', required=True)
self.check_param('default_ip_range', '', required=True)

self.check_param('vlan_ip_range', '', required=True)
self.check_param('lo_prefix', '10.1.0.32/32', required=False)
self.check_param('lo_v6_prefix', 'fc00:1::/64', required=False)
Expand Down Expand Up @@ -257,6 +260,22 @@ def check_param(self, param, default, required = False):
raise Exception("Test parameter '%s' is required" % param)
self.test_params[param] = default

def generate_ip_range_list_by_nexthop_portlist(self, nexthop_portlist):
ip_range_list = []
for ip_range in self.fib.ipv4_ranges():
if len( set(nexthop_portlist) & set(self.fib[ip_range.get_first_ip()].get_next_hop_list())) > 0 :
ip_range_list.append(ip_range)

if len(ip_range_list) < 1 :
raise Exception("Can't forward from server to T1 packet.Please check BGP setting")

return ip_range_list


def generate_ip_addr_by_ip_range_list(self):
forward_ip_range = random.choice(self.ip_range_list)
return forward_ip_range.get_random_ip()

def random_ip(self, ip):
net_addr, mask = ip.split('/')
n_hosts = 2**(32 - int(mask))
Expand Down Expand Up @@ -480,8 +499,8 @@ def setUp(self):
self.build_peer_mapping()
self.test_params['vlan_if_port'] = self.build_vlan_if_port_mapping()

self.fib = fib.Fib(self.test_params['fib_info'])
self.vlan_ip_range = self.test_params['vlan_ip_range']
self.default_ip_range = self.test_params['default_ip_range']

self.limit = datetime.timedelta(seconds=self.test_params['reboot_limit_in_seconds'])
self.reboot_type = self.test_params['reboot_type']
Expand All @@ -507,12 +526,13 @@ def setUp(self):
self.vlan_host_map = self.generate_vlan_servers()
arp_responder_conf = self.generate_arp_responder_conf(self.vlan_host_map)
self.dump_arp_responder_config(arp_responder_conf)
self.ip_range_list = self.generate_ip_range_list_by_nexthop_portlist(self.portchannel_ports)

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_dst_addr = self.random_ip(self.test_params['default_ip_range'])
self.from_server_dst_ports = self.portchannel_ports
self.from_server_dst_addr = self.generate_ip_addr_by_ip_range_list()

self.log("Test params:")
self.log("DUT ssh: %s@%s" % (self.test_params['dut_username'], self.test_params['dut_hostname']))
Expand Down Expand Up @@ -611,7 +631,7 @@ def generate_from_t1(self):

# for each server host create a packet destinating server IP
for counter, host_port in enumerate(self.vlan_host_map):
src_addr = self.random_ip(self.default_ip_range)
src_addr = self.generate_ip_addr_by_ip_range_list()
src_port = self.random_port(self.portchannel_ports)

for server_ip in self.vlan_host_map[host_port]:
Expand Down
14 changes: 13 additions & 1 deletion ansible/roles/test/tasks/ptf_runner_reboot.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,18 @@
vars:
supervisor_host: "{{ ptf_host }}"

- include_vars: "vars/topo_{{testbed_type}}.yml"

- name: Expand properties into props
set_fact: props="{{configuration_properties['common']}}"
when: testbed_type in ['t0', 't0-56', 't0-64', 't0-116', 't0-64-32']

# Generate route file
- name: Generate route-port map information
Copy link
Contributor

Choose a reason for hiding this comment

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

can you also please update the pytest version of this test case? Similar template work is done here. The paramter to the ptfrunner is here

template: src=roles/test/templates/fib.j2
dest=/root/fib_info.txt
delegate_to: "{{ptf_host}}"

- include_tasks: ptf_runner.yml
vars:
ptf_test_name: Advanced-reboot test
Expand All @@ -59,9 +71,9 @@
- portchannel_ports_file=\"/tmp/portchannel_interfaces.json\"
- vlan_ports_file=\"/tmp/vlan_interfaces.json\"
- ports_file=\"/tmp/ports.json\"
- fib_info=\"/root/fib_info.txt\"
- dut_mac='{{ dut_mac }}'
- dut_vlan_ip='192.168.0.1'
- default_ip_range='192.168.100.0/18'
- vlan_ip_range='{{ vlan_ip_range }}'
- lo_v6_prefix='{{ lo_v6_prefix }}'
- arista_vms=\"['{{ vm_hosts | list | join("','") }}']\"
Expand Down
22 changes: 2 additions & 20 deletions ansible/roles/test/templates/fib.j2
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
::/0 {% for ifname, v in minigraph_neighbors.iteritems() %}
{% if "T2" in v.name %}{{ '[%d]' % minigraph_port_indices[ifname]}}{% if not loop.last %} {% endif %}{% endif %}{% endfor %}

{% elif testbed_type == 't0' or testbed_type == 't0-52'or testbed_type == 't0-64' or testbed_type == 't1-lag' or testbed_type == 't0-64-32' %}
{% elif testbed_type == 't0'or testbed_type == 't0-16' or testbed_type == 't0-52' or testbed_type == 't0-56' or testbed_type == 't0-64' or testbed_type == 't1-lag' or testbed_type == 't0-64-32' or testbed_type == 't0-116' %}
0.0.0.0/0 {% for portchannel, v in minigraph_portchannels.iteritems() %}
[{% for member in v.members %}{{ '%d' % minigraph_port_indices[member]}}{% if not loop.last %} {% endif %}{% endfor %}]{% if not loop.last %} {% endif %}{% endfor %}

Expand All @@ -16,9 +16,6 @@
{% elif (testbed_type == 't1-64-lag') or (testbed_type == 't1-64-lag-clet') %}
0.0.0.0/0 [0 1] [4 5] [16 17] [20 21]
::/0 [0 1] [4 5] [16 17] [20 21]
{% elif testbed_type == 't0-116' %}
0.0.0.0/0 [24 25] [26 27] [28 29] [30 31]
::/0 [24 25] [26 27] [28 29] [30 31]
{% endif %}
{#routes to uplink#}
{#Limit the number of podsets and subnets to be covered to limit script execution time#}
Expand All @@ -42,7 +39,7 @@
{% elif (testbed_type == 't1-64-lag') or (testbed_type == 't1-64-lag-clet') %}
192.168.{{ podset }}.{{ tor * 16 + subnet }}/32 [0 1] [4 5] [16 17] [20 21]
20C0:A8{{ '%02X' % podset }}:0:{{ '%02X' % (tor * 16 + subnet)}}::/64 [0 1] [4 5] [16 17] [20 21]
{% elif testbed_type == 't0' or testbed_type == 't0-52' or testbed_type == 't0-64' or testbed_type == 't0-64-32' %}
{% elif testbed_type == 't0' or testbed_type == 't0-16' or testbed_type == 't0-52' or testbed_type == 't0-56' or testbed_type == 't0-64' or testbed_type == 't0-64-32' or testbed_type == 't0-116' %}
{% set suffix = ( (podset * props.tor_number * props.max_tor_subnet_number * props.tor_subnet_size) +
(tor * props.max_tor_subnet_number * props.tor_subnet_size) +
(subnet * props.tor_subnet_size) ) %}
Expand All @@ -60,21 +57,6 @@
{{ '20%02x' % octet1 }}:{{ '%02X%02X' % (octet2, octet3) }}:0:{{ '%02X' % octet4 }}::/64 {% for portchannel, v in minigraph_portchannels.iteritems() %}
[{% for member in v.members %}{{ '%d' % minigraph_port_indices[member]}}{% if not loop.last %} {% endif %}{% endfor %}]{% if not loop.last %} {% endif %}{% endfor %}

{% endif %}
{% elif testbed_type == 't0-116' %}
{% set suffix = ( (podset * props.tor_number * props.max_tor_subnet_number * props.tor_subnet_size) +
(tor * props.max_tor_subnet_number * props.tor_subnet_size) +
(subnet * props.tor_subnet_size) ) %}
{% set octet2 = (168 + ((suffix // (256 ** 2)))) %}
{% set octet1 = (192 + (octet2 // 256)) %}
{% set octet2 = (octet2 % 256) %}
{% set octet3 = ((suffix // 256) % 256) %}
{% set octet4 = (suffix % 256) %}
{% set prefixlen_v4 = (32 - ((props.tor_subnet_size | log(2))) | int) %}
{# Skip 192.168.0.0 as it is in Vlan1000 subnet #}
{% if octet2 != 168 and octet3 != 0 and octet4 != 0 %}
{{ octet1 }}.{{ octet2 }}.{{ octet3 }}.{{ octet4 }}/{{ prefixlen_v4 }} [24 25] [26 27] [28 29] [30 31]
{{ '20%02x' % octet1 }}:{{ '%02X%02X' % (octet2, octet3) }}:0:{{ '%02X' % octet4 }}::/64 [24 25] [26 27] [28 29] [30 31]
{% endif %}
{% endif %}
{% endfor %}
Expand Down