Skip to content

Commit b29e49c

Browse files
committed
tests: enum CryptoAssetType
Signed-off-by: Jan Kowalleck <jan.kowalleck@gmail.com>
1 parent 4868e2d commit b29e49c

1 file changed

Lines changed: 72 additions & 6 deletions

File tree

tests/test_enums.py

Lines changed: 72 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
from cyclonedx.model.bom import Bom, BomMetaData, DistributionConstraints, TlpClassification
3737
from cyclonedx.model.component import Component, Patch, Pedigree
3838
from cyclonedx.model.component_evidence import ComponentEvidence, Identity as CEIdentity, Method as CEMethod
39+
from cyclonedx.model.crypto import CryptoProperties
3940
from cyclonedx.model.issue import IssueType
4041
from cyclonedx.model.license import DisjunctiveLicense
4142
from cyclonedx.model.lifecycle import LifecyclePhase, PredefinedLifecycle
@@ -87,6 +88,19 @@
8788
VulnerabilityScoreSource,
8889
VulnerabilitySeverity,
8990
)
91+
from cyclonedx.model.crypto import ( # isort:skip
92+
CryptoAssetType,
93+
CryptoPrimitive,
94+
CryptoExecutionEnvironment,
95+
CryptoImplementationPlatform,
96+
CryptoCertificationLevel,
97+
CryptoMode,
98+
CryptoPadding,
99+
CryptoFunction,
100+
RelatedCryptoMaterialType,
101+
RelatedCryptoMaterialState,
102+
ProtocolPropertiesType,
103+
)
90104

91105
# endregion SUT
92106

@@ -97,14 +111,18 @@
97111
def dp_cases_from_xml_schema(sf: str, xpath: str) -> Generator[str, None, None]:
98112
for el in xml_parse(sf).iterfind(f'{xpath}/{SCHEMA_NS}restriction/{SCHEMA_NS}enumeration'): # nosec B314
99113
yield el.get('value')
114+
# warn if no such structure
100115

101116

102-
def dp_cases_from_xml_schemas(xpath: str) -> Generator[str, None, None]:
117+
def dp_cases_from_xml_schemas(xpath: str) -> set[str]:
118+
cases: set[str] = set()
103119
for sf in SCHEMA_XML.values():
104120
if sf is None:
105121
continue
106-
yield from dp_cases_from_xml_schema(sf, xpath)
107-
122+
cases.update(dp_cases_from_xml_schema(sf, xpath))
123+
if len(cases) == 0:
124+
raise ValueError(f'no values for xpath: {xpath!r}')
125+
return cases
108126

109127
def dp_cases_from_json_schema(sf: str, jsonpointer: Iterable[str]) -> Generator[str, None, None]:
110128
with open(sf) as sfh:
@@ -113,15 +131,20 @@ def dp_cases_from_json_schema(sf: str, jsonpointer: Iterable[str]) -> Generator[
113131
for pp in jsonpointer:
114132
data = data[pp]
115133
except KeyError:
134+
# warn if no such structure
116135
return
117136
yield from data['enum']
118137

119138

120-
def dp_cases_from_json_schemas(*jsonpointer: str) -> Generator[str, None, None]:
139+
def dp_cases_from_json_schemas(*jsonpointer: str) -> set[str]:
140+
cases: set[str] = set()
121141
for sf in SCHEMA_JSON.values():
122142
if sf is None:
123143
continue
124-
yield from dp_cases_from_json_schema(sf, jsonpointer)
144+
cases.update(dp_cases_from_json_schema(sf, jsonpointer))
145+
if len(cases) == 0:
146+
raise ValueError(f'no values for jsonpointer: {jsonpointer!r}')
147+
return cases
125148

126149

127150
UNSUPPORTED_OF_SV = frozenset([
@@ -490,7 +513,7 @@ class TestEnumLifecyclePhase(_EnumTestCase):
490513

491514
@idata(set(chain(
492515
dp_cases_from_xml_schemas(f"./{SCHEMA_NS}simpleType[@name='lifecyclePhaseType']"),
493-
dp_cases_from_json_schemas('definitions', 'metadata', 'properties', 'lifecycles', 'items', 'phase'),
516+
dp_cases_from_json_schemas('definitions', 'metadata', 'properties', 'lifecycles', 'items', 'oneOf', 0, 'properties', 'phase'),
494517
)))
495518
def test_knows_value(self, value: str) -> None:
496519
super()._test_knows_value(LifecyclePhase, value)
@@ -598,6 +621,49 @@ def test_cases_render_valid(self, of: OutputFormat, sv: SchemaVersion, *_: Any,
598621
])
599622
super()._test_cases_render(bom, of, sv)
600623

624+
@ddt
625+
class TestEnumCryptoAssetType(_EnumTestCase):
626+
627+
@idata(set(chain(
628+
dp_cases_from_xml_schemas(f"./{SCHEMA_NS}complexType[@name='cryptoPropertiesType']/{SCHEMA_NS}sequence/{SCHEMA_NS}element[@name='assetType']/{SCHEMA_NS}simpleType"),
629+
dp_cases_from_json_schemas('definitions', 'cryptoProperties', 'properties', 'assetType'),
630+
)))
631+
def test_knows_value(self, value: str) -> None:
632+
super()._test_knows_value(CryptoAssetType, value)
633+
634+
@named_data(*(d for d in NAMED_OF_SV if d[2] >= SchemaVersion.V1_6 ))
635+
def test_cases_render_valid(self, of: OutputFormat, sv: SchemaVersion, *_: Any, **__: Any) -> None:
636+
bom = _make_bom(
637+
components=[
638+
Component(
639+
name=f'CryptoAssetType: {cat.name}', type=ComponentType.CRYPTOGRAPHIC_ASSET, bom_ref=f'dummy-CAT:{cat.name}',
640+
crypto_properties=CryptoProperties(
641+
asset_type=cat
642+
)
643+
) for cat in CryptoAssetType
644+
])
645+
super()._test_cases_render(bom, of, sv)
646+
647+
"""
648+
@ddt
649+
class TestEnum...(_EnumTestCase):
650+
651+
@idata(set(chain(
652+
dp_cases_from_xml_schemas(f"./{SCHEMA_NS}simpleType[@name='...']"),
653+
dp_cases_from_json_schemas('definitions', '...'),
654+
)))
655+
def test_knows_value(self, value: str) -> None:
656+
super()._test_knows_value(..., value)
657+
658+
@named_data(*NAMED_OF_SV)
659+
def test_cases_render_valid(self, of: OutputFormat, sv: SchemaVersion, *_: Any, **__: Any) -> None:
660+
bom = _make_bom(
661+
components=[
662+
...
663+
])
664+
super()._test_cases_render(bom, of, sv)
665+
666+
"""
601667

602668
"""
603669
missing:

0 commit comments

Comments
 (0)