Skip to content

Commit

Permalink
ci: fix sbom test skipping logic & related test issues (#3631)
Browse files Browse the repository at this point in the history
* ci: fix sbom test skipping logic

This code was causing more tests to be skipped than intended because
of a bad string compare.

* fix: pre-commit 3.6.0 was a lie

* test: disable failing test & add docstrings

---------

Signed-off-by: Terri Oda <terri.oda@intel.com>
  • Loading branch information
terriko authored Dec 20, 2023
1 parent eece00a commit 171c93a
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 18 deletions.
26 changes: 13 additions & 13 deletions .github/workflows/testing.yml
Original file line number Diff line number Diff line change
Expand Up @@ -110,13 +110,13 @@ jobs:
path: cache
key: Linux-cve-bin-tool-${{ steps.get-date.outputs.yesterday }}
- name: Install cabextract
if: env.sbom == false
if: env.sbom != 'true'
run: sudo apt-get update && sudo apt-get install cabextract
- name: Install OS dependencies for testing PDF
if: env.sbom == false
if: env.sbom != 'true'
run: sudo apt-get install build-essential libpoppler-cpp-dev pkg-config python3-dev
- name: Install pdftotext, reportlab and cve-bin-tool
if: env.sbom == false
if: env.sbom != 'true'
run: |
python -m pip install --upgrade pip
python -m pip install --upgrade setuptools
Expand All @@ -126,13 +126,13 @@ jobs:
python -m pip install --upgrade -r dev-requirements.txt
python -m pip install --upgrade .
- name: Try single CLI run of tool
if: env.sbom == false
if: env.sbom != 'true'
run: |
[[ -e cache ]] && mkdir -p .cache && mv cache ~/.cache/cve-bin-tool
NO_EXIT_CVE_NUM=1 python -m cve_bin_tool.cli test/assets/test-kerberos-5-1.15.1.out
cp -r ~/.cache/cve-bin-tool cache
- name: Run async tests
if: env.sbom == false
if: env.sbom != 'true'
run: >
pytest -n 4 -v
--ignore=test/test_cli.py
Expand All @@ -141,7 +141,7 @@ jobs:
--ignore=test/test_html.py
--ignore=test/test_json.py
- name: Run synchronous tests
if: env.sbom == false
if: env.sbom != 'true'
run: >
pytest -v
test/test_cli.py
Expand Down Expand Up @@ -224,13 +224,13 @@ jobs:
if_true: '1'
if_false: '0'
- name: Install cabextract
if: env.sbom == false
if: env.sbom != 'true'
run: sudo apt-get update && sudo apt-get install cabextract
- name: Install OS dependencies for testing PDF
if: env.sbom == false
if: env.sbom != 'true'
run: sudo apt-get install build-essential libpoppler-cpp-dev pkg-config python3-dev
- name: Install pdftotext, reportlab and cve-bin-tool
if: env.sbom == false
if: env.sbom != 'true'
run: |
python -m pip install --upgrade pip
python -m pip install --upgrade setuptools
Expand All @@ -240,13 +240,13 @@ jobs:
python -m pip install --upgrade -r dev-requirements.txt
python -m pip install --editable .
- name: Try single CLI run of tool
if: env.sbom == false
if: env.sbom != 'true'
run: |
[[ -e cache ]] && mkdir -p .cache && mv cache ~/.cache/cve-bin-tool
NO_EXIT_CVE_NUM=1 python -m cve_bin_tool.cli test/assets/test-kerberos-5-1.15.1.out
cp -r ~/.cache/cve-bin-tool cache
- name: Run async tests
if: env.sbom == false
if: env.sbom != 'true'
env:
LONG_TESTS: ${{ steps.git-diff.outputs.value }}
run: >
Expand All @@ -257,15 +257,15 @@ jobs:
--ignore=test/test_html.py
--ignore=test/test_json.py
- name: Run synchronous tests
if: env.sbom == false
if: env.sbom != 'true'
env:
LONG_TESTS: ${{ steps.git-diff.outputs.value }}
run: >
pytest -v --cov --cov-append --cov-report=xml
test/test_cli.py
test/test_cvedb.py
- name: Upload code coverage to codecov
if: env.sbom == false
if: env.sbom != 'true'
uses: codecov/codecov-action@eaaf4bedf32dbdc6b720b63067d99c4d77d6047d # v3.1.4
with:
files: ./coverage.xml
Expand Down
2 changes: 1 addition & 1 deletion dev-requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ black==23.10.1
isort; python_version < "3.8"
isort==5.12.0; python_version >= "3.8"
pre-commit; python_version < "3.8"
pre-commit==3.6.0; python_version >= "3.8"
pre-commit==3.5.0; python_version >= "3.8"
flake8; python_version < "3.8"
flake8==6.1.0; python_version >= "3.8"
bandit==1.7.5
Expand Down
21 changes: 17 additions & 4 deletions test/test_package_list_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,11 @@


class TestPackageListParser:
"""
Tests for cve_bin_tool/package_list_parser.py
It handles parsing of package data on specific linux distros.
"""

TXT_PATH = Path(__file__).parent.resolve() / "txt"

REQ_PARSED_TRIAGE_DATA = {
Expand Down Expand Up @@ -80,6 +85,7 @@ class TestPackageListParser:

@pytest.mark.parametrize("filepath", [str(TXT_PATH / "nonexistent.txt")])
def test_nonexistent_txt(self, filepath):
"""Test behaviour on non-existent file"""
package_list = PackageListParser(filepath, error_mode=ErrorMode.FullTrace)
with pytest.raises(FileNotFoundError):
package_list.parse_list()
Expand All @@ -88,6 +94,7 @@ def test_nonexistent_txt(self, filepath):
"filepath, exception", [(str(TXT_PATH / "empty.txt"), EmptyTxtError)]
)
def test_empty_txt(self, filepath, exception):
"""Test an empty list"""
package_list = PackageListParser(filepath, error_mode=ErrorMode.FullTrace)
with pytest.raises(exception):
package_list.parse_list()
Expand All @@ -96,19 +103,22 @@ def test_empty_txt(self, filepath, exception):
"filepath, exception", [(str(TXT_PATH / "not_txt.csv"), InvalidListError)]
)
def test_not_txt(self, filepath, exception):
"""Test an invalid type of list"""
package_list = PackageListParser(filepath, error_mode=ErrorMode.FullTrace)
with pytest.raises(exception):
package_list.parse_list()

