diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..08f9e19 --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,53 @@ +# Copyright (c) 2021 LG Electronics Inc. +# SPDX-License-Identifier: Apache-2.0 +import os +import shutil + +import pytest + +from tests 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, + 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) + + +@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_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_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]) + + return scan_item diff --git a/tests/constants.py b/tests/constants.py new file mode 100644 index 0000000..eac17dd --- /dev/null +++ b/tests/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/legacy/__init__.py b/tests/legacy/__init__.py new file mode 100644 index 0000000..e69de29 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/FOSSLight-Report_sample.xlsx b/tests/legacy/resources/FOSSLight-Report_sample.xlsx similarity index 100% rename from tests/FOSSLight-Report_sample.xlsx rename to tests/legacy/resources/FOSSLight-Report_sample.xlsx 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/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 diff --git a/tests/legacy/test_download.py b/tests/legacy/test_download.py new file mode 100755 index 0000000..b7a6b95 --- /dev/null +++ b/tests/legacy/test_download.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2021 LG Electronics Inc. +# SPDX-License-Identifier: Apache-2.0 +from fosslight_util.download import cli_download_and_extract + + +def main(): + success, msg, _, _ = cli_download_and_extract("https://github.com/LGE-OSS/example", + "test_result/download/example", + "test_result/download_log/example") + if not success: + raise Exception(f"Download failed with git:{msg}") + success, msg, _, _ = cli_download_and_extract("https://pypi.org/project/filelock/3.4.1", + "test_result/download/filelock", + "test_result/download_log/filelock") + if not success: + raise Exception(f"Download failed with wget:{msg}") + + +if __name__ == '__main__': + main() 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_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/legacy/test_opossum.py b/tests/legacy/test_opossum.py new file mode 100644 index 0000000..9f0e451 --- /dev/null +++ b/tests/legacy/test_opossum.py @@ -0,0 +1,35 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2021 LG Electronics Inc. +# SPDX-License-Identifier: Apache-2.0 +from fosslight_util.write_opossum import write_opossum +from fosslight_util.set_log import init_log +from fosslight_util.oss_item import ScannerItem, FileItem, OssItem +from fosslight_util.constant import FOSSLIGHT_SOURCE + + +def main(): + logger, _result_log = init_log("test_result/excel/log_write_opossum.txt") + logger.warning("TESTING - Writing an opossum") + + 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]) + + success, msg = write_opossum( + 'test_result/opossum/FL-TEST_opossum.json', scan_item) + logger.warning("Result:" + str(success) + ", error_msg:" + msg) + + +if __name__ == '__main__': + main() 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/legacy/test_spdx_licenses.py b/tests/legacy/test_spdx_licenses.py new file mode 100644 index 0000000..6755ddd --- /dev/null +++ b/tests/legacy/test_spdx_licenses.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2021 LG Electronics Inc. +# SPDX-License-Identifier: Apache-2.0 +from fosslight_util.set_log import init_log +from fosslight_util.spdx_licenses import get_spdx_licenses_json + + +def main(): + logger, _result_log = init_log("test_result/spdx_licenses/log_spdx_licenses.txt") + logger.warning("TESTING - Get spdx licenses") + + success, error_msg, licenses = get_spdx_licenses_json() + logger.warning("Result:" + str(success) + ", error_msg:" + error_msg) + + +if __name__ == '__main__': + main() diff --git a/tests/legacy/test_text.py b/tests/legacy/test_text.py new file mode 100755 index 0000000..2c8dabc --- /dev/null +++ b/tests/legacy/test_text.py @@ -0,0 +1,20 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- +# Copyright (c) 2021 LG Electronics Inc. +# SPDX-License-Identifier: Apache-2.0 +import os +from fosslight_util.set_log import init_log +from fosslight_util.write_txt import write_txt_file + + +def main(): + output_dir = "test_result/txt" + logger, _result_log = init_log(os.path.join(output_dir, "log.txt")) + logger.warning("TESTING - writing text file") + success, error_msg = write_txt_file( + os.path.join(output_dir, "test.txt"), "Testing - Writing text in a file.") + logger.warning("Result:" + str(success) + ", error_msg:"+error_msg) + + +if __name__ == '__main__': + main() 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 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/resources/FOSSLight-Report_sample.xlsx b/tests/resources/FOSSLight-Report_sample.xlsx new file mode 100644 index 0000000..65d46b9 Binary files /dev/null and b/tests/resources/FOSSLight-Report_sample.xlsx differ diff --git a/tests/resources/after.yaml b/tests/resources/after.yaml new file mode 100644 index 0000000..060d155 --- /dev/null +++ b/tests/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/resources/before.yaml b/tests/resources/before.yaml new file mode 100644 index 0000000..151dbaa --- /dev/null +++ b/tests/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 diff --git a/tests/test_download.py b/tests/test_download.py old mode 100755 new mode 100644 index b7a6b95..ec20978 --- a/tests/test_download.py +++ b/tests/test_download.py @@ -1,22 +1,40 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- # 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 tests 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 -def main(): - success, msg, _, _ = cli_download_and_extract("https://github.com/LGE-OSS/example", - "test_result/download/example", - "test_result/download_log/example") - if not success: - raise Exception(f"Download failed with git:{msg}") - success, msg, _, _ = cli_download_and_extract("https://pypi.org/project/filelock/3.4.1", - "test_result/download/filelock", - "test_result/download_log/filelock") - if not success: - raise Exception(f"Download failed with wget:{msg}") +@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) -if __name__ == '__main__': - main() + # then + assert success is True + assert len(os.listdir(target_dir)) > 0 diff --git a/tests/test_opossum.py b/tests/test_opossum.py index 9f0e451..8291424 100644 --- a/tests/test_opossum.py +++ b/tests/test_opossum.py @@ -1,35 +1,20 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- # Copyright (c) 2021 LG Electronics Inc. # SPDX-License-Identifier: Apache-2.0 -from fosslight_util.write_opossum import write_opossum -from fosslight_util.set_log import init_log -from fosslight_util.oss_item import ScannerItem, FileItem, OssItem -from fosslight_util.constant import FOSSLIGHT_SOURCE - -def main(): - logger, _result_log = init_log("test_result/excel/log_write_opossum.txt") - logger.warning("TESTING - Writing an opossum") +import os - 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" +from fosslight_util.write_opossum import write_opossum +from tests import constants - scan_item.append_file_items([file_item]) - success, msg = write_opossum( - 'test_result/opossum/FL-TEST_opossum.json', scan_item) - logger.warning("Result:" + str(success) + ", error_msg:" + msg) +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) -if __name__ == '__main__': - main() + # then + assert success is True + assert len(os.listdir(output_dir)) > 0 diff --git a/tests/test_spdx_licenses.py b/tests/test_spdx_licenses.py index 6755ddd..2abe4f1 100644 --- a/tests/test_spdx_licenses.py +++ b/tests/test_spdx_licenses.py @@ -1,18 +1,12 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- # Copyright (c) 2021 LG Electronics Inc. # SPDX-License-Identifier: Apache-2.0 -from fosslight_util.set_log import init_log from fosslight_util.spdx_licenses import get_spdx_licenses_json -def main(): - logger, _result_log = init_log("test_result/spdx_licenses/log_spdx_licenses.txt") - logger.warning("TESTING - Get spdx licenses") +def test_get_spdx_licenses_json(): + # when + success, _, licenses = get_spdx_licenses_json() - success, error_msg, licenses = get_spdx_licenses_json() - logger.warning("Result:" + str(success) + ", error_msg:" + error_msg) - - -if __name__ == '__main__': - main() + # then + assert success is True + assert len(licenses) > 0 diff --git a/tests/test_text.py b/tests/test_text.py old mode 100755 new mode 100644 index 2c8dabc..41f0395 --- a/tests/test_text.py +++ b/tests/test_text.py @@ -1,20 +1,21 @@ -#!/usr/bin/env python -# -*- coding: utf-8 -*- # Copyright (c) 2021 LG Electronics Inc. # SPDX-License-Identifier: Apache-2.0 + import os -from fosslight_util.set_log import init_log from fosslight_util.write_txt import write_txt_file -def main(): +def test_text(): + # given output_dir = "test_result/txt" - logger, _result_log = init_log(os.path.join(output_dir, "log.txt")) - logger.warning("TESTING - writing text file") - success, error_msg = write_txt_file( - os.path.join(output_dir, "test.txt"), "Testing - Writing text in a file.") - logger.warning("Result:" + str(success) + ", error_msg:"+error_msg) + 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() -if __name__ == '__main__': - main() + # then + assert success is True + assert text_to_write in result diff --git a/tests/test_write_output.py b/tests/test_write_output.py new file mode 100644 index 0000000..0707a9e --- /dev/null +++ b/tests/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 diff --git a/tests/test_write_yaml.py b/tests/test_write_yaml.py new file mode 100644 index 0000000..882329d --- /dev/null +++ b/tests/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 tests 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 in output diff --git a/tox.ini b/tox.ini index de616c4..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,71 +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 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/ - 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 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/ - 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