summaryrefslogtreecommitdiffstats
path: root/tests/units/anta_tests/test_services.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/units/anta_tests/test_services.py')
-rw-r--r--tests/units/anta_tests/test_services.py218
1 files changed, 218 insertions, 0 deletions
diff --git a/tests/units/anta_tests/test_services.py b/tests/units/anta_tests/test_services.py
new file mode 100644
index 0000000..dcd1ee2
--- /dev/null
+++ b/tests/units/anta_tests/test_services.py
@@ -0,0 +1,218 @@
+# 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.tests.services.py
+"""
+from __future__ import annotations
+
+from typing import Any
+
+from anta.tests.services import VerifyDNSLookup, VerifyDNSServers, VerifyErrdisableRecovery, VerifyHostname
+from tests.lib.anta import test # noqa: F401; pylint: disable=W0611
+
+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": ["Expected `s1-spine1` as the hostname, but found `s1-spine2` instead."],
+ },
+ },
+ {
+ "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}],
+ }
+ ],
+ "inputs": {
+ "dns_servers": [{"server_address": "10.14.0.1", "vrf": "default", "priority": 0}, {"server_address": "10.14.0.11", "vrf": "MGMT", "priority": 1}]
+ },
+ "expected": {"result": "success"},
+ },
+ {
+ "name": "failure-dns-missing",
+ "test": VerifyDNSServers,
+ "eos_data": [
+ {
+ "nameServerConfigs": [{"ipAddr": "10.14.0.1", "vrf": "default", "priority": 0}, {"ipAddr": "10.14.0.11", "vrf": "MGMT", "priority": 1}],
+ }
+ ],
+ "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": ["DNS server `10.14.0.10` is not configured with any VRF.", "DNS server `10.14.0.21` is not configured with any VRF."],
+ },
+ },
+ {
+ "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": ["DNS server `10.14.0.10` is not configured with any VRF.", "DNS server `10.14.0.21` is not configured with any VRF."],
+ },
+ },
+ {
+ "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": [
+ "For DNS server `10.14.0.1`, the expected priority is `0`, but `1` was found instead.",
+ "DNS server `10.14.0.11` is not configured with VRF `default`.",
+ "DNS server `10.14.0.110` is not configured with any VRF.",
+ ],
+ },
+ },
+ {
+ "name": "success",
+ "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": "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": ["`tapagg`: 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": ["`acl`:\nExpected `Enabled` as the status, but found `Disabled` instead."],
+ },
+ },
+ {
+ "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": ["`acl`:\nExpected `30` as the interval, but found `300` instead."],
+ },
+ },
+ {
+ "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": [
+ "`acl`:\nExpected `30` as the interval, but found `300` instead.\nExpected `Enabled` as the status, but found `Disabled` instead.",
+ "`arp-inspection`:\nExpected `300` as the interval, but found `30` instead.",
+ "`tapagg`: Not found.",
+ ],
+ },
+ },
+]