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