From 89c4287dc1d423987b3ed83c28335bb3dcb0f06e Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Mon, 17 Jun 2024 11:01:56 +0200 Subject: Adding upstream version 1.0.0. Signed-off-by: Daniel Baumann --- tests/units/anta_tests/routing/test_isis.py | 1350 ++++++++++++++++++++++++++- 1 file changed, 1349 insertions(+), 1 deletion(-) (limited to 'tests/units/anta_tests/routing/test_isis.py') diff --git a/tests/units/anta_tests/routing/test_isis.py b/tests/units/anta_tests/routing/test_isis.py index ec41105..2167ea4 100644 --- a/tests/units/anta_tests/routing/test_isis.py +++ b/tests/units/anta_tests/routing/test_isis.py @@ -3,11 +3,23 @@ # that can be found in the LICENSE file. """Tests for anta.tests.routing.ospf.py.""" +# pylint: disable=too-many-lines + from __future__ import annotations from typing import Any -from anta.tests.routing.isis import VerifyISISInterfaceMode, VerifyISISNeighborCount, VerifyISISNeighborState +import pytest + +from anta.tests.routing.isis import ( + VerifyISISInterfaceMode, + VerifyISISNeighborCount, + VerifyISISNeighborState, + VerifyISISSegmentRoutingAdjacencySegments, + VerifyISISSegmentRoutingDataplane, + VerifyISISSegmentRoutingTunnels, + _get_interface_data, +) from tests.lib.anta import test # noqa: F401; pylint: disable=W0611 DATA: list[dict[str, Any]] = [ @@ -154,6 +166,18 @@ DATA: list[dict[str, Any]] = [ "messages": ["Some neighbors are not in the correct state (UP): [{'vrf': 'default', 'instance': 'CORE-ISIS', 'neighbor': 's1-p01', 'state': 'down'}]."], }, }, + { + "name": "skipped - no neighbor", + "test": VerifyISISNeighborState, + "eos_data": [ + {"vrfs": {"default": {"isisInstances": {"CORE-ISIS": {"neighbors": {}}}}}}, + ], + "inputs": None, + "expected": { + "result": "skipped", + "messages": ["No IS-IS neighbor detected"], + }, + }, { "name": "success only default vrf", "test": VerifyISISNeighborCount, @@ -226,6 +250,108 @@ DATA: list[dict[str, Any]] = [ }, "expected": {"result": "success"}, }, + { + "name": "skipped - no neighbor", + "test": VerifyISISNeighborCount, + "eos_data": [ + {"vrfs": {"default": {"isisInstances": {"CORE-ISIS": {"interfaces": {}}}}}}, + ], + "inputs": { + "interfaces": [ + {"name": "Ethernet1", "level": 2, "count": 1}, + ] + }, + "expected": { + "result": "skipped", + "messages": ["No IS-IS neighbor detected"], + }, + }, + { + "name": "failure - missing interface", + "test": VerifyISISNeighborCount, + "eos_data": [ + { + "vrfs": { + "default": { + "isisInstances": { + "CORE-ISIS": { + "interfaces": { + "Ethernet1": { + "intfLevels": { + "2": { + "ipv4Metric": 10, + "numAdjacencies": 0, + "linkId": "84", + "sharedSecretProfile": "", + "isisAdjacencies": [], + "passive": False, + "v4Protection": "link", + "v6Protection": "disabled", + } + }, + "interfaceSpeed": 1000, + "areaProxyBoundary": False, + }, + } + } + } + } + } + }, + ], + "inputs": { + "interfaces": [ + {"name": "Ethernet2", "level": 2, "count": 1}, + ] + }, + "expected": { + "result": "failure", + "messages": ["No neighbor detected for interface Ethernet2"], + }, + }, + { + "name": "failure - wrong count", + "test": VerifyISISNeighborCount, + "eos_data": [ + { + "vrfs": { + "default": { + "isisInstances": { + "CORE-ISIS": { + "interfaces": { + "Ethernet1": { + "intfLevels": { + "2": { + "ipv4Metric": 10, + "numAdjacencies": 3, + "linkId": "84", + "sharedSecretProfile": "", + "isisAdjacencies": [], + "passive": False, + "v4Protection": "link", + "v6Protection": "disabled", + } + }, + "interfaceSpeed": 1000, + "areaProxyBoundary": False, + }, + } + } + } + } + } + }, + ], + "inputs": { + "interfaces": [ + {"name": "Ethernet1", "level": 2, "count": 1}, + ] + }, + "expected": { + "result": "failure", + "messages": ["Interface Ethernet1: expected Level 2: count 1, got Level 2: count 3"], + }, + }, { "name": "success VerifyISISInterfaceMode only default vrf", "test": VerifyISISInterfaceMode, @@ -567,4 +693,1226 @@ DATA: list[dict[str, Any]] = [ ], }, }, + { + "name": "skipped VerifyISISInterfaceMode no vrf", + "test": VerifyISISInterfaceMode, + "eos_data": [{"vrfs": {}}], + "inputs": { + "interfaces": [ + {"name": "Loopback0", "mode": "passive"}, + {"name": "Ethernet2", "mode": "passive"}, + {"name": "Ethernet1", "mode": "point-to-point", "vrf": "default"}, + ] + }, + "expected": {"result": "skipped", "messages": ["IS-IS is not configured on device"]}, + }, + { + "name": "Skipped of VerifyISISSegmentRoutingAdjacencySegments no VRF.", + "test": VerifyISISSegmentRoutingAdjacencySegments, + "eos_data": [{"vrfs": {}}], + "inputs": { + "instances": [ + { + "name": "CORE-ISIS", + "vrf": "default", + "segments": [ + { + "interface": "Ethernet2", + "address": "10.0.1.3", + "sid_origin": "dynamic", + } + ], + } + ] + }, + "expected": {"result": "skipped", "messages": ["IS-IS is not configured on device"]}, + }, + { + "test": VerifyISISSegmentRoutingAdjacencySegments, + "name": "Success of VerifyISISSegmentRoutingAdjacencySegments in default VRF.", + "eos_data": [ + { + "vrfs": { + "default": { + "isisInstances": { + "CORE-ISIS": { + "dataPlane": "MPLS", + "routerId": "1.0.0.11", + "systemId": "0168.0000.0011", + "hostname": "s1-pe01", + "adjSidAllocationMode": "SrOnly", + "adjSidPoolBase": 116384, + "adjSidPoolSize": 16384, + "adjacencySegments": [ + { + "ipAddress": "10.0.1.3", + "localIntf": "Ethernet2", + "sid": 116384, + "lan": False, + "sidOrigin": "dynamic", + "protection": "unprotected", + "flags": { + "b": False, + "v": True, + "l": True, + "f": False, + "s": False, + }, + "level": 2, + }, + { + "ipAddress": "10.0.1.1", + "localIntf": "Ethernet1", + "sid": 116385, + "lan": False, + "sidOrigin": "dynamic", + "protection": "unprotected", + "flags": { + "b": False, + "v": True, + "l": True, + "f": False, + "s": False, + }, + "level": 2, + }, + ], + "receivedGlobalAdjacencySegments": [], + "misconfiguredAdjacencySegments": [], + } + } + } + } + } + ], + "inputs": { + "instances": [ + { + "name": "CORE-ISIS", + "vrf": "default", + "segments": [ + { + "interface": "Ethernet2", + "address": "10.0.1.3", + "sid_origin": "dynamic", + } + ], + } + ] + }, + "expected": { + "result": "success", + "messages": [], + }, + }, + { + "test": VerifyISISSegmentRoutingAdjacencySegments, + "name": "Failure of VerifyISISSegmentRoutingAdjacencySegments in default VRF for incorrect segment definition.", + "eos_data": [ + { + "vrfs": { + "default": { + "isisInstances": { + "CORE-ISIS": { + "dataPlane": "MPLS", + "routerId": "1.0.0.11", + "systemId": "0168.0000.0011", + "hostname": "s1-pe01", + "adjSidAllocationMode": "SrOnly", + "adjSidPoolBase": 116384, + "adjSidPoolSize": 16384, + "adjacencySegments": [ + { + "ipAddress": "10.0.1.3", + "localIntf": "Ethernet2", + "sid": 116384, + "lan": False, + "sidOrigin": "dynamic", + "protection": "unprotected", + "flags": { + "b": False, + "v": True, + "l": True, + "f": False, + "s": False, + }, + "level": 2, + }, + { + "ipAddress": "10.0.1.1", + "localIntf": "Ethernet1", + "sid": 116385, + "lan": False, + "sidOrigin": "dynamic", + "protection": "unprotected", + "flags": { + "b": False, + "v": True, + "l": True, + "f": False, + "s": False, + }, + "level": 2, + }, + ], + "receivedGlobalAdjacencySegments": [], + "misconfiguredAdjacencySegments": [], + } + } + } + } + } + ], + "inputs": { + "instances": [ + { + "name": "CORE-ISIS", + "vrf": "default", + "segments": [ + { + "interface": "Ethernet2", + "address": "10.0.1.3", + "sid_origin": "dynamic", + }, + { + "interface": "Ethernet3", + "address": "10.0.1.2", + "sid_origin": "dynamic", + }, + ], + } + ] + }, + "expected": { + "result": "failure", + "messages": ["Your segment has not been found: interface='Ethernet3' level=2 sid_origin='dynamic' address=IPv4Address('10.0.1.2')."], + }, + }, + { + "test": VerifyISISSegmentRoutingAdjacencySegments, + "name": "Failure of VerifyISISSegmentRoutingAdjacencySegments with incorrect VRF.", + "eos_data": [ + { + "vrfs": { + "default": { + "isisInstances": { + "CORE-ISIS": { + "dataPlane": "MPLS", + "routerId": "1.0.0.11", + "systemId": "0168.0000.0011", + "hostname": "s1-pe01", + "adjSidAllocationMode": "SrOnly", + "adjSidPoolBase": 116384, + "adjSidPoolSize": 16384, + "adjacencySegments": [ + { + "ipAddress": "10.0.1.3", + "localIntf": "Ethernet2", + "sid": 116384, + "lan": False, + "sidOrigin": "dynamic", + "protection": "unprotected", + "flags": { + "b": False, + "v": True, + "l": True, + "f": False, + "s": False, + }, + "level": 2, + }, + { + "ipAddress": "10.0.1.1", + "localIntf": "Ethernet1", + "sid": 116385, + "lan": False, + "sidOrigin": "dynamic", + "protection": "unprotected", + "flags": { + "b": False, + "v": True, + "l": True, + "f": False, + "s": False, + }, + "level": 2, + }, + ], + "receivedGlobalAdjacencySegments": [], + "misconfiguredAdjacencySegments": [], + } + } + } + } + } + ], + "inputs": { + "instances": [ + { + "name": "CORE-ISIS", + "vrf": "custom", + "segments": [ + { + "interface": "Ethernet2", + "address": "10.0.1.3", + "sid_origin": "dynamic", + }, + { + "interface": "Ethernet3", + "address": "10.0.1.2", + "sid_origin": "dynamic", + }, + ], + } + ] + }, + "expected": { + "result": "failure", + "messages": ["VRF custom is not configured to run segment routging."], + }, + }, + { + "test": VerifyISISSegmentRoutingAdjacencySegments, + "name": "Failure of VerifyISISSegmentRoutingAdjacencySegments with incorrect Instance.", + "eos_data": [ + { + "vrfs": { + "default": { + "isisInstances": { + "CORE-ISIS": { + "dataPlane": "MPLS", + "routerId": "1.0.0.11", + "systemId": "0168.0000.0011", + "hostname": "s1-pe01", + "adjSidAllocationMode": "SrOnly", + "adjSidPoolBase": 116384, + "adjSidPoolSize": 16384, + "adjacencySegments": [ + { + "ipAddress": "10.0.1.3", + "localIntf": "Ethernet2", + "sid": 116384, + "lan": False, + "sidOrigin": "dynamic", + "protection": "unprotected", + "flags": { + "b": False, + "v": True, + "l": True, + "f": False, + "s": False, + }, + "level": 2, + }, + { + "ipAddress": "10.0.1.1", + "localIntf": "Ethernet1", + "sid": 116385, + "lan": False, + "sidOrigin": "dynamic", + "protection": "unprotected", + "flags": { + "b": False, + "v": True, + "l": True, + "f": False, + "s": False, + }, + "level": 2, + }, + ], + "receivedGlobalAdjacencySegments": [], + "misconfiguredAdjacencySegments": [], + } + } + } + } + } + ], + "inputs": { + "instances": [ + { + "name": "CORE-ISIS2", + "vrf": "default", + "segments": [ + { + "interface": "Ethernet2", + "address": "10.0.1.3", + "sid_origin": "dynamic", + }, + { + "interface": "Ethernet3", + "address": "10.0.1.2", + "sid_origin": "dynamic", + }, + ], + } + ] + }, + "expected": { + "result": "failure", + "messages": ["Instance CORE-ISIS2 is not found in vrf default."], + }, + }, + { + "test": VerifyISISSegmentRoutingAdjacencySegments, + "name": "Failure of VerifyISISSegmentRoutingAdjacencySegments with incorrect segment info.", + "eos_data": [ + { + "vrfs": { + "default": { + "isisInstances": { + "CORE-ISIS": { + "dataPlane": "MPLS", + "routerId": "1.0.0.11", + "systemId": "0168.0000.0011", + "hostname": "s1-pe01", + "adjSidAllocationMode": "SrOnly", + "adjSidPoolBase": 116384, + "adjSidPoolSize": 16384, + "adjacencySegments": [ + { + "ipAddress": "10.0.1.3", + "localIntf": "Ethernet2", + "sid": 116384, + "lan": False, + "sidOrigin": "dynamic", + "protection": "unprotected", + "flags": { + "b": False, + "v": True, + "l": True, + "f": False, + "s": False, + }, + "level": 2, + }, + ], + "receivedGlobalAdjacencySegments": [], + "misconfiguredAdjacencySegments": [], + } + } + } + } + } + ], + "inputs": { + "instances": [ + { + "name": "CORE-ISIS", + "vrf": "default", + "segments": [ + { + "interface": "Ethernet2", + "address": "10.0.1.3", + "sid_origin": "dynamic", + "level": 1, # Wrong level + }, + ], + } + ] + }, + "expected": { + "result": "failure", + "messages": [ + ( + "Your segment is not correct: Expected: interface='Ethernet2' level=1 sid_origin='dynamic' address=IPv4Address('10.0.1.3') - " + "Found: {'ipAddress': '10.0.1.3', 'localIntf': 'Ethernet2', 'sid': 116384, 'lan': False, 'sidOrigin': 'dynamic', 'protection': " + "'unprotected', 'flags': {'b': False, 'v': True, 'l': True, 'f': False, 's': False}, 'level': 2}." + ) + ], + }, + }, + { + "test": VerifyISISSegmentRoutingDataplane, + "name": "Check VerifyISISSegmentRoutingDataplane is running successfully", + "eos_data": [ + { + "vrfs": { + "default": { + "isisInstances": { + "CORE-ISIS": { + "dataPlane": "MPLS", + "routerId": "1.0.0.11", + "systemId": "0168.0000.0011", + "hostname": "s1-pe01", + } + } + } + } + } + ], + "inputs": { + "instances": [ + { + "name": "CORE-ISIS", + "vrf": "default", + "dataplane": "MPLS", + }, + ] + }, + "expected": { + "result": "success", + "messages": [], + }, + }, + { + "test": VerifyISISSegmentRoutingDataplane, + "name": "Check VerifyISISSegmentRoutingDataplane is failing with incorrect dataplane", + "eos_data": [ + { + "vrfs": { + "default": { + "isisInstances": { + "CORE-ISIS": { + "dataPlane": "MPLS", + "routerId": "1.0.0.11", + "systemId": "0168.0000.0011", + "hostname": "s1-pe01", + } + } + } + } + } + ], + "inputs": { + "instances": [ + { + "name": "CORE-ISIS", + "vrf": "default", + "dataplane": "unset", + }, + ] + }, + "expected": { + "result": "failure", + "messages": ["ISIS instance CORE-ISIS is not running dataplane unset (MPLS)"], + }, + }, + { + "test": VerifyISISSegmentRoutingDataplane, + "name": "Check VerifyISISSegmentRoutingDataplane is failing for unknown instance", + "eos_data": [ + { + "vrfs": { + "default": { + "isisInstances": { + "CORE-ISIS": { + "dataPlane": "MPLS", + "routerId": "1.0.0.11", + "systemId": "0168.0000.0011", + "hostname": "s1-pe01", + } + } + } + } + } + ], + "inputs": { + "instances": [ + { + "name": "CORE-ISIS2", + "vrf": "default", + "dataplane": "unset", + }, + ] + }, + "expected": { + "result": "failure", + "messages": ["Instance CORE-ISIS2 is not found in vrf default."], + }, + }, + { + "test": VerifyISISSegmentRoutingDataplane, + "name": "Check VerifyISISSegmentRoutingDataplane is failing for unknown VRF", + "eos_data": [ + { + "vrfs": { + "default": { + "isisInstances": { + "CORE-ISIS": { + "dataPlane": "MPLS", + "routerId": "1.0.0.11", + "systemId": "0168.0000.0011", + "hostname": "s1-pe01", + } + } + } + } + } + ], + "inputs": { + "instances": [ + { + "name": "CORE-ISIS", + "vrf": "wrong_vrf", + "dataplane": "unset", + }, + ] + }, + "expected": { + "result": "failure", + "messages": ["VRF wrong_vrf is not configured to run segment routing."], + }, + }, + { + "test": VerifyISISSegmentRoutingDataplane, + "name": "Check VerifyISISSegmentRoutingDataplane is skipped", + "eos_data": [{"vrfs": {}}], + "inputs": { + "instances": [ + { + "name": "CORE-ISIS", + "vrf": "wrong_vrf", + "dataplane": "unset", + }, + ] + }, + "expected": { + "result": "skipped", + "messages": ["IS-IS-SR is not running on device"], + }, + }, + { + "test": VerifyISISSegmentRoutingTunnels, + "name": "runs successfully", + "eos_data": [ + { + "entries": { + "3": { + "endpoint": "1.0.0.122/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "31": { + "endpoint": "1.0.0.13/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "32": { + "endpoint": "1.0.0.122/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "2": { + "endpoint": "1.0.0.111/32", + "vias": [ + { + "type": "tunnel", + "tunnelId": {"type": "TI-LFA", "index": 4}, + "labels": ["3"], + } + ], + }, + } + } + ], + "inputs": { + "entries": [ + {"endpoint": "1.0.0.122/32"}, + {"endpoint": "1.0.0.13/32", "vias": [{"type": "ip"}]}, + { + "endpoint": "1.0.0.111/32", + "vias": [{"type": "tunnel", "tunnel_id": "ti-lfa"}], + }, + { + "endpoint": "1.0.0.122/32", + "vias": [ + {"interface": "Ethernet1", "nexthop": "10.0.1.1"}, # Testing empty type + {"type": "ip", "interface": "Ethernet2", "nexthop": "10.0.1.3"}, + ], + }, + ] + }, + "expected": { + "result": "success", + "messages": [], + }, + }, + { + "test": VerifyISISSegmentRoutingTunnels, + "name": "is skipped if not entry founf in EOS", + "eos_data": [{"entries": {}}], + "inputs": { + "entries": [ + {"endpoint": "1.0.0.122/32"}, + ] + }, + "expected": { + "result": "skipped", + "messages": ["IS-IS-SR is not running on device."], + }, + }, + { + "test": VerifyISISSegmentRoutingTunnels, + "name": "runs successfully", + "eos_data": [ + { + "entries": { + "2": { + "endpoint": "1.0.0.111/32", + "vias": [ + { + "type": "tunnel", + "tunnelId": {"type": "TI-LFA", "index": 4}, + "labels": ["3"], + } + ], + }, + } + } + ], + "inputs": { + "entries": [ + {"endpoint": "1.0.0.122/32"}, + ] + }, + "expected": { + "result": "failure", + "messages": ["Tunnel to endpoint=IPv4Network('1.0.0.122/32') vias=None is not found."], + }, + }, + { + "test": VerifyISISSegmentRoutingTunnels, + "name": "fails with incorrect tunnel type", + "eos_data": [ + { + "entries": { + "3": { + "endpoint": "1.0.0.122/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "31": { + "endpoint": "1.0.0.13/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "32": { + "endpoint": "1.0.0.122/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "2": { + "endpoint": "1.0.0.111/32", + "vias": [ + { + "type": "tunnel", + "tunnelId": {"type": "TI-LFA", "index": 4}, + "labels": ["3"], + } + ], + }, + } + } + ], + "inputs": { + "entries": [ + {"endpoint": "1.0.0.122/32"}, + {"endpoint": "1.0.0.13/32", "vias": [{"type": "tunnel"}]}, + ] + }, + "expected": { + "result": "failure", + "messages": ["Tunnel to 1.0.0.13/32 is incorrect: incorrect tunnel type"], + }, + }, + { + "test": VerifyISISSegmentRoutingTunnels, + "name": "fails with incorrect nexthop", + "eos_data": [ + { + "entries": { + "3": { + "endpoint": "1.0.0.122/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "31": { + "endpoint": "1.0.0.13/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "32": { + "endpoint": "1.0.0.122/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "2": { + "endpoint": "1.0.0.111/32", + "vias": [ + { + "type": "tunnel", + "tunnelId": {"type": "TI-LFA", "index": 4}, + "labels": ["3"], + } + ], + }, + } + } + ], + "inputs": { + "entries": [ + {"endpoint": "1.0.0.122/32"}, + {"endpoint": "1.0.0.13/32", "vias": [{"type": "ip"}]}, + { + "endpoint": "1.0.0.122/32", + "vias": [ + {"type": "ip", "interface": "Ethernet1", "nexthop": "10.0.1.2"}, + {"type": "ip", "interface": "Ethernet2", "nexthop": "10.0.1.3"}, + ], + }, + ] + }, + "expected": { + "result": "failure", + "messages": ["Tunnel to 1.0.0.122/32 is incorrect: incorrect nexthop"], + }, + }, + { + "test": VerifyISISSegmentRoutingTunnels, + "name": "fails with incorrect nexthop", + "eos_data": [ + { + "entries": { + "3": { + "endpoint": "1.0.0.122/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "31": { + "endpoint": "1.0.0.13/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "32": { + "endpoint": "1.0.0.122/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "2": { + "endpoint": "1.0.0.111/32", + "vias": [ + { + "type": "tunnel", + "tunnelId": {"type": "TI-LFA", "index": 4}, + "labels": ["3"], + } + ], + }, + } + } + ], + "inputs": { + "entries": [ + {"endpoint": "1.0.0.122/32"}, + {"endpoint": "1.0.0.13/32", "vias": [{"type": "ip"}]}, + { + "endpoint": "1.0.0.122/32", + "vias": [ + {"type": "ip", "interface": "Ethernet4", "nexthop": "10.0.1.1"}, + {"type": "ip", "interface": "Ethernet2", "nexthop": "10.0.1.3"}, + ], + }, + ] + }, + "expected": { + "result": "failure", + "messages": ["Tunnel to 1.0.0.122/32 is incorrect: incorrect interface"], + }, + }, + { + "test": VerifyISISSegmentRoutingTunnels, + "name": "fails with incorrect interface", + "eos_data": [ + { + "entries": { + "3": { + "endpoint": "1.0.0.122/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "31": { + "endpoint": "1.0.0.13/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "32": { + "endpoint": "1.0.0.122/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "2": { + "endpoint": "1.0.0.111/32", + "vias": [ + { + "type": "tunnel", + "tunnelId": {"type": "TI-LFA", "index": 4}, + "labels": ["3"], + } + ], + }, + } + } + ], + "inputs": { + "entries": [ + {"endpoint": "1.0.0.122/32"}, + {"endpoint": "1.0.0.13/32", "vias": [{"type": "ip"}]}, + { + "endpoint": "1.0.0.122/32", + "vias": [ + {"type": "ip", "interface": "Ethernet1", "nexthop": "10.0.1.2"}, + {"type": "ip", "interface": "Ethernet2", "nexthop": "10.0.1.3"}, + ], + }, + ] + }, + "expected": { + "result": "failure", + "messages": ["Tunnel to 1.0.0.122/32 is incorrect: incorrect nexthop"], + }, + }, + { + "test": VerifyISISSegmentRoutingTunnels, + "name": "fails with incorrect tunnel ID type", + "eos_data": [ + { + "entries": { + "3": { + "endpoint": "1.0.0.122/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "31": { + "endpoint": "1.0.0.13/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "32": { + "endpoint": "1.0.0.122/32", + "vias": [ + { + "type": "ip", + "nexthop": "10.0.1.1", + "interface": "Ethernet1", + "labels": ["900021"], + }, + { + "type": "ip", + "nexthop": "10.0.1.3", + "interface": "Ethernet2", + "labels": ["900021"], + }, + ], + }, + "2": { + "endpoint": "1.0.0.111/32", + "vias": [ + { + "type": "tunnel", + "tunnelId": {"type": "TI-LFA", "index": 4}, + "labels": ["3"], + } + ], + }, + } + } + ], + "inputs": { + "entries": [ + {"endpoint": "1.0.0.122/32"}, + {"endpoint": "1.0.0.13/32", "vias": [{"type": "ip"}]}, + { + "endpoint": "1.0.0.111/32", + "vias": [ + {"type": "tunnel", "tunnel_id": "unset"}, + ], + }, + ] + }, + "expected": { + "result": "failure", + "messages": ["Tunnel to 1.0.0.111/32 is incorrect: incorrect tunnel ID"], + }, + }, ] + + +COMMAND_OUTPUT = { + "vrfs": { + "default": { + "isisInstances": { + "CORE-ISIS": { + "interfaces": { + "Loopback0": { + "enabled": True, + "intfLevels": { + "2": { + "ipv4Metric": 10, + "sharedSecretProfile": "", + "isisAdjacencies": [], + "passive": True, + "v4Protection": "disabled", + "v6Protection": "disabled", + } + }, + "areaProxyBoundary": False, + }, + "Ethernet1": { + "intfLevels": { + "2": { + "ipv4Metric": 10, + "numAdjacencies": 1, + "linkId": "84", + "sharedSecretProfile": "", + "isisAdjacencies": [], + "passive": False, + "v4Protection": "link", + "v6Protection": "disabled", + } + }, + "interfaceSpeed": 1000, + "areaProxyBoundary": False, + }, + } + } + } + }, + "EMPTY": {"isisInstances": {}}, + "NO_INTERFACES": {"isisInstances": {"CORE-ISIS": {}}}, + } +} +EXPECTED_LOOPBACK_0_OUTPUT = { + "enabled": True, + "intfLevels": { + "2": { + "ipv4Metric": 10, + "sharedSecretProfile": "", + "isisAdjacencies": [], + "passive": True, + "v4Protection": "disabled", + "v6Protection": "disabled", + } + }, + "areaProxyBoundary": False, +} + + +@pytest.mark.parametrize( + ("interface", "vrf", "expected_value"), + [ + pytest.param("Loopback0", "WRONG_VRF", None, id="VRF_not_found"), + pytest.param("Loopback0", "EMPTY", None, id="VRF_no_ISIS_instances"), + pytest.param("Loopback0", "NO_INTERFACES", None, id="ISIS_instance_no_interfaces"), + pytest.param("Loopback42", "default", None, id="interface_not_found"), + pytest.param("Loopback0", "default", EXPECTED_LOOPBACK_0_OUTPUT, id="interface_found"), + ], +) +def test__get_interface_data(interface: str, vrf: str, expected_value: dict[str, Any] | None) -> None: + """Test anta.tests.routing.isis._get_interface_data.""" + assert _get_interface_data(interface, vrf, COMMAND_OUTPUT) == expected_value -- cgit v1.2.3