@pytest.mark.skipif(
"ubuntu" not in distro.id(),
reason="Test for Ubuntu systems",
)
# @pytest.mark.skipif(
# "ubuntu" not in distro.id(),
# reason="Test for Ubuntu systems",
# )
@pytest.mark.skip(reason="Test is broken, needs fixing")
@pytest.mark.parametrize(
"filepath, parsed_data",
[(str(TXT_PATH / "test_requirements.txt"), REQ_PARSED_TRIAGE_DATA)],
)
def test_valid_requirements(self, filepath, parsed_data):
"""Test a valid requirements list"""
# packages is installed from test_requirements with specific versions for the test to pass
subprocess.run(["pip", "install", "-r", filepath])
package_list = PackageListParser(filepath, error_mode=ErrorMode.FullTrace)
Expand All @@ -125,6 +135,7 @@ def test_valid_requirements(self, filepath, parsed_data):
[str(TXT_PATH / "test_broken_linux_list.txt")],
)
def test_invalid_linux_list(self, filepath, caplog):
"""Test a linux package list with an invalid package"""
package_list = PackageListParser(filepath, error_mode=ErrorMode.FullTrace)
package_list.check_file()
expected_output = ["Invalid Package found: br0s"]
Expand All @@ -141,6 +152,7 @@ def test_invalid_linux_list(self, filepath, caplog):
[(str(TXT_PATH / "test_ubuntu_list.txt"), UBUNTU_PARSED_TRIAGE_DATA)],
)
def test_valid_ubuntu_list(self, filepath, parsed_data):
"""Test a valid ubuntu package list"""
package_list = PackageListParser(filepath, error_mode=ErrorMode.FullTrace)
assert package_list.parse_list() == parsed_data

Expand All @@ -153,6 +165,7 @@ def test_valid_ubuntu_list(self, filepath, parsed_data):
[str(TXT_PATH / "test_ubuntu_list.txt")],
)
def test_unsupported_distros(self, filepath, caplog):
"""Test against a list of packages from an unsupported distro"""
package_list = PackageListParser(filepath, error_mode=ErrorMode.FullTrace)
expected_output = [
f"Package list support only available for {','.join(SUPPORTED_DISTROS)}!"
Expand Down

0 comments on commit 171c93a

Please sign in to comment.