From 1eaa91051cc98b8496e8f0c99494e952f15aa201 Mon Sep 17 00:00:00 2001 From: Aryan Bakliwal <106430579+AryanBakliwal@users.noreply.github.com> Date: Wed, 2 Oct 2024 02:16:55 +0530 Subject: [PATCH] test: purl in productinfo (#4476) fixes #4186 Adds unit tests for the ProductInfo class and functions. Signed-off-by: Aryan Bakliwal --- test/test_util.py | 85 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) diff --git a/test/test_util.py b/test/test_util.py index 822d9b1c70..51b3576450 100644 --- a/test/test_util.py +++ b/test/test_util.py @@ -77,3 +77,88 @@ def test_cve_scanner(self): assert ( instance_attrs["all_cve_data"] == DefaultDict[ProductInfo, CVEData] ), "Type of all_cve_data has been changed. Make sure it isn't breaking OutputEngine!" + + +class TestProductInfo: + """Tests the ProductInfo class and functions""" + + def test_product_info_with_purl(self): + vendor = "vendor_name" + product = "product_name" + version = "1.0.0" + location = "location/to/product" + purl = "pkg:type/namespace/product@version" + + product_info = ProductInfo( + vendor=vendor, + product=product, + version=version, + location=location, + purl=purl, + ) + + assert product_info.vendor == vendor + assert product_info.product == product + assert product_info.version == version + assert product_info.location == location + assert product_info.purl == purl + + def test_product_info_without_purl(self): + vendor = "vendor_name" + product = "product_name" + version = "1.0.0" + location = "location/to/product" + + product_info = ProductInfo( + vendor=vendor, product=product, version=version, location=location + ) + + assert product_info.vendor == vendor + assert product_info.product == product + assert product_info.version == version + assert product_info.location == location + assert product_info.purl is None + + def test_product_info_equality(self): + vendor = "vendor_name" + product = "product_name" + version = "1.0.0" + location_1 = "location/to/product" + location_2 = "different/location/to/product" + purl = "pkg:type/namespace/product@version" + + product_info_1 = ProductInfo( + vendor=vendor, + product=product, + version=version, + location=location_1, + purl=purl, + ) + product_info_2 = ProductInfo( + vendor=vendor, product=product, version=version, location=location_2 + ) + + assert ( + product_info_1 == product_info_2 + ) # Should be equal based on vendor, product, version + + def test_product_info_hashing(self): + vendor = "vendor_name" + product = "product_name" + version = "1.0.0" + location_1 = "location/to/product" + location_2 = "different/location/to/product" + purl = "pkg:type/namespace/product@version" + + product_info_1 = ProductInfo( + vendor=vendor, + product=product, + version=version, + location=location_1, + purl=purl, + ) + product_info_2 = ProductInfo( + vendor=vendor, product=product, version=version, location=location_2 + ) + + assert hash(product_info_1) == hash(product_info_2) # Hashes should be the same