diff options
author | specter25 <ujjwalcoding012@gmail.com> | 2021-03-21 01:22:26 +0530 |
---|---|---|
committer | specter25 <ujjwalcoding012@gmail.com> | 2021-03-21 01:22:26 +0530 |
commit | af976619f2cc0badd250fb12628a0ac42b5a18ca (patch) | |
tree | d6ba02d46b173ddde31e05e813c30d79f97b15c1 /rdfloader | |
parent | a16d50ee155238df280a68252acc25e9afb7acea (diff) | |
download | spdx-tools-af976619f2cc0badd250fb12628a0ac42b5a18ca.tar.gz |
Create struct to store checksums
- Store the checksums in a struct with properties algorithm and value
- Define permitted algorithm as constants
Signed-off-by: specter25 <ujjwalcoding012@gmail.com>
Diffstat (limited to 'rdfloader')
-rw-r--r-- | rdfloader/parser2v2/parse_file.go | 20 | ||||
-rw-r--r-- | rdfloader/parser2v2/parse_file_test.go | 85 | ||||
-rw-r--r-- | rdfloader/parser2v2/parse_package.go | 20 | ||||
-rw-r--r-- | rdfloader/parser2v2/parse_package_test.go | 38 | ||||
-rw-r--r-- | rdfloader/parser2v2/parser_test.go | 18 |
5 files changed, 121 insertions, 60 deletions
diff --git a/rdfloader/parser2v2/parse_file.go b/rdfloader/parser2v2/parse_file.go index 647cef9..485aeba 100644 --- a/rdfloader/parser2v2/parse_file.go +++ b/rdfloader/parser2v2/parse_file.go @@ -4,9 +4,10 @@ package parser2v2 import ( "fmt" + "strings" + gordfParser "github.com/spdx/gordf/rdfloader/parser" "github.com/spdx/tools-golang/spdx" - "strings" ) // returns a file instance and the error if any encountered. @@ -26,7 +27,7 @@ func (parser *rdfParser2_2) getFileFromNode(fileNode *gordfParser.Node) (file *s } // setting color to grey to indicate that we've started parsing this node. - parser.cache[fileNode.ID].Color = GREY; + parser.cache[fileNode.ID].Color = GREY // setting color to black just before function returns to the caller to // indicate that parsing current node is complete. @@ -129,13 +130,16 @@ func (parser *rdfParser2_2) setFileChecksumFromNode(file *spdx.File2_2, checksum if err != nil { return fmt.Errorf("error parsing checksumNode of a file: %v", err) } + if file.FileChecksums == nil { + file.FileChecksums = map[spdx.ChecksumAlgorithm2_2]spdx.Checksum2_2{} + } switch checksumAlgorithm { - case "MD5": - file.FileChecksumMD5 = checksumValue - case "SHA1": - file.FileChecksumSHA1 = checksumValue - case "SHA256": - file.FileChecksumSHA256 = checksumValue + case spdx.MD5: + file.FileChecksums[spdx.MD5] = spdx.Checksum2_2{Algorithm: spdx.MD5, Value: checksumValue} + case spdx.SHA1: + file.FileChecksums[spdx.SHA1] = spdx.Checksum2_2{Algorithm: spdx.SHA1, Value: checksumValue} + case spdx.SHA256: + file.FileChecksums[spdx.SHA256] = spdx.Checksum2_2{Algorithm: spdx.SHA256, Value: checksumValue} case "": return fmt.Errorf("empty checksum algorithm and value") default: diff --git a/rdfloader/parser2v2/parse_file_test.go b/rdfloader/parser2v2/parse_file_test.go index 4d7c8b3..069eb26 100644 --- a/rdfloader/parser2v2/parse_file_test.go +++ b/rdfloader/parser2v2/parse_file_test.go @@ -4,12 +4,13 @@ package parser2v2 import ( "bufio" + "strings" + "testing" + gordfParser "github.com/spdx/gordf/rdfloader/parser" rdfloader2 "github.com/spdx/gordf/rdfloader/xmlreader" gordfWriter "github.com/spdx/gordf/rdfwriter" "github.com/spdx/tools-golang/spdx" - "strings" - "testing" ) // content is the tags within the rdf:RDF tag @@ -206,14 +207,21 @@ func Test_rdfParser2_2_setFileChecksumFromNode(t *testing.T) { t.Errorf("error parsing a valid checksum node") } checksumValue := "d2356e0fe1c0b85285d83c6b2ad51b5f" - if file.FileChecksumMD5 != checksumValue { - t.Errorf("wrong checksum value for md5. Expected: %s, found: %s", checksumValue, file.FileChecksumMD5) - } - if file.FileChecksumSHA1 != "" { - t.Errorf("incorrectly set sha1, should've been empty") - } - if file.FileChecksumSHA256 != "" { - t.Errorf("incorrectly set sha256, should've been empty") + for _, checksum := range file.FileChecksums { + switch checksum.Algorithm { + case spdx.SHA1: + if checksum.Value != "" { + t.Errorf("incorrectly set sha1, should've been empty") + } + case spdx.SHA256: + if checksum.Value != "" { + t.Errorf("incorrectly set sha256, should've been empty") + } + case spdx.MD5: + if checksum.Value != checksumValue { + t.Errorf("wrong checksum value for md5. Expected: %s, found: %s", checksumValue, checksum.Value) + } + } } // TestCase 2: valid sha1 checksum @@ -229,14 +237,21 @@ func Test_rdfParser2_2_setFileChecksumFromNode(t *testing.T) { if err != nil { t.Errorf("error parsing a valid checksum node") } - if file.FileChecksumSHA1 != checksumValue { - t.Errorf("wrong checksum value for sha1. Expected: %s, found: %s", checksumValue, file.FileChecksumSHA1) - } - if file.FileChecksumMD5 != "" { - t.Errorf("incorrectly set md5, should've been empty") - } - if file.FileChecksumSHA256 != "" { - t.Errorf("incorrectly set sha256, should've been empty") + for _, checksum := range file.FileChecksums { + switch checksum.Algorithm { + case spdx.SHA1: + if checksum.Value != checksumValue { + t.Errorf("wrong checksum value for sha1. Expected: %s, found: %s", checksumValue, checksum.Value) + } + case spdx.SHA256: + if checksum.Value != "" { + t.Errorf("incorrectly set sha256, should've been empty") + } + case spdx.MD5: + if checksum.Value != checksumValue { + t.Errorf("incorrectly set md5, should've been empty") + } + } } // TestCase 3: valid sha256 checksum @@ -252,14 +267,21 @@ func Test_rdfParser2_2_setFileChecksumFromNode(t *testing.T) { if err != nil { t.Errorf("error parsing a valid checksum node") } - if file.FileChecksumSHA256 != checksumValue { - t.Errorf("wrong checksum value for sha256. Expected: %s, found: %s", checksumValue, file.FileChecksumSHA256) - } - if file.FileChecksumMD5 != "" { - t.Errorf("incorrectly set md5, should've been empty") - } - if file.FileChecksumSHA1 != "" { - t.Errorf("incorrectly set sha1, should've been empty") + for _, checksum := range file.FileChecksums { + switch checksum.Algorithm { + case spdx.SHA1: + if checksum.Value != checksumValue { + t.Errorf("incorrectly set sha1, should've been empty") + } + case spdx.SHA256: + if checksum.Value != checksumValue { + t.Errorf("wrong checksum value for sha256. Expected: %s, found: %s", checksumValue, checksum.Value) + } + case spdx.MD5: + if checksum.Value != checksumValue { + t.Errorf("incorrectly set md5, should've been empty") + } + } } // TestCase 4: checksum node without one of the mandatory attributes @@ -494,7 +516,6 @@ func Test_rdfParser2_2_getFileFromNode(t *testing.T) { t.Errorf("expected %s, found %s", expectedLicenseInfoInFile, file.LicenseInfoInFile[0]) } - // TestCase 12: checking if recursive dependencies are resolved. parser, _ = parserFromBodyContent(` <spdx:File rdf:about="#SPDXRef-ParentFile"> @@ -578,8 +599,14 @@ func Test_rdfParser2_2_getFileFromNode(t *testing.T) { } expectedChecksum := "0a3a0e1ab72b7c132f5021c538a7a3ea6d539bcd" - if file.FileChecksumSHA1 != expectedChecksum { - t.Errorf("expected %s, found %s", expectedChecksum, file.FileChecksumSHA1) + + for _, checksum := range file.FileChecksums { + switch checksum.Algorithm { + case spdx.SHA1: + if checksum.Value != expectedChecksum { + t.Errorf("expected %s, found %s", expectedChecksum, checksum.Value) + } + } } expectedLicenseConcluded = "NOASSERTION" diff --git a/rdfloader/parser2v2/parse_package.go b/rdfloader/parser2v2/parse_package.go index dde6e70..02dd251 100644 --- a/rdfloader/parser2v2/parse_package.go +++ b/rdfloader/parser2v2/parse_package.go @@ -4,9 +4,10 @@ package parser2v2 import ( "fmt" + "strings" + gordfParser "github.com/spdx/gordf/rdfloader/parser" "github.com/spdx/tools-golang/spdx" - "strings" ) func (parser *rdfParser2_2) getPackageFromNode(packageNode *gordfParser.Node) (pkg *spdx.Package2_2, err error) { @@ -30,7 +31,7 @@ func (parser *rdfParser2_2) getPackageFromNode(packageNode *gordfParser.Node) (p parser.cache[packageNode.ID].Color = GREY // setting state color to black to indicate when we're done parsing this node. - defer func(){parser.cache[packageNode.ID].Color = BLACK}(); + defer func() { parser.cache[packageNode.ID].Color = BLACK }() // setting the SPDXIdentifier for the package. eId, err := ExtractElementID(getLastPartOfURI(packageNode.ID)) @@ -300,13 +301,16 @@ func (parser *rdfParser2_2) setPackageChecksum(pkg *spdx.Package2_2, node *gordf if err != nil { return fmt.Errorf("error getting checksum algorithm and value from %v", node) } + if pkg.PackageChecksums == nil { + pkg.PackageChecksums = make(map[spdx.ChecksumAlgorithm2_2]spdx.Checksum2_2) + } switch checksumAlgorithm { - case "MD5": - pkg.PackageChecksumMD5 = checksumValue - case "SHA1": - pkg.PackageChecksumSHA1 = checksumValue - case "SHA256": - pkg.PackageChecksumSHA256 = checksumValue + case spdx.MD5: + pkg.PackageChecksums[spdx.MD5] = spdx.Checksum2_2{Algorithm: spdx.MD5, Value: checksumValue} + case spdx.SHA1: + pkg.PackageChecksums[spdx.SHA1] = spdx.Checksum2_2{Algorithm: spdx.SHA1, Value: checksumValue} + case spdx.SHA256: + pkg.PackageChecksums[spdx.SHA256] = spdx.Checksum2_2{Algorithm: spdx.SHA256, Value: checksumValue} default: return fmt.Errorf("unknown checksumAlgorithm %s while parsing a package", checksumAlgorithm) } diff --git a/rdfloader/parser2v2/parse_package_test.go b/rdfloader/parser2v2/parse_package_test.go index 2269826..9744760 100644 --- a/rdfloader/parser2v2/parse_package_test.go +++ b/rdfloader/parser2v2/parse_package_test.go @@ -3,10 +3,11 @@ package parser2v2 import ( - gordfParser "github.com/spdx/gordf/rdfloader/parser" - "github.com/spdx/tools-golang/spdx" "reflect" "testing" + + gordfParser "github.com/spdx/gordf/rdfloader/parser" + "github.com/spdx/tools-golang/spdx" ) func Test_setPackageSupplier(t *testing.T) { @@ -584,7 +585,7 @@ func Test_rdfParser2_2_setPackageChecksum(t *testing.T) { var parser *rdfParser2_2 var node *gordfParser.Node var pkg *spdx.Package2_2 - var gotChecksumValue, expectedChecksumValue string + var expectedChecksumValue string var err error // TestCase 1: invalid checksum algorithm @@ -629,9 +630,14 @@ func Test_rdfParser2_2_setPackageChecksum(t *testing.T) { t.Errorf("unexpected error: %v", err) } expectedChecksumValue = "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12" - gotChecksumValue = pkg.PackageChecksumSHA1 - if gotChecksumValue != expectedChecksumValue { - t.Errorf("expected: %v, got: %v", expectedChecksumValue, gotChecksumValue) + + for _, checksum := range pkg.PackageChecksums { + switch checksum.Algorithm { + case spdx.SHA1: + if checksum.Value != expectedChecksumValue { + t.Errorf("expected %v, got: %v", expectedChecksumValue, checksum.Value) + } + } } // TestCase 3: valid checksum (sha256) @@ -648,9 +654,13 @@ func Test_rdfParser2_2_setPackageChecksum(t *testing.T) { t.Errorf("unexpected error: %v", err) } expectedChecksumValue = "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12" - gotChecksumValue = pkg.PackageChecksumSHA256 - if gotChecksumValue != expectedChecksumValue { - t.Errorf("expected: %v, got: %v", expectedChecksumValue, gotChecksumValue) + for _, checksum := range pkg.PackageChecksums { + switch checksum.Algorithm { + case spdx.SHA256: + if checksum.Value != expectedChecksumValue { + t.Errorf("expected %v, got: %v", expectedChecksumValue, checksum.Value) + } + } } // TestCase 4: valid checksum (md5) @@ -667,9 +677,13 @@ func Test_rdfParser2_2_setPackageChecksum(t *testing.T) { t.Errorf("unexpected error: %v", err) } expectedChecksumValue = "2fd4e1c67a2d28fced849ee1bb76e7391b93eb12" - gotChecksumValue = pkg.PackageChecksumMD5 - if gotChecksumValue != expectedChecksumValue { - t.Errorf("expected: %v, got: %v", expectedChecksumValue, gotChecksumValue) + for _, checksum := range pkg.PackageChecksums { + switch checksum.Algorithm { + case spdx.MD5: + if checksum.Value != expectedChecksumValue { + t.Errorf("expected %v, got: %v", expectedChecksumValue, checksum.Value) + } + } } } diff --git a/rdfloader/parser2v2/parser_test.go b/rdfloader/parser2v2/parser_test.go index be740c9..0d9c30d 100644 --- a/rdfloader/parser2v2/parser_test.go +++ b/rdfloader/parser2v2/parser_test.go @@ -132,7 +132,19 @@ func Test_rdfParser2_2_getSpdxDocNode(t *testing.T) { t.Errorf("expected and error due to more than one type triples for the SpdxDocument Node, got %v", err) } - // TestCase 2: two different spdx nodes found in a single document. + // TestCase 2: must be associated with exactly one rdf:type. + parser, _ = parserFromBodyContent(` + <spdx:SpdxDocument rdf:about="#SPDXRef-Document"/> + <spdx:Snippet rdf:about="#SPDXRef-Document"/> + <spdx:File rdf:about="#SPDXRef-DoapSource"/> + `) + _, err = parser.getSpdxDocNode() + t.Log(err) + if err == nil { + t.Errorf("rootNode must be associated with exactly one triple of predicate rdf:type, got %v", err) + } + + // TestCase 3: two different spdx nodes found in a single document. parser, _ = parserFromBodyContent(` <spdx:SpdxDocument rdf:about="#SPDXRef-Document-1"/> <spdx:SpdxDocument rdf:about="#SPDXRef-Document-2"/> @@ -142,14 +154,14 @@ func Test_rdfParser2_2_getSpdxDocNode(t *testing.T) { t.Errorf("expected and error due to more than one type SpdxDocument Node, got %v", err) } - // TestCase 3: no spdx document + // TestCase 4: no spdx document parser, _ = parserFromBodyContent(``) _, err = parser.getSpdxDocNode() if err == nil { t.Errorf("expected and error due to no SpdxDocument Node, got %v", err) } - // TestCase 4: valid spdxDocument node + // TestCase 5: valid spdxDocument node parser, _ = parserFromBodyContent(` <spdx:SpdxDocument rdf:about="#SPDXRef-Document-1"/> `) |