Skip to content

Commit 4129e6d

Browse files
committed
Add comprehensive test coverage for RFCs 8326, 8365, 8402, 9135, 9136, 9234, 9252, 9256, 9552
- Add unit tests for new assessment classes: - GracefulShutdownAssessments (RFC 8326) - EVPNNVOAssessments (RFC 8365) - SegmentRoutingAssessments (RFC 8402) - IRBAssessments (RFC 9135) - EVPNIPPrefixAssessments (RFC 9136) - BGPRoleAssessments (RFC 9234) - SRv6BGPOverlayAssessments (RFC 9252) - SRPolicyAssessments (RFC 9256) - BGP_LS_UpdatedAssessments (RFC 9552) - Update README.md with new test categories and RFC references - All 101 unit tests pass - Ruff/black/flake8 checks pass
1 parent af94224 commit 4129e6d

2 files changed

Lines changed: 321 additions & 0 deletions

File tree

README.md

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -853,6 +853,152 @@ Tests for BGP in Large-Scale Data Centers per RFC 7938:
853853
- DCB-009: Route Advertisement No Summarization
854854
- DCB-010: ECMP with Link Bandwidth
855855

856+
### graceful_shutdown
857+
Tests for BGP Graceful Shutdown per RFC 8326:
858+
- GSD-001: Graceful Shutdown Community Value (0xFFFF0000)
859+
- GSD-002: Graceful Shutdown LOCAL_PREF 0
860+
- GSD-003: Graceful Shutdown with NO_EXPORT
861+
- GSD-004: Graceful Shutdown Route Selection
862+
- GSD-005: Graceful Shutdown Maintenance Window
863+
- GSD-006: Graceful Shutdown Traffic Rerouting
864+
- GSD-007: Graceful Shutdown Restoration
865+
- GSD-008: Graceful Shutdown in EBGP
866+
- GSD-009: Graceful Shutdown in IBGP
867+
- GSD-010: Graceful Shutdown Community Recognition
868+
869+
### evpn_nvo
870+
Tests for EVPN Network Virtualization Overlay per RFC 8365:
871+
- EVPN-TUN-08: Tunnel Type VXLAN
872+
- EVPN-TUN-09: Tunnel Type NVGRE
873+
- EVPN-TUN-10: Tunnel Type MPLS
874+
- EVPN-TUN-11: Tunnel Type MPLS in GRE
875+
- EVPN-TUN-12: Tunnel Type VXLAN-GPE
876+
- EVPN-001: EVPN VXLAN Encapsulation
877+
- EVPN-002: EVPN VXLAN-GPE Encapsulation
878+
- EVPN-003: VNI Encoding 24-bit
879+
- EVPN-004: RT Auto-Derivation VID
880+
- EVPN-005: RT Auto-Derivation VXLAN
881+
882+
### segment_routing
883+
Tests for Segment Routing per RFC 8402:
884+
- SR-ALGO-0: SR Algorithm SPF
885+
- SR-ALGO-1: SR Algorithm Strict SPF
886+
- SR-PEER-1: Peering Segment PeerNode
887+
- SR-PEER-2: Peering Segment PeerAdj
888+
- SR-PEER-3: Peering Segment PeerSet
889+
- SR-001: SR-MPLS SID Label
890+
- SR-002: SR-MPLS SID within SRGB
891+
- SR-003: BGP-Prefix Segment
892+
- SR-004: PeerNode SID
893+
- SR-005: PeerAdj SID
894+
- SR-006: PeerSet SID
895+
896+
### evpn_irb
897+
Tests for EVPN Integrated Routing and Bridging per RFC 9135:
898+
- IRB-SYMMETRIC-001: IRB Symmetric MAC/IP Route with Label2
899+
- IRB-SYMMETRIC-002: IRB Symmetric Subnet Route (RT-5)
900+
- IRB-SYMMETRIC-003: IRB Symmetric Default Gateway Extended Community
901+
- IRB-ASYMMETRIC-001: IRB Asymmetric MAC/IP Route with Label2
902+
- IRB-ASYMMETRIC-002: IRB Asymmetric Subnet Route (RT-5)
903+
- IRB-ASYMMETRIC-003: IRB Asymmetric Default Gateway Extended Community
904+
- IRB-ANYCAST-001: Anycast MAC Address Derivation
905+
- IRB-MOBILITY-001: MAC/IP Mobility Procedures
906+
- IRB-EVPN-ROUTER-MAC-001: EVPN Router's MAC Extended Community
907+
- IRB-TTL-001: TTL/Hop Limit Decrement
908+
909+
### evpn_ip_prefix
910+
Tests for EVPN IP Prefix Advertisement (RT-5) per RFC 9136:
911+
- RT5-IPv4-001: EVPN IP Prefix IPv4 Route Encoding
912+
- RT5-IPv4-002: EVPN IP Prefix IPv4 with Overlay Index (GW IP)
913+
- RT5-IPv4-003: EVPN IP Prefix IPv4 with Overlay Index (ESI)
914+
- RT5-IPv4-004: EVPN IP Prefix IPv4 with Overlay Index (MAC)
915+
- RT5-IPv6-001: EVPN IP Prefix IPv6 Route Encoding
916+
- RT5-IPv6-002: EVPN IP Prefix IPv6 with Overlay Index (GW IP)
917+
- RT5-IPv6-003: EVPN IP Prefix IPv6 with Overlay Index (ESI)
918+
- RT5-IPv6-004: EVPN IP Prefix IPv6 with Overlay Index (MAC)
919+
- RT5-RECURSIVE-001: RT-5 Recursive Lookup Resolution
920+
- RT5-INVALID-001: RT-5 Invalid Combination (ESI + GW IP Non-Zero)
921+
- RT5-LABEL-001: RT-5 MPLS Label Zero with Overlay Index
922+
923+
### bgp_role
924+
Tests for BGP Role per RFC 9234:
925+
- ROLE-PROVIDER: BGP Role Capability: Provider (0)
926+
- ROLE-ROUTE_SERVER: BGP Role Capability: Route Server (1)
927+
- ROLE-ROUTE_SERVER_CLIENT: BGP Role Capability: Route Server Client (2)
928+
- ROLE-CUSTOMER: BGP Role Capability: Customer (3)
929+
- ROLE-PEER: BGP Role Capability: Peer (4)
930+
- ROLE-PROVIDER-CUSTOMER: Role Pair Provider -> Customer
931+
- ROLE-CUSTOMER-PROVIDER: Role Pair Customer -> Provider
932+
- ROLE-ROUTE_SERVER-ROUTE_SERVER_CLIENT: Role Pair RS -> RSC
933+
- ROLE-ROUTE_SERVER_CLIENT-ROUTE_SERVER: Role Pair RSC -> RS
934+
- ROLE-PEER-PEER: Role Pair Peer -> Peer
935+
- ROLE-OTC-001: OTC Attribute Present from Customer
936+
- ROLE-OTC-002: OTC Attribute Added on Egress to Customer
937+
- ROLE-OTC-003: OTC Attribute Not Propagated to Provider
938+
- ROLE-MISMATCH-001: Role Mismatch Notification
939+
- ROLE-STRICT-001: Strict Mode - Role Required
940+
941+
### srv6_bgp_overlay
942+
Tests for SRv6 BGP Overlay per RFC 9252:
943+
- SRV6-L3_SERVICE-001: SRv6 L3 Service TLV Encoding
944+
- SRV6-L2_SERVICE-001: SRv6 L2 Service TLV Encoding
945+
- SRV6-SID-END_DX4: SRv6 SID Endpoint Behavior END_DX4
946+
- SRV6-SID-END_DT4: SRv6 SID Endpoint Behavior END_DT4
947+
- SRV6-SID-END_DX6: SRv6 SID Endpoint Behavior END_DX6
948+
- SRV6-SID-END_DT6: SRv6 SID Endpoint Behavior END_DT6
949+
- SRV6-SID-END_DX2: SRv6 SID Endpoint Behavior END_DX2
950+
- SRV6-SID-END_DT2U: SRv6 SID Endpoint Behavior END_DT2U
951+
- SRV6-SID-END_DT2M: SRv6 SID Endpoint Behavior END_DT2M
952+
- SRV6-SID-END_DT46: SRv6 SID Endpoint Behavior END_DT46
953+
- SRV6-SID-INFO-001: SRv6 SID Information Sub-TLV
954+
- SRV6-STRUCTURE-001: SRv6 SID Structure Sub-Sub-TLV
955+
- SRV6-TRANSPOSITION-001: SRv6 SID Transposition Scheme
956+
- SRV6-L3VPN-001: IPv4 VPN over SRv6 Core
957+
- SRV6-L3VPN-002: IPv6 VPN over SRv6 Core
958+
- SRV6-EVPN-001: EVPN MAC/IP over SRv6 Core
959+
- SRV6-EVPN-002: EVPN IP Prefix (RT-5) over SRv6 Core
960+
961+
### sr_policy
962+
Tests for BGP SR Policy per RFC 9256:
963+
- SRPOL-SEG-A: SR Policy Segment Type A (SR-MPLS Label)
964+
- SRPOL-SEG-B: SR Policy Segment Type B (SRv6 SID)
965+
- SRPOL-SEG-C: SR Policy Segment Type C (IPv4 Prefix Algo)
966+
- SRPOL-SEG-D: SR Policy Segment Type D (IPv6 Prefix Algo MPLS)
967+
- SRPOL-SEG-E: SR Policy Segment Type E (IPv4 Prefix Local Intf)
968+
- SRPOL-SEG-F: SR Policy Segment Type F (IPv4 Link Local Remote)
969+
- SRPOL-SEG-G: SR Policy Segment Type G (IPv6 Prefix Local Intf MPLS)
970+
- SRPOL-SEG-H: SR Policy Segment Type H (IPv6 Link Local Remote MPLS)
971+
- SRPOL-SEG-I: SR Policy Segment Type I (IPv6 Prefix Algo SRv6)
972+
- SRPOL-SEG-J: SR Policy Segment Type J (IPv6 Prefix Local Intf SRv6)
973+
- SRPOL-SEG-K: SR Policy Segment Type K (IPv6 Link Local Remote SRv6)
974+
- SRPOL-IDENT-001: SR Policy Identification (Headend, Color, Endpoint)
975+
- SRPOL-CP-001: SR Policy Candidate Path Preference
976+
- SRPOL-CP-002: SR Policy Candidate Path Protocol-Origin
977+
- SRPOL-BSID-001: SR Policy Binding SID (BSID)
978+
- SRPOL-STEER-001: Steering into SR Policy
979+
- SRPOL-VALID-001: SR Policy Validity
980+
- SRPOL-DROP-001: Drop-Upon-Invalid SR Policy
981+
982+
### bgp_ls_updated
983+
Tests for BGP-LS Updated per RFC 9552:
984+
- BGPLS-NODE: BGP-LS NLRI Type: NODE (1)
985+
- BGPLS-LINK: BGP-LS NLRI Type: LINK (2)
986+
- BGPLS-IPV4_PREFIX: BGP-LS NLRI Type: IPV4_PREFIX (3)
987+
- BGPLS-IPV6_PREFIX: BGP-LS NLRI Type: IPV6_PREFIX (4)
988+
- BGPLS-PROTO-IS_IS_LEVEL_1: BGP-LS Protocol ID: IS_IS_LEVEL_1
989+
- BGPLS-PROTO-IS_IS_LEVEL_2: BGP-LS Protocol ID: IS_IS_LEVEL_2
990+
- BGPLS-PROTO-OSPFV2: BGP-LS Protocol ID: OSPFV2
991+
- BGPLS-PROTO-DIRECT: BGP-LS Protocol ID: DIRECT
992+
- BGPLS-PROTO-STATIC: BGP-LS Protocol ID: STATIC
993+
- BGPLS-PROTO-OSPFV3: BGP-LS Protocol ID: OSPFV3
994+
- BGPLS-NODE-DESC-001: BGP-LS Node Descriptor TLVs
995+
- BGPLS-LINK-DESC-001: BGP-LS Link Descriptor TLVs
996+
- BGPLS-PREFIX-DESC-001: BGP-LS Prefix Descriptor TLVs
997+
- BGPLS-ATTR-001: BGP-LS Attribute TLVs
998+
- BGPLS-VPN-001: BGP-LS VPN (SAFI 72)
999+
- BGPLS-UNKNOWN-001: BGP-LS Unknown NLRI Type Handling
1000+
- BGPLS-ORDER-001: BGP-LS TLV Ordering
1001+
8561002
## References
8571003

