]>
git.proxmox.com Git - mirror_frr.git/blob - tests/topotests/srv6_locator/test_srv6_locator.py
5 # Part of NetDEF Topology Tests
7 # Copyright (c) 2020 by
8 # LINE Corporation, Hiroki Shirokura <slank.dev@gmail.com>
10 # Permission to use, copy, modify, and/or distribute this software
11 # for any purpose with or without fee is hereby granted, provided
12 # that the above copyright notice and this permission notice appear
15 # THE SOFTWARE IS PROVIDED "AS IS" AND NETDEF DISCLAIMS ALL WARRANTIES
16 # WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
17 # MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL NETDEF BE LIABLE FOR
18 # ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY
19 # DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
20 # WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
21 # ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
27 Test for SRv6 manager on zebra
36 CWD
= os
.path
.dirname(os
.path
.realpath(__file__
))
37 sys
.path
.append(os
.path
.join(CWD
, "../"))
39 # pylint: disable=C0413
40 from lib
import topotest
41 from lib
.topogen
import Topogen
, TopoRouter
, get_topogen
42 from lib
.topolog
import logger
44 pytestmark
= [pytest
.mark
.bgpd
, pytest
.mark
.sharpd
]
47 def open_json_file(filename
):
49 with
open(filename
, "r") as f
:
52 assert False, "Could not read file {}".format(filename
)
55 def setup_module(mod
):
56 tgen
= Topogen({None: "r1"}, mod
.__name
__)
58 for rname
, router
in tgen
.routers().items():
59 router
.run("/bin/bash {}/{}/setup.sh".format(CWD
, rname
))
61 TopoRouter
.RD_ZEBRA
, os
.path
.join(CWD
, "{}/zebra.conf".format(rname
))
64 TopoRouter
.RD_BGP
, os
.path
.join(CWD
, "{}/bgpd.conf".format(rname
))
67 TopoRouter
.RD_SHARP
, os
.path
.join(CWD
, "{}/sharpd.conf".format(rname
))
72 def teardown_module(mod
):
79 if tgen
.routers_have_failure():
80 pytest
.skip(tgen
.errors
)
81 router
= tgen
.gears
["r1"]
83 def _check_srv6_locator(router
, expected_locator_file
):
84 logger
.info("checking zebra locator status")
85 output
= json
.loads(router
.vtysh_cmd("show segment-routing srv6 locator json"))
86 expected
= open_json_file("{}/{}".format(CWD
, expected_locator_file
))
87 return topotest
.json_cmp(output
, expected
)
89 def _check_sharpd_chunk(router
, expected_chunk_file
):
90 logger
.info("checking sharpd locator chunk status")
91 output
= json
.loads(router
.vtysh_cmd("show sharp segment-routing srv6 json"))
92 expected
= open_json_file("{}/{}".format(CWD
, expected_chunk_file
))
93 return topotest
.json_cmp(output
, expected
)
95 def check_srv6_locator(router
, expected_file
):
96 func
= functools
.partial(_check_srv6_locator
, router
, expected_file
)
97 success
, result
= topotest
.run_and_expect(func
, None, count
=10, wait
=0.5)
98 assert result
is None, "Failed"
100 def check_sharpd_chunk(router
, expected_file
):
101 func
= functools
.partial(_check_sharpd_chunk
, router
, expected_file
)
102 success
, result
= topotest
.run_and_expect(func
, None, count
=10, wait
=0.5)
103 assert result
is None, "Failed"
106 # If you want to stop some specific line and start interactive shell,
107 # please use tgen.mininet_cli() to start it.
109 logger
.info("Test1 for Locator Configuration")
110 check_srv6_locator(router
, "expected_locators1.json")
111 check_sharpd_chunk(router
, "expected_chunks1.json")
113 logger
.info("Test2 get chunk for locator loc1")
114 router
.vtysh_cmd("sharp srv6-manager get-locator-chunk loc1")
115 check_srv6_locator(router
, "expected_locators2.json")
116 check_sharpd_chunk(router
, "expected_chunks2.json")
118 logger
.info("Test3 release chunk for locator loc1")
119 router
.vtysh_cmd("sharp srv6-manager release-locator-chunk loc1")
120 check_srv6_locator(router
, "expected_locators3.json")
121 check_sharpd_chunk(router
, "expected_chunks3.json")
123 logger
.info("Test4 additional locator loc3")
131 prefix 2001:db8:3:3::/64
134 check_srv6_locator(router
, "expected_locators4.json")
135 check_sharpd_chunk(router
, "expected_chunks4.json")
137 logger
.info("Test5 delete locator and chunk is released automatically")
147 check_srv6_locator(router
, "expected_locators5.json")
148 check_sharpd_chunk(router
, "expected_chunks5.json")
150 logger
.info("Test6 delete srv6 all configuration")
158 check_srv6_locator(router
, "expected_locators6.json")
159 check_sharpd_chunk(router
, "expected_chunks6.json")
162 if __name__
== "__main__":
163 args
= ["-s"] + sys
.argv
[1:]
164 sys
.exit(pytest
.main(args
))