]>
Commit | Line | Data |
---|---|---|
1 | #!/usr/bin/env python | |
2 | # SPDX-License-Identifier: ISC | |
3 | ||
4 | # Copyright (c) 2019-2020 by | |
5 | # Donatas Abraitis <donatas.abraitis@gmail.com> | |
6 | # | |
7 | ||
8 | """ | |
9 | Test if default-originate works without route-map. | |
10 | """ | |
11 | ||
12 | import os | |
13 | import sys | |
14 | import json | |
15 | import pytest | |
16 | import functools | |
17 | ||
18 | CWD = os.path.dirname(os.path.realpath(__file__)) | |
19 | sys.path.append(os.path.join(CWD, "../")) | |
20 | ||
21 | # pylint: disable=C0413 | |
22 | from lib import topotest | |
23 | from lib.topogen import Topogen, TopoRouter, get_topogen | |
24 | ||
25 | pytestmark = [pytest.mark.bgpd] | |
26 | ||
27 | ||
28 | def build_topo(tgen): | |
29 | for routern in range(1, 3): | |
30 | tgen.add_router("r{}".format(routern)) | |
31 | ||
32 | switch = tgen.add_switch("s1") | |
33 | switch.add_link(tgen.gears["r1"]) | |
34 | switch.add_link(tgen.gears["r2"]) | |
35 | ||
36 | ||
37 | def setup_module(mod): | |
38 | tgen = Topogen(build_topo, mod.__name__) | |
39 | tgen.start_topology() | |
40 | ||
41 | router_list = tgen.routers() | |
42 | ||
43 | for i, (rname, router) in enumerate(router_list.items(), 1): | |
44 | router.load_config( | |
45 | TopoRouter.RD_ZEBRA, os.path.join(CWD, "{}/zebra.conf".format(rname)) | |
46 | ) | |
47 | router.load_config( | |
48 | TopoRouter.RD_BGP, os.path.join(CWD, "{}/bgpd.conf".format(rname)) | |
49 | ) | |
50 | ||
51 | tgen.start_router() | |
52 | ||
53 | ||
54 | def teardown_module(mod): | |
55 | tgen = get_topogen() | |
56 | tgen.stop_topology() | |
57 | ||
58 | ||
59 | def test_bgp_default_originate_route_map(): | |
60 | tgen = get_topogen() | |
61 | ||
62 | if tgen.routers_have_failure(): | |
63 | pytest.skip(tgen.errors) | |
64 | ||
65 | def _bgp_check_if_received(): | |
66 | output = json.loads( | |
67 | tgen.gears["r2"].vtysh_cmd("show ip bgp neighbor 192.168.255.1 json") | |
68 | ) | |
69 | expected = { | |
70 | "192.168.255.1": { | |
71 | "bgpState": "Established", | |
72 | "addressFamilyInfo": {"ipv4Unicast": {"acceptedPrefixCounter": 1}}, | |
73 | } | |
74 | } | |
75 | return topotest.json_cmp(output, expected) | |
76 | ||
77 | def _bgp_check_if_originated(): | |
78 | output = json.loads(tgen.gears["r1"].vtysh_cmd("show ip bgp summary json")) | |
79 | expected = {"ipv4Unicast": {"peers": {"192.168.255.2": {"pfxSnt": 1}}}} | |
80 | return topotest.json_cmp(output, expected) | |
81 | ||
82 | def _bgp_default_route_is_valid(router): | |
83 | output = json.loads(router.vtysh_cmd("show ip bgp 0.0.0.0/0 json")) | |
84 | expected = {"paths": [{"valid": True}]} | |
85 | return topotest.json_cmp(output, expected) | |
86 | ||
87 | test_func = functools.partial(_bgp_check_if_received) | |
88 | success, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5) | |
89 | assert result is None, "No 0.0.0.0/0 at r2 from r1" | |
90 | ||
91 | test_func = functools.partial(_bgp_check_if_originated) | |
92 | success, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5) | |
93 | assert result is None, "No 0.0.0.0/0 from r1 to r2" | |
94 | ||
95 | test_func = functools.partial(_bgp_default_route_is_valid, tgen.gears["r2"]) | |
96 | success, result = topotest.run_and_expect(test_func, None, count=30, wait=0.5) | |
97 | assert result is None, "Failed to see 0.0.0.0/0 in r2" | |
98 | ||
99 | ||
100 | if __name__ == "__main__": | |
101 | args = ["-s"] + sys.argv[1:] | |
102 | sys.exit(pytest.main(args)) |