Merging upstream version 1.1.0.
Signed-off-by: Daniel Baumann <daniel@debian.org>
This commit is contained in:
parent
50f8dbf7e8
commit
2044ea6182
196 changed files with 10121 additions and 3780 deletions
85
tests/units/conftest.py
Normal file
85
tests/units/conftest.py
Normal file
|
@ -0,0 +1,85 @@
|
|||
# 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.
|
||||
"""See https://docs.pytest.org/en/stable/reference/fixtures.html#conftest-py-sharing-fixtures-across-multiple-files."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from pathlib import Path
|
||||
from typing import TYPE_CHECKING, Any
|
||||
from unittest.mock import patch
|
||||
|
||||
import pytest
|
||||
import yaml
|
||||
|
||||
from anta.device import AntaDevice, AsyncEOSDevice
|
||||
|
||||
if TYPE_CHECKING:
|
||||
from collections.abc import Iterator
|
||||
|
||||
from anta.models import AntaCommand
|
||||
|
||||
DEVICE_HW_MODEL = "pytest"
|
||||
DEVICE_NAME = "pytest"
|
||||
COMMAND_OUTPUT = "retrieved"
|
||||
|
||||
|
||||
@pytest.fixture(name="anta_env")
|
||||
def anta_env_fixture() -> dict[str, str]:
|
||||
"""Return an ANTA environment for testing."""
|
||||
return {
|
||||
"ANTA_USERNAME": "anta",
|
||||
"ANTA_PASSWORD": "formica",
|
||||
"ANTA_INVENTORY": str(Path(__file__).parent.parent / "data" / "test_inventory_with_tags.yml"),
|
||||
"ANTA_CATALOG": str(Path(__file__).parent.parent / "data" / "test_catalog.yml"),
|
||||
}
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def device(request: pytest.FixtureRequest) -> Iterator[AntaDevice]:
|
||||
"""Return an AntaDevice instance with mocked abstract method."""
|
||||
|
||||
def _collect(command: AntaCommand, *args: Any, **kwargs: Any) -> None: # noqa: ARG001, ANN401
|
||||
command.output = COMMAND_OUTPUT
|
||||
|
||||
kwargs = {"name": DEVICE_NAME, "hw_model": DEVICE_HW_MODEL}
|
||||
|
||||
if hasattr(request, "param"):
|
||||
# Fixture is parametrized indirectly
|
||||
kwargs.update(request.param)
|
||||
with patch.object(AntaDevice, "__abstractmethods__", set()), patch("anta.device.AntaDevice._collect", side_effect=_collect):
|
||||
# AntaDevice constructor does not have hw_model argument
|
||||
hw_model = kwargs.pop("hw_model")
|
||||
dev = AntaDevice(**kwargs) # type: ignore[abstract, arg-type]
|
||||
dev.hw_model = hw_model
|
||||
yield dev
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def async_device(request: pytest.FixtureRequest) -> AsyncEOSDevice:
|
||||
"""Return an AsyncEOSDevice instance."""
|
||||
kwargs = {
|
||||
"name": DEVICE_NAME,
|
||||
"host": "42.42.42.42",
|
||||
"username": "anta",
|
||||
"password": "anta",
|
||||
}
|
||||
|
||||
if hasattr(request, "param"):
|
||||
# Fixture is parametrized indirectly
|
||||
kwargs.update(request.param)
|
||||
return AsyncEOSDevice(**kwargs) # type: ignore[arg-type]
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def yaml_file(request: pytest.FixtureRequest, tmp_path: Path) -> Path:
|
||||
"""Fixture to create a temporary YAML file and return the path.
|
||||
|
||||
Fixture is indirectly parametrized with the YAML file content.
|
||||
"""
|
||||
assert hasattr(request, "param")
|
||||
file = tmp_path / "test_file.yaml"
|
||||
assert isinstance(request.param, dict)
|
||||
content: dict[str, Any] = request.param
|
||||
file.write_text(yaml.dump(content, allow_unicode=True))
|
||||
return file
|
Loading…
Add table
Add a link
Reference in a new issue