sbom-cyclonedx 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +15 -0
- data/.gitlab-ci.yml +49 -0
- data/.rspec +3 -0
- data/.rubocop.yml +72 -0
- data/.vscode/settings.json +6 -0
- data/CHANGELOG.md +9 -0
- data/CODE_OF_CONDUCT.md +132 -0
- data/Gemfile +26 -0
- data/Gemfile.lock +179 -0
- data/LICENSE.txt +21 -0
- data/README.md +39 -0
- data/Rakefile +36 -0
- data/Steepfile +14 -0
- data/bin/console +11 -0
- data/bin/rbs_spec +9 -0
- data/bin/setup +8 -0
- data/bom-1.6.schema.json +7334 -0
- data/lib/email_address_extension.rb +26 -0
- data/lib/sbom/cyclone_dx/enum.rb +2178 -0
- data/lib/sbom/cyclone_dx/field.rb +404 -0
- data/lib/sbom/cyclone_dx/pattern.rb +43 -0
- data/lib/sbom/cyclone_dx/record/advisory.rb +17 -0
- data/lib/sbom/cyclone_dx/record/annotation.rb +46 -0
- data/lib/sbom/cyclone_dx/record/attachment.rb +21 -0
- data/lib/sbom/cyclone_dx/record/base.rb +244 -0
- data/lib/sbom/cyclone_dx/record/cipher_suite.rb +23 -0
- data/lib/sbom/cyclone_dx/record/co2_measure.rb +18 -0
- data/lib/sbom/cyclone_dx/record/command.rb +18 -0
- data/lib/sbom/cyclone_dx/record/commit.rb +25 -0
- data/lib/sbom/cyclone_dx/record/component.rb +126 -0
- data/lib/sbom/cyclone_dx/record/component_data.rb +46 -0
- data/lib/sbom/cyclone_dx/record/component_evidence.rb +68 -0
- data/lib/sbom/cyclone_dx/record/component_identity_evidence.rb +36 -0
- data/lib/sbom/cyclone_dx/record/composition.rb +33 -0
- data/lib/sbom/cyclone_dx/record/condition.rb +20 -0
- data/lib/sbom/cyclone_dx/record/copyright.rb +16 -0
- data/lib/sbom/cyclone_dx/record/crypto_properties.rb +137 -0
- data/lib/sbom/cyclone_dx/record/data_governance.rb +21 -0
- data/lib/sbom/cyclone_dx/record/data_governance_responsible_party.rb +22 -0
- data/lib/sbom/cyclone_dx/record/declarations.rb +193 -0
- data/lib/sbom/cyclone_dx/record/definitions.rb +17 -0
- data/lib/sbom/cyclone_dx/record/dependency.rb +21 -0
- data/lib/sbom/cyclone_dx/record/diff.rb +18 -0
- data/lib/sbom/cyclone_dx/record/energy_consumption.rb +31 -0
- data/lib/sbom/cyclone_dx/record/energy_measure.rb +18 -0
- data/lib/sbom/cyclone_dx/record/energy_provider.rb +31 -0
- data/lib/sbom/cyclone_dx/record/environmental_consideration.rb +20 -0
- data/lib/sbom/cyclone_dx/record/event.rb +31 -0
- data/lib/sbom/cyclone_dx/record/external_reference.rb +25 -0
- data/lib/sbom/cyclone_dx/record/fairness_assessment.rb +22 -0
- data/lib/sbom/cyclone_dx/record/formula.rb +29 -0
- data/lib/sbom/cyclone_dx/record/graphic.rb +19 -0
- data/lib/sbom/cyclone_dx/record/graphics_collection.rb +19 -0
- data/lib/sbom/cyclone_dx/record/hash_data.rb +18 -0
- data/lib/sbom/cyclone_dx/record/identifiable_action.rb +21 -0
- data/lib/sbom/cyclone_dx/record/input.rb +34 -0
- data/lib/sbom/cyclone_dx/record/input_output_ml_parameter.rb +17 -0
- data/lib/sbom/cyclone_dx/record/issue.rb +36 -0
- data/lib/sbom/cyclone_dx/record/license.rb +90 -0
- data/lib/sbom/cyclone_dx/record/license_choice.rb +35 -0
- data/lib/sbom/cyclone_dx/record/metadata.rb +55 -0
- data/lib/sbom/cyclone_dx/record/model_card.rb +89 -0
- data/lib/sbom/cyclone_dx/record/note.rb +20 -0
- data/lib/sbom/cyclone_dx/record/organizational_contact.rb +26 -0
- data/lib/sbom/cyclone_dx/record/organizational_entity.rb +28 -0
- data/lib/sbom/cyclone_dx/record/output.rb +34 -0
- data/lib/sbom/cyclone_dx/record/parameter.rb +20 -0
- data/lib/sbom/cyclone_dx/record/patch.rb +23 -0
- data/lib/sbom/cyclone_dx/record/performance_metric.rb +30 -0
- data/lib/sbom/cyclone_dx/record/postal_address.rb +34 -0
- data/lib/sbom/cyclone_dx/record/property.rb +18 -0
- data/lib/sbom/cyclone_dx/record/rating.rb +27 -0
- data/lib/sbom/cyclone_dx/record/release_notes.rb +44 -0
- data/lib/sbom/cyclone_dx/record/resource_reference_choice.rb +22 -0
- data/lib/sbom/cyclone_dx/record/risk.rb +18 -0
- data/lib/sbom/cyclone_dx/record/root.rb +63 -0
- data/lib/sbom/cyclone_dx/record/secured_by.rb +20 -0
- data/lib/sbom/cyclone_dx/record/service.rb +54 -0
- data/lib/sbom/cyclone_dx/record/service_data.rb +32 -0
- data/lib/sbom/cyclone_dx/record/signature.rb +85 -0
- data/lib/sbom/cyclone_dx/record/standard.rb +72 -0
- data/lib/sbom/cyclone_dx/record/step.rb +24 -0
- data/lib/sbom/cyclone_dx/record/swid.rb +29 -0
- data/lib/sbom/cyclone_dx/record/task.rb +56 -0
- data/lib/sbom/cyclone_dx/record/tools.rb +20 -0
- data/lib/sbom/cyclone_dx/record/trigger.rb +48 -0
- data/lib/sbom/cyclone_dx/record/version.rb +24 -0
- data/lib/sbom/cyclone_dx/record/volume.rb +33 -0
- data/lib/sbom/cyclone_dx/record/vulnerability.rb +119 -0
- data/lib/sbom/cyclone_dx/record/vulnerability_source.rb +20 -0
- data/lib/sbom/cyclone_dx/record/workflow.rb +59 -0
- data/lib/sbom/cyclone_dx/record/workspace.rb +45 -0
- data/lib/sbom/cyclone_dx/record.rb +12 -0
- data/lib/sbom/cyclone_dx/validator/array_validator.rb +66 -0
- data/lib/sbom/cyclone_dx/validator/base_validator.rb +43 -0
- data/lib/sbom/cyclone_dx/validator/boolean_validator.rb +16 -0
- data/lib/sbom/cyclone_dx/validator/date_time_validator.rb +29 -0
- data/lib/sbom/cyclone_dx/validator/email_address_validator.rb +31 -0
- data/lib/sbom/cyclone_dx/validator/float_validator.rb +30 -0
- data/lib/sbom/cyclone_dx/validator/integer_validator.rb +30 -0
- data/lib/sbom/cyclone_dx/validator/record_validator.rb +26 -0
- data/lib/sbom/cyclone_dx/validator/string_validator.rb +33 -0
- data/lib/sbom/cyclone_dx/validator/union_validator.rb +39 -0
- data/lib/sbom/cyclone_dx/validator/uri_validator.rb +32 -0
- data/lib/sbom/cyclone_dx/validator.rb +32 -0
- data/lib/sbom/cyclone_dx/version.rb +7 -0
- data/lib/sbom/cyclone_dx.rb +39 -0
- data/rbs_collection.lock.yaml +288 -0
- data/rbs_collection.yaml +31 -0
- data/sbom-cyclone_dx.gemspec +32 -0
- data/sig/email_address_extension.rbs +14 -0
- data/sig/sbom/cyclone_dx/enum.rbs +93 -0
- data/sig/sbom/cyclone_dx/field.rbs +434 -0
- data/sig/sbom/cyclone_dx/pattern.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/advisory.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/annotation.rbs +63 -0
- data/sig/sbom/cyclone_dx/record/attachment.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/base.rbs +62 -0
- data/sig/sbom/cyclone_dx/record/cipher_suite.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/co2_measure.rbs +14 -0
- data/sig/sbom/cyclone_dx/record/command.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/commit.rbs +34 -0
- data/sig/sbom/cyclone_dx/record/component.rbs +203 -0
- data/sig/sbom/cyclone_dx/record/component_data.rbs +73 -0
- data/sig/sbom/cyclone_dx/record/component_evidence.rbs +115 -0
- data/sig/sbom/cyclone_dx/record/component_identity_evidence.rbs +53 -0
- data/sig/sbom/cyclone_dx/record/composition.rbs +39 -0
- data/sig/sbom/cyclone_dx/record/condition.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/copyright.rbs +14 -0
- data/sig/sbom/cyclone_dx/record/crypto_properties.rbs +268 -0
- data/sig/sbom/cyclone_dx/record/data_governance.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/data_governance_responsible_party.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/declarations.rbs +352 -0
- data/sig/sbom/cyclone_dx/record/definitions.rbs +14 -0
- data/sig/sbom/cyclone_dx/record/dependency.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/diff.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/energy_consumption.rbs +39 -0
- data/sig/sbom/cyclone_dx/record/energy_measure.rbs +14 -0
- data/sig/sbom/cyclone_dx/record/energy_provider.rbs +39 -0
- data/sig/sbom/cyclone_dx/record/environmental_consideration.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/event.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/external_reference.rbs +29 -0
- data/sig/sbom/cyclone_dx/record/fairness_assessment.rbs +29 -0
- data/sig/sbom/cyclone_dx/record/formula.rbs +34 -0
- data/sig/sbom/cyclone_dx/record/graphic.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/graphics_collection.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/hash_data.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/identifiable_action.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/input.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/input_output_ml_parameter.rbs +14 -0
- data/sig/sbom/cyclone_dx/record/issue.rbs +53 -0
- data/sig/sbom/cyclone_dx/record/license.rbs +134 -0
- data/sig/sbom/cyclone_dx/record/license_choice.rbs +39 -0
- data/sig/sbom/cyclone_dx/record/metadata.rbs +82 -0
- data/sig/sbom/cyclone_dx/record/model_card.rbs +143 -0
- data/sig/sbom/cyclone_dx/record/note.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/organizational_contact.rbs +29 -0
- data/sig/sbom/cyclone_dx/record/organizational_entity.rbs +34 -0
- data/sig/sbom/cyclone_dx/record/output.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/parameter.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/patch.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/performance_metric.rbs +43 -0
- data/sig/sbom/cyclone_dx/record/postal_address.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/property.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/rating.rbs +39 -0
- data/sig/sbom/cyclone_dx/record/release_notes.rbs +64 -0
- data/sig/sbom/cyclone_dx/record/resource_reference_choice.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/risk.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/root.rbs +84 -0
- data/sig/sbom/cyclone_dx/record/secured_by.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/service.rbs +99 -0
- data/sig/sbom/cyclone_dx/record/service_data.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/signature.rbs +130 -0
- data/sig/sbom/cyclone_dx/record/standard.rbs +132 -0
- data/sig/sbom/cyclone_dx/record/step.rbs +29 -0
- data/sig/sbom/cyclone_dx/record/swid.rbs +44 -0
- data/sig/sbom/cyclone_dx/record/task.rbs +84 -0
- data/sig/sbom/cyclone_dx/record/tools.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/trigger.rbs +69 -0
- data/sig/sbom/cyclone_dx/record/version.rbs +24 -0
- data/sig/sbom/cyclone_dx/record/volume.rbs +49 -0
- data/sig/sbom/cyclone_dx/record/vulnerability.rbs +209 -0
- data/sig/sbom/cyclone_dx/record/vulnerability_source.rbs +19 -0
- data/sig/sbom/cyclone_dx/record/workflow.rbs +94 -0
- data/sig/sbom/cyclone_dx/record/workspace.rbs +69 -0
- data/sig/sbom/cyclone_dx/record.rbs +161 -0
- data/sig/sbom/cyclone_dx/type.rbs +16 -0
- data/sig/sbom/cyclone_dx/validator/array_validator.rbs +31 -0
- data/sig/sbom/cyclone_dx/validator/base_validator.rbs +21 -0
- data/sig/sbom/cyclone_dx/validator/boolean_validator.rbs +9 -0
- data/sig/sbom/cyclone_dx/validator/date_time_validator.rbs +10 -0
- data/sig/sbom/cyclone_dx/validator/email_address_validator.rbs +10 -0
- data/sig/sbom/cyclone_dx/validator/float_validator.rbs +12 -0
- data/sig/sbom/cyclone_dx/validator/integer_validator.rbs +12 -0
- data/sig/sbom/cyclone_dx/validator/record_validator.rbs +12 -0
- data/sig/sbom/cyclone_dx/validator/string_validator.rbs +14 -0
- data/sig/sbom/cyclone_dx/validator/union_validator.rbs +24 -0
- data/sig/sbom/cyclone_dx/validator/uri_validator.rbs +10 -0
- data/sig/sbom/cyclone_dx/validator.rbs +66 -0
- data/sig/sbom/cyclone_dx.rbs +13 -0
- data/sig/types.rbs +45 -0
- data/spec/email_address_extension_spec.rb +27 -0
- data/spec/factories/factory_helper.rb +78 -0
- data/spec/factories/record/advisory_factory.rb +11 -0
- data/spec/factories/record/annotation_factory.rb +63 -0
- data/spec/factories/record/attachment_factory.rb +9 -0
- data/spec/factories/record/cipher_suite_factory.rb +26 -0
- data/spec/factories/record/co2_measure_factory.rb +9 -0
- data/spec/factories/record/command_factory.rb +10 -0
- data/spec/factories/record/commit_factory.rb +13 -0
- data/spec/factories/record/component_data_factory.rb +28 -0
- data/spec/factories/record/component_evidence_factory.rb +44 -0
- data/spec/factories/record/component_factory.rb +102 -0
- data/spec/factories/record/component_identity_evidence_factory.rb +25 -0
- data/spec/factories/record/composition_factory.rb +20 -0
- data/spec/factories/record/condition_factory.rb +11 -0
- data/spec/factories/record/copyright_factory.rb +9 -0
- data/spec/factories/record/crypto_properties_factory.rb +191 -0
- data/spec/factories/record/data_governance_factory.rb +11 -0
- data/spec/factories/record/data_governance_responsible_party_factory.rb +31 -0
- data/spec/factories/record/declarations_factory.rb +145 -0
- data/spec/factories/record/definitions_factory.rb +9 -0
- data/spec/factories/record/dependency_factory.rb +12 -0
- data/spec/factories/record/diff_factory.rb +24 -0
- data/spec/factories/record/energy_consumption_factory.rb +15 -0
- data/spec/factories/record/energy_measure_factory.rb +9 -0
- data/spec/factories/record/energy_provider_factory.rb +15 -0
- data/spec/factories/record/environmental_consideration_factory.rb +10 -0
- data/spec/factories/record/event_factory.rb +15 -0
- data/spec/factories/record/external_reference_factory.rb +13 -0
- data/spec/factories/record/fairness_assessment_factory.rb +12 -0
- data/spec/factories/record/formula_factory.rb +13 -0
- data/spec/factories/record/graphic_factory.rb +10 -0
- data/spec/factories/record/graphics_collection_factory.rb +10 -0
- data/spec/factories/record/hash_data_factory.rb +10 -0
- data/spec/factories/record/identifiable_action_factory.rb +11 -0
- data/spec/factories/record/input_factory.rb +36 -0
- data/spec/factories/record/input_output_ml_parameter_factory.rb +9 -0
- data/spec/factories/record/issue_factory.rb +22 -0
- data/spec/factories/record/license_choice_factory.rb +23 -0
- data/spec/factories/record/license_factory.rb +99 -0
- data/spec/factories/record/metadata_factory.rb +38 -0
- data/spec/factories/record/model_card_factory.rb +59 -0
- data/spec/factories/record/note_factory.rb +11 -0
- data/spec/factories/record/organizational_contact_factory.rb +12 -0
- data/spec/factories/record/organizational_entity_factory.rb +13 -0
- data/spec/factories/record/output_factory.rb +32 -0
- data/spec/factories/record/parameter_factory.rb +11 -0
- data/spec/factories/record/patch_factory.rb +12 -0
- data/spec/factories/record/performance_metric_factory.rb +20 -0
- data/spec/factories/record/postal_address_factory.rb +14 -0
- data/spec/factories/record/property_factory.rb +11 -0
- data/spec/factories/record/rating_factory.rb +14 -0
- data/spec/factories/record/release_notes_factory.rb +20 -0
- data/spec/factories/record/resource_reference_choice_factory.rb +27 -0
- data/spec/factories/record/risk_factory.rb +10 -0
- data/spec/factories/record/root_factory.rb +23 -0
- data/spec/factories/record/secured_by_factory.rb +10 -0
- data/spec/factories/record/service_data_factory.rb +16 -0
- data/spec/factories/record/service_factory.rb +27 -0
- data/spec/factories/record/signature_factory.rb +50 -0
- data/spec/factories/record/standard_factory.rb +37 -0
- data/spec/factories/record/step_factory.rb +12 -0
- data/spec/factories/record/swid_factory.rb +16 -0
- data/spec/factories/record/task_factory.rb +24 -0
- data/spec/factories/record/tools_factory.rb +10 -0
- data/spec/factories/record/trigger_factory.rb +21 -0
- data/spec/factories/record/version_factory.rb +19 -0
- data/spec/factories/record/volume_factory.rb +16 -0
- data/spec/factories/record/vulnerability_factory.rb +70 -0
- data/spec/factories/record/vulnerability_source_factory.rb +10 -0
- data/spec/factories/record/workflow_factory.rb +26 -0
- data/spec/factories/record/workspace_factory.rb +21 -0
- data/spec/factories/record_factory.rb +159 -0
- data/spec/fixtures/cipher_info.yml +948 -0
- data/spec/fixtures/purl_data.yml +0 -0
- data/spec/sbom/cyclone_dx/enum_spec.rb +30 -0
- data/spec/sbom/cyclone_dx/field_spec.rb +104 -0
- data/spec/sbom/cyclone_dx/pattern_spec.rb +18 -0
- data/spec/sbom/cyclone_dx/record/advisory_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/annotation_spec.rb +31 -0
- data/spec/sbom/cyclone_dx/record/attachment_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/base_spec.rb +363 -0
- data/spec/sbom/cyclone_dx/record/cipher_suite_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/co2_measure_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/command_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/commit_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/component_data_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/component_evidence_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/component_identity_evidence_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/component_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/composition_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/condition_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/copyright_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/crypto_properties_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/data_governance_responsible_party_spec.rb +19 -0
- data/spec/sbom/cyclone_dx/record/data_governance_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/declarations_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/definitions_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/dependency_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/diff_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/energy_consumption_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/energy_measure_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/energy_provider_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/environmental_consideration_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/event_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/external_reference_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/fairness_assessment_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/formula_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/graphic_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/graphics_collection_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/hash_data_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/identifiable_action_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/input_output_ml_parameter_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/input_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/issue_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/license_choice_spec.rb +26 -0
- data/spec/sbom/cyclone_dx/record/license_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/metadata_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/model_card_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/note_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/organizational_contact_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/organizational_entity_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/output_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/parameter_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/patch_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/performance_metric_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/postal_address_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/property_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/rating_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/release_notes_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/resource_reference_choice_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/risk_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/root_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/secured_by_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/service_data_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/service_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/signature_spec.rb +26 -0
- data/spec/sbom/cyclone_dx/record/standard_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/step_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/swid_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/task_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/tools_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/trigger_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/version_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/volume_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/vulnerability_source_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/vulnerability_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/workflow_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record/workspace_spec.rb +14 -0
- data/spec/sbom/cyclone_dx/record_spec.rb +7 -0
- data/spec/sbom/cyclone_dx/validator/array_validator_spec.rb +184 -0
- data/spec/sbom/cyclone_dx/validator/base_validator_spec.rb +71 -0
- data/spec/sbom/cyclone_dx/validator/boolean_validator_spec.rb +26 -0
- data/spec/sbom/cyclone_dx/validator/date_time_validator_spec.rb +28 -0
- data/spec/sbom/cyclone_dx/validator/email_address_validator_spec.rb +23 -0
- data/spec/sbom/cyclone_dx/validator/float_validator_spec.rb +71 -0
- data/spec/sbom/cyclone_dx/validator/integer_validator_spec.rb +71 -0
- data/spec/sbom/cyclone_dx/validator/record_validator_spec.rb +35 -0
- data/spec/sbom/cyclone_dx/validator/string_validator_spec.rb +94 -0
- data/spec/sbom/cyclone_dx/validator/union_validator_spec.rb +65 -0
- data/spec/sbom/cyclone_dx/validator/uri_validator_spec.rb +21 -0
- data/spec/sbom/cyclone_dx/validator_spec.rb +38 -0
- data/spec/sbom/cyclone_dx/version_spec.rb +9 -0
- data/spec/sbom/cyclone_dx_spec.rb +7 -0
- data/spec/spec_helper.rb +39 -0
- metadata +377 -6
@@ -0,0 +1,102 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "sbom/cyclone_dx/enum"
|
4
|
+
|
5
|
+
FactoryBot.define do
|
6
|
+
factory :component, parent: :record, class: "SBOM::CycloneDX::Record::Component" do
|
7
|
+
type { SBOM::CycloneDX::Enum::COMPONENT_TYPE.sample }
|
8
|
+
name { Faker::Lorem.word }
|
9
|
+
|
10
|
+
trait :all_fields do
|
11
|
+
mime_type { generate(:mime_type) }
|
12
|
+
bom_ref { generate(:ref_link) }
|
13
|
+
supplier factory: :organizational_entity
|
14
|
+
manufacturer factory: :organizational_entity
|
15
|
+
authors { association_list(:organizational_contact) }
|
16
|
+
publisher { Faker::Lorem.word }
|
17
|
+
group { Faker::Lorem.word }
|
18
|
+
version { Faker::App.semantic_version }
|
19
|
+
description { Faker::Lorem.sentence }
|
20
|
+
scope { SBOM::CycloneDX::Enum::SCOPE.sample }
|
21
|
+
hashes { association_list(:hash_data) }
|
22
|
+
licenses { license_choice_list(rand(1..3)) }
|
23
|
+
copyright { Faker::Company.name }
|
24
|
+
cpe do
|
25
|
+
# cpe:2.3:part:vendor:product:version:update:edition:language:sw_edition:target_sw:target_hw:other
|
26
|
+
"cpe:" \
|
27
|
+
"2.3:" \
|
28
|
+
"#{%w[a h o].sample}:" \
|
29
|
+
"#{copyright.gsub(/\s+/, "-").underscore}:" \
|
30
|
+
"#{name.underscore}:" \
|
31
|
+
"#{version}:" \
|
32
|
+
"*:" \
|
33
|
+
"*:" \
|
34
|
+
"*:" \
|
35
|
+
"*:" \
|
36
|
+
"*:" \
|
37
|
+
"*:" \
|
38
|
+
"*"
|
39
|
+
end
|
40
|
+
purl do
|
41
|
+
# scheme:type/namespace/name@version?qualifiers#subpath
|
42
|
+
"pkg:" \
|
43
|
+
"#{%w[apk cargo gem github npm].sample}/" \
|
44
|
+
"#{copyright.gsub(/\s+/, "-").underscore}/" \
|
45
|
+
"#{name.underscore}@#{version}" \
|
46
|
+
"?release=#{%w[alpha beta rc stable].sample}" \
|
47
|
+
"#some/subpath/#{Faker::Lorem.word.downcase}"
|
48
|
+
end
|
49
|
+
omnibor_id do
|
50
|
+
Array.new(rand(1..4)) do
|
51
|
+
sha_type = %w[sha1 sha256].sample
|
52
|
+
shasum = sha_type == "sha1" ? Faker::Crypto.sha1 : Faker::Crypto.sha256
|
53
|
+
|
54
|
+
"gitoid:" \
|
55
|
+
"#{%w[blob tree commit tag].sample}:" \
|
56
|
+
"#{sha_type}:" \
|
57
|
+
"#{shasum}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
swhid do
|
61
|
+
Array.new(rand(1..4)) do
|
62
|
+
"swh:" \
|
63
|
+
"1:" \
|
64
|
+
"#{%w[cnt dir rel rev snp].sample}:" \
|
65
|
+
"#{Faker::Crypto.sha1}"
|
66
|
+
end
|
67
|
+
end
|
68
|
+
swid
|
69
|
+
modified { Faker::Boolean.boolean }
|
70
|
+
pedigree { association(:pedigree) }
|
71
|
+
external_references { association_list(:external_reference) }
|
72
|
+
components { [] }
|
73
|
+
evidence factory: :component_evidence
|
74
|
+
release_notes
|
75
|
+
model_card
|
76
|
+
data { association_list(:component_data) }
|
77
|
+
crypto_properties
|
78
|
+
properties { association_list(:property) }
|
79
|
+
tags { Array.new(rand(1..4)) { Faker::Lorem.word } }
|
80
|
+
signature { generate_signature }
|
81
|
+
end
|
82
|
+
|
83
|
+
after(:build) do |component|
|
84
|
+
if component.pedigree? && !component.pedigree.nil?
|
85
|
+
component.pedigree.ancestors ||= []
|
86
|
+
component.pedigree.ancestors << component
|
87
|
+
component.pedigree.ancestors.uniq!
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
factory :pedigree, parent: :record, class: "SBOM::CycloneDX::Record::Component::Pedigree" do
|
93
|
+
trait :all_fields do
|
94
|
+
ancestors { [] }
|
95
|
+
descendants { [] }
|
96
|
+
variants { [] }
|
97
|
+
commits { association_list(:commit) }
|
98
|
+
patches { association_list(:patch) }
|
99
|
+
notes { Faker::Lorem.sentence }
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "sbom/cyclone_dx/enum"
|
4
|
+
|
5
|
+
FactoryBot.define do
|
6
|
+
factory :component_identity_evidence, parent: :record, class: "SBOM::CycloneDX::Record::ComponentIdentityEvidence" do
|
7
|
+
field { SBOM::CycloneDX::Enum::FIELD.sample }
|
8
|
+
|
9
|
+
trait :all_fields do
|
10
|
+
confidence { rand(0.0..1.0) }
|
11
|
+
concluded_value { %w[cpe purl omnibor_id swhid swid].sample }
|
12
|
+
methods_used { association_list(:method) }
|
13
|
+
tools { Array.new(rand(1..4)) { generate(:ref_or_cdx_urn) } }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
factory :method, parent: :record, class: "SBOM::CycloneDX::Record::ComponentIdentityEvidence::Method" do
|
18
|
+
technique { Faker::Lorem.word }
|
19
|
+
confidence { rand(0.0..1.0) }
|
20
|
+
|
21
|
+
trait :all_fields do
|
22
|
+
value { Faker::Lorem.sentence }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :composition, parent: :record, class: "SBOM::CycloneDX::Record::Composition" do
|
5
|
+
trait :all_fields do
|
6
|
+
bom_ref { generate(:ref_link) }
|
7
|
+
aggregate { SBOM::CycloneDX::Enum::AGGREGATE_TYPE.sample }
|
8
|
+
assemblies { Array.new(rand(1..3)) { generate(:ref_or_cdx_urn) } }
|
9
|
+
dependencies do
|
10
|
+
Array.new(rand(1..3)) do
|
11
|
+
next association(:component) if Faker::Boolean.boolean
|
12
|
+
|
13
|
+
association(:service)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
vulnerabilities { association_list(:vulnerability) }
|
17
|
+
signature { generate_signature }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :condition, parent: :record, class: "SBOM::CycloneDX::Record::Condition" do
|
5
|
+
trait :all_fields do
|
6
|
+
description { Faker::Lorem.sentence }
|
7
|
+
expression { Faker::Lorem.words(number: 4).zip(Array.new(3) { %w[AND OR XOR].sample }).flatten.join(" ") }
|
8
|
+
properties { association_list(:property) }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,191 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :crypto_properties, parent: :record, class: "SBOM::CycloneDX::Record::CryptoProperties" do
|
5
|
+
asset_type { SBOM::CycloneDX::Enum::ASSET_TYPE.sample }
|
6
|
+
|
7
|
+
trait :all_fields do
|
8
|
+
algorithm_properties { association :algorithm_properties }
|
9
|
+
certificate_properties { association :certificate_properties }
|
10
|
+
related_crypto_material_properties { association :related_crypto_material_properties }
|
11
|
+
protocol_properties { association :protocol_properties }
|
12
|
+
oid do
|
13
|
+
# Pseudo-random sample of crypto-related OIDs of different lengths in different forms
|
14
|
+
[
|
15
|
+
"1.2",
|
16
|
+
"iso.member-body",
|
17
|
+
"1.3.132",
|
18
|
+
"iso.identified-organization.certicom",
|
19
|
+
"2.5.29.17",
|
20
|
+
"joint-iso-itu-t.ds.certificateExtension.subjectAltName",
|
21
|
+
"1.3.132.0.23",
|
22
|
+
"iso.identified-organization.certicom.curve.sect131r2",
|
23
|
+
"1.3.132.1.14.3",
|
24
|
+
"iso.identified-organization.certicom.schemes.14.dhSinglePass-cofactorDH-sha512kdf-scheme",
|
25
|
+
"1.2.840.113549.1.9.5",
|
26
|
+
"iso.member-body.us.rsadsi.pkcs.pkcs-9.signing-time",
|
27
|
+
"1.3.6.1.1.1.2.8",
|
28
|
+
"iso.identified-organization.dod.internet.directory.nisSchema.2.nisNetgroup",
|
29
|
+
"1.3.6.1.5.5.7.4.11",
|
30
|
+
"iso.identified-organization.dod.internet.security.mechanisms.pkix.it.id-it-keyPairParamRep",
|
31
|
+
"1.3.6.1.4.1.311.12.1.2",
|
32
|
+
"iso.identified-organization.dod.internet.private.enterprise.311 12 1 2",
|
33
|
+
"1.3.6.1.4.1.1722.12.2.1.16",
|
34
|
+
"iso.identified-organization.dod.internet.private.enterprise.1722 cryptography.hashAlgs.blake2b.16",
|
35
|
+
"1.3.6.1.4.1.42.2.27.2.1.15",
|
36
|
+
"iso.identified-organization.dod.internet.private.enterprise.42 products.27 2 1 rfc822MailMember",
|
37
|
+
"1.2.804.2.1.1.1.1.3.1.1.2.3",
|
38
|
+
"iso.member-body.ua.root.security.cryptography.ua-pki.alg.asym.dstu4145WithGost34311." \
|
39
|
+
"dstu4145WithGost34311-pb.dstu4145WithGost34311keyFormat-PB.dstu4145WithGost34311m179-PB"
|
40
|
+
].sample
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
factory(
|
46
|
+
:algorithm_properties,
|
47
|
+
parent: :record,
|
48
|
+
class: "SBOM::CycloneDX::Record::CryptoProperties::AlgorithmProperties"
|
49
|
+
) do
|
50
|
+
trait :all_fields do
|
51
|
+
primitive { SBOM::CycloneDX::Enum::PRIMITIVE.sample }
|
52
|
+
parameter_set_identifier { %w[128 256 512].sample }
|
53
|
+
curve do
|
54
|
+
[
|
55
|
+
"FRP256v1",
|
56
|
+
"BLS12-477",
|
57
|
+
"Bandersnatch",
|
58
|
+
"bn638",
|
59
|
+
"brainpoolP512t1",
|
60
|
+
"gost512",
|
61
|
+
"id-tc26-gost-3410-12-512-paramSetB",
|
62
|
+
"id-GostR3410-2001-CryptoPro-C-ParamSet",
|
63
|
+
"mnt4",
|
64
|
+
"mnt5/1",
|
65
|
+
"B-409",
|
66
|
+
"numsp512t1",
|
67
|
+
"ed-511-mers",
|
68
|
+
"w-510-mont",
|
69
|
+
"Oakley Group 4",
|
70
|
+
"384-bit Random ECP Group",
|
71
|
+
"SM2",
|
72
|
+
"Curve22103",
|
73
|
+
"Ed448-Goldilocks",
|
74
|
+
"Fp254n2BNa",
|
75
|
+
"ssc-512",
|
76
|
+
"Tweedledum",
|
77
|
+
"Tweedledee",
|
78
|
+
"JubJub",
|
79
|
+
"Vesta",
|
80
|
+
"BADA55-VPR-224",
|
81
|
+
"Tom-521",
|
82
|
+
"sect571k1",
|
83
|
+
"wap-wsg-idm-ecid-wtls12",
|
84
|
+
"prime239v3",
|
85
|
+
"c2pnb163v1",
|
86
|
+
"ansit233r1"
|
87
|
+
].sample
|
88
|
+
end
|
89
|
+
execution_environment { SBOM::CycloneDX::Enum::EXECUTION_ENVIRONMENT.sample }
|
90
|
+
implementation_platform { SBOM::CycloneDX::Enum::IMPLEMENTATION_PLATFORM.sample }
|
91
|
+
certification_level { Array.new(rand(1..3)) { SBOM::CycloneDX::Enum::CERTIFICATION_LEVEL.sample } }
|
92
|
+
mode { SBOM::CycloneDX::Enum::ALGORITHM_MODE.sample }
|
93
|
+
padding { SBOM::CycloneDX::Enum::PADDING.sample }
|
94
|
+
crypto_functions { Array.new(rand(1..3)) { SBOM::CycloneDX::Enum::CRYPTO_FUNCTION.sample } }
|
95
|
+
classical_security_level do
|
96
|
+
base_power = 2**rand(7..12)
|
97
|
+
next base_power if Faker::Boolean.boolean
|
98
|
+
|
99
|
+
base_power + (2**rand(3..9))
|
100
|
+
end
|
101
|
+
nist_quantum_security_level do
|
102
|
+
# Not how this is actually calculated. Just ensuring the values roughly correlate
|
103
|
+
Math.log2(classical_security_level).floor - 6
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
factory(
|
109
|
+
:certificate_properties,
|
110
|
+
parent: :record,
|
111
|
+
class: "SBOM::CycloneDX::Record::CryptoProperties::CertificateProperties"
|
112
|
+
) do
|
113
|
+
trait :all_fields do
|
114
|
+
subject_name { Faker::Internet.domain_name }
|
115
|
+
issuer_name do
|
116
|
+
[
|
117
|
+
"ACCVRAIZ1",
|
118
|
+
"Certum Trusted Root CA",
|
119
|
+
"DigiCert SMIME ECC P384 Root G5",
|
120
|
+
"ePKI Root Certification Authority",
|
121
|
+
"GlobalSign",
|
122
|
+
"GTS Root R1",
|
123
|
+
"IdenTrust Commercial Root CA 1",
|
124
|
+
"ISRG Root X2",
|
125
|
+
"OISTE WISeKey Global Root GB CA",
|
126
|
+
"Starfield Class 2 Certification Authority",
|
127
|
+
"SZAFIR ROOT CA2",
|
128
|
+
"TeliaSonera Root CA v1",
|
129
|
+
"Trustwave Global Certification Authority",
|
130
|
+
"Trustwave Global ECC P256 Certification Authority",
|
131
|
+
"vTrus ECC Root CA",
|
132
|
+
"XRamp Global Certification Authority"
|
133
|
+
].sample
|
134
|
+
end
|
135
|
+
not_valid_before { Faker::Time.between(from: 730.days.ago, to: 183.days.from_now) }
|
136
|
+
not_valid_after { not_valid_before + rand(1..913).days }
|
137
|
+
signature_algorithm_ref { generate(:ref_link) }
|
138
|
+
subject_public_key_ref { generate(:ref_link) }
|
139
|
+
certificate_format { %w[X.509 PEM DER CVC].sample }
|
140
|
+
certificate_extension { %w[crt pem cer der p12].sample }
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
factory(
|
145
|
+
:protocol_properties,
|
146
|
+
parent: :record,
|
147
|
+
class: "SBOM::CycloneDX::Record::CryptoProperties::ProtocolProperties"
|
148
|
+
) do
|
149
|
+
trait :all_fields do
|
150
|
+
type { SBOM::CycloneDX::Enum::PROTOCOL_TYPE.sample }
|
151
|
+
version { Faker::App.version }
|
152
|
+
cipher_suites { association_list(:cipher_suite) }
|
153
|
+
ikev2_transform_types { association :ikev2_transform_type }
|
154
|
+
crypto_ref_array { Array.new(rand(1..3)) { generate(:ref_link) } }
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
factory(
|
159
|
+
:ikev2_transform_type,
|
160
|
+
parent: :record,
|
161
|
+
class: "SBOM::CycloneDX::Record::CryptoProperties::ProtocolProperties::IKEv2TransformType"
|
162
|
+
) do
|
163
|
+
trait :all_fields do
|
164
|
+
encr { Array.new(rand(1..3)) { generate(:ref_link) } }
|
165
|
+
prf { Array.new(rand(1..3)) { generate(:ref_link) } }
|
166
|
+
integ { Array.new(rand(1..3)) { generate(:ref_link) } }
|
167
|
+
ke { Array.new(rand(1..3)) { generate(:ref_link) } }
|
168
|
+
esn { Array.new(rand(1..3)) { generate(:ref_link) } }
|
169
|
+
auth { Array.new(rand(1..3)) { generate(:ref_link) } }
|
170
|
+
end
|
171
|
+
end
|
172
|
+
|
173
|
+
factory(
|
174
|
+
:related_crypto_material_properties,
|
175
|
+
class: "SBOM::CycloneDX::Record::CryptoProperties::RelatedCryptoMaterialProperties"
|
176
|
+
) do
|
177
|
+
trait :all_fields do
|
178
|
+
type { SBOM::CycloneDX::Enum::RELATED_CRYPTO_MATERIAL_TYPE.sample }
|
179
|
+
id { SecureRandom.uuid }
|
180
|
+
state { SBOM::CycloneDX::Enum::RELATED_CRYPTO_MATERIAL_STATE.sample }
|
181
|
+
creation_date { Faker::Time.backward(days: 367) }
|
182
|
+
activation_date { creation_date + rand(1..183).days }
|
183
|
+
update_date { activation_date + rand(1..183).days }
|
184
|
+
expiration_date { update_date + rand(1..367).days }
|
185
|
+
value { Faker::Crypto.md5 }
|
186
|
+
asset_size { rand(1..(2**16)) }
|
187
|
+
format { %w[P8 PEM DER CVC].sample }
|
188
|
+
secured_by { association_list(:secured_by) }
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :data_governance, parent: :record, class: "SBOM::CycloneDX::Record::DataGovernance" do
|
5
|
+
trait :all_fields do
|
6
|
+
custodians { association_list(:data_governance_responsible_party) }
|
7
|
+
stewards { association_list(:data_governance_responsible_party) }
|
8
|
+
owners { association_list(:data_governance_responsible_party) }
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory(
|
5
|
+
:data_governance_responsible_party,
|
6
|
+
parent: :record,
|
7
|
+
class: "SBOM::CycloneDX::Record::DataGovernanceResponsibleParty"
|
8
|
+
) do
|
9
|
+
transient do
|
10
|
+
party_type { %i[organization contact].sample }
|
11
|
+
end
|
12
|
+
|
13
|
+
trait :all_fields
|
14
|
+
|
15
|
+
trait :organization do
|
16
|
+
transient { party_type { :organization } }
|
17
|
+
end
|
18
|
+
|
19
|
+
trait :contact do
|
20
|
+
transient { party_type { :contact } }
|
21
|
+
end
|
22
|
+
|
23
|
+
organization do
|
24
|
+
party_type == :organization ? association(:organizational_entity) : nil
|
25
|
+
end
|
26
|
+
|
27
|
+
contact do
|
28
|
+
party_type == :contact ? association(:organizational_contact) : nil
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,145 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :declarations, parent: :record, class: "SBOM::CycloneDX::Record::Declarations" do
|
5
|
+
trait :all_fields do
|
6
|
+
assessors { association_list(:assessor) }
|
7
|
+
attestations { association_list(:attestation) }
|
8
|
+
claims { association_list(:claim) }
|
9
|
+
evidence { association_list(:evidence) }
|
10
|
+
targets { association_list(:target) }
|
11
|
+
affirmation
|
12
|
+
signature { generate_signature }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
factory :affirmation, parent: :record, class: "SBOM::CycloneDX::Record::Declarations::Affirmation" do
|
17
|
+
trait :all_fields do
|
18
|
+
statement { Faker::Lorem.sentence }
|
19
|
+
signatories { association_list(:signatory) }
|
20
|
+
signature { generate_signature }
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
factory :signatory, parent: :record, class: "SBOM::CycloneDX::Record::Declarations::Affirmation::Signatory" do
|
25
|
+
transient do
|
26
|
+
signatory_type { %w[signature organization].sample }
|
27
|
+
end
|
28
|
+
|
29
|
+
signature { signatory_type == :signature ? generate_signature : nil }
|
30
|
+
organization { signatory_type == :organization ? association(:organizational_entity) : nil }
|
31
|
+
external_reference { signatory_type == :organization ? association(:external_reference) : nil }
|
32
|
+
|
33
|
+
trait :all_fields do
|
34
|
+
name { Faker::Name.name }
|
35
|
+
role { Faker::Job.title }
|
36
|
+
signature { generate_signature }
|
37
|
+
organization factory: :organizational_entity
|
38
|
+
external_reference
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
factory :assessor, parent: :record, class: "SBOM::CycloneDX::Record::Declarations::Assessor" do
|
43
|
+
trait :all_fields do
|
44
|
+
bom_ref { generate(:ref_link) }
|
45
|
+
third_party { Faker::Boolean.boolean }
|
46
|
+
organization factory: :organizational_entity
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
factory :attestation, parent: :record, class: "SBOM::CycloneDX::Record::Declarations::Attestation" do
|
51
|
+
trait :all_fields do
|
52
|
+
summary { Faker::Lorem.sentence }
|
53
|
+
assessor { generate(:ref_link) }
|
54
|
+
requirements_map { association_list(:map) }
|
55
|
+
signature { generate_signature }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
factory :map, parent: :record, class: "SBOM::CycloneDX::Record::Declarations::Attestation::Map" do
|
60
|
+
trait :all_fields do
|
61
|
+
requirement { generate(:ref_link) }
|
62
|
+
claims { Array.new(rand(1..2)) { generate(:ref_link) } }
|
63
|
+
counter_claims { Array.new(rand(1..2)) { generate(:ref_link) } }
|
64
|
+
conformance
|
65
|
+
confidence
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
factory :confidence, parent: :record, class: "SBOM::CycloneDX::Record::Declarations::Attestation::Map::Confidence" do
|
70
|
+
trait :all_fields do
|
71
|
+
score { rand(0.0..1.0) }
|
72
|
+
rationale { Faker::Lorem.sentence }
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
factory :conformance, parent: :record,
|
77
|
+
class: "SBOM::CycloneDX::Record::Declarations::Attestation::Map::Conformance" do
|
78
|
+
trait :all_fields do
|
79
|
+
score { rand(0.0..1.0) }
|
80
|
+
rationale { Faker::Lorem.sentence }
|
81
|
+
mitigation_strategies { Array.new(rand(1..2)) { generate(:ref_link) } }
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
factory :claim, parent: :record, class: "SBOM::CycloneDX::Record::Declarations::Claim" do
|
86
|
+
trait :all_fields do
|
87
|
+
bom_ref { generate(:ref_link) }
|
88
|
+
target { generate(:ref_link) }
|
89
|
+
predicate { Faker::Lorem.sentence }
|
90
|
+
mitigation_strategies { Array.new(rand(1..2)) { generate(:ref_link) } }
|
91
|
+
reasoning { Faker::Lorem.sentence }
|
92
|
+
evidence { Array.new(rand(1..2)) { generate(:ref_link) } }
|
93
|
+
external_references { Array.new(rand(1..2)) { generate(:ref_link) } }
|
94
|
+
signature { generate_signature }
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
factory :evidence, parent: :record, class: "SBOM::CycloneDX::Record::Declarations::Evidence" do
|
99
|
+
trait :all_fields do
|
100
|
+
bom_ref { generate(:ref_link) }
|
101
|
+
# This will definitely not be valid, but isn't checked currently
|
102
|
+
property_name { Faker::Lorem.words(number: 2).join(":").downcase }
|
103
|
+
description { Faker::Lorem.sentence }
|
104
|
+
data { association_list(:evidence_data) }
|
105
|
+
created { Faker::Time.backward(days: 367) }
|
106
|
+
expires { Faker::Time.between(from: 6.months.ago, to: 18.months.from_now) }
|
107
|
+
author factory: :organizational_contact
|
108
|
+
reviewer factory: :organizational_contact
|
109
|
+
signature { generate_signature }
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
factory(
|
114
|
+
:evidence_data,
|
115
|
+
parent: :record,
|
116
|
+
class: "SBOM::CycloneDX::Record::Declarations::Evidence::EvidenceData"
|
117
|
+
) do
|
118
|
+
trait :all_fields do
|
119
|
+
name { Faker::Lorem.word }
|
120
|
+
contents
|
121
|
+
classification { %w[public restricted confidential secret].sample }
|
122
|
+
sensitive_data { Array.new(rand(1..3)) { Faker::Lorem.sentence } }
|
123
|
+
governance factory: :data_governance
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
factory(
|
128
|
+
:contents,
|
129
|
+
parent: :record,
|
130
|
+
class: "SBOM::CycloneDX::Record::Declarations::Evidence::EvidenceData::Contents"
|
131
|
+
) do
|
132
|
+
trait :all_fields do
|
133
|
+
attachment
|
134
|
+
url { generate(:url) }
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
factory :target, parent: :record, class: "SBOM::CycloneDX::Record::Declarations::Target" do
|
139
|
+
trait :all_fields do
|
140
|
+
organizations { association_list(:organizational_entity) }
|
141
|
+
components { association_list(:component) }
|
142
|
+
services { association_list(:service) }
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :dependency, parent: :record, class: "SBOM::CycloneDX::Record::Dependency" do
|
5
|
+
ref { generate(:ref_link) }
|
6
|
+
|
7
|
+
trait :all_fields do
|
8
|
+
depends_on { Array.new(rand(1..3)) { generate(:ref_link) } }
|
9
|
+
provides { Array.new(rand(1..3)) { generate(:ref_link) } }
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :diff, parent: :record, class: "SBOM::CycloneDX::Record::Diff" do
|
5
|
+
trait :all_fields do
|
6
|
+
text do
|
7
|
+
line_count = rand(0..100)
|
8
|
+
association(
|
9
|
+
:attachment,
|
10
|
+
content:
|
11
|
+
<<~DIFF_TEXT
|
12
|
+
--- #{Faker::Lorem.word}
|
13
|
+
+++ #{Faker::Lorem.word}
|
14
|
+
@@ -1,#{line_count} +1,#{line_count} @@
|
15
|
+
-# #{Faker::Lorem.sentence}
|
16
|
+
+# #{Faker::Lorem.sentence}
|
17
|
+
#{Faker::Lorem.sentence}
|
18
|
+
DIFF_TEXT
|
19
|
+
)
|
20
|
+
end
|
21
|
+
url { generate(:url) }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :energy_consumption, parent: :record, class: "SBOM::CycloneDX::Record::EnergyConsumption" do
|
5
|
+
activity { SBOM::CycloneDX::Enum::ACTIVITY.sample }
|
6
|
+
energy_providers { association_list(:energy_provider) }
|
7
|
+
activity_energy_cost { association(:energy_measure) }
|
8
|
+
|
9
|
+
trait :all_fields do
|
10
|
+
co2_cost_equivalent { association(:co2_measure) }
|
11
|
+
co2_cost_offset { association(:co2_measure) }
|
12
|
+
properties { association_list(:property) }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :energy_provider, parent: :record, class: "SBOM::CycloneDX::Record::EnergyProvider" do
|
5
|
+
organization { association(:organizational_entity) }
|
6
|
+
energy_source { SBOM::CycloneDX::Enum::ENERGY_SOURCE.sample }
|
7
|
+
energy_provided { association(:energy_measure) }
|
8
|
+
|
9
|
+
trait :all_fields do
|
10
|
+
bom_ref { generate(:ref_link) }
|
11
|
+
description { Faker::Lorem.sentence }
|
12
|
+
external_references { association_list(:external_reference) }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :environmental_consideration, parent: :record, class: "SBOM::CycloneDX::Record::EnvironmentalConsideration" do
|
5
|
+
trait :all_fields do
|
6
|
+
energy_consumptions { association_list(:energy_consumption) }
|
7
|
+
properties { association_list(:property) }
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
FactoryBot.define do
|
4
|
+
factory :event, parent: :record, class: "SBOM::CycloneDX::Record::Event" do
|
5
|
+
trait :all_fields do
|
6
|
+
uid { SecureRandom.uuid }
|
7
|
+
description { Faker::Lorem.sentence }
|
8
|
+
time_received { Faker::Time.backward(days: 21) }
|
9
|
+
data { association(:attachment) }
|
10
|
+
source { association(:resource_reference_choice) }
|
11
|
+
target { association(:resource_reference_choice) }
|
12
|
+
properties { association_list(:property) }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|