summaryrefslogtreecommitdiff
path: root/tests/topotests/lib/common_check.py
blob: be3241fd2022548e0903abecfd79152095750474 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#!/usr/bin/env python
# SPDX-License-Identifier: ISC
#
# common_check.py
#
# Copyright 2024 6WIND S.A.

#
import json
from lib import topotest


def ip_check_path_selection(router, ipaddr_str, expected, vrf_name=None):
    if vrf_name:
        cmdstr = f'show ip route vrf {vrf_name} {ipaddr_str} json'
    else:
        cmdstr = f'show ip route {ipaddr_str} json'
    try:
        output = json.loads(router.vtysh_cmd(cmdstr))
    except:
        output = {}

    ret = topotest.json_cmp(output, expected)
    if ret is None:
        num_nh_expected = len(expected[ipaddr_str][0]["nexthops"])
        num_nh_observed = len(output[ipaddr_str][0]["nexthops"])
        if num_nh_expected == num_nh_observed:
            return ret
        return "{}, prefix {} does not have the correct number of nexthops : observed {}, expected {}".format(
            router.name, ipaddr_str, num_nh_observed, num_nh_expected
        )
    return ret


def iproute2_check_path_selection(router, ipaddr_str, expected, vrf_name=None):
    if not topotest.iproute2_is_json_capable():
        return None

    if vrf_name:
        cmdstr = f'ip -json route show vrf {vrf_name} {ipaddr_str}'
    else:
        cmdstr = f'ip -json route show {ipaddr_str}'
    try:
        output = json.loads(cmdstr)
    except:
        output = []

    return topotest.json_cmp(output, expected)