239 lines
8.5 KiB
Python
239 lines
8.5 KiB
Python
|
# Copyright (c) 2023-2024 Arista Networks, Inc.
|
||
|
# Use of this source code is governed by the Apache License 2.0
|
||
|
# that can be found in the LICENSE file.
|
||
|
"""Tests for anta.input_models.routing.bgp.py."""
|
||
|
|
||
|
# pylint: disable=C0302
|
||
|
from __future__ import annotations
|
||
|
|
||
|
from typing import TYPE_CHECKING
|
||
|
|
||
|
import pytest
|
||
|
from pydantic import ValidationError
|
||
|
|
||
|
from anta.input_models.routing.bgp import BgpAddressFamily, BgpPeer
|
||
|
from anta.tests.routing.bgp import (
|
||
|
VerifyBGPExchangedRoutes,
|
||
|
VerifyBGPPeerCount,
|
||
|
VerifyBGPPeerMPCaps,
|
||
|
VerifyBGPPeerRouteLimit,
|
||
|
VerifyBgpRouteMaps,
|
||
|
VerifyBGPSpecificPeers,
|
||
|
VerifyBGPTimers,
|
||
|
)
|
||
|
|
||
|
if TYPE_CHECKING:
|
||
|
from anta.custom_types import Afi, Safi
|
||
|
|
||
|
|
||
|
class TestBgpAddressFamily:
|
||
|
"""Test anta.input_models.routing.bgp.BgpAddressFamily."""
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("afi", "safi", "vrf"),
|
||
|
[
|
||
|
pytest.param("ipv4", "unicast", "MGMT", id="afi"),
|
||
|
pytest.param("evpn", None, "default", id="safi"),
|
||
|
pytest.param("ipv4", "unicast", "default", id="vrf"),
|
||
|
],
|
||
|
)
|
||
|
def test_valid(self, afi: Afi, safi: Safi, vrf: str) -> None:
|
||
|
"""Test BgpAddressFamily valid inputs."""
|
||
|
BgpAddressFamily(afi=afi, safi=safi, vrf=vrf)
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("afi", "safi", "vrf"),
|
||
|
[
|
||
|
pytest.param("ipv4", None, "default", id="afi"),
|
||
|
pytest.param("evpn", "multicast", "default", id="safi"),
|
||
|
pytest.param("evpn", None, "MGMT", id="vrf"),
|
||
|
],
|
||
|
)
|
||
|
def test_invalid(self, afi: Afi, safi: Safi, vrf: str) -> None:
|
||
|
"""Test BgpAddressFamily invalid inputs."""
|
||
|
with pytest.raises(ValidationError):
|
||
|
BgpAddressFamily(afi=afi, safi=safi, vrf=vrf)
|
||
|
|
||
|
|
||
|
class TestVerifyBGPPeerCountInput:
|
||
|
"""Test anta.tests.routing.bgp.VerifyBGPPeerCount.Input."""
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("address_families"),
|
||
|
[
|
||
|
pytest.param([{"afi": "evpn", "num_peers": 2}], id="valid"),
|
||
|
],
|
||
|
)
|
||
|
def test_valid(self, address_families: list[BgpAddressFamily]) -> None:
|
||
|
"""Test VerifyBGPPeerCount.Input valid inputs."""
|
||
|
VerifyBGPPeerCount.Input(address_families=address_families)
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("address_families"),
|
||
|
[
|
||
|
pytest.param([{"afi": "evpn", "num_peers": 0}], id="zero-peer"),
|
||
|
pytest.param([{"afi": "evpn"}], id="None"),
|
||
|
],
|
||
|
)
|
||
|
def test_invalid(self, address_families: list[BgpAddressFamily]) -> None:
|
||
|
"""Test VerifyBGPPeerCount.Input invalid inputs."""
|
||
|
with pytest.raises(ValidationError):
|
||
|
VerifyBGPPeerCount.Input(address_families=address_families)
|
||
|
|
||
|
|
||
|
class TestVerifyBGPSpecificPeersInput:
|
||
|
"""Test anta.tests.routing.bgp.VerifyBGPSpecificPeers.Input."""
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("address_families"),
|
||
|
[
|
||
|
pytest.param([{"afi": "evpn", "peers": ["10.1.0.1", "10.1.0.2"]}], id="valid"),
|
||
|
],
|
||
|
)
|
||
|
def test_valid(self, address_families: list[BgpAddressFamily]) -> None:
|
||
|
"""Test VerifyBGPSpecificPeers.Input valid inputs."""
|
||
|
VerifyBGPSpecificPeers.Input(address_families=address_families)
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("address_families"),
|
||
|
[
|
||
|
pytest.param([{"afi": "evpn"}], id="None"),
|
||
|
],
|
||
|
)
|
||
|
def test_invalid(self, address_families: list[BgpAddressFamily]) -> None:
|
||
|
"""Test VerifyBGPSpecificPeers.Input invalid inputs."""
|
||
|
with pytest.raises(ValidationError):
|
||
|
VerifyBGPSpecificPeers.Input(address_families=address_families)
|
||
|
|
||
|
|
||
|
class TestVerifyBGPExchangedRoutesInput:
|
||
|
"""Test anta.tests.routing.bgp.VerifyBGPExchangedRoutes.Input."""
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("bgp_peers"),
|
||
|
[
|
||
|
pytest.param(
|
||
|
[{"peer_address": "172.30.255.5", "vrf": "default", "advertised_routes": ["192.0.254.5/32"], "received_routes": ["192.0.255.4/32"]}],
|
||
|
id="valid_both_received_advertised",
|
||
|
),
|
||
|
],
|
||
|
)
|
||
|
def test_valid(self, bgp_peers: list[BgpPeer]) -> None:
|
||
|
"""Test VerifyBGPExchangedRoutes.Input valid inputs."""
|
||
|
VerifyBGPExchangedRoutes.Input(bgp_peers=bgp_peers)
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("bgp_peers"),
|
||
|
[
|
||
|
pytest.param([{"peer_address": "172.30.255.5", "vrf": "default"}], id="invalid"),
|
||
|
pytest.param([{"peer_address": "172.30.255.5", "vrf": "default", "advertised_routes": ["192.0.254.5/32"]}], id="invalid_received_route"),
|
||
|
pytest.param([{"peer_address": "172.30.255.5", "vrf": "default", "received_routes": ["192.0.254.5/32"]}], id="invalid_advertised_route"),
|
||
|
],
|
||
|
)
|
||
|
def test_invalid(self, bgp_peers: list[BgpPeer]) -> None:
|
||
|
"""Test VerifyBGPExchangedRoutes.Input invalid inputs."""
|
||
|
with pytest.raises(ValidationError):
|
||
|
VerifyBGPExchangedRoutes.Input(bgp_peers=bgp_peers)
|
||
|
|
||
|
|
||
|
class TestVerifyBGPPeerMPCapsInput:
|
||
|
"""Test anta.tests.routing.bgp.VerifyBGPPeerMPCaps.Input."""
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("bgp_peers"),
|
||
|
[
|
||
|
pytest.param([{"peer_address": "172.30.255.5", "vrf": "default", "capabilities": ["ipv4Unicast"]}], id="valid"),
|
||
|
],
|
||
|
)
|
||
|
def test_valid(self, bgp_peers: list[BgpPeer]) -> None:
|
||
|
"""Test VerifyBGPPeerMPCaps.Input valid inputs."""
|
||
|
VerifyBGPPeerMPCaps.Input(bgp_peers=bgp_peers)
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("bgp_peers"),
|
||
|
[
|
||
|
pytest.param([{"peer_address": "172.30.255.5", "vrf": "default"}], id="invalid"),
|
||
|
],
|
||
|
)
|
||
|
def test_invalid(self, bgp_peers: list[BgpPeer]) -> None:
|
||
|
"""Test VerifyBGPPeerMPCaps.Input invalid inputs."""
|
||
|
with pytest.raises(ValidationError):
|
||
|
VerifyBGPPeerMPCaps.Input(bgp_peers=bgp_peers)
|
||
|
|
||
|
|
||
|
class TestVerifyBGPTimersInput:
|
||
|
"""Test anta.tests.routing.bgp.VerifyBGPTimers.Input."""
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("bgp_peers"),
|
||
|
[
|
||
|
pytest.param([{"peer_address": "172.30.255.5", "vrf": "default", "hold_time": 180, "keep_alive_time": 60}], id="valid"),
|
||
|
],
|
||
|
)
|
||
|
def test_valid(self, bgp_peers: list[BgpPeer]) -> None:
|
||
|
"""Test VerifyBGPTimers.Input valid inputs."""
|
||
|
VerifyBGPTimers.Input(bgp_peers=bgp_peers)
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("bgp_peers"),
|
||
|
[
|
||
|
pytest.param([{"peer_address": "172.30.255.5", "vrf": "default"}], id="invalid"),
|
||
|
pytest.param([{"peer_address": "172.30.255.5", "vrf": "default", "hold_time": 180}], id="invalid_keep_alive"),
|
||
|
pytest.param([{"peer_address": "172.30.255.5", "vrf": "default", "keep_alive_time": 180}], id="invalid_hold_time"),
|
||
|
],
|
||
|
)
|
||
|
def test_invalid(self, bgp_peers: list[BgpPeer]) -> None:
|
||
|
"""Test VerifyBGPTimers.Input invalid inputs."""
|
||
|
with pytest.raises(ValidationError):
|
||
|
VerifyBGPTimers.Input(bgp_peers=bgp_peers)
|
||
|
|
||
|
|
||
|
class TestVerifyBgpRouteMapsInput:
|
||
|
"""Test anta.tests.routing.bgp.VerifyBgpRouteMaps.Input."""
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("bgp_peers"),
|
||
|
[
|
||
|
pytest.param([{"peer_address": "172.30.255.5", "vrf": "default", "inbound_route_map": "Test", "outbound_route_map": "Test"}], id="valid"),
|
||
|
],
|
||
|
)
|
||
|
def test_valid(self, bgp_peers: list[BgpPeer]) -> None:
|
||
|
"""Test VerifyBgpRouteMaps.Input valid inputs."""
|
||
|
VerifyBgpRouteMaps.Input(bgp_peers=bgp_peers)
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("bgp_peers"),
|
||
|
[
|
||
|
pytest.param([{"peer_address": "172.30.255.5", "vrf": "default"}], id="invalid"),
|
||
|
],
|
||
|
)
|
||
|
def test_invalid(self, bgp_peers: list[BgpPeer]) -> None:
|
||
|
"""Test VerifyBgpRouteMaps.Input invalid inputs."""
|
||
|
with pytest.raises(ValidationError):
|
||
|
VerifyBgpRouteMaps.Input(bgp_peers=bgp_peers)
|
||
|
|
||
|
|
||
|
class TestVerifyBGPPeerRouteLimitInput:
|
||
|
"""Test anta.tests.routing.bgp.VerifyBGPPeerRouteLimit.Input."""
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("bgp_peers"),
|
||
|
[
|
||
|
pytest.param([{"peer_address": "172.30.255.5", "vrf": "default", "maximum_routes": 10000}], id="valid"),
|
||
|
],
|
||
|
)
|
||
|
def test_valid(self, bgp_peers: list[BgpPeer]) -> None:
|
||
|
"""Test VerifyBGPPeerRouteLimit.Input valid inputs."""
|
||
|
VerifyBGPPeerRouteLimit.Input(bgp_peers=bgp_peers)
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
("bgp_peers"),
|
||
|
[
|
||
|
pytest.param([{"peer_address": "172.30.255.5", "vrf": "default"}], id="invalid"),
|
||
|
],
|
||
|
)
|
||
|
def test_invalid(self, bgp_peers: list[BgpPeer]) -> None:
|
||
|
"""Test VerifyBGPPeerRouteLimit.Input invalid inputs."""
|
||
|
with pytest.raises(ValidationError):
|
||
|
VerifyBGPPeerRouteLimit.Input(bgp_peers=bgp_peers)
|