summaryrefslogtreecommitdiffstats
path: root/tests/unit/test_object_downloader.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2023-05-11 09:25:01 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2023-06-12 05:31:22 +0000
commit7ad1d0e0af695fa7f872b740a1bb7b2897eb41bd (patch)
tree13dd59a8ea98206a8c56ffd466f59c146f9f19c7 /tests/unit/test_object_downloader.py
parentInitial commit. (diff)
downloadeos-downloader-7ad1d0e0af695fa7f872b740a1bb7b2897eb41bd.tar.xz
eos-downloader-7ad1d0e0af695fa7f872b740a1bb7b2897eb41bd.zip
Adding upstream version 0.8.1.upstream/0.8.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r--tests/unit/test_object_downloader.py141
1 files changed, 141 insertions, 0 deletions
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