diff options
Diffstat (limited to 'tvloader')
-rw-r--r-- | tvloader/parser2v1/parse_annotation_test.go | 56 | ||||
-rw-r--r-- | tvloader/parser2v1/parse_creation_info_test.go | 11 | ||||
-rw-r--r-- | tvloader/parser2v1/parse_file_test.go | 102 | ||||
-rw-r--r-- | tvloader/parser2v1/parse_package.go | 2 | ||||
-rw-r--r-- | tvloader/parser2v1/parse_package_test.go | 204 | ||||
-rw-r--r-- | tvloader/parser2v1/parse_relationship_test.go | 18 | ||||
-rw-r--r-- | tvloader/parser2v1/parse_review_test.go | 30 | ||||
-rw-r--r-- | tvloader/parser2v1/parse_snippet_test.go | 104 | ||||
-rw-r--r-- | tvloader/parser2v1/parser_test.go | 9 | ||||
-rw-r--r-- | tvloader/parser2v1/util_test.go | 4 |
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, "") |