8581004
- [RFC 4271 - A Border Gateway Protocol 4 (BGP-4)](https://www.rfc-editor.org/rfc/rfc4271)
@@ -891,6 +1037,16 @@ Tests for BGP in Large-Scale Data Centers per RFC 7938:
8911037
- [RFC 8195 - Use of BGP Large Communities](https://www.rfc-editor.org/rfc/rfc8195)
8921038
- [RFC 8203 - BGP Administrative Shutdown Communication](https://www.rfc-editor.org/rfc/rfc8203)
8931039
- [RFC 8277 - Using BGP to Bind MPLS Labels to Address Prefixes](https://www.rfc-editor.org/rfc/rfc8277)
1040+
- [RFC 8326 - Graceful Shutdown of BGP Sessions](https://www.rfc-editor.org/rfc/rfc8326)
1041+
- [RFC 8365 - A Network Virtualization Overlay Solution Using EVPN](https://www.rfc-editor.org/rfc/rfc8365)
1042+
- [RFC 8402 - Segment Routing Architecture](https://www.rfc-editor.org/rfc/rfc8402)
1043+
- [RFC 9029 - Carrying MPLS Labels in the BGP-LS Address Family](https://www.rfc-editor.org/rfc/rfc9029)
1044+
- [RFC 9135 - Integrated Routing and Bridging in EVPN](https://www.rfc-editor.org/rfc/rfc9135)
1045+
- [RFC 9136 - EVPN IP Prefix Advertisement](https://www.rfc-editor.org/rfc/rfc9136)
1046+
- [RFC 9234 - The BGP Role AS-In Attribute and Service Oriented BGP](https://www.rfc-editor.org/rfc/rfc9234)
1047+
- [RFC 9252 - BGP Overlay for SRv6](https://www.rfc-editor.org/rfc/rfc9252)
1048+
- [RFC 9256 - BGP SR Policy](https://www.rfc-editor.org/rfc/rfc9256)
1049+
- [RFC 9552 - Updated Specification for BGP-LS](https://www.rfc-editor.org/rfc/rfc9552)
8941050
- [RFC 1105 - BGP (obsolete)](https://www.rfc-editor.org/rfc/rfc1105)
8951051
- [RFC 1163 - BGP-2 (obsolete)](https://www.rfc-editor.org/rfc/rfc1163)
8961052
- [RFC 1267 - BGP-3 (obsolete)](https://www.rfc-editor.org/rfc/rfc1267)

tests/unit/test_tests.py

Lines changed: 165 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -730,3 +730,168 @@ def test_new_categories_registered(self):
730730
assert "mpls_label_binding" in TEST_CLASSES
731731
assert "large_community_usage" in TEST_CLASSES
732732
assert "datacenter_bgp" in TEST_CLASSES
733+
734+
735+
class TestGracefulShutdownAssessments:
736+
def test_get_tests(self):
737+
from bgp_test_framework.assessments import GracefulShutdownAssessments
738+
739+
tests = GracefulShutdownAssessments.get_tests()
740+
assert len(tests) == 10
741+
assert all(t.category == TestCategory.GRACEFUL_SHUTDOWN for t in tests)
742+
743+
def test_specific_tests_exist(self):
744+
from bgp_test_framework.assessments import GracefulShutdownAssessments
745+
746+
tests = {t.test_id: t for t in GracefulShutdownAssessments.get_tests()}
747+
assert "GSD-001" in tests
748+
assert "GSD-005" in tests
749+
assert "GSD-010" in tests
750+
751+
752+
class TestEVPNNVOAssessments:
753+
def test_get_tests(self):
754+
from bgp_test_framework.assessments import EVPNNVOAssessments
755+
756+
tests = EVPNNVOAssessments.get_tests()
757+
assert len(tests) >= 10
758+
assert all(t.category == TestCategory.EVPN_NVO for t in tests)
759+
760+
def test_specific_tests_exist(self):
761+
from bgp_test_framework.assessments import EVPNNVOAssessments
762+
763+
tests = {t.test_id: t for t in EVPNNVOAssessments.get_tests()}
764+
assert "EVPN-TUN-08" in tests
765+
assert "EVPN-001" in tests
766+
assert "EVPN-003" in tests
767+
768+
769+
class TestSegmentRoutingAssessments:
770+
def test_get_tests(self):
771+
from bgp_test_framework.assessments import SegmentRoutingAssessments
772+
773+
tests = SegmentRoutingAssessments.get_tests()
774+
assert len(tests) >= 8
775+
assert all(t.category == TestCategory.SEGMENT_ROUTING for t in tests)
776+
777+
def test_specific_tests_exist(self):
778+
from bgp_test_framework.assessments import SegmentRoutingAssessments
779+
780+
tests = {t.test_id: t for t in SegmentRoutingAssessments.get_tests()}
781+
assert "SR-ALGO-0" in tests
782+
assert "SR-ALGO-1" in tests
783+
assert "SR-001" in tests
784+
785+
786+
class TestIRBAssessments:
787+
def test_get_tests(self):
788+
from bgp_test_framework.assessments import IRBAssessments
789+
790+
tests = IRBAssessments.get_tests()
791+
assert len(tests) >= 7
792+
assert all(t.category == TestCategory.EVPN_IRB for t in tests)
793+
794+
def test_specific_tests_exist(self):
795+
from bgp_test_framework.assessments import IRBAssessments
796+
797+
tests = {t.test_id: t for t in IRBAssessments.get_tests()}
798+
assert "IRB-SYMMETRIC-001" in tests
799+
assert "IRB-ANYCAST-001" in tests
800+
801+
802+
class TestEVPNIPPrefixAssessments:
803+
def test_get_tests(self):
804+
from bgp_test_framework.assessments import EVPNIPPrefixAssessments
805+
806+
tests = EVPNIPPrefixAssessments.get_tests()
807+
assert len(tests) >= 11
808+
assert all(t.category == TestCategory.EVPN_IP_PREFIX for t in tests)
809+
810+
def test_specific_tests_exist(self):
811+
from bgp_test_framework.assessments import EVPNIPPrefixAssessments
812+
813+
tests = {t.test_id: t for t in EVPNIPPrefixAssessments.get_tests()}
814+
assert "RT5-IPv4-001" in tests
815+
assert "RT5-IPv6-001" in tests
816+
assert "RT5-RECURSIVE-001" in tests
817+
818+
819+
class TestBGPRoleAssessments:
820+
def test_get_tests(self):
821+
from bgp_test_framework.assessments import BGPRoleAssessments
822+
823+
tests = BGPRoleAssessments.get_tests()
824+
assert len(tests) >= 15
825+
assert all(t.category == TestCategory.BGP_ROLE for t in tests)
826+
827+
def test_specific_tests_exist(self):
828+
from bgp_test_framework.assessments import BGPRoleAssessments
829+
830+
tests = {t.test_id: t for t in BGPRoleAssessments.get_tests()}
831+
assert "ROLE-PROVIDER" in tests
832+
assert "ROLE-CUSTOMER" in tests
833+
assert "ROLE-OTC-001" in tests
834+
835+
836+
class TestSRv6BGPOverlayAssessments:
837+
def test_get_tests(self):
838+
from bgp_test_framework.assessments import SRv6BGPOverlayAssessments
839+
840+
tests = SRv6BGPOverlayAssessments.get_tests()
841+
assert len(tests) >= 17
842+
assert all(t.category == TestCategory.SRV6_BGP_OVERLAY for t in tests)
843+
844+
def test_specific_tests_exist(self):
845+
from bgp_test_framework.assessments import SRv6BGPOverlayAssessments
846+
847+
tests = {t.test_id: t for t in SRv6BGPOverlayAssessments.get_tests()}
848+
assert "SRV6-L3_SERVICE-001" in tests
849+
assert "SRV6-SID-END_DX4" in tests
850+
assert "SRV6-L3VPN-001" in tests
851+
852+
853+
class TestSRPolicyAssessments:
854+
def test_get_tests(self):
855+
from bgp_test_framework.assessments import SRPolicyAssessments
856+
857+
tests = SRPolicyAssessments.get_tests()
858+
assert len(tests) >= 18
859+
assert all(t.category == TestCategory.SR_POLICY for t in tests)
860+
861+
def test_specific_tests_exist(self):
862+
from bgp_test_framework.assessments import SRPolicyAssessments
863+
864+
tests = {t.test_id: t for t in SRPolicyAssessments.get_tests()}
865+
assert "SRPOL-SEG-A" in tests
866+
assert "SRPOL-IDENT-001" in tests
867+
assert "SRPOL-BSID-001" in tests
868+
869+
870+
class TestBGP_LS_UpdatedAssessments:
871+
def test_get_tests(self):
872+
from bgp_test_framework.assessments import BGP_LS_UpdatedAssessments
873+
874+
tests = BGP_LS_UpdatedAssessments.get_tests()
875+
assert len(tests) >= 17
876+
assert all(t.category == TestCategory.BGP_LS_UPDATED for t in tests)
877+
878+
def test_specific_tests_exist(self):
879+
from bgp_test_framework.assessments import BGP_LS_UpdatedAssessments
880+
881+
tests = {t.test_id: t for t in BGP_LS_UpdatedAssessments.get_tests()}
882+
assert "BGPLS-NODE" in tests
883+
assert "BGPLS-LINK" in tests
884+
assert "BGPLS-ATTR-001" in tests
885+
886+
887+
class TestNewTESTCLASSESEVPNSR:
888+
def test_new_categories_registered(self):
889+
assert "graceful_shutdown" in TEST_CLASSES
890+
assert "evpn_nvo" in TEST_CLASSES
891+
assert "segment_routing" in TEST_CLASSES
892+
assert "evpn_irb" in TEST_CLASSES
893+
assert "evpn_ip_prefix" in TEST_CLASSES
894+
assert "bgp_role" in TEST_CLASSES
895+
assert "srv6_bgp_overlay" in TEST_CLASSES
896+
assert "sr_policy" in TEST_CLASSES
897+
assert "bgp_ls_updated" in TEST_CLASSES

0 commit comments

Comments
 (0)