Skip to content

Hardware

ANTA catalog for hardware tests

Test functions related to the hardware or environement

verify_adverse_drops(device, result) async

Verifies there is no adverse drops on DCS-7280E and DCS-7500E switches.

Parameters:

Name Type Description Default
device InventoryDevice

InventoryDevice instance containing all devices information.

required

Returns:

Type Description
TestResult

TestResult instance with

TestResult
  • result = “unset” if the test has not been executed
TestResult
  • result = “success” if the device (DCS-7280E and DCS-7500E) doesnt reports adverse drops.
TestResult
  • result = “failure” if the device (DCS-7280E and DCS-7500E) report adverse drops.
TestResult
  • result = “error” if any exception is caught
Source code in anta/tests/hardware.py
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
@skip_on_platforms(["cEOSLab", "vEOS-lab"])
@anta_test
async def verify_adverse_drops(device: InventoryDevice, result: TestResult) -> TestResult:

    """
    Verifies there is no adverse drops on DCS-7280E and DCS-7500E switches.

    Args:
        device (InventoryDevice): InventoryDevice instance containing all devices information.

    Returns:
        TestResult instance with
        * result = "unset" if the test has not been executed
        * result = "success" if the device (DCS-7280E and DCS-7500E) doesnt reports adverse drops.
        * result = "failure" if the device (DCS-7280E and DCS-7500E) report adverse drops.
        * result = "error" if any exception is caught

    """
    response = await device.session.cli(command="show hardware counter drop", ofmt="json")
    logger.debug(f"query result is: {response}")

    if response["totalAdverseDrops"] == 0:
        result.is_success()
    else:
        result.is_failure(
            f"Device TotalAdverseDrops counter is {response['totalAdverseDrops']}."
        )

    return result

verify_environment_cooling(device, result) async

Verifies the fans status is OK.

Parameters:

Name Type Description Default
device InventoryDevice

InventoryDevice instance containing all devices information.

required

Returns:

Type Description
TestResult

TestResult instance with

TestResult
  • result = “unset” if the test has not been executed
TestResult
  • result = “success” if the fans status is OK.
TestResult
  • result = “failure” otherwise.
TestResult
  • result = “error” if any exception is caught
Source code in anta/tests/hardware.py
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
@skip_on_platforms(["cEOSLab", "vEOS-lab"])
@anta_test
async def verify_environment_cooling(
    device: InventoryDevice, result: TestResult
) -> TestResult:

    """
    Verifies the fans status is OK.

    Args:
        device (InventoryDevice): InventoryDevice instance containing all devices information.

    Returns:
        TestResult instance with
        * result = "unset" if the test has not been executed
        * result = "success" if the fans status is OK.
        * result = "failure" otherwise.
        * result = "error" if any exception is caught

    """
    response = await device.session.cli(command="show system environment cooling", ofmt="json")
    logger.debug(f"query result is: {response}")

    if response["systemStatus"] == "coolingOk":
        result.is_success()
    else:
        result.is_failure(
            f"Device cooling is not OK, systemStatus: {response['systemStatus'] }"
        )

    return result

verify_environment_power(device, result) async

Verifies the power supplies status is OK.

Parameters:

Name Type Description Default
device InventoryDevice

InventoryDevice instance containing all devices information.

required

Returns:

Type Description
TestResult

TestResult instance with

TestResult
  • result = “unset” if the test has not been executed
TestResult
  • result = “success” if the power supplies status is OK.
TestResult
  • result = “failure” otherwise.
TestResult
  • result = “error” if any exception is caught
Source code in anta/tests/hardware.py
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
@skip_on_platforms(["cEOSLab", "vEOS-lab"])
@anta_test
async def verify_environment_power(device: InventoryDevice, result: TestResult) -> TestResult:

    """
    Verifies the power supplies status is OK.

    Args:
        device (InventoryDevice): InventoryDevice instance containing all devices information.

    Returns:
        TestResult instance with
        * result = "unset" if the test has not been executed
        * result = "success" if the power supplies status is OK.
        * result = "failure" otherwise.
        * result = "error" if any exception is caught

    """
    response = await device.session.cli(command="show system environment power", ofmt="json")
    logger.debug(f"query result is: {response}")

    wrong_power_supplies = {
        powersupply: {"state": value["state"]}
        for powersupply, value in response["powerSupplies"].items()
        if value["state"] != "ok"
    }
    if not wrong_power_supplies:
        result.is_success()
    else:
        result.is_failure("The following power suppliers are not ok:")
        result.messages.append(str(wrong_power_supplies))

    return result

verify_system_temperature(device, result) async

Verifies the device temperature is currently OK and the device did not report any temperature alarm in the past.

Parameters:

Name Type Description Default
device InventoryDevice

InventoryDevice instance containing all devices information.

required

Returns:

Type Description
TestResult

TestResult instance with

TestResult
  • result = “unset” if the test has not been executed
TestResult
  • result = “success” if the device temperature is OK.
TestResult
  • result = “failure” otherwise.
TestResult
  • result = “error” if any exception is caught
