From 7270050bbc40df6dc66d4d0b0fb538dd953c1618 Mon Sep 17 00:00:00 2001 From: MoonJeWoong Date: Fri, 27 Sep 2024 23:16:05 +0900 Subject: [PATCH 01/13] refactor test_text.py Signed-off-by: MoonJeWoong --- tests/{ => legacy}/test_text.py | 0 tests/pytest/__init__.py | 0 tests/pytest/conftest.py | 28 ++++++++++++++++++++++++++++ tests/pytest/constants.py | 5 +++++ tests/pytest/test_text.py | 20 ++++++++++++++++++++ tox.ini | 6 ------ 6 files changed, 53 insertions(+), 6 deletions(-) rename tests/{ => legacy}/test_text.py (100%) create mode 100644 tests/pytest/__init__.py create mode 100644 tests/pytest/conftest.py create mode 100644 tests/pytest/constants.py create mode 100644 tests/pytest/test_text.py diff --git a/tests/test_text.py b/tests/legacy/test_text.py similarity index 100% rename from tests/test_text.py rename to tests/legacy/test_text.py diff --git a/tests/pytest/__init__.py b/tests/pytest/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/pytest/conftest.py b/tests/pytest/conftest.py new file mode 100644 index 0000000..5a19752 --- /dev/null +++ b/tests/pytest/conftest.py @@ -0,0 +1,28 @@ +# Copyright (c) 2021 LG Electronics Inc. +# SPDX-License-Identifier: Apache-2.0 +import os +import shutil + +import pytest + +from . import constants + +set_up_directories = [ + constants.TEST_RESULT_DIR, + os.path.join(constants.TEST_RESULT_DIR, "convert") +] +remove_directories = [constants.TEST_RESULT_DIR] + + +@pytest.fixture(scope="function", autouse=True) +def setup_test_result_dir_and_teardown(): + print("==============setup==============") + + for dir in set_up_directories: + os.makedirs(dir, exist_ok=True) + + yield + + print("==============tearDown==============") + for dir in remove_directories: + shutil.rmtree(dir) diff --git a/tests/pytest/constants.py b/tests/pytest/constants.py new file mode 100644 index 0000000..eac17dd --- /dev/null +++ b/tests/pytest/constants.py @@ -0,0 +1,5 @@ +# Copyright (c) 2021 LG Electronics Inc. +# SPDX-License-Identifier: Apache-2.0 + +TEST_RESULT_DIR = "test_result" +TEST_RESOURCES_DIR = "resources" diff --git a/tests/pytest/test_text.py b/tests/pytest/test_text.py new file mode 100644 index 0000000..14b7a3c --- /dev/null +++ b/tests/pytest/test_text.py @@ -0,0 +1,20 @@ +# Copyright (c) 2021 LG Electronics Inc. +# SPDX-License-Identifier: Apache-2.0 + +import os +from fosslight_util.write_txt import write_txt_file + +def test_text(): + #given + output_dir = "test_result/txt" + file_to_create = os.path.join(output_dir, "test.txt") + text_to_write = "Testing - Writing text in a file." + + #when + success, _ = write_txt_file(file_to_create, text_to_write) + with open(file_to_create, 'r', encoding='utf-8') as result_file: + result = result_file.read() + + #then + assert success is True + assert text_to_write in result diff --git a/tox.ini b/tox.ini index de616c4..c010945 100644 --- a/tox.ini +++ b/tox.ini @@ -28,9 +28,6 @@ commands = python tests/test_log.py ls test_result cat test_result/log_file1.txt - # Test - writing text - python tests/test_text.py - cat test_result/txt/test.txt # Test - writing excel and csv python tests/test_excel_and_csv.py ls test_result/excel_and_csv/ @@ -60,9 +57,6 @@ commands = python tests/test_log.py ls test_result cat test_result/log_file1.txt - # Test - writing text - python tests/test_text.py - cat test_result/txt/test.txt # Test - writing excel python tests/test_excel_and_csv.py ls test_result/excel_and_csv/ From 978cc2417f6152f5a397f601fec8d87555a5a422 Mon Sep 17 00:00:00 2001 From: MoonJeWoong Date: Sat, 28 Sep 2024 00:38:52 +0900 Subject: [PATCH 02/13] refactor test_write_output.py, test_output_format.py Signed-off-by: MoonJeWoong --- tests/{ => legacy}/test_excel_and_csv.py | 0 tests/{ => legacy}/test_output_format.py | 2 ++ tests/pytest/conftest.py | 23 ++++++++++++++++++++++ tests/pytest/test_write_output.py | 25 ++++++++++++++++++++++++ 4 files changed, 50 insertions(+) rename tests/{ => legacy}/test_excel_and_csv.py (100%) rename tests/{ => legacy}/test_output_format.py (99%) create mode 100644 tests/pytest/test_write_output.py diff --git a/tests/test_excel_and_csv.py b/tests/legacy/test_excel_and_csv.py similarity index 100% rename from tests/test_excel_and_csv.py rename to tests/legacy/test_excel_and_csv.py diff --git a/tests/test_output_format.py b/tests/legacy/test_output_format.py similarity index 99% rename from tests/test_output_format.py rename to tests/legacy/test_output_format.py index 2b84fb4..0799bd0 100644 --- a/tests/test_output_format.py +++ b/tests/legacy/test_output_format.py @@ -17,9 +17,11 @@ def main(): scan_item.set_cover_comment('This is a test comment') file_item = FileItem('test_result/excel_and_csv') + oss_item = OssItem("test_name", "1.0.0", "Apache-2.0", "https://abc.com") oss_item.comment = "test_name comment" file_item.oss_items.append(oss_item) + oss_item2 = OssItem("test_name", "2.0.0", "MIT", "https://abc2.com") file_item.oss_items.append(oss_item2) file_item.comment = "all test comment" diff --git a/tests/pytest/conftest.py b/tests/pytest/conftest.py index 5a19752..6d950ec 100644 --- a/tests/pytest/conftest.py +++ b/tests/pytest/conftest.py @@ -6,6 +6,8 @@ import pytest from . import constants +from fosslight_util.constant import FOSSLIGHT_SOURCE +from fosslight_util.oss_item import ScannerItem, FileItem, OssItem set_up_directories = [ constants.TEST_RESULT_DIR, @@ -26,3 +28,24 @@ def setup_test_result_dir_and_teardown(): print("==============tearDown==============") for dir in remove_directories: shutil.rmtree(dir) + + +@pytest.fixture +def scan_item(): + scan_item = ScannerItem(FOSSLIGHT_SOURCE) + scan_item.set_cover_pathinfo('tests/test_excel_and_csv', '') + scan_item.set_cover_comment('This is a test comment') + + file_item = FileItem('test_result/excel_and_csv') + + oss_item = OssItem("test_name", "1.0.0", "Apache-2.0", "https://abc.com") + oss_item.comment = "test_name comment" + file_item.oss_items.append(oss_item) + + oss_item2 = OssItem("test_name", "2.0.0", "MIT", "https://abc2.com") + file_item.oss_items.append(oss_item2) + file_item.comment = "all test comment" + + scan_item.append_file_items([file_item]) + + return scan_item diff --git a/tests/pytest/test_write_output.py b/tests/pytest/test_write_output.py new file mode 100644 index 0000000..fba9ed5 --- /dev/null +++ b/tests/pytest/test_write_output.py @@ -0,0 +1,25 @@ +# Copyright (c) 2021 LG Electronics Inc. +# SPDX-License-Identifier: Apache-2.0 +import os +from copy import deepcopy + +import pytest + +from fosslight_util.output_format import write_output_file + + +@pytest.mark.parametrize("output_dir, result_file_name, file_extension", + [("test_result/excel_and_csv/excel", "Test_Excel", ".xlsx"), + ("test_result/excel_and_csv/csv", "Test_Csv", ".csv"), + ("test_result/output_format", "FL-TEST_opossum", ".json")]) +def test_write_excel_and_csv(output_dir, result_file_name, file_extension, scan_item): + # given + output_file_without_extension = os.path.join(output_dir, result_file_name) + + # when + success, _, result_file = write_output_file(output_file_without_extension, + file_extension, deepcopy(scan_item)) + + # then + assert success is True + assert result_file_name + file_extension in result_file From 693352eadd0190af9965e54970465b4b0b7f08ee Mon Sep 17 00:00:00 2001 From: MoonJeWoong Date: Sat, 28 Sep 2024 00:45:55 +0900 Subject: [PATCH 03/13] refactor test_spdx_licenses.py Signed-off-by: MoonJeWoong --- tests/{ => legacy}/test_spdx_licenses.py | 0 tests/pytest/test_spdx_licenses.py | 12 ++++++++++++ 2 files changed, 12 insertions(+) rename tests/{ => legacy}/test_spdx_licenses.py (100%) create mode 100644 tests/pytest/test_spdx_licenses.py diff --git a/tests/test_spdx_licenses.py b/tests/legacy/test_spdx_licenses.py similarity index 100% rename from tests/test_spdx_licenses.py rename to tests/legacy/test_spdx_licenses.py diff --git a/tests/pytest/test_spdx_licenses.py b/tests/pytest/test_spdx_licenses.py new file mode 100644 index 0000000..253b939 --- /dev/null +++ b/tests/pytest/test_spdx_licenses.py @@ -0,0 +1,12 @@ +# Copyright (c) 2021 LG Electronics Inc. +# SPDX-License-Identifier: Apache-2.0 +from fosslight_util.spdx_licenses import get_spdx_licenses_json + + +def test_get_spdx_licenses_json(): + #when + success, _, licenses = get_spdx_licenses_json() + + #then + assert success is True + assert len(licenses) > 0 From a6cdb5e62f6072c809de0449600acc943476e3f1 Mon Sep 17 00:00:00 2001 From: MoonJeWoong Date: Sat, 28 Sep 2024 01:27:25 +0900 Subject: [PATCH 04/13] rename temp pytest package Signed-off-by: MoonJeWoong --- tests/{pytest => pytest_refectored}/__init__.py | 0 tests/{pytest => pytest_refectored}/conftest.py | 7 +++---- tests/{pytest => pytest_refectored}/constants.py | 2 +- .../resources}/FOSSLight-Report_sample.xlsx | Bin .../test_spdx_licenses.py | 0 tests/{pytest => pytest_refectored}/test_text.py | 0 .../test_write_output.py | 0 7 files changed, 4 insertions(+), 5 deletions(-) rename tests/{pytest => pytest_refectored}/__init__.py (100%) rename tests/{pytest => pytest_refectored}/conftest.py (92%) rename tests/{pytest => pytest_refectored}/constants.py (76%) rename tests/{ => pytest_refectored/resources}/FOSSLight-Report_sample.xlsx (100%) rename tests/{pytest => pytest_refectored}/test_spdx_licenses.py (100%) rename tests/{pytest => pytest_refectored}/test_text.py (100%) rename tests/{pytest => pytest_refectored}/test_write_output.py (100%) diff --git a/tests/pytest/__init__.py b/tests/pytest_refectored/__init__.py similarity index 100% rename from tests/pytest/__init__.py rename to tests/pytest_refectored/__init__.py diff --git a/tests/pytest/conftest.py b/tests/pytest_refectored/conftest.py similarity index 92% rename from tests/pytest/conftest.py rename to tests/pytest_refectored/conftest.py index 6d950ec..dc5c703 100644 --- a/tests/pytest/conftest.py +++ b/tests/pytest_refectored/conftest.py @@ -1,11 +1,10 @@ # Copyright (c) 2021 LG Electronics Inc. # SPDX-License-Identifier: Apache-2.0 import os -import shutil import pytest -from . import constants +from tests.pytest_refectored import constants from fosslight_util.constant import FOSSLIGHT_SOURCE from fosslight_util.oss_item import ScannerItem, FileItem, OssItem @@ -26,8 +25,8 @@ def setup_test_result_dir_and_teardown(): yield print("==============tearDown==============") - for dir in remove_directories: - shutil.rmtree(dir) + # for dir in remove_directories: + # shutil.rmtree(dir) @pytest.fixture diff --git a/tests/pytest/constants.py b/tests/pytest_refectored/constants.py similarity index 76% rename from tests/pytest/constants.py rename to tests/pytest_refectored/constants.py index eac17dd..8894720 100644 --- a/tests/pytest/constants.py +++ b/tests/pytest_refectored/constants.py @@ -1,5 +1,5 @@ # Copyright (c) 2021 LG Electronics Inc. # SPDX-License-Identifier: Apache-2.0 -TEST_RESULT_DIR = "test_result" +TEST_RESULT_DIR = "../test_result" TEST_RESOURCES_DIR = "resources" diff --git a/tests/FOSSLight-Report_sample.xlsx b/tests/pytest_refectored/resources/FOSSLight-Report_sample.xlsx similarity index 100% rename from tests/FOSSLight-Report_sample.xlsx rename to tests/pytest_refectored/resources/FOSSLight-Report_sample.xlsx diff --git a/tests/pytest/test_spdx_licenses.py b/tests/pytest_refectored/test_spdx_licenses.py similarity index 100% rename from tests/pytest/test_spdx_licenses.py rename to tests/pytest_refectored/test_spdx_licenses.py diff --git a/tests/pytest/test_text.py b/tests/pytest_refectored/test_text.py similarity index 100% rename from tests/pytest/test_text.py rename to tests/pytest_refectored/test_text.py diff --git a/tests/pytest/test_write_output.py b/tests/pytest_refectored/test_write_output.py similarity index 100% rename from tests/pytest/test_write_output.py rename to tests/pytest_refectored/test_write_output.py From 50fcaad85877a377bae18dbed3394630da0ecdb0 Mon Sep 17 00:00:00 2001 From: MoonJeWoong Date: Sat, 28 Sep 2024 01:50:49 +0900 Subject: [PATCH 05/13] add init file to legacy package Signed-off-by: MoonJeWoong --- tests/legacy/__init__.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 tests/legacy/__init__.py diff --git a/tests/legacy/__init__.py b/tests/legacy/__init__.py new file mode 100644 index 0000000..e69de29 From d0694e8d337be93bbafdde0b7353063f61c92b55 Mon Sep 17 00:00:00 2001 From: MoonJeWoong Date: Sat, 28 Sep 2024 01:51:56 +0900 Subject: [PATCH 06/13] refactor test_download.py Signed-off-by: MoonJeWoong --- tests/{ => legacy}/test_download.py | 0 tests/pytest_refectored/conftest.py | 6 ++-- tests/pytest_refectored/constants.py | 2 +- tests/pytest_refectored/test_download.py | 41 ++++++++++++++++++++++++ 4 files changed, 45 insertions(+), 4 deletions(-) rename tests/{ => legacy}/test_download.py (100%) create mode 100644 tests/pytest_refectored/test_download.py diff --git a/tests/test_download.py b/tests/legacy/test_download.py similarity index 100% rename from tests/test_download.py rename to tests/legacy/test_download.py diff --git a/tests/pytest_refectored/conftest.py b/tests/pytest_refectored/conftest.py index dc5c703..8c37a0d 100644 --- a/tests/pytest_refectored/conftest.py +++ b/tests/pytest_refectored/conftest.py @@ -1,6 +1,7 @@ # Copyright (c) 2021 LG Electronics Inc. # SPDX-License-Identifier: Apache-2.0 import os +import shutil import pytest @@ -18,15 +19,14 @@ @pytest.fixture(scope="function", autouse=True) def setup_test_result_dir_and_teardown(): print("==============setup==============") - for dir in set_up_directories: os.makedirs(dir, exist_ok=True) yield print("==============tearDown==============") - # for dir in remove_directories: - # shutil.rmtree(dir) + for dir in remove_directories: + shutil.rmtree(dir) @pytest.fixture diff --git a/tests/pytest_refectored/constants.py b/tests/pytest_refectored/constants.py index 8894720..eac17dd 100644 --- a/tests/pytest_refectored/constants.py +++ b/tests/pytest_refectored/constants.py @@ -1,5 +1,5 @@ # Copyright (c) 2021 LG Electronics Inc. # SPDX-License-Identifier: Apache-2.0 -TEST_RESULT_DIR = "../test_result" +TEST_RESULT_DIR = "test_result" TEST_RESOURCES_DIR = "resources" diff --git a/tests/pytest_refectored/test_download.py b/tests/pytest_refectored/test_download.py new file mode 100644 index 0000000..3b234f1 --- /dev/null +++ b/tests/pytest_refectored/test_download.py @@ -0,0 +1,41 @@ +# Copyright (c) 2021 LG Electronics Inc. +# SPDX-License-Identifier: Apache-2.0 + +import os + +import pytest + +from fosslight_util.download import cli_download_and_extract +from . import constants + + +def test_download_from_github(): + #when + target_dir = os.path.join(constants.TEST_RESULT_DIR, "download/example") + success, _, _, _ = cli_download_and_extract("https://github.com/LGE-OSS/example", + target_dir, + "test_result/download_log/example") + + #then + assert success is True + assert len(os.listdir(target_dir)) > 0 + + +@pytest.mark.parametrize("project_name, project_url", + [("filelock", "https://pypi.org/project/filelock/3.4.1"), + ("dependency", "https://pypi.org/project/fosslight-dependency/3.0.5/"), + ("jackson", "https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind/2.12.2"), + ("pub", "https://pub.dev/packages/file/versions/5.2.1")]) +def test_download_from_wget(project_name, project_url): + #given + target_dir = os.path.join(constants.TEST_RESULT_DIR, + os.path.join("download", project_name)) + log_dir = os.path.join(constants.TEST_RESULT_DIR, + os.path.join("download_log" + project_name)) + + #when + success, _, _, _ = cli_download_and_extract(project_url, target_dir, log_dir) + + #then + assert success is True + assert len(os.listdir(target_dir)) > 0 From 051f156066585f1204a65773bfa32f1ae44ed147 Mon Sep 17 00:00:00 2001 From: MoonJeWoong Date: Sat, 28 Sep 2024 02:24:00 +0900 Subject: [PATCH 07/13] refactor test_write_yaml.py Signed-off-by: MoonJeWoong --- tests/{ => legacy}/test_yaml.py | 0 tests/pytest_refectored/conftest.py | 7 +++++-- tests/pytest_refectored/test_write_yaml.py | 20 ++++++++++++++++++++ 3 files changed, 25 insertions(+), 2 deletions(-) rename tests/{ => legacy}/test_yaml.py (100%) create mode 100644 tests/pytest_refectored/test_write_yaml.py diff --git a/tests/test_yaml.py b/tests/legacy/test_yaml.py similarity index 100% rename from tests/test_yaml.py rename to tests/legacy/test_yaml.py diff --git a/tests/pytest_refectored/conftest.py b/tests/pytest_refectored/conftest.py index 8c37a0d..629e77c 100644 --- a/tests/pytest_refectored/conftest.py +++ b/tests/pytest_refectored/conftest.py @@ -37,12 +37,15 @@ def scan_item(): file_item = FileItem('test_result/excel_and_csv') - oss_item = OssItem("test_name", "1.0.0", "Apache-2.0", "https://abc.com") + oss_item = OssItem("test_name1", "1.0.0", "Apache-2.0", "https://abc.com") oss_item.comment = "test_name comment" file_item.oss_items.append(oss_item) - oss_item2 = OssItem("test_name", "2.0.0", "MIT", "https://abc2.com") + oss_item2 = OssItem("test_name2", "2.0.0", "MIT", "https://abc2.com") file_item.oss_items.append(oss_item2) + + oss_item3 = OssItem("test_name3", "1.0.0", "GPL-2.0,BSD-3-Clause", "https://abc3.com") + file_item.oss_items.append(oss_item3) file_item.comment = "all test comment" scan_item.append_file_items([file_item]) diff --git a/tests/pytest_refectored/test_write_yaml.py b/tests/pytest_refectored/test_write_yaml.py new file mode 100644 index 0000000..c717a6e --- /dev/null +++ b/tests/pytest_refectored/test_write_yaml.py @@ -0,0 +1,20 @@ +# Copyright (c) 2021 LG Electronics Inc. +# SPDX-License-Identifier: Apache-2.0 + +import os + +from fosslight_util.write_yaml import write_yaml +from . import constants + + +def test_write_yaml(scan_item): + #given + output_dir = os.path.join(constants.TEST_RESULT_DIR, "yaml") + output_file = os.path.join(output_dir, 'FL-TEST_yaml.yaml') + + #when + success, _, output = write_yaml(output_file, scan_item) + + #then + assert success is True + assert output_file not in output From cc950e9a4a14f435ad4bedb47ebe227fa400fd5a Mon Sep 17 00:00:00 2001 From: MoonJeWoong Date: Sat, 28 Sep 2024 02:31:25 +0900 Subject: [PATCH 08/13] refactor test_opossum.py Signed-off-by: MoonJeWoong --- tests/{ => legacy}/test_opossum.py | 0 tests/pytest_refectored/test_opossum.py | 20 ++++++++++++++++++++ 2 files changed, 20 insertions(+) rename tests/{ => legacy}/test_opossum.py (100%) create mode 100644 tests/pytest_refectored/test_opossum.py diff --git a/tests/test_opossum.py b/tests/legacy/test_opossum.py similarity index 100% rename from tests/test_opossum.py rename to tests/legacy/test_opossum.py diff --git a/tests/pytest_refectored/test_opossum.py b/tests/pytest_refectored/test_opossum.py new file mode 100644 index 0000000..c5bca35 --- /dev/null +++ b/tests/pytest_refectored/test_opossum.py @@ -0,0 +1,20 @@ +# Copyright (c) 2021 LG Electronics Inc. +# SPDX-License-Identifier: Apache-2.0 + +import os + +from fosslight_util.write_opossum import write_opossum +from . import constants + + +def test_opossum(scan_item): + # given + output_dir = os.path.join(constants.TEST_RESULT_DIR, "opossum") + filename_with_dir = os.path.join(output_dir, "FL-TEST_opossum.json") + + # when + success, _ = write_opossum(filename_with_dir, scan_item) + + # then + assert success is True + assert len(os.listdir(output_dir)) > 0 From c6c8fcf02e71f04917aac2cffa3c10c909a6bb97 Mon Sep 17 00:00:00 2001 From: MoonJeWoong Date: Sat, 28 Sep 2024 03:07:27 +0900 Subject: [PATCH 09/13] refactor legacy tox test files related for logging Signed-off-by: MoonJeWoong --- tests/{ => legacy}/_print_log.py | 0 tests/{ => legacy}/_print_log_with_another_logger.py | 0 tests/{ => legacy}/test_help.py | 0 tests/{ => legacy}/test_log.py | 0 tests/{ => legacy}/test_timer.py | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename tests/{ => legacy}/_print_log.py (100%) rename tests/{ => legacy}/_print_log_with_another_logger.py (100%) rename tests/{ => legacy}/test_help.py (100%) rename tests/{ => legacy}/test_log.py (100%) rename tests/{ => legacy}/test_timer.py (100%) diff --git a/tests/_print_log.py b/tests/legacy/_print_log.py similarity index 100% rename from tests/_print_log.py rename to tests/legacy/_print_log.py diff --git a/tests/_print_log_with_another_logger.py b/tests/legacy/_print_log_with_another_logger.py similarity index 100% rename from tests/_print_log_with_another_logger.py rename to tests/legacy/_print_log_with_another_logger.py diff --git a/tests/test_help.py b/tests/legacy/test_help.py similarity index 100% rename from tests/test_help.py rename to tests/legacy/test_help.py diff --git a/tests/test_log.py b/tests/legacy/test_log.py similarity index 100% rename from tests/test_log.py rename to tests/legacy/test_log.py diff --git a/tests/test_timer.py b/tests/legacy/test_timer.py similarity index 100% rename from tests/test_timer.py rename to tests/legacy/test_timer.py From 0a7fc27d31c2bb33b952239b558ce6972655d662 Mon Sep 17 00:00:00 2001 From: MoonJeWoong Date: Sat, 28 Sep 2024 17:03:20 +0900 Subject: [PATCH 10/13] move omitted legacy test files Signed-off-by: MoonJeWoong --- tests/{ => legacy}/test_compare_yaml.py | 0 tests/{ => legacy}/test_convert_to_yaml.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename tests/{ => legacy}/test_compare_yaml.py (100%) rename tests/{ => legacy}/test_convert_to_yaml.py (100%) diff --git a/tests/test_compare_yaml.py b/tests/legacy/test_compare_yaml.py similarity index 100% rename from tests/test_compare_yaml.py rename to tests/legacy/test_compare_yaml.py diff --git a/tests/test_convert_to_yaml.py b/tests/legacy/test_convert_to_yaml.py similarity index 100% rename from tests/test_convert_to_yaml.py rename to tests/legacy/test_convert_to_yaml.py From 8f11d9273dec5951735f47551c4f191bd6be0127 Mon Sep 17 00:00:00 2001 From: MoonJeWoong Date: Sat, 28 Sep 2024 17:03:49 +0900 Subject: [PATCH 11/13] move resource files Signed-off-by: MoonJeWoong --- .../resources/FOSSLight-Report_sample.xlsx | Bin 0 -> 312584 bytes tests/{ => legacy/resources}/after.yaml | 0 tests/{ => legacy/resources}/before.yaml | 0 tests/pytest_refectored/resources/after.yaml | 73 ++++++++++++++++++ tests/pytest_refectored/resources/before.yaml | 53 +++++++++++++ 5 files changed, 126 insertions(+) create mode 100644 tests/legacy/resources/FOSSLight-Report_sample.xlsx rename tests/{ => legacy/resources}/after.yaml (100%) rename tests/{ => legacy/resources}/before.yaml (100%) create mode 100644 tests/pytest_refectored/resources/after.yaml create mode 100644 tests/pytest_refectored/resources/before.yaml diff --git a/tests/legacy/resources/FOSSLight-Report_sample.xlsx b/tests/legacy/resources/FOSSLight-Report_sample.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..65d46b992f3acbd0606ad676dcce4e2bd81cc32d GIT binary patch literal 312584 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 literal 0 HcmV?d00001 diff --git a/tests/after.yaml b/tests/legacy/resources/after.yaml similarity index 100% rename from tests/after.yaml rename to tests/legacy/resources/after.yaml diff --git a/tests/before.yaml b/tests/legacy/resources/before.yaml similarity index 100% rename from tests/before.yaml rename to tests/legacy/resources/before.yaml diff --git a/tests/pytest_refectored/resources/after.yaml b/tests/pytest_refectored/resources/after.yaml new file mode 100644 index 0000000..060d155 --- /dev/null +++ b/tests/pytest_refectored/resources/after.yaml @@ -0,0 +1,73 @@ +same-oss: +- version: 0.0.0 + source name or path: + - go.mod + license: + - BSD-3-Clause + download location: https://github.com/alecthomas/template + homepage: https://pkg.go.dev/github.com/alecthomas/template + comment: transitive, Cannot connect https://pkg.go.dev/github.com/alecthomas/template@v0.0.0-20160405071501-a0175ee3bccc, + get info from the latest version. +add-license-oss: +- version: 0.5.6 + source name or path: + - go.mod + license: + - MPL-2.0 + download location: https://github.com/hashicorp/go-retryablehttp + homepage: https://pkg.go.dev/github.com/hashicorp/go-retryablehttp + comment: transitive +- version: 0.5.3 + source name or path: + - go.mod + license: + - MPL-2.0 + download location: https://github.com/hashicorp/go-retryablehttp + homepage: https://pkg.go.dev/github.com/hashicorp/go-retryablehttp + comment: transitive +- version: 0.5.3 + source name or path: + - go.mod + license: + - Apache-2.0 + download location: https://github.com/hashicorp/go-retryablehttp + homepage: https://pkg.go.dev/github.com/hashicorp/go-retryablehttp + comment: transitive +- version: 0.5.4 + source name or path: + - go.mod + license: + - Apache-2.0 + download location: https://github.com/hashicorp/go-retryablehttp + homepage: https://pkg.go.dev/github.com/hashicorp/go-retryablehttp + comment: transitive +remove-version-oss: +- version: 1.0.1 + source name or path: + - go.mod + license: + - MIT + - Apache-2.0 + download location: https://github.com/konsorten/go-windows-terminal-sequences + homepage: https://pkg.go.dev/github.com/konsorten/go-windows-terminal-sequences + comment: transitive +new-test-oss: +- version: 1.0.1 + source name or path: + - hi + license: + - MIT + - Apache-2.0 + download location: https://github.com/new-test-oss/new-test-oss + homepage: https://github.com/new-test-oss/new-test-oss +new-test-oss2: +- version: 1.0.1 + source name or path: + - hi2 + license: + - MIT +- version: 1.0.2 + source name or path: + - hi2 + license: + - MIT \ No newline at end of file diff --git a/tests/pytest_refectored/resources/before.yaml b/tests/pytest_refectored/resources/before.yaml new file mode 100644 index 0000000..151dbaa --- /dev/null +++ b/tests/pytest_refectored/resources/before.yaml @@ -0,0 +1,53 @@ +same-oss: +- version: 0.0.0 + source name or path: + - go.mod + license: + - BSD-3-Clause + download location: https://github.com/alecthomas/template + homepage: https://pkg.go.dev/github.com/alecthomas/template + comment: transitive, Cannot connect https://pkg.go.dev/github.com/alecthomas/template@v0.0.0-20160405071501-a0175ee3bccc, + get info from the latest version. +add-license-oss: +- version: 0.5.6 + source name or path: + - go.mod + license: + - MPL-2.0 + download location: https://github.com/hashicorp/go-retryablehttp + homepage: https://pkg.go.dev/github.com/hashicorp/go-retryablehttp + comment: transitive +- version: 0.5.6 + source name or path: + - go.mod + license: + - MPL-2.0 + - Apache-2.0 + download location: https://github.com/hashicorp/go-retryablehttp + homepage: https://pkg.go.dev/github.com/hashicorp/go-retryablehttp + comment: transitive +remove-version-oss: +- version: 1.0.1 + source name or path: + - go.mod + license: + - MIT + download location: https://github.com/konsorten/go-windows-terminal-sequences + homepage: https://pkg.go.dev/github.com/konsorten/go-windows-terminal-sequences + comment: transitive +- version: 2.0.1 + source name or path: + - go.mod + license: + - MIT + download location: https://github.com/konsorten/go-windows-terminal-sequences + homepage: https://pkg.go.dev/github.com/konsorten/go-windows-terminal-sequences +del-test-oss: +- version: 1.0.1 + source name or path: + - hi + license: + - MIT + - Apache-2.0 + download location: https://github.com/del-test-oss/del-test-oss + homepage: https://github.com/del-test-oss/del-test-oss \ No newline at end of file From 336b9559ca1754f3c5b09962a2ad631d535a00ee Mon Sep 17 00:00:00 2001 From: MoonJeWoong Date: Sat, 28 Sep 2024 17:16:53 +0900 Subject: [PATCH 12/13] move refactoring pytest files Signed-off-by: MoonJeWoong --- tests/{pytest_refectored => }/__init__.py | 0 tests/{pytest_refectored => }/conftest.py | 2 +- tests/{pytest_refectored => }/constants.py | 0 .../resources/FOSSLight-Report_sample.xlsx | Bin .../resources/after.yaml | 0 .../resources/before.yaml | 0 .../{pytest_refectored => }/test_download.py | 16 ++--- tests/{pytest_refectored => }/test_opossum.py | 2 +- .../test_spdx_licenses.py | 4 +- tests/{pytest_refectored => }/test_text.py | 7 ++- .../test_write_output.py | 2 +- .../test_write_yaml.py | 10 +-- tox.ini | 59 ++++-------------- 13 files changed, 33 insertions(+), 69 deletions(-) rename tests/{pytest_refectored => }/__init__.py (100%) rename tests/{pytest_refectored => }/conftest.py (97%) rename tests/{pytest_refectored => }/constants.py (100%) rename tests/{pytest_refectored => }/resources/FOSSLight-Report_sample.xlsx (100%) rename tests/{pytest_refectored => }/resources/after.yaml (100%) rename tests/{pytest_refectored => }/resources/before.yaml (100%) rename tests/{pytest_refectored => }/test_download.py (85%) rename tests/{pytest_refectored => }/test_opossum.py (94%) rename tests/{pytest_refectored => }/test_spdx_licenses.py (92%) rename tests/{pytest_refectored => }/test_text.py (93%) rename tests/{pytest_refectored => }/test_write_output.py (91%) rename tests/{pytest_refectored => }/test_write_yaml.py (80%) diff --git a/tests/pytest_refectored/__init__.py b/tests/__init__.py similarity index 100% rename from tests/pytest_refectored/__init__.py rename to tests/__init__.py diff --git a/tests/pytest_refectored/conftest.py b/tests/conftest.py similarity index 97% rename from tests/pytest_refectored/conftest.py rename to tests/conftest.py index 629e77c..08f9e19 100644 --- a/tests/pytest_refectored/conftest.py +++ b/tests/conftest.py @@ -5,7 +5,7 @@ import pytest -from tests.pytest_refectored import constants +from tests import constants from fosslight_util.constant import FOSSLIGHT_SOURCE from fosslight_util.oss_item import ScannerItem, FileItem, OssItem diff --git a/tests/pytest_refectored/constants.py b/tests/constants.py similarity index 100% rename from tests/pytest_refectored/constants.py rename to tests/constants.py diff --git a/tests/pytest_refectored/resources/FOSSLight-Report_sample.xlsx b/tests/resources/FOSSLight-Report_sample.xlsx similarity index 100% rename from tests/pytest_refectored/resources/FOSSLight-Report_sample.xlsx rename to tests/resources/FOSSLight-Report_sample.xlsx diff --git a/tests/pytest_refectored/resources/after.yaml b/tests/resources/after.yaml similarity index 100% rename from tests/pytest_refectored/resources/after.yaml rename to tests/resources/after.yaml diff --git a/tests/pytest_refectored/resources/before.yaml b/tests/resources/before.yaml similarity index 100% rename from tests/pytest_refectored/resources/before.yaml rename to tests/resources/before.yaml diff --git a/tests/pytest_refectored/test_download.py b/tests/test_download.py similarity index 85% rename from tests/pytest_refectored/test_download.py rename to tests/test_download.py index 3b234f1..2617427 100644 --- a/tests/pytest_refectored/test_download.py +++ b/tests/test_download.py @@ -6,17 +6,17 @@ import pytest from fosslight_util.download import cli_download_and_extract -from . import constants +from tests import constants def test_download_from_github(): - #when + # when target_dir = os.path.join(constants.TEST_RESULT_DIR, "download/example") success, _, _, _ = cli_download_and_extract("https://github.com/LGE-OSS/example", - target_dir, - "test_result/download_log/example") + target_dir, + "test_result/download_log/example") - #then + # then assert success is True assert len(os.listdir(target_dir)) > 0 @@ -27,15 +27,15 @@ def test_download_from_github(): ("jackson", "https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind/2.12.2"), ("pub", "https://pub.dev/packages/file/versions/5.2.1")]) def test_download_from_wget(project_name, project_url): - #given + # given target_dir = os.path.join(constants.TEST_RESULT_DIR, os.path.join("download", project_name)) log_dir = os.path.join(constants.TEST_RESULT_DIR, os.path.join("download_log" + project_name)) - #when + # when success, _, _, _ = cli_download_and_extract(project_url, target_dir, log_dir) - #then + # then assert success is True assert len(os.listdir(target_dir)) > 0 diff --git a/tests/pytest_refectored/test_opossum.py b/tests/test_opossum.py similarity index 94% rename from tests/pytest_refectored/test_opossum.py rename to tests/test_opossum.py index c5bca35..8291424 100644 --- a/tests/pytest_refectored/test_opossum.py +++ b/tests/test_opossum.py @@ -4,7 +4,7 @@ import os from fosslight_util.write_opossum import write_opossum -from . import constants +from tests import constants def test_opossum(scan_item): diff --git a/tests/pytest_refectored/test_spdx_licenses.py b/tests/test_spdx_licenses.py similarity index 92% rename from tests/pytest_refectored/test_spdx_licenses.py rename to tests/test_spdx_licenses.py index 253b939..2abe4f1 100644 --- a/tests/pytest_refectored/test_spdx_licenses.py +++ b/tests/test_spdx_licenses.py @@ -4,9 +4,9 @@ def test_get_spdx_licenses_json(): - #when + # when success, _, licenses = get_spdx_licenses_json() - #then + # then assert success is True assert len(licenses) > 0 diff --git a/tests/pytest_refectored/test_text.py b/tests/test_text.py similarity index 93% rename from tests/pytest_refectored/test_text.py rename to tests/test_text.py index 14b7a3c..41f0395 100644 --- a/tests/pytest_refectored/test_text.py +++ b/tests/test_text.py @@ -4,17 +4,18 @@ import os from fosslight_util.write_txt import write_txt_file + def test_text(): - #given + # given output_dir = "test_result/txt" file_to_create = os.path.join(output_dir, "test.txt") text_to_write = "Testing - Writing text in a file." - #when + # when success, _ = write_txt_file(file_to_create, text_to_write) with open(file_to_create, 'r', encoding='utf-8') as result_file: result = result_file.read() - #then + # then assert success is True assert text_to_write in result diff --git a/tests/pytest_refectored/test_write_output.py b/tests/test_write_output.py similarity index 91% rename from tests/pytest_refectored/test_write_output.py rename to tests/test_write_output.py index fba9ed5..0707a9e 100644 --- a/tests/pytest_refectored/test_write_output.py +++ b/tests/test_write_output.py @@ -18,7 +18,7 @@ def test_write_excel_and_csv(output_dir, result_file_name, file_extension, scan_ # when success, _, result_file = write_output_file(output_file_without_extension, - file_extension, deepcopy(scan_item)) + file_extension, deepcopy(scan_item)) # then assert success is True diff --git a/tests/pytest_refectored/test_write_yaml.py b/tests/test_write_yaml.py similarity index 80% rename from tests/pytest_refectored/test_write_yaml.py rename to tests/test_write_yaml.py index c717a6e..882329d 100644 --- a/tests/pytest_refectored/test_write_yaml.py +++ b/tests/test_write_yaml.py @@ -4,17 +4,17 @@ import os from fosslight_util.write_yaml import write_yaml -from . import constants +from tests import constants def test_write_yaml(scan_item): - #given + # given output_dir = os.path.join(constants.TEST_RESULT_DIR, "yaml") output_file = os.path.join(output_dir, 'FL-TEST_yaml.yaml') - #when + # when success, _, output = write_yaml(output_file, scan_item) - #then + # then assert success is True - assert output_file not in output + assert output_file in output diff --git a/tox.ini b/tox.ini index c010945..9786910 100644 --- a/tox.ini +++ b/tox.ini @@ -8,6 +8,7 @@ skipdist = true install_command = pip install {opts} {packages} allowlist_externals = cat ls + pytest setenv = PYTHONPATH=. @@ -17,65 +18,27 @@ exclude = .tox/* [pytest] filterwarnings = ignore::DeprecationWarning -norecursedirs = test_result/* +norecursedirs = test_result/* tests/legacy [testenv:test_run] deps = -r{toxinidir}/requirements-dev.txt wheel = true +# move to tests dir +changedir = {tox_root}/tests commands = - # Test - logging - python tests/test_log.py - ls test_result - cat test_result/log_file1.txt - # Test - writing excel and csv - python tests/test_excel_and_csv.py - ls test_result/excel_and_csv/ - cat test_result/excel_and_csv/excel/Test_Excel.xlsx - cat test_result/excel_and_csv/csv/Test_Csv.csv - # Test - downloading source - fosslight_download -s "https://github.com/LGE-OSS/example" -t test_git/ - ls test_git/ - fosslight_download -s "https://pypi.org/project/fosslight-dependency/3.0.5/" -t test_wget -d test_logs - fosslight_download -s "https://www.npmjs.com/package/json-schema/v/0.3.0" -t test_wget -d test_logs - fosslight_download -s "https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind/2.12.2" -t test_wget -d test_logs - fosslight_download -s "https://pub.dev/packages/file/versions/5.2.1" -t test_wget -d test_logs - ls test_wget/ - # Test - write output file - python tests/test_output_format.py - # Test - get spdx licenses - python tests/test_spdx_licenses.py +# Test - run pytest + pytest [testenv:release] deps = -r{toxinidir}/requirements-dev.txt wheel = true +# move to tests dir +changedir = {tox_root}/tests commands = - # Test - print help msg - python tests/test_help.py - # Test - logging - python tests/test_log.py - ls test_result - cat test_result/log_file1.txt - # Test - writing excel - python tests/test_excel_and_csv.py - ls test_result/excel_and_csv/ - cat test_result/excel_and_csv/excel/Test_Excel.xlsx - cat test_result/excel_and_csv/csv/Test_Csv.csv - # Test - writing opossum - python tests/test_opossum.py - ls test_result/opossum - # Test - writing yaml - python tests/test_yaml.py - cat test_result/yaml/FL-TEST_yaml.yaml - # Test - timer - python tests/test_timer.py - # Test - downloading source - python tests/test_download.py - ls test_result/download - # Test - write output file - python tests/test_output_format.py - # Test - get spdx licenses - python tests/test_spdx_licenses.py + # Test - run pytest + pytest + # Test - check PEP8 pytest -v --flake8 From 666f81f73d58cb1bc19dfd6f7fadfa246218574b Mon Sep 17 00:00:00 2001 From: MoonJeWoong Date: Tue, 1 Oct 2024 23:44:59 +0900 Subject: [PATCH 13/13] reformat import statements Signed-off-by: MoonJeWoong --- tests/test_download.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/test_download.py b/tests/test_download.py index 2617427..ec20978 100644 --- a/tests/test_download.py +++ b/tests/test_download.py @@ -2,7 +2,6 @@ # SPDX-License-Identifier: Apache-2.0 import os - import pytest from fosslight_util.download import cli_download_and_extract