diff options
author | Rishabh Bhatnagar <bhatnagarrishabh4@gmail.com> | 2020-09-04 16:59:47 +0530 |
---|---|---|
committer | Rishabh Bhatnagar <bhatnagarrishabh4@gmail.com> | 2020-09-04 16:59:47 +0530 |
commit | 08d5f11734e6426ebc87e261e2ce42c0260c4d0d (patch) | |
tree | ab1682375dc11dfca27ba41a27c5ccbbc86e23a4 /rdfloader/parser2v2/parse_package.go | |
parent | 84fab30a66a136c293769b182265c62e6665b302 (diff) | |
download | spdx-tools-08d5f11734e6426ebc87e261e2ce42c0260c4d0d.tar.gz |
Add Tests And Bug Fixes For Remaining Files
- setting file referenced in the range to parser files instead of the Unpackaged Files.
- externalReference now requires just a node rather than a triple.
- tidied and DRYed parsing of Snippet range.
- allow licenseInfoInFile of File to be AnyLicenseInfo instead of SimpleLicensingInfo.
- change signature of getSnippetInformation from Triple To Node.
- add simpleLicensingInfo switch in the anyLicensingInfo switch.
- change input of getExternaelDocumentRef from triples to Node for easier prototyping.
- remove unused methods in utils
- remove parser association from utils functions
Signed-off-by: Rishabh Bhatnagar <bhatnagarrishabh4@gmail.com>
Diffstat (limited to 'rdfloader/parser2v2/parse_package.go')
-rw-r--r-- | rdfloader/parser2v2/parse_package.go | 75 |
1 files changed, 26 insertions, 49 deletions
diff --git a/rdfloader/parser2v2/parse_package.go b/rdfloader/parser2v2/parse_package.go index 089f3bf..9cff68c 100644 --- a/rdfloader/parser2v2/parse_package.go +++ b/rdfloader/parser2v2/parse_package.go @@ -37,33 +37,21 @@ func (parser *rdfParser2_2) getPackageFromNode(packageNode *gordfParser.Node) (p case SPDX_SUPPLIER: // 3.5 // cardinality: max 1 err = setPackageSupplier(pkg, subTriple.Object.ID) - if err != nil { - return nil, err - } case SPDX_ORIGINATOR: // 3.6 // cardinality: max 1 err = setPackageOriginator(pkg, subTriple.Object.ID) - if err != nil { - return nil, err - } case SPDX_DOWNLOAD_LOCATION: // 3.7 // cardinality: exactly 1 - err = setDocumentLocationFromURI(subTriple.Object.ID, pkg) - if err != nil { - return nil, err - } + err = setDocumentLocationFromURI(pkg, subTriple.Object.ID) case SPDX_FILES_ANALYZED: // 3.8 // cardinality: max 1 - err = setFilesAnalyzed(subTriple.Object.ID, pkg) - if err != nil { - err = fmt.Errorf("error setting a filesAnalyzed attribute of a package: %v", err) - } + err = setFilesAnalyzed(pkg, subTriple.Object.ID) case SPDX_PACKAGE_VERIFICATION_CODE: // 3.9 // cardinality: max 1 err = parser.setPackageVerificationCode(pkg, subTriple.Object) case SPDX_CHECKSUM: // 3.10 // cardinality: min 0 - err = setPackageChecksum(parser, pkg, subTriple.Object) + err = parser.setPackageChecksum(pkg, subTriple.Object) case DOAP_HOMEPAGE: // 3.11 // cardinality: max 1 // homepage must be a valid Uri @@ -108,33 +96,27 @@ func (parser *rdfParser2_2) getPackageFromNode(packageNode *gordfParser.Node) (p pkg.PackageComment = subTriple.Object.ID case SPDX_EXTERNAL_REF: // 3.21 // cardinality: min 0 - externalDocRef, err := parser.getPackageExternalRef(subTriple) + externalDocRef, err := parser.getPackageExternalRef(subTriple.Object) if err != nil { - return nil, err + return nil, fmt.Errorf("error parsing externalRef of a package: %v", err) } pkg.PackageExternalReferences = append(pkg.PackageExternalReferences, externalDocRef) case SPDX_HAS_FILE: // 3.22 // cardinality: min 0 file, err := parser.getFileFromNode(subTriple.Object) if err != nil { - return nil, err + return nil, fmt.Errorf("error setting file inside a package: %v", err) } parser.setFileToPackage(pkg, file) case SPDX_RELATIONSHIP: // cardinality: min 0 - err := parser.parseRelationship(subTriple) - if err != nil { - return nil, err - } + err = parser.parseRelationship(subTriple) case SPDX_ATTRIBUTION_TEXT: // cardinality: min 0 pkg.PackageAttributionTexts = append(pkg.PackageAttributionTexts, subTriple.Object.ID) case SPDX_ANNOTATION: // cardinality: min 0 - err := parser.parseAnnotationFromNode(subTriple.Object) - if err != nil { - return nil, err - } + err = parser.parseAnnotationFromNode(subTriple.Object) default: return nil, fmt.Errorf("unknown predicate id %s while parsing a package", subTriple.Predicate.ID) } @@ -147,13 +129,13 @@ func (parser *rdfParser2_2) getPackageFromNode(packageNode *gordfParser.Node) (p } // parses externalReference found in the package by the associated triple. -func (parser *rdfParser2_2) getPackageExternalRef(triple *gordfParser.Triple) (externalDocRef *spdx.PackageExternalReference2_2, err error) { +func (parser *rdfParser2_2) getPackageExternalRef(node *gordfParser.Node) (externalDocRef *spdx.PackageExternalReference2_2, err error) { externalDocRef = &spdx.PackageExternalReference2_2{} - for _, subTriple := range parser.nodeToTriples(triple.Object) { - switch subTriple.Predicate.ID { + for _, triple := range parser.nodeToTriples(node) { + switch triple.Predicate.ID { case SPDX_REFERENCE_CATEGORY: // cardinality: exactly 1 - switch subTriple.Object.ID { + switch triple.Object.ID { case SPDX_REFERENCE_CATEGORY_SECURITY: externalDocRef.Category = "SECURITY" case SPDX_REFERENCE_CATEGORY_PACKAGE_MANAGER: @@ -161,7 +143,7 @@ func (parser *rdfParser2_2) getPackageExternalRef(triple *gordfParser.Triple) (e case SPDX_REFERENCE_CATEGORY_OTHER: externalDocRef.Category = "OTHER" default: - return nil, fmt.Errorf("unknown packageManager predicate uri %s", subTriple.Predicate.ID) + return nil, fmt.Errorf("unknown packageManager uri %s", triple.Predicate.ID) } case RDF_TYPE: continue @@ -172,15 +154,15 @@ func (parser *rdfParser2_2) getPackageExternalRef(triple *gordfParser.Triple) (e // 1. contextualExample, // 2. documentation and, // 3. externalReferenceSite - externalDocRef.RefType = subTriple.Object.ID + externalDocRef.RefType = triple.Object.ID case SPDX_REFERENCE_LOCATOR: // cardinality: exactly 1 - externalDocRef.Locator = subTriple.Object.ID + externalDocRef.Locator = triple.Object.ID case RDFS_COMMENT: // cardinality: max 1 - externalDocRef.ExternalRefComment = subTriple.Object.ID + externalDocRef.ExternalRefComment = triple.Object.ID default: - return nil, fmt.Errorf("unknown package external reference predicate id %s", subTriple.Predicate.ID) + return nil, fmt.Errorf("unknown package external reference predicate id %s", triple.Predicate.ID) } } return @@ -205,6 +187,8 @@ func (parser *rdfParser2_2) setPackageVerificationCode(pkg *spdx.Package2_2, nod return nil } +// appends the file to the package and also sets the assocWithPackage for the +// file to indicate the file is associated with a package func (parser *rdfParser2_2) setFileToPackage(pkg *spdx.Package2_2, file *spdx.File2_2) { if pkg.Files == nil { pkg.Files = map[spdx.ElementID]*spdx.File2_2{} @@ -263,9 +247,9 @@ func setPackageOriginator(pkg *spdx.Package2_2, value string) error { } // validates the uri and sets the location if it is valid -func setDocumentLocationFromURI(locationURI string, pkg *spdx.Package2_2) error { +func setDocumentLocationFromURI(pkg *spdx.Package2_2, locationURI string) error { switch locationURI { - case SPDX_NOASSERTION_CAPS, SPDX_NOASSERTION_CAPS: + case SPDX_NOASSERTION_CAPS, SPDX_NOASSERTION_SMALL: pkg.PackageDownloadLocation = "NOASSERTION" case SPDX_NONE_CAPS, SPDX_NONE_SMALL: pkg.PackageDownloadLocation = "NONE" @@ -280,23 +264,16 @@ func setDocumentLocationFromURI(locationURI string, pkg *spdx.Package2_2) error // sets the FilesAnalyzed attribute to the given package // boolValue is a string of type "true" or "false" -func setFilesAnalyzed(boolValue string, pkg *spdx.Package2_2) error { +func setFilesAnalyzed(pkg *spdx.Package2_2, boolValue string) (err error) { pkg.IsFilesAnalyzedTagPresent = true - switch strings.TrimSpace(boolValue) { - case "true": - pkg.FilesAnalyzed = true - case "false": - pkg.FilesAnalyzed = false - default: - return fmt.Errorf("filesAnalyzed can be either true/false. found %s", boolValue) - } - return nil + pkg.FilesAnalyzed, err = boolFromString(boolValue) + return err } -func setPackageChecksum(parser *rdfParser2_2, pkg *spdx.Package2_2, node *gordfParser.Node) error { +func (parser *rdfParser2_2) setPackageChecksum(pkg *spdx.Package2_2, node *gordfParser.Node) error { checksumAlgorithm, checksumValue, err := parser.getChecksumFromNode(node) if err != nil { - return err + return fmt.Errorf("error getting checksum algorithm and value from %v", node) } switch checksumAlgorithm { case "MD5": |