]>
git.proxmox.com Git - mirror_frr.git/blob - tests/topotests/srv6_locator_custom_bits_length/test_srv6_locator.py
2 # SPDX-License-Identifier: ISC
4 # Copyright (c) 2022, University of Rome Tor Vergata
5 # Authored by Carmine Scarpitta <carmine.scarpitta@uniroma2.it>
10 Test for SRv6 manager on zebra
19 CWD
= os
.path
.dirname(os
.path
.realpath(__file__
))
20 sys
.path
.append(os
.path
.join(CWD
, "../"))
22 # pylint: disable=C0413
23 from lib
import topotest
24 from lib
.topogen
import Topogen
, TopoRouter
, get_topogen
25 from lib
.topolog
import logger
27 pytestmark
= [pytest
.mark
.bgpd
, pytest
.mark
.sharpd
]
30 def open_json_file(filename
):
32 with
open(filename
, "r") as f
:
35 assert False, "Could not read file {}".format(filename
)
38 def setup_module(mod
):
39 tgen
= Topogen({None: "r1"}, mod
.__name
__)
41 for rname
, router
in tgen
.routers().items():
42 router
.run("/bin/bash {}/{}/setup.sh".format(CWD
, rname
))
44 TopoRouter
.RD_ZEBRA
, os
.path
.join(CWD
, "{}/zebra.conf".format(rname
))
47 TopoRouter
.RD_BGP
, os
.path
.join(CWD
, "{}/bgpd.conf".format(rname
))
50 TopoRouter
.RD_SHARP
, os
.path
.join(CWD
, "{}/sharpd.conf".format(rname
))
55 def teardown_module(mod
):
62 if tgen
.routers_have_failure():
63 pytest
.skip(tgen
.errors
)
64 router
= tgen
.gears
["r1"]
66 def _check_srv6_locator(router
, expected_locator_file
):
67 logger
.info("checking zebra locator status")
68 output
= json
.loads(router
.vtysh_cmd("show segment-routing srv6 locator json"))
69 expected
= open_json_file("{}/{}".format(CWD
, expected_locator_file
))
70 return topotest
.json_cmp(output
, expected
)
72 def _check_sharpd_chunk(router
, expected_chunk_file
):
73 logger
.info("checking sharpd locator chunk status")
74 output
= json
.loads(router
.vtysh_cmd("show sharp segment-routing srv6 json"))
75 expected
= open_json_file("{}/{}".format(CWD
, expected_chunk_file
))
76 return topotest
.json_cmp(output
, expected
)
78 def check_srv6_locator(router
, expected_file
):
79 func
= functools
.partial(_check_srv6_locator
, router
, expected_file
)
80 success
, result
= topotest
.run_and_expect(func
, None, count
=10, wait
=0.5)
81 assert result
is None, "Failed"
83 def check_sharpd_chunk(router
, expected_file
):
84 func
= functools
.partial(_check_sharpd_chunk
, router
, expected_file
)
85 success
, result
= topotest
.run_and_expect(func
, None, count
=10, wait
=0.5)
86 assert result
is None, "Failed"
89 # If you want to stop some specific line and start interactive shell,
90 # please use tgen.mininet_cli() to start it.
92 logger
.info("Test1 for Locator Configuration")
93 check_srv6_locator(router
, "expected_locators1.json")
94 check_sharpd_chunk(router
, "expected_chunks1.json")
96 logger
.info("Test2 get chunk for locator loc1")
97 router
.vtysh_cmd("sharp srv6-manager get-locator-chunk loc1")
98 check_srv6_locator(router
, "expected_locators2.json")
99 check_sharpd_chunk(router
, "expected_chunks2.json")
101 logger
.info("Test3 release chunk for locator loc1")
102 router
.vtysh_cmd("sharp srv6-manager release-locator-chunk loc1")
103 check_srv6_locator(router
, "expected_locators3.json")
104 check_sharpd_chunk(router
, "expected_chunks3.json")
106 logger
.info("Test4 additional locator loc3")
114 prefix 2001:db8:3::/48 block-len 32 node-len 16 func-bits 16
117 check_srv6_locator(router
, "expected_locators4.json")
118 check_sharpd_chunk(router
, "expected_chunks4.json")
120 logger
.info("Test5 delete locator and chunk is released automatically")
130 check_srv6_locator(router
, "expected_locators5.json")
131 check_sharpd_chunk(router
, "expected_chunks5.json")
133 logger
.info("Test6 delete srv6 all configuration")
141 check_srv6_locator(router
, "expected_locators6.json")
142 check_sharpd_chunk(router
, "expected_chunks6.json")
145 if __name__
== "__main__":
146 args
= ["-s"] + sys
.argv
[1:]
147 sys
.exit(pytest
.main(args
))