Skip to content

Commit e994f0f

Browse files
committed
test(language_scanner): use scan_file() and add unit tests for python_package_parser
1 parent 6c13a9d commit e994f0f

File tree

6 files changed

+56
-9
lines changed

6 files changed

+56
-9
lines changed

test/language_data/FAIL-PKG-INFO

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Metadata-Version: 2.1
2+
Name: cve-bin-tool
3+
Version: 3.1.1

test/language_data/PKG-INFO

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
Metadata-Version: 2.1
2+
Name: zstandard
3+
Version: 0.18.0
4+
Summary: Zstandard bindings for Python
5+
Home-page: https://github.com/indygreg/python-zstandard
6+
Author: Gregory Szorc
7+
Author-email: [email protected]
8+
License: BSD
9+
Keywords: zstandard,zstd,compression
10+
Classifier: Development Status :: 5 - Production/Stable
11+
Classifier: Development Status :: 5 - Production/Stable
12+
Classifier: Development Status :: 5 - Production/Stable
13+
Classifier: Development Status :: 5 - Production/Stable
14+
Classifier: Development Status :: 5 - Production/Stable
15+
Classifier: Development Status :: 5 - Production/Stable
16+
Classifier: Development Status :: 5 - Production/Stable
17+
Classifier: Development Status :: 5 - Production/Stable
18+
Classifier: Development Status :: 5 - Production/Stable
19+
Requires-Python: >=3.6
20+
License-File: LICENSE
21+
Requires-Dist: cffi (>=1.11) ; platform_python_implementation == "PyPy"
22+
Provides-Extra: cffi
23+
Requires-Dist: cffi (>=1.11) ; platform_python_implementation == "PyPy"
File renamed without changes.

test/test_language_scanner.py

Lines changed: 30 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import pytest
77

8+
from cve_bin_tool.util import ProductInfo
89
from cve_bin_tool.version_scanner import VersionScanner
910

1011

@@ -28,43 +29,63 @@ def test_java_package(self, filename: str, product_name: str) -> None:
2829
scanner = VersionScanner()
2930
scanner.file_stack.append(filename)
3031
# Only expecting to get one product with a vendor in the database
31-
for product in scanner.run_java_checker(filename):
32+
for product in scanner.scan_file(filename):
3233
if product:
3334
product_info, file_path = product
3435
assert product_info.product == product_name
3536
assert file_path == filename
3637

37-
@pytest.mark.parametrize("filename", ((str(TEST_FILE_PATH / "pom_fail.xml")),))
38+
@pytest.mark.parametrize("filename", ((str(TEST_FILE_PATH / "fail_pom.xml")),))
3839
def test_java_package_none_found(self, filename: str) -> None:
3940
scanner = VersionScanner()
4041
scanner.file_stack.append(filename)
4142
product = None
4243
# Not expecting any product to match with a vendor in the database
43-
for product in scanner.run_java_checker(filename):
44+
for product in scanner.scan_file(filename):
4445
pass
4546
assert product is None
4647

47-
@pytest.mark.parametrize(
48-
"filename", ((str(TEST_FILE_PATH / "package-lock1.json")),)
49-
)
48+
@pytest.mark.parametrize("filename", ((str(TEST_FILE_PATH / "package-lock.json")),))
5049
def test_javascript_package(self, filename: str) -> None:
5150
scanner = VersionScanner()
5251
scanner.file_stack.append(filename)
5352
found_product = []
54-
for product in scanner.run_js_checker(filename):
53+
for product in scanner.scan_file(filename):
5554
if product:
5655
product_info, file_path = product
5756
if product_info.product not in found_product:
5857
found_product.append(product_info.product)
5958
assert found_product == self.JAVASCRIPT_PRODUCTS
6059
assert file_path == filename
6160

62-
@pytest.mark.parametrize("filename", ((str(TEST_FILE_PATH / "package.json")),))
61+
@pytest.mark.parametrize(
62+
"filename", ((str(TEST_FILE_PATH / "fail-package-lock.json")),)
63+
)
6364
def test_javascript_package_none_found(self, filename: str) -> None:
6465
scanner = VersionScanner()
6566
scanner.file_stack.append(filename)
6667
product = None
6768
# Not expecting any product to match with a vendor in the database
68-
for product in scanner.run_js_checker(filename):
69+
for product in scanner.scan_file(filename):
6970
pass
7071
assert product is not None
72+
73+
@pytest.mark.parametrize("filename", ((str(TEST_FILE_PATH / "PKG-INFO")),))
74+
def test_python_package(self, filename: str) -> None:
75+
scanner = VersionScanner()
76+
scanner.file_stack.append(filename)
77+
for product in scanner.scan_file(filename):
78+
if product:
79+
product_info, file_path = product
80+
assert product_info == ProductInfo("facebook", "zstandard", "0.18.0")
81+
assert file_path == filename
82+
83+
@pytest.mark.parametrize("filename", ((str(TEST_FILE_PATH / "FAIL-PKG-INFO")),))
84+
def test_python_package_none_found(self, filename: str) -> None:
85+
scanner = VersionScanner()
86+
scanner.file_stack.append(filename)
87+
product = None
88+
# Not expecting any product to match with a vendor in the database
89+
for product in scanner.scan_file(filename):
90+
pass
91+
assert product is None

0 commit comments

Comments
 (0)