213 lines
9.2 KiB
Python
213 lines
9.2 KiB
Python
# Copyright (c) 2023-2025 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.tests.services.py."""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from anta.tests.services import VerifyDNSLookup, VerifyDNSServers, VerifyErrdisableRecovery, VerifyHostname
|
|
from tests.units.anta_tests import test
|
|
|
|
DATA: list[dict[str, Any]] = [
|
|
{
|
|
"name": "success",
|
|
"test": VerifyHostname,
|
|
"eos_data": [{"hostname": "s1-spine1", "fqdn": "s1-spine1.fun.aristanetworks.com"}],
|
|
"inputs": {"hostname": "s1-spine1"},
|
|
"expected": {"result": "success"},
|
|
},
|
|
{
|
|
"name": "failure-incorrect-hostname",
|
|
"test": VerifyHostname,
|
|
"eos_data": [{"hostname": "s1-spine2", "fqdn": "s1-spine1.fun.aristanetworks.com"}],
|
|
"inputs": {"hostname": "s1-spine1"},
|
|
"expected": {
|
|
"result": "failure",
|
|
"messages": ["Incorrect Hostname - Expected: s1-spine1 Actual: s1-spine2"],
|
|
},
|
|
},
|
|
{
|
|
"name": "success",
|
|
"test": VerifyDNSLookup,
|
|
"eos_data": [
|
|
{
|
|
"messages": [
|
|
"Server:\t\t127.0.0.1\nAddress:\t127.0.0.1#53\n\nNon-authoritative answer:\nName:\tarista.com\nAddress: 151.101.130.132\nName:\tarista.com\n"
|
|
"Address: 151.101.2.132\nName:\tarista.com\nAddress: 151.101.194.132\nName:\tarista.com\nAddress: 151.101.66.132\n\n"
|
|
]
|
|
},
|
|
{"messages": ["Server:\t\t127.0.0.1\nAddress:\t127.0.0.1#53\n\nNon-authoritative answer:\nName:\twww.google.com\nAddress: 172.217.12.100\n\n"]},
|
|
],
|
|
"inputs": {"domain_names": ["arista.com", "www.google.com"]},
|
|
"expected": {"result": "success"},
|
|
},
|
|
{
|
|
"name": "failure",
|
|
"test": VerifyDNSLookup,
|
|
"eos_data": [
|
|
{"messages": ["Server:\t\t127.0.0.1\nAddress:\t127.0.0.1#53\n\nNon-authoritative answer:\n*** Can't find arista.ca: No answer\n\n"]},
|
|
{"messages": ["Server:\t\t127.0.0.1\nAddress:\t127.0.0.1#53\n\nNon-authoritative answer:\nName:\twww.google.com\nAddress: 172.217.12.100\n\n"]},
|
|
{"messages": ["Server:\t\t127.0.0.1\nAddress:\t127.0.0.1#53\n\nNon-authoritative answer:\n*** Can't find google.ca: No answer\n\n"]},
|
|
],
|
|
"inputs": {"domain_names": ["arista.ca", "www.google.com", "google.ca"]},
|
|
"expected": {"result": "failure", "messages": ["The following domain(s) are not resolved to an IP address: arista.ca, google.ca"]},
|
|
},
|
|
{
|
|
"name": "success",
|
|
"test": VerifyDNSServers,
|
|
"eos_data": [
|
|
{
|
|
"nameServerConfigs": [
|
|
{"ipAddr": "10.14.0.1", "vrf": "default", "priority": 0},
|
|
{"ipAddr": "10.14.0.11", "vrf": "MGMT", "priority": 1},
|
|
{"ipAddr": "fd12:3456:789a::1", "vrf": "default", "priority": 0},
|
|
],
|
|
}
|
|
],
|
|
"inputs": {
|
|
"dns_servers": [
|
|
{"server_address": "10.14.0.1", "vrf": "default", "priority": 0},
|
|
{"server_address": "10.14.0.11", "vrf": "MGMT", "priority": 1},
|
|
{"server_address": "fd12:3456:789a::1", "vrf": "default", "priority": 0},
|
|
]
|
|
},
|
|
"expected": {"result": "success"},
|
|
},
|
|
{
|
|
"name": "failure-no-dns-found",
|
|
"test": VerifyDNSServers,
|
|
"eos_data": [
|
|
{
|
|
"nameServerConfigs": [],
|
|
}
|
|
],
|
|
"inputs": {
|
|
"dns_servers": [{"server_address": "10.14.0.10", "vrf": "default", "priority": 0}, {"server_address": "10.14.0.21", "vrf": "MGMT", "priority": 1}]
|
|
},
|
|
"expected": {
|
|
"result": "failure",
|
|
"messages": ["Server 10.14.0.10 VRF: default Priority: 0 - Not configured", "Server 10.14.0.21 VRF: MGMT Priority: 1 - Not configured"],
|
|
},
|
|
},
|
|
{
|
|
"name": "failure-incorrect-dns-details",
|
|
"test": VerifyDNSServers,
|
|
"eos_data": [
|
|
{
|
|
"nameServerConfigs": [{"ipAddr": "10.14.0.1", "vrf": "CS", "priority": 1}, {"ipAddr": "10.14.0.11", "vrf": "MGMT", "priority": 1}],
|
|
}
|
|
],
|
|
"inputs": {
|
|
"dns_servers": [
|
|
{"server_address": "10.14.0.1", "vrf": "CS", "priority": 0},
|
|
{"server_address": "10.14.0.11", "vrf": "default", "priority": 0},
|
|
{"server_address": "10.14.0.110", "vrf": "MGMT", "priority": 0},
|
|
]
|
|
},
|
|
"expected": {
|
|
"result": "failure",
|
|
"messages": [
|
|
"Server 10.14.0.1 VRF: CS Priority: 0 - Incorrect priority - Priority: 1",
|
|
"Server 10.14.0.11 VRF: default Priority: 0 - Not configured",
|
|
"Server 10.14.0.110 VRF: MGMT Priority: 0 - Not configured",
|
|
],
|
|
},
|
|
},
|
|
{
|
|
"name": "success",
|
|
"test": VerifyErrdisableRecovery,
|
|
"eos_data": [
|
|
# Adding empty line on purpose to verify they are skipped
|
|
"""
|
|
Errdisable Reason Timer Status Timer Interval
|
|
------------------------------ ----------------- --------------
|
|
acl Enabled 300
|
|
|
|
bpduguard Enabled 300
|
|
arp-inspection Enabled 30
|
|
"""
|
|
],
|
|
"inputs": {"reasons": [{"reason": "acl", "interval": 300}, {"reason": "bpduguard", "interval": 300}]},
|
|
"expected": {"result": "success"},
|
|
},
|
|
{
|
|
"name": "failure-reason-missing",
|
|
"test": VerifyErrdisableRecovery,
|
|
"eos_data": [
|
|
"""
|
|
Errdisable Reason Timer Status Timer Interval
|
|
------------------------------ ----------------- --------------
|
|
acl Enabled 300
|
|
bpduguard Enabled 300
|
|
arp-inspection Enabled 30
|
|
"""
|
|
],
|
|
"inputs": {"reasons": [{"reason": "acl", "interval": 300}, {"reason": "arp-inspection", "interval": 30}, {"reason": "tapagg", "interval": 30}]},
|
|
"expected": {
|
|
"result": "failure",
|
|
"messages": ["Reason: tapagg Status: Enabled Interval: 30 - Not found"],
|
|
},
|
|
},
|
|
{
|
|
"name": "failure-reason-disabled",
|
|
"test": VerifyErrdisableRecovery,
|
|
"eos_data": [
|
|
"""
|
|
Errdisable Reason Timer Status Timer Interval
|
|
------------------------------ ----------------- --------------
|
|
acl Disabled 300
|
|
bpduguard Enabled 300
|
|
arp-inspection Enabled 30
|
|
"""
|
|
],
|
|
"inputs": {"reasons": [{"reason": "acl", "interval": 300}, {"reason": "arp-inspection", "interval": 30}]},
|
|
"expected": {
|
|
"result": "failure",
|
|
"messages": ["Reason: acl Status: Enabled Interval: 300 - Incorrect configuration - Status: Disabled Interval: 300"],
|
|
},
|
|
},
|
|
{
|
|
"name": "failure-interval-not-ok",
|
|
"test": VerifyErrdisableRecovery,
|
|
"eos_data": [
|
|
"""
|
|
Errdisable Reason Timer Status Timer Interval
|
|
------------------------------ ----------------- --------------
|
|
acl Enabled 300
|
|
bpduguard Enabled 300
|
|
arp-inspection Enabled 30
|
|
"""
|
|
],
|
|
"inputs": {"reasons": [{"reason": "acl", "interval": 30}, {"reason": "arp-inspection", "interval": 30}]},
|
|
"expected": {
|
|
"result": "failure",
|
|
"messages": [
|
|
"Reason: acl Status: Enabled Interval: 30 - Incorrect configuration - Status: Enabled Interval: 300",
|
|
],
|
|
},
|
|
},
|
|
{
|
|
"name": "failure-all-type",
|
|
"test": VerifyErrdisableRecovery,
|
|
"eos_data": [
|
|
"""
|
|
Errdisable Reason Timer Status Timer Interval
|
|
------------------------------ ----------------- --------------
|
|
acl Disabled 300
|
|
bpduguard Enabled 300
|
|
arp-inspection Enabled 30
|
|
"""
|
|
],
|
|
"inputs": {"reasons": [{"reason": "acl", "interval": 30}, {"reason": "arp-inspection", "interval": 300}, {"reason": "tapagg", "interval": 30}]},
|
|
"expected": {
|
|
"result": "failure",
|
|
"messages": [
|
|
"Reason: acl Status: Enabled Interval: 30 - Incorrect configuration - Status: Disabled Interval: 300",
|
|
"Reason: arp-inspection Status: Enabled Interval: 300 - Incorrect configuration - Status: Enabled Interval: 30",
|
|
"Reason: tapagg Status: Enabled Interval: 30 - Not found",
|
|
],
|
|
},
|
|
},
|
|
]
|