71 lines
2.8 KiB
Python
71 lines
2.8 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.
|
|
"""Module related to VLAN tests."""
|
|
|
|
# Mypy does not understand AntaTest.Input typing
|
|
# mypy: disable-error-code=attr-defined
|
|
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING, ClassVar, Literal
|
|
|
|
from anta.custom_types import Vlan
|
|
from anta.models import AntaCommand, AntaTest
|
|
from anta.tools import get_failed_logs, get_value
|
|
|
|
if TYPE_CHECKING:
|
|
from anta.models import AntaTemplate
|
|
|
|
|
|
class VerifyVlanInternalPolicy(AntaTest):
|
|
"""Verifies if the VLAN internal allocation policy is ascending or descending and if the VLANs are within the specified range.
|
|
|
|
Expected Results
|
|
----------------
|
|
* Success: The test will pass if the VLAN internal allocation policy is either ascending or descending
|
|
and the VLANs are within the specified range.
|
|
* Failure: The test will fail if the VLAN internal allocation policy is neither ascending nor descending
|
|
or the VLANs are outside the specified range.
|
|
|
|
Examples
|
|
--------
|
|
```yaml
|
|
anta.tests.vlan:
|
|
- VerifyVlanInternalPolicy:
|
|
policy: ascending
|
|
start_vlan_id: 1006
|
|
end_vlan_id: 4094
|
|
```
|
|
"""
|
|
|
|
name = "VerifyVlanInternalPolicy"
|
|
description = "Verifies the VLAN internal allocation policy and the range of VLANs."
|
|
categories: ClassVar[list[str]] = ["vlan"]
|
|
commands: ClassVar[list[AntaCommand | AntaTemplate]] = [AntaCommand(command="show vlan internal allocation policy", revision=1)]
|
|
|
|
class Input(AntaTest.Input):
|
|
"""Input model for the VerifyVlanInternalPolicy test."""
|
|
|
|
policy: Literal["ascending", "descending"]
|
|
"""The VLAN internal allocation policy. Supported values: ascending, descending."""
|
|
start_vlan_id: Vlan
|
|
"""The starting VLAN ID in the range."""
|
|
end_vlan_id: Vlan
|
|
"""The ending VLAN ID in the range."""
|
|
|
|
@AntaTest.anta_test
|
|
def test(self) -> None:
|
|
"""Main test function for VerifyVlanInternalPolicy."""
|
|
command_output = self.instance_commands[0].json_output
|
|
|
|
keys_to_verify = ["policy", "startVlanId", "endVlanId"]
|
|
actual_policy_output = {key: get_value(command_output, key) for key in keys_to_verify}
|
|
expected_policy_output = {"policy": self.inputs.policy, "startVlanId": self.inputs.start_vlan_id, "endVlanId": self.inputs.end_vlan_id}
|
|
|
|
# Check if the actual output matches the expected output
|
|
if actual_policy_output != expected_policy_output:
|
|
failed_log = "The VLAN internal allocation policy is not configured properly:"
|
|
failed_log += get_failed_logs(expected_policy_output, actual_policy_output)
|
|
self.result.is_failure(failed_log)
|
|
else:
|
|
self.result.is_success()
|