From 7ad1d0e0af695fa7f872b740a1bb7b2897eb41bd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Thu, 11 May 2023 11:25:01 +0200 Subject: Adding upstream version 0.8.1. Signed-off-by: Daniel Baumann --- tests/unit/test_object_downloader.py | 141 +++++++++++++++++++++++++++++++++++ 1 file changed, 141 insertions(+) create mode 100644 tests/unit/test_object_downloader.py (limited to 'tests/unit/test_object_downloader.py') diff --git a/tests/unit/test_object_downloader.py b/tests/unit/test_object_downloader.py new file mode 100644 index 0000000..8237b1c --- /dev/null +++ b/tests/unit/test_object_downloader.py @@ -0,0 +1,141 @@ +#!/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 +from tests.lib.dataset import eos_dataset_invalid, eos_dataset_valid, eos_token, eos_token_invalid +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") + +@pytest.mark.usefixtures("create_download_instance") +@pytest.mark.parametrize("DOWNLOAD_INFO", eos_dataset_valid, ids=['EOS-sha512', 'EOS-md5' ,'vEOS-lab-no-hash']) +@pytest.mark.eos_download +class TestEosDownload_valid(): + def test_data(self, DOWNLOAD_INFO): + logger.info(f'test input: {DOWNLOAD_INFO}') + logger.info(f'test build: {self.eos_downloader.__dict__}') + + def test_eos_download_create(self, DOWNLOAD_INFO): + my_download = eos_downloader.eos.EOSDownloader( + image=DOWNLOAD_INFO['image'], + software=DOWNLOAD_INFO['software'], + version=DOWNLOAD_INFO['version'], + token=eos_token, + hash_method='sha512sum') + logger.info(my_download) + assert isinstance(my_download, eos_downloader.eos.EOSDownloader) + + 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): + assert self.eos_downloader._build_filename() == DOWNLOAD_INFO['filename'] + + @pytest.mark.dependency(name='authentication') + @pytest.mark.skipif(eos_token == eos_token_invalid, reason="Token is not set correctly") + @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 + + @pytest.mark.dependency(depends=["authentication"], scope='class') + @pytest.mark.webtest + def test_eos_download_get_remote_file_path(self, DOWNLOAD_INFO): + assert self.eos_downloader._get_remote_filepath() == DOWNLOAD_INFO['remote_path'] + + @pytest.mark.dependency(depends=["authentication"], scope='class') + @pytest.mark.webtest + def test_eos_download_get_file_url(self, DOWNLOAD_INFO): + url = self.eos_downloader._get_url(remote_file_path = DOWNLOAD_INFO['remote_path']) + logger.info(url) + assert 'https://downloads.arista.com/EOS-USA/Active%20Releases/' in url + +@pytest.mark.usefixtures("create_download_instance") +@pytest.mark.parametrize("DOWNLOAD_INFO", eos_dataset_invalid, ids=['EOS-FAKE']) +class TestEosDownload_invalid(): + + def test_data(self, DOWNLOAD_INFO): + logger.info(f'test input: {dict(DOWNLOAD_INFO)}') + logger.info(f'test build: {self.eos_downloader.__dict__}') + + def test_eos_download_login_error(self, DOWNLOAD_INFO): + my_download = eos_downloader.eos.EOSDownloader( + image=DOWNLOAD_INFO['image'], + software=DOWNLOAD_INFO['software'], + version=DOWNLOAD_INFO['version'], + token=eos_token_invalid, + hash_method=DOWNLOAD_INFO['expected_hash']) + assert my_download.authenticate() is False + + @pytest.mark.dependency(name='authentication') + @pytest.mark.skipif(eos_token == eos_token_invalid, reason="Token is not set correctly") + @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): + self.eos_downloader.software = 'FAKE' + logger.info(f'test build: {self.eos_downloader.__dict__}') + with pytest.raises(ValueError) as e_info: + result = self.eos_downloader._build_filename() + logger.info(f'receive exception: {e_info}') + self.eos_downloader.software = DOWNLOAD_INFO['software'] + + @pytest.mark.webtest + @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__}') + with pytest.raises(ValueError) as e_info: + result = self.eos_downloader._build_filename() + logger.info(f'receive exception: {e_info}') + self.eos_downloader.software = DOWNLOAD_INFO['software'] + + # IMAGE TESTING + + def test_eos_file_name_with_incorrect_image(self, DOWNLOAD_INFO): + 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'] + + @pytest.mark.webtest + @pytest.mark.dependency(depends=["authentication"], scope='class') + def test_eos_download_get_remote_file_path_for_invlaid_image(self, DOWNLOAD_INFO): + self.eos_downloader.image = 'FAKE' + logger.info(f'Image set to: {self.eos_downloader.image}') + assert self.eos_downloader.authenticate() is True + assert DOWNLOAD_INFO['filename'] == self.eos_downloader._build_filename() + self.eos_downloader.image = DOWNLOAD_INFO['image'] + + # VERSION TESTING + + @pytest.mark.webtest + @pytest.mark.dependency(depends=["authentication"], scope='class') + def test_eos_download_get_remote_file_path_for_invlaid_version(self, DOWNLOAD_INFO): + self.eos_downloader.version = 'FAKE' + logger.info(f'Version set to: {self.eos_downloader.version}') + assert self.eos_downloader._get_remote_filepath() == '' \ No newline at end of file -- cgit v1.2.3