aboutsummaryrefslogtreecommitdiff
path: root/tvloader
diff options
context:
space:
mode:
authorSteve Winslow <steve@swinslow.net>2020-05-25 16:58:30 -0400
committerSteve Winslow <steve@swinslow.net>2020-05-25 16:58:30 -0400
commitff90afca43f185d5aae62d227c0a27d4f91dbeac (patch)
treecec3add48527a4a69faa754142230d6fd18de3b4 /tvloader
parentd1a01f0c01c3d1095ff4a43088daacf3cf6edee2 (diff)
downloadspdx-tools-ff90afca43f185d5aae62d227c0a27d4f91dbeac.tar.gz
Add tests for non-covered sections
Signed-off-by: Steve Winslow <steve@swinslow.net>
Diffstat (limited to 'tvloader')
-rw-r--r--tvloader/parser2v1/parse_annotation_test.go56
-rw-r--r--tvloader/parser2v1/parse_creation_info_test.go11
-rw-r--r--tvloader/parser2v1/parse_file_test.go102
-rw-r--r--tvloader/parser2v1/parse_package.go2
-rw-r--r--tvloader/parser2v1/parse_package_test.go204
-rw-r--r--tvloader/parser2v1/parse_relationship_test.go18
-rw-r--r--tvloader/parser2v1/parse_review_test.go30
-rw-r--r--tvloader/parser2v1/parse_snippet_test.go104
-rw-r--r--tvloader/parser2v1/parser_test.go9
-rw-r--r--tvloader/parser2v1/util_test.go4
10 files changed, 539 insertions, 1 deletions
diff --git a/tvloader/parser2v1/parse_annotation_test.go b/tvloader/parser2v1/parse_annotation_test.go
index b66026f..3fdce9f 100644
--- a/tvloader/parser2v1/parse_annotation_test.go
+++ b/tvloader/parser2v1/parse_annotation_test.go
@@ -19,6 +19,23 @@ func TestParser2_1FailsIfAnnotationNotSet(t *testing.T) {
}
}
+func TestParser2_1FailsIfAnnotationTagUnknown(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{},
+ st: psCreationInfo2_1,
+ }
+ // start with valid annotator
+ err := parser.parsePair2_1("Annotator", "Person: John Doe (jdoe@example.com)")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // parse invalid tag, using parsePairForAnnotation2_1(
+ err = parser.parsePairForAnnotation2_1("blah", "oops")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
func TestParser2_1FailsIfAnnotationFieldsWithoutAnnotation(t *testing.T) {
parser := tvParser2_1{
doc: &spdx.Document2_1{},
@@ -101,3 +118,42 @@ func TestParser2_1CanParseAnnotationTags(t *testing.T) {
t.Errorf("got %v for AnnotationComment, expected %v", parser.ann.AnnotationComment, cmt)
}
}
+
+func TestParser2_1FailsIfAnnotatorInvalid(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{},
+ st: psCreationInfo2_1,
+ }
+ err := parser.parsePair2_1("Annotator", "John Doe (jdoe@example.com)")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsIfAnnotatorTypeInvalid(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{},
+ st: psCreationInfo2_1,
+ }
+ err := parser.parsePair2_1("Annotator", "Human: John Doe (jdoe@example.com)")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsIfAnnotationRefInvalid(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{},
+ st: psCreationInfo2_1,
+ }
+ // start with valid annotator
+ err := parser.parsePair2_1("Annotator", "Person: John Doe (jdoe@example.com)")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ err = parser.parsePair2_1("SPDXREF", "blah:other")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
diff --git a/tvloader/parser2v1/parse_creation_info_test.go b/tvloader/parser2v1/parse_creation_info_test.go
index 64eae0b..f21cfd1 100644
--- a/tvloader/parser2v1/parse_creation_info_test.go
+++ b/tvloader/parser2v1/parse_creation_info_test.go
@@ -162,6 +162,17 @@ func TestParser2_1CIStaysAfterParsingAnnotationTags(t *testing.T) {
}
}
+func TestParser2_1FailsParsingCreationInfoWithInvalidState(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{},
+ st: psPackage2_1,
+ }
+ err := parser.parsePairFromCreationInfo2_1("SPDXVersion", "SPDX-2.1")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
// ===== Creation Info section tests =====
func TestParser2_1HasCreationInfoAfterCallToParseFirstTag(t *testing.T) {
parser := tvParser2_1{
diff --git a/tvloader/parser2v1/parse_file_test.go b/tvloader/parser2v1/parse_file_test.go
index 8b48cec..68efe2b 100644
--- a/tvloader/parser2v1/parse_file_test.go
+++ b/tvloader/parser2v1/parse_file_test.go
@@ -784,3 +784,105 @@ func TestFileAOPPointerChangesAfterTags(t *testing.T) {
t.Errorf("expected nil AOP pointer, got %v", parser.fileAOP)
}
}
+
+func TestParser2_1FailsIfInvalidSPDXIDInFileSection(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psFile2_1,
+ pkg: &spdx.Package2_1{PackageName: "test", PackageSPDXIdentifier: "test", Files: map[spdx.ElementID]*spdx.File2_1{}},
+ }
+ parser.doc.Packages["test"] = parser.pkg
+
+ // start with File Name
+ err := parser.parsePairFromFile2_1("FileName", "f1.txt")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // invalid SPDX Identifier
+ err = parser.parsePairFromFile2_1("SPDXID", "whoops")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsIfInvalidChecksumFormatInFileSection(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psFile2_1,
+ pkg: &spdx.Package2_1{PackageName: "test", PackageSPDXIdentifier: "test", Files: map[spdx.ElementID]*spdx.File2_1{}},
+ }
+ parser.doc.Packages["test"] = parser.pkg
+
+ // start with File Name
+ err := parser.parsePairFromFile2_1("FileName", "f1.txt")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // invalid format for checksum line, missing colon
+ err = parser.parsePairFromFile2_1("FileChecksum", "SHA1 85ed0817af83a24ad8da68c2b5094de69833983c")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsIfUnknownChecksumTypeInFileSection(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psFile2_1,
+ pkg: &spdx.Package2_1{PackageName: "test", PackageSPDXIdentifier: "test", Files: map[spdx.ElementID]*spdx.File2_1{}},
+ }
+ parser.doc.Packages["test"] = parser.pkg
+
+ // start with File Name
+ err := parser.parsePairFromFile2_1("FileName", "f1.txt")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // unknown checksum type
+ err = parser.parsePairFromFile2_1("FileChecksum", "Special: 85ed0817af83a24ad8da68c2b5094de69833983c")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsIfArtifactHomePageBeforeArtifactName(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psFile2_1,
+ pkg: &spdx.Package2_1{PackageName: "test", PackageSPDXIdentifier: "test", Files: map[spdx.ElementID]*spdx.File2_1{}},
+ }
+ parser.doc.Packages["test"] = parser.pkg
+
+ // start with File Name
+ err := parser.parsePairFromFile2_1("FileName", "f1.txt")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // artifact home page appears before artifact name
+ err = parser.parsePairFromFile2_1("ArtifactOfProjectHomePage", "https://example.com")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsIfArtifactURIBeforeArtifactName(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psFile2_1,
+ pkg: &spdx.Package2_1{PackageName: "test", PackageSPDXIdentifier: "test", Files: map[spdx.ElementID]*spdx.File2_1{}},
+ }
+ parser.doc.Packages["test"] = parser.pkg
+
+ // start with File Name
+ err := parser.parsePairFromFile2_1("FileName", "f1.txt")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // artifact home page appears before artifact name
+ err = parser.parsePairFromFile2_1("ArtifactOfProjectURI", "https://example.com")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+
diff --git a/tvloader/parser2v1/parse_package.go b/tvloader/parser2v1/parse_package.go
index 4c908be..b653d9e 100644
--- a/tvloader/parser2v1/parse_package.go
+++ b/tvloader/parser2v1/parse_package.go
@@ -80,7 +80,7 @@ func (parser *tvParser2_1) parsePairFromPackage2_1(tag string, value string) err
case "Organization":
parser.pkg.PackageOriginatorOrganization = subvalue
default:
- return fmt.Errorf("unrecognized PackageSupplier type %v", subkey)
+ return fmt.Errorf("unrecognized PackageOriginator type %v", subkey)
}
case "PackageDownloadLocation":
parser.pkg.PackageDownloadLocation = value
diff --git a/tvloader/parser2v1/parse_package_test.go b/tvloader/parser2v1/parse_package_test.go
index b4b37f6..e6dc5e4 100644
--- a/tvloader/parser2v1/parse_package_test.go
+++ b/tvloader/parser2v1/parse_package_test.go
@@ -808,6 +808,202 @@ func TestParser2_1PackageUnknownTagFails(t *testing.T) {
}
}
+func TestParser2_1FailsIfInvalidSPDXIDInPackageSection(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psPackage2_1,
+ pkg: &spdx.Package2_1{},
+ }
+
+ // start with Package Name
+ err := parser.parsePairFromPackage2_1("PackageName", "p1")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // invalid ID format
+ err = parser.parsePairFromPackage2_1("SPDXID", "whoops")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsIfInvalidPackageSupplierFormat(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psPackage2_1,
+ pkg: &spdx.Package2_1{},
+ }
+
+ // start with Package Name
+ err := parser.parsePairFromPackage2_1("PackageName", "p1")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // invalid supplier format
+ err = parser.parsePairFromPackage2_1("PackageSupplier", "whoops")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsIfUnknownPackageSupplierType(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psPackage2_1,
+ pkg: &spdx.Package2_1{},
+ }
+
+ // start with Package Name
+ err := parser.parsePairFromPackage2_1("PackageName", "p1")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // invalid supplier type
+ err = parser.parsePairFromPackage2_1("PackageSupplier", "whoops: John Doe")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsIfInvalidPackageOriginatorFormat(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psPackage2_1,
+ pkg: &spdx.Package2_1{},
+ }
+
+ // start with Package Name
+ err := parser.parsePairFromPackage2_1("PackageName", "p1")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // invalid originator format
+ err = parser.parsePairFromPackage2_1("PackageOriginator", "whoops")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsIfUnknownPackageOriginatorType(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psPackage2_1,
+ pkg: &spdx.Package2_1{},
+ }
+
+ // start with Package Name
+ err := parser.parsePairFromPackage2_1("PackageName", "p1")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // invalid originator type
+ err = parser.parsePairFromPackage2_1("PackageOriginator", "whoops: John Doe")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1SetsFilesAnalyzedTagsCorrectly(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psPackage2_1,
+ pkg: &spdx.Package2_1{},
+ }
+
+ // start with Package Name
+ err := parser.parsePairFromPackage2_1("PackageName", "p1")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // set tag
+ err = parser.parsePairFromPackage2_1("FilesAnalyzed", "true")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ if parser.pkg.FilesAnalyzed != true {
+ t.Errorf("expected %v, got %v", true, parser.pkg.FilesAnalyzed)
+ }
+ if parser.pkg.IsFilesAnalyzedTagPresent != true {
+ t.Errorf("expected %v, got %v", true, parser.pkg.IsFilesAnalyzedTagPresent)
+ }
+}
+
+func TestParser2_1FailsIfInvalidPackageChecksumFormat(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psPackage2_1,
+ pkg: &spdx.Package2_1{},
+ }
+
+ // start with Package Name
+ err := parser.parsePairFromPackage2_1("PackageName", "p1")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // invalid checksum format
+ err = parser.parsePairFromPackage2_1("PackageChecksum", "whoops")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsIfInvalidPackageChecksumType(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psPackage2_1,
+ pkg: &spdx.Package2_1{},
+ }
+
+ // start with Package Name
+ err := parser.parsePairFromPackage2_1("PackageName", "p1")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // invalid checksum type
+ err = parser.parsePairFromPackage2_1("PackageChecksum", "whoops: blah")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsIfInvalidExternalRefFormat(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psPackage2_1,
+ pkg: &spdx.Package2_1{},
+ }
+
+ // start with Package Name
+ err := parser.parsePairFromPackage2_1("PackageName", "p1")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // invalid external ref format
+ err = parser.parsePairFromPackage2_1("ExternalRef", "whoops")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsIfExternalRefCommentBeforeExternalRef(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psPackage2_1,
+ pkg: &spdx.Package2_1{},
+ }
+
+ // start with Package Name
+ err := parser.parsePairFromPackage2_1("PackageName", "p1")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // external ref comment before external ref
+ err = parser.parsePairFromPackage2_1("ExternalRefComment", "whoops")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
// ===== Helper function tests =====
func TestCanCheckAndExtractExcludesFilenameAndCode(t *testing.T) {
@@ -865,3 +1061,11 @@ func TestCanExtractPackageExternalReferenceWithExtraWhitespace(t *testing.T) {
t.Errorf("expected location %s, got %s", location, gotLocation)
}
}
+
+func TestFailsPackageExternalRefWithInvalidFormat(t *testing.T) {
+ _, _, _, err := extractPackageExternalReference("whoops")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
diff --git a/tvloader/parser2v1/parse_relationship_test.go b/tvloader/parser2v1/parse_relationship_test.go
index ad1dd52..3e5610f 100644
--- a/tvloader/parser2v1/parse_relationship_test.go
+++ b/tvloader/parser2v1/parse_relationship_test.go
@@ -151,3 +151,21 @@ func TestParser2_1InvalidRelationshipTagsInvalidRefIDs(t *testing.T) {
t.Errorf("expected error for missing SPDXRef- prefix, got nil")
}
}
+
+func TestParser2_1FailsToParseUnknownTagInRelationshipSection(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{},
+ st: psCreationInfo2_1,
+ }
+
+ // Relationship
+ err := parser.parsePair2_1("Relationship", "SPDXRef-something CONTAINS DocumentRef-otherdoc:SPDXRef-something-else")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // invalid tag
+ err = parser.parsePairForRelationship2_1("blah", "whoops")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
diff --git a/tvloader/parser2v1/parse_review_test.go b/tvloader/parser2v1/parse_review_test.go
index 6f44ed9..efcde5c 100644
--- a/tvloader/parser2v1/parse_review_test.go
+++ b/tvloader/parser2v1/parse_review_test.go
@@ -362,6 +362,34 @@ func TestParser2_1CanParseReviewerToolTag(t *testing.T) {
}
}
+func TestParser2_1FailsIfReviewerInvalidFormat(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psReview2_1,
+ rev: &spdx.Review2_1{},
+ }
+ parser.doc.Reviews = append(parser.doc.Reviews, parser.rev)
+
+ err := parser.parsePairFromReview2_1("Reviewer", "oops")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsIfReviewerUnknownType(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psReview2_1,
+ rev: &spdx.Review2_1{},
+ }
+ parser.doc.Reviews = append(parser.doc.Reviews, parser.rev)
+
+ err := parser.parsePairFromReview2_1("Reviewer", "whoops: John Doe")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
func TestParser2_1ReviewUnknownTagFails(t *testing.T) {
parser := tvParser2_1{
doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
@@ -384,3 +412,5 @@ func TestParser2_1ReviewUnknownTagFails(t *testing.T) {
t.Errorf("expected error from parsing unknown tag")
}
}
+
+
diff --git a/tvloader/parser2v1/parse_snippet_test.go b/tvloader/parser2v1/parse_snippet_test.go
index 5201a28..a4412df 100644
--- a/tvloader/parser2v1/parse_snippet_test.go
+++ b/tvloader/parser2v1/parse_snippet_test.go
@@ -483,3 +483,107 @@ func TestParser2_1SnippetUnknownTagFails(t *testing.T) {
t.Errorf("expected error from parsing unknown tag")
}
}
+
+func TestParser2_1FailsForInvalidSnippetSPDXID(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psSnippet2_1,
+ pkg: &spdx.Package2_1{PackageName: "package1", PackageSPDXIdentifier: "package1", Files: map[spdx.ElementID]*spdx.File2_1{}},
+ file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}},
+ snippet: &spdx.Snippet2_1{},
+ }
+ parser.doc.Packages["package1"] = parser.pkg
+ parser.pkg.Files["f1"] = parser.file
+
+ // invalid Snippet SPDX Identifier
+ err := parser.parsePairFromSnippet2_1("SnippetSPDXID", "whoops")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsForInvalidSnippetFromFileSPDXID(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psSnippet2_1,
+ pkg: &spdx.Package2_1{PackageName: "package1", PackageSPDXIdentifier: "package1", Files: map[spdx.ElementID]*spdx.File2_1{}},
+ file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}},
+ snippet: &spdx.Snippet2_1{},
+ }
+ parser.doc.Packages["package1"] = parser.pkg
+ parser.pkg.Files["f1"] = parser.file
+
+ // start with Snippet SPDX Identifier
+ err := parser.parsePairFromSnippet2_1("SnippetSPDXID", "SPDXRef-s1")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // invalid From File identifier
+ err = parser.parsePairFromSnippet2_1("SnippetFromFileSPDXID", "whoops")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsForInvalidSnippetByteValues(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psSnippet2_1,
+ pkg: &spdx.Package2_1{PackageName: "package1", PackageSPDXIdentifier: "package1", Files: map[spdx.ElementID]*spdx.File2_1{}},
+ file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}},
+ snippet: &spdx.Snippet2_1{},
+ }
+ parser.doc.Packages["package1"] = parser.pkg
+ parser.pkg.Files["f1"] = parser.file
+
+ // start with Snippet SPDX Identifier
+ err := parser.parsePairFromSnippet2_1("SnippetSPDXID", "SPDXRef-s1")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // invalid byte formats and values
+ err = parser.parsePairFromSnippet2_1("SnippetByteRange", "200 210")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+ err = parser.parsePairFromSnippet2_1("SnippetByteRange", "a:210")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+ err = parser.parsePairFromSnippet2_1("SnippetByteRange", "200:a")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
+func TestParser2_1FailsForInvalidSnippetLineValues(t *testing.T) {
+ parser := tvParser2_1{
+ doc: &spdx.Document2_1{Packages: map[spdx.ElementID]*spdx.Package2_1{}},
+ st: psSnippet2_1,
+ pkg: &spdx.Package2_1{PackageName: "package1", PackageSPDXIdentifier: "package1", Files: map[spdx.ElementID]*spdx.File2_1{}},
+ file: &spdx.File2_1{FileName: "f1.txt", FileSPDXIdentifier: "f1", Snippets: map[spdx.ElementID]*spdx.Snippet2_1{}},
+ snippet: &spdx.Snippet2_1{},
+ }
+ parser.doc.Packages["package1"] = parser.pkg
+ parser.pkg.Files["f1"] = parser.file
+
+ // start with Snippet SPDX Identifier
+ err := parser.parsePairFromSnippet2_1("SnippetSPDXID", "SPDXRef-s1")
+ if err != nil {
+ t.Errorf("expected nil error, got %v", err)
+ }
+ // invalid byte formats and values
+ err = parser.parsePairFromSnippet2_1("SnippetLineRange", "200 210")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+ err = parser.parsePairFromSnippet2_1("SnippetLineRange", "a:210")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+ err = parser.parsePairFromSnippet2_1("SnippetLineRange", "200:a")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
diff --git a/tvloader/parser2v1/parser_test.go b/tvloader/parser2v1/parser_test.go
index 55cb129..543cb8f 100644
--- a/tvloader/parser2v1/parser_test.go
+++ b/tvloader/parser2v1/parser_test.go
@@ -69,3 +69,12 @@ func TestParser2_1StartMovesToCreationInfoStateAfterParsingFirstTag(t *testing.T
t.Errorf("parser is in state %v, expected %v", parser.st, psCreationInfo2_1)
}
}
+
+func TestParser2_1StartFailsToParseIfInInvalidState(t *testing.T) {
+ parser := tvParser2_1{st: psReview2_1}
+ err := parser.parsePairFromStart2_1("SPDXVersion", "SPDX-2.1")
+ if err == nil {
+ t.Errorf("expected non-nil error, got nil")
+ }
+}
+
diff --git a/tvloader/parser2v1/util_test.go b/tvloader/parser2v1/util_test.go
index b6a2fb2..79afc1e 100644
--- a/tvloader/parser2v1/util_test.go
+++ b/tvloader/parser2v1/util_test.go
@@ -38,6 +38,7 @@ func TestCanExtractDocumentAndElementRefsFromID(t *testing.T) {
helperForExtractDocElementID(t, "a:SPDXRef-file1", true, "", "")
helperForExtractDocElementID(t, "file1", true, "", "")
helperForExtractDocElementID(t, "SPDXRef-", true, "", "")
+ helperForExtractDocElementID(t, "SPDXRef-file1:", true, "", "")
// test with invalid ID in another document
helperForExtractDocElementID(t, "DocumentRef-doc2", true, "", "")
helperForExtractDocElementID(t, "DocumentRef-doc2:", true, "", "")
@@ -45,6 +46,8 @@ func TestCanExtractDocumentAndElementRefsFromID(t *testing.T) {
helperForExtractDocElementID(t, "DocumentRef-doc2:a", true, "", "")
helperForExtractDocElementID(t, "DocumentRef-:", true, "", "")
helperForExtractDocElementID(t, "DocumentRef-:SPDXRef-file1", true, "", "")
+ // test with invalid formats
+ helperForExtractDocElementID(t, "DocumentRef-doc2:SPDXRef-file1:file2", true, "", "")
}
func helperForExtractDocElementID(t *testing.T, tst string, wantErr bool, wantDoc string, wantElt string) {
@@ -80,6 +83,7 @@ func TestCanExtractElementRefsOnlyFromID(t *testing.T) {
helperForExtractElementID(t, "a:SPDXRef-file1", true, "")
helperForExtractElementID(t, "file1", true, "")
helperForExtractElementID(t, "SPDXRef-", true, "")
+ helperForExtractElementID(t, "SPDXRef-file1:", true, "")
// test with invalid ID in another document
helperForExtractElementID(t, "DocumentRef-doc2", true, "")
helperForExtractElementID(t, "DocumentRef-doc2:", true, "")