2025-02-05 13:43:43 +01:00
|
|
|
#!/usr/bin/python
|
|
|
|
# coding: utf-8 -*-
|
|
|
|
# pylint: disable=logger-format-interpolation
|
|
|
|
# pylint: disable=dangerous-default-value
|
|
|
|
# flake8: noqa: W503
|
|
|
|
# flake8: noqa: W1202
|
|
|
|
|
|
|
|
# import platform
|
|
|
|
import sys
|
|
|
|
|
|
|
|
import pytest
|
|
|
|
from loguru import logger
|
|
|
|
|
|
|
|
import eos_downloader
|
|
|
|
from eos_downloader.data import DATA_MAPPING
|
|
|
|
from eos_downloader.eos import EOSDownloader
|
2025-02-05 13:50:07 +01:00
|
|
|
from tests.lib.dataset import (
|
|
|
|
eos_dataset_invalid,
|
|
|
|
eos_dataset_valid,
|
|
|
|
eos_token,
|
|
|
|
eos_token_invalid,
|
|
|
|
)
|
2025-02-05 13:43:43 +01:00
|
|
|
from tests.lib.fixtures import create_download_instance
|
|
|
|
from tests.lib.helpers import default_filename, is_on_github_actions
|
|
|
|
|
|
|
|
logger.remove()
|
|
|
|
logger.add(sys.stderr, level="DEBUG")
|
|
|
|
|
2025-02-05 13:50:07 +01:00
|
|
|
|
2025-02-05 13:43:43 +01:00
|
|
|
@pytest.mark.usefixtures("create_download_instance")
|
2025-02-05 13:50:07 +01:00
|
|
|
@pytest.mark.parametrize(
|
|
|
|
"DOWNLOAD_INFO",
|
|
|
|
eos_dataset_valid,
|
|
|
|
ids=["EOS-sha512", "EOS-md5", "vEOS-lab-no-hash"],
|
|
|
|
)
|
2025-02-05 13:43:43 +01:00
|
|
|
@pytest.mark.eos_download
|
2025-02-05 13:50:07 +01:00
|
|
|
class TestEosDownload_valid:
|
2025-02-05 13:43:43 +01:00
|
|
|
def test_data(self, DOWNLOAD_INFO):
|
2025-02-05 13:50:07 +01:00
|
|
|
logger.info(f"test input: {DOWNLOAD_INFO}")
|
|
|
|
logger.info(f"test build: {self.eos_downloader.__dict__}")
|
2025-02-05 13:43:43 +01:00
|
|
|
|
|
|
|
def test_eos_download_create(self, DOWNLOAD_INFO):
|
|
|
|
my_download = eos_downloader.eos.EOSDownloader(
|
2025-02-05 13:50:07 +01:00
|
|
|
image=DOWNLOAD_INFO["image"],
|
|
|
|
software=DOWNLOAD_INFO["software"],
|
|
|
|
version=DOWNLOAD_INFO["version"],
|
2025-02-05 13:43:43 +01:00
|
|
|
token=eos_token,
|
2025-02-05 13:50:07 +01:00
|
|
|
hash_method="sha512sum",
|
|
|
|
)
|
2025-02-05 13:43:43 +01:00
|
|
|
logger.info(my_download)
|
2025-02-05 13:50:07 +01:00
|
|
|
assert isinstance(my_download, eos_downloader.eos.EOSDownloader)
|
2025-02-05 13:43:43 +01:00
|
|
|
|
|
|
|
def test_eos_download_repr_string(self, DOWNLOAD_INFO):
|
|
|
|
expected = f"{DOWNLOAD_INFO['software']} - {DOWNLOAD_INFO['image']} - {DOWNLOAD_INFO['version']}"
|
|
|
|
logger.info(self.eos_downloader)
|
|
|
|
assert str(self.eos_downloader) == expected
|
|
|
|
|
|
|
|
def test_eos_download_build_filename(self, DOWNLOAD_INFO):
|
2025-02-05 13:50:07 +01:00
|
|
|
assert self.eos_downloader._build_filename() == DOWNLOAD_INFO["filename"]
|
2025-02-05 13:43:43 +01:00
|
|
|
|
2025-02-05 13:50:07 +01:00
|
|
|
@pytest.mark.dependency(name="authentication")
|
|
|
|
@pytest.mark.skipif(
|
|
|
|
eos_token == eos_token_invalid, reason="Token is not set correctly"
|
|
|
|
)
|
2025-02-05 13:43:43 +01:00
|
|
|
@pytest.mark.skipif(is_on_github_actions(), reason="Running on Github Runner")
|
|
|
|
# @pytest.mark.xfail(reason="Deliberate - CI not set for testing AUTH")
|
|
|
|
@pytest.mark.webtest
|
|
|
|
def test_eos_download_authenticate(self):
|
|
|
|
assert self.eos_downloader.authenticate() is True
|
|
|
|
|
2025-02-05 13:50:07 +01:00
|
|
|
@pytest.mark.dependency(depends=["authentication"], scope="class")
|
2025-02-05 13:43:43 +01:00
|
|
|
@pytest.mark.webtest
|
|
|
|
def test_eos_download_get_remote_file_path(self, DOWNLOAD_INFO):
|
2025-02-05 13:50:07 +01:00
|
|
|
assert (
|
|
|
|
self.eos_downloader._get_remote_filepath() == DOWNLOAD_INFO["remote_path"]
|
|
|
|
)
|
2025-02-05 13:43:43 +01:00
|
|
|
|
2025-02-05 13:50:07 +01:00
|
|
|
@pytest.mark.dependency(depends=["authentication"], scope="class")
|
2025-02-05 13:43:43 +01:00
|
|
|
@pytest.mark.webtest
|
|
|
|
def test_eos_download_get_file_url(self, DOWNLOAD_INFO):
|
2025-02-05 13:50:07 +01:00
|
|
|
url = self.eos_downloader._get_url(
|
|
|
|
remote_file_path=DOWNLOAD_INFO["remote_path"]
|
|
|
|
)
|
2025-02-05 13:43:43 +01:00
|
|
|
logger.info(url)
|
2025-02-05 13:50:07 +01:00
|
|
|
assert "https://downloads.arista.com/EOS-USA/Active%20Releases/" in url
|
2025-02-05 13:43:43 +01:00
|
|
|
|
|
|
|
|
2025-02-05 13:50:07 +01:00
|
|
|
@pytest.mark.usefixtures("create_download_instance")
|
|
|
|
@pytest.mark.parametrize("DOWNLOAD_INFO", eos_dataset_invalid, ids=["EOS-FAKE"])
|
|
|
|
class TestEosDownload_invalid:
|
2025-02-05 13:43:43 +01:00
|
|
|
def test_data(self, DOWNLOAD_INFO):
|
2025-02-05 13:50:07 +01:00
|
|
|
logger.info(f"test input: {dict(DOWNLOAD_INFO)}")
|
|
|
|
logger.info(f"test build: {self.eos_downloader.__dict__}")
|
2025-02-05 13:43:43 +01:00
|
|
|
|
|
|
|
def test_eos_download_login_error(self, DOWNLOAD_INFO):
|
|
|
|
my_download = eos_downloader.eos.EOSDownloader(
|
2025-02-05 13:50:07 +01:00
|
|
|
image=DOWNLOAD_INFO["image"],
|
|
|
|
software=DOWNLOAD_INFO["software"],
|
|
|
|
version=DOWNLOAD_INFO["version"],
|
2025-02-05 13:43:43 +01:00
|
|
|
token=eos_token_invalid,
|
2025-02-05 13:50:07 +01:00
|
|
|
hash_method=DOWNLOAD_INFO["expected_hash"],
|
|
|
|
)
|
2025-02-05 13:43:43 +01:00
|
|
|
assert my_download.authenticate() is False
|
|
|
|
|
2025-02-05 13:50:07 +01:00
|
|
|
@pytest.mark.dependency(name="authentication")
|
|
|
|
@pytest.mark.skipif(
|
|
|
|
eos_token == eos_token_invalid, reason="Token is not set correctly"
|
|
|
|
)
|
2025-02-05 13:43:43 +01:00
|
|
|
@pytest.mark.skipif(is_on_github_actions(), reason="Running on Github Runner")
|
|
|
|
# @pytest.mark.xfail(reason="Deliberate - CI not set for testing AUTH")
|
|
|
|
@pytest.mark.webtest
|
|
|
|
def test_eos_download_authenticate(self):
|
|
|
|
assert self.eos_downloader.authenticate() is True
|
|
|
|
|
|
|
|
# SOFTWARE/PLATFORM TESTING
|
|
|
|
|
|
|
|
# @pytest.mark.skip(reason="Not yet implemented in lib")
|
|
|
|
def test_eos_file_name_with_incorrect_software(self, DOWNLOAD_INFO):
|
2025-02-05 13:50:07 +01:00
|
|
|
self.eos_downloader.software = "FAKE"
|
|
|
|
logger.info(f"test build: {self.eos_downloader.__dict__}")
|
2025-02-05 13:43:43 +01:00
|
|
|
with pytest.raises(ValueError) as e_info:
|
|
|
|
result = self.eos_downloader._build_filename()
|
2025-02-05 13:50:07 +01:00
|
|
|
logger.info(f"receive exception: {e_info}")
|
|
|
|
self.eos_downloader.software = DOWNLOAD_INFO["software"]
|
2025-02-05 13:43:43 +01:00
|
|
|
|
|
|
|
@pytest.mark.webtest
|
2025-02-05 13:50:07 +01:00
|
|
|
@pytest.mark.dependency(depends=["authentication"], scope="class")
|
|
|
|
def test_eos_download_get_remote_file_path_for_invlaid_software(
|
|
|
|
self, DOWNLOAD_INFO
|
|
|
|
):
|
|
|
|
self.eos_downloader.software = "FAKE"
|
|
|
|
logger.info(f"Platform set to: {self.eos_downloader.software}")
|
|
|
|
logger.info(f"test build: {self.eos_downloader.__dict__}")
|
2025-02-05 13:43:43 +01:00
|
|
|
with pytest.raises(ValueError) as e_info:
|
|
|
|
result = self.eos_downloader._build_filename()
|
2025-02-05 13:50:07 +01:00
|
|
|
logger.info(f"receive exception: {e_info}")
|
|
|
|
self.eos_downloader.software = DOWNLOAD_INFO["software"]
|
2025-02-05 13:43:43 +01:00
|
|
|
|
|
|
|
# IMAGE TESTING
|
|
|
|
|
|
|
|
def test_eos_file_name_with_incorrect_image(self, DOWNLOAD_INFO):
|
2025-02-05 13:50:07 +01:00
|
|
|
self.eos_downloader.image = "FAKE"
|
|
|
|
logger.info(f"Image set to: {self.eos_downloader.image}")
|
|
|
|
assert DOWNLOAD_INFO["filename"] == self.eos_downloader._build_filename()
|
|
|
|
self.eos_downloader.software == DOWNLOAD_INFO["image"]
|
2025-02-05 13:43:43 +01:00
|
|
|
|
|
|
|
@pytest.mark.webtest
|
2025-02-05 13:50:07 +01:00
|
|
|
@pytest.mark.dependency(depends=["authentication"], scope="class")
|
2025-02-05 13:43:43 +01:00
|
|
|
def test_eos_download_get_remote_file_path_for_invlaid_image(self, DOWNLOAD_INFO):
|
2025-02-05 13:50:07 +01:00
|
|
|
self.eos_downloader.image = "FAKE"
|
|
|
|
logger.info(f"Image set to: {self.eos_downloader.image}")
|
2025-02-05 13:43:43 +01:00
|
|
|
assert self.eos_downloader.authenticate() is True
|
2025-02-05 13:50:07 +01:00
|
|
|
assert DOWNLOAD_INFO["filename"] == self.eos_downloader._build_filename()
|
|
|
|
self.eos_downloader.image = DOWNLOAD_INFO["image"]
|
2025-02-05 13:43:43 +01:00
|
|
|
|
|
|
|
# VERSION TESTING
|
|
|
|
|
|
|
|
@pytest.mark.webtest
|
2025-02-05 13:50:07 +01:00
|
|
|
@pytest.mark.dependency(depends=["authentication"], scope="class")
|
2025-02-05 13:43:43 +01:00
|
|
|
def test_eos_download_get_remote_file_path_for_invlaid_version(self, DOWNLOAD_INFO):
|
2025-02-05 13:50:07 +01:00
|
|
|
self.eos_downloader.version = "FAKE"
|
|
|
|
logger.info(f"Version set to: {self.eos_downloader.version}")
|
|
|
|
assert self.eos_downloader._get_remote_filepath() == ""
|