aboutsummaryrefslogtreecommitdiff
path: root/rdfloader
diff options
context:
space:
mode:
authorspecter25 <ujjwalcoding012@gmail.com>2021-03-21 01:22:26 +0530
committerspecter25 <ujjwalcoding012@gmail.com>2021-03-21 01:22:26 +0530
commitaf976619f2cc0badd250fb12628a0ac42b5a18ca (patch)
treed6ba02d46b173ddde31e05e813c30d79f97b15c1 /rdfloader
parenta16d50ee155238df280a68252acc25e9afb7acea (diff)
downloadspdx-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.go20
-rw-r--r--rdfloader/parser2v2/parse_file_test.go85
-rw-r--r--rdfloader/parser2v2/parse_package.go20
-rw-r--r--rdfloader/parser2v2/parse_package_test.go38
-rw-r--r--rdfloader/parser2v2/parser_test.go18
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"/>
`)