Source code in anta/tests/hardware.py
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
@skip_on_platforms(["cEOSLab", "vEOS-lab"])
@anta_test
async def verify_system_temperature(
    device: InventoryDevice, result: TestResult
) -> TestResult:

    """
    Verifies the device temperature is currently OK
    and the device did not report any temperature alarm in the past.

    Args:
        device (InventoryDevice): InventoryDevice instance containing all devices information.

    Returns:
        TestResult instance with
        * result = "unset" if the test has not been executed
        * result = "success" if the device temperature is OK.
        * result = "failure" otherwise.
        * result = "error" if any exception is caught

    """
    response = await device.session.cli(
        command="show system environment temperature", ofmt="json"
    )
    logger.debug(f"query result is: {response}")

    if response["systemStatus"] == "temperatureOk":
        result.is_success()
    else:
        result.is_failure(
            f"Device temperature is not OK, systemStatus: {response['systemStatus'] }"
        )

    return result

verify_transceiver_temperature(device, result) async

Verifies the transceivers temperature is currently OK and the device did not report any alarm in the past for its transceivers temperature.

Parameters:

Name Type Description Default
device InventoryDevice

InventoryDevice instance containing all devices information.

required

Returns:

Type Description
TestResult

TestResult instance with

TestResult
  • result = “unset” if the test has not been executed
TestResult
  • result = “success” if the device transceivers temperature of the device is currently OK AND the device did not report any alarm in the past for its transceivers temperature.
TestResult
  • result = “failure” otherwise,
TestResult
  • result = “error” if any exception is caught
Source code in anta/tests/hardware.py
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
@skip_on_platforms(["cEOSLab", "vEOS-lab"])
@anta_test
async def verify_transceiver_temperature(
    device: InventoryDevice, result: TestResult
) -> TestResult:

    """
    Verifies the transceivers temperature is currently OK
    and the device did not report any alarm in the past for its transceivers temperature.

    Args:
        device (InventoryDevice): InventoryDevice instance containing all devices information.

    Returns:
        TestResult instance with
        * result = "unset" if the test has not been executed
        * result = "success" if the device transceivers temperature of the device is currently OK
                             AND the device did not report any alarm in the past for its transceivers temperature.
        * result = "failure" otherwise,
        * result = "error" if any exception is caught

    """
    response = await device.session.cli(
        command="show system environment temperature transceiver", ofmt="json"
    )
    logger.debug(f"query result is: {response}")

    # Get the list of sensors
    sensors = response["tempSensors"]

    wrong_sensors = {
        sensor["name"]: {
            "hwStatus": sensor["hwStatus"],
            "alertCount": sensor["alertCount"],
        }
        for sensor in sensors
        if sensor["hwStatus"] != "ok" or sensor["alertCount"] != 0
    }
    if not wrong_sensors:
        result.is_success()
    else:
        result.is_failure(
            "The following sensors do not have the correct temperature or had alarms in the past:"
        )
        result.messages.append(str(wrong_sensors))

    return result

verify_transceivers_manufacturers(device, result, manufacturers=None) async

Verifies the device is only using transceivers from supported manufacturers.

Parameters:

Name Type Description Default
device InventoryDevice

InventoryDevice instance containing all devices information.

required
manufacturers list

List of allowed transceivers manufacturers.

None

Returns:

Type Description
TestResult

TestResult instance with

TestResult
  • result = “unset” if the test has not been executed
TestResult
  • result = “skipped” if the test was not executed because no manufacturers were given
TestResult
  • result = “success” if the device is only using transceivers from supported manufacturers.
TestResult
  • result = “failure” otherwise.
TestResult
  • result = “error” if any exception is caught
Source code in anta/tests/hardware.py
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
@skip_on_platforms(["cEOSLab", "vEOS-lab"])
@anta_test
async def verify_transceivers_manufacturers(
    device: InventoryDevice,
    result: TestResult,
    manufacturers: Optional[List[str]] = None,
) -> TestResult:
    """
    Verifies the device is only using transceivers from supported manufacturers.

    Args:
        device (InventoryDevice): InventoryDevice instance containing all devices information.
        manufacturers (list): List of allowed transceivers manufacturers.

    Returns:
        TestResult instance with
        * result = "unset" if the test has not been executed
        * result = "skipped" if the test was not executed because no manufacturers were given
        * result = "success" if the device is only using transceivers from supported manufacturers.
        * result = "failure" otherwise.
        * result = "error" if any exception is caught

    """

    if not manufacturers:
        result.is_skipped(
            "verify_transceivers_manufacturers was not run as no "
            "manufacturers were given"
        )
        return result

    response = await device.session.cli(command="show inventory", ofmt="json")
    logger.debug(f"query result is: {response}")

    wrong_manufacturers = {
        interface: value["mfgName"]
        for interface, value in response["xcvrSlots"].items()
        if value["mfgName"] not in manufacturers
    }

    if not wrong_manufacturers:
        result.is_success()
    else:
        result.is_failure(
            "The following interfaces have transceivers from unauthorized manufacturers"
        )
        result.messages.append(str(wrong_manufacturers))

    return result

Last update: September 5, 2022