summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDonald Sharp <donaldsharp72@gmail.com>2025-04-13 08:43:46 -0400
committerGitHub <noreply@github.com>2025-04-13 08:43:46 -0400
commit872ace0f0711eb7b7e2272cdd087b77e5af81439 (patch)
treecc0ff8f615f6ef4771e30eacd9b6bf3e2240bcdc
parentf7a6712946e4b0ca9a80ee200393f1b9fa5b452d (diff)
parent2401fb2b8dba873aa4fe97c090b89c59a7802a94 (diff)
Merge pull request #18650 from FRRouting/mergify/bp/stable/10.3/pr-18649
Rpki testing and bug fix (backport #18649)
-rw-r--r--bgpd/bgp_rpki.c5
-rw-r--r--tests/topotests/bgp_rpki_topo1/test_bgp_rpki_topo1.py115
2 files changed, 119 insertions, 1 deletions
diff --git a/bgpd/bgp_rpki.c b/bgpd/bgp_rpki.c
index 04a709b350..aefb58094b 100644
--- a/bgpd/bgp_rpki.c
+++ b/bgpd/bgp_rpki.c
@@ -529,7 +529,10 @@ static struct rtr_mgr_group *get_groups(struct list *cache_list)
inline bool is_synchronized(struct rpki_vrf *rpki_vrf)
{
- return rpki_vrf->rtr_is_synced;
+ if (is_running(rpki_vrf))
+ return rpki_vrf->rtr_is_synced;
+ else
+ return false;
}
inline bool is_running(struct rpki_vrf *rpki_vrf)
diff --git a/tests/topotests/bgp_rpki_topo1/test_bgp_rpki_topo1.py b/tests/topotests/bgp_rpki_topo1/test_bgp_rpki_topo1.py
index 5b775aa6cb..bdf905feba 100644
--- a/tests/topotests/bgp_rpki_topo1/test_bgp_rpki_topo1.py
+++ b/tests/topotests/bgp_rpki_topo1/test_bgp_rpki_topo1.py
@@ -477,6 +477,121 @@ def test_bgp_ecommunity_rpki():
assert result is None, "Received RPKI extended community"
+def test_show_bgp_rpki_as_number():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ for rname in ["r1", "r3"]:
+ logger.info("{}: checking if rtrd is running".format(rname))
+ if rtrd_process[rname].poll() is not None:
+ pytest.skip(tgen.errors)
+
+ step("Check RPKI prefixes for ASN 65531")
+
+ rname = "r2"
+ output = json.loads(tgen.gears[rname].vtysh_cmd("show rpki as-number 65531 json"))
+
+ # Expected output should show no prefixes for this ASN
+ expected = {"ipv4PrefixCount": 0, "ipv6PrefixCount": 0, "prefixes": []}
+
+ assert output == expected, "Found unexpected RPKI prefixes for ASN 65531"
+
+
+def test_show_bgp_rpki_as_number_65530():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ for rname in ["r1", "r3"]:
+ logger.info("{}: checking if rtrd is running".format(rname))
+ if rtrd_process[rname].poll() is not None:
+ pytest.skip(tgen.errors)
+
+ step("Check RPKI prefixes for ASN 65530")
+
+ rname = "r2"
+ output = json.loads(tgen.gears[rname].vtysh_cmd("show rpki as-number 65530 json"))
+
+ expected = {
+ "prefixes": [
+ {
+ "prefix": "198.51.100.0",
+ "prefixLenMin": 24,
+ "prefixLenMax": 24,
+ "asn": 65530,
+ },
+ {
+ "prefix": "203.0.113.0",
+ "prefixLenMin": 24,
+ "prefixLenMax": 24,
+ "asn": 65530,
+ },
+ ],
+ "ipv4PrefixCount": 2,
+ "ipv6PrefixCount": 0,
+ }
+
+ assert (
+ output == expected
+ ), "RPKI prefixes for ASN 65530 do not match expected output"
+
+
+def test_rpki_stop_and_check_connection():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ for rname in ["r1", "r3"]:
+ logger.info("{}: checking if rtrd is running".format(rname))
+ if rtrd_process[rname].poll() is not None:
+ pytest.skip(tgen.errors)
+
+ step("Stop RPKI on r2")
+ rname = "r2"
+ tgen.gears[rname].vtysh_cmd("rpki stop")
+
+ step("Check RPKI cache connection status")
+ output = json.loads(tgen.gears[rname].vtysh_cmd("show rpki cache-connection json"))
+
+ expected = {"error": "No connection to RPKI cache server."}
+ assert (
+ output == expected
+ ), "RPKI cache connection status does not show as disconnected"
+
+
+def test_rpki_start_and_check_connection():
+ tgen = get_topogen()
+
+ if tgen.routers_have_failure():
+ pytest.skip(tgen.errors)
+
+ for rname in ["r1", "r3"]:
+ logger.info("{}: checking if rtrd is running".format(rname))
+ if rtrd_process[rname].poll() is not None:
+ pytest.skip(tgen.errors)
+
+ step("Start RPKI on r2")
+ rname = "r2"
+ tgen.gears[rname].vtysh_cmd("rpki start")
+
+ def _check_rpki_connection():
+ output = json.loads(
+ tgen.gears[rname].vtysh_cmd("show rpki cache-connection json")
+ )
+ # We expect to see a connected group and at least one connection
+ return "connectedGroup" in output and "connections" in output
+
+ step("Check RPKI cache connection status")
+ _, result = topotest.run_and_expect(
+ _check_rpki_connection, True, count=60, wait=0.5
+ )
+ assert result, "RPKI cache connection did not establish after start"
+
+
if __name__ == "__main__":
args = ["-s"] + sys.argv[1:]
sys.exit(pytest.main(args))