1from __future__ import print_function 2from cpe.cpe2_3_uri import CPE2_3_URI 3 4import pytest 5 6 7class TestCPE2_3_Uri_Sparse(object): 8 9 def test_regular_cpe(self): 10 uri = 'cpe:/a:TauPan:cpe:1.2.1BETA1' 11 c = CPE2_3_URI(uri) 12 assert c.as_wfn() == 'wfn:[part="a", vendor="taupan", product="cpe", version="1\\.2\\.1beta1"]' 13 assert c.as_uri_2_3() == uri.lower() 14 15 def test_percent_encoded(self): 16 uri = 'cpe:/a:TauPan:cpe%7cextra:1.2.1BETA1' 17 c = CPE2_3_URI(uri) 18 assert c.as_wfn() == 'wfn:[part="a", vendor="taupan", product="cpe\\|extra", version="1\\.2\\.1beta1"]' 19 assert c.as_uri_2_3() == uri.lower() 20 21 def test_just_part(self): 22 uri = 'cpe:/a' 23 c = CPE2_3_URI(uri) 24 assert c.as_wfn() == 'wfn:[part="a"]' 25 assert c.as_uri_2_3() == uri.lower() 26 27 def test_just_vendor(self): 28 uri = 'cpe:/:taupan' 29 c = CPE2_3_URI(uri) 30 assert c.as_wfn() == 'wfn:[part=ANY, vendor="taupan"]' 31 assert c.as_uri_2_3() == uri.lower() 32 33 def test_just_product(self): 34 uri = 'cpe:/::cpe' 35 c = CPE2_3_URI(uri) 36 assert c.as_wfn() == 'wfn:[part=ANY, vendor=ANY, product="cpe"]' 37 assert c.as_uri_2_3() == uri.lower() 38 39 def test_just_version(self): 40 uri = 'cpe:/:::version' 41 cpe = CPE2_3_URI(uri) 42 assert cpe.as_wfn() == ('wfn:[part=ANY, vendor=ANY, product=ANY, ' 43 'version="version"' 44 ']') 45 assert cpe.as_uri_2_3() == uri.lower() 46 47 def test_just_update(self): 48 uri = 'cpe:/::::update' 49 cpe = CPE2_3_URI(uri) 50 assert cpe.as_wfn() == ('wfn:[part=ANY, vendor=ANY, product=ANY, ' 51 'version=ANY, ' 52 'update="update"' 53 ']') 54 assert cpe.as_uri_2_3() == uri.lower() 55 56 def test_just_legacy_edition_uri(self): 57 uri = 'cpe:/:::::legacy_edition' 58 cpe = CPE2_3_URI(uri) 59 assert cpe.as_uri_2_3() == uri.lower() 60 61 @pytest.mark.xfail 62 def test_just_legacy_edition_wfn(self): 63 uri = 'cpe:/:::::legacy_edition' 64 cpe = CPE2_3_URI(uri) 65 # not sure if this is correct, see 66 # https://github.com/nilp0inter/cpe/issues/28#issuecomment-253195951 67 assert cpe.as_wfn() == ('wfn:[part=ANY, vendor=ANY, product=ANY, ' 68 'version=ANY, ' 69 'update=ANY, ' 70 'edition="legacy_edition"' 71 ']') 72 73 def test_full_packed_edition(self): 74 uri = 'cpe:/:::::~edition~sw_edition~target_sw~target_hw~other' 75 cpe = CPE2_3_URI(uri) 76 assert cpe.as_wfn() == ('wfn:[part=ANY, vendor=ANY, product=ANY, ' 77 'version=ANY, ' 78 'update=ANY, ' 79 'edition="edition", ' 80 'sw_edition="sw_edition", ' 81 'target_sw="target_sw", ' 82 'target_hw="target_hw", ' 83 'other="other"' 84 ']') 85 assert cpe.as_uri_2_3() == uri.lower() 86 87 def test_legacy_edition_uri(self): 88 uri = 'cpe:/a:TauPan:cpe:1.2.1BETA1::legacy_edition' 89 c = CPE2_3_URI(uri) 90 assert c.as_uri_2_3() == uri.lower() 91 92 @pytest.mark.xfail # see above 93 def test_legacy_edition_wfn(self): 94 uri = 'cpe:/a:TauPan:cpe:1.2.1BETA1::legacy_edition' 95 c = CPE2_3_URI(uri) 96 assert c.as_wfn() == 'wfn:[part="a", vendor="taupan", product="cpe", version="1\\.2\\.1beta1", update=ANY, edition="legacy_edition"]' 97 98 def test_legacy_edition_packed(self): 99 uri = 'cpe:/a:TauPan:cpe:1.2.1BETA1::~legacy_edition~~~~' 100 c = CPE2_3_URI(uri) 101 assert c.as_wfn() == 'wfn:[part="a", vendor="taupan", product="cpe", version="1\\.2\\.1beta1", update=ANY, edition="legacy_edition", sw_edition=ANY, target_sw=ANY, target_hw=ANY, other=ANY]' 102 assert c.as_uri_2_3() == 'cpe:/a:taupan:cpe:1.2.1beta1::legacy_edition' 103