unplugged-system/external/spdx-tools/tvsaver/saver2v3/save_document_test.go

344 lines
10 KiB
Go

// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
package saver2v3
import (
"bytes"
"testing"
"github.com/spdx/tools-golang/spdx/common"
"github.com/spdx/tools-golang/spdx/v2_3"
)
// ===== entire Document Saver tests =====
func TestSaver2_3DocumentSavesText(t *testing.T) {
// Creation Info section
ci := &v2_3.CreationInfo{
Creators: []common.Creator{
{Creator: "John Doe", CreatorType: "Person"},
},
Created: "2018-10-10T06:20:00Z",
}
// unpackaged files
f1 := &v2_3.File{
FileName: "/tmp/whatever1.txt",
FileSPDXIdentifier: common.ElementID("File1231"),
Checksums: []common.Checksum{{Value: "85ed0817af83a24ad8da68c2b5094de69833983c", Algorithm: common.SHA1}},
LicenseConcluded: "Apache-2.0",
LicenseInfoInFiles: []string{"Apache-2.0"},
FileCopyrightText: "Copyright (c) Jane Doe",
}
f2 := &v2_3.File{
FileName: "/tmp/whatever2.txt",
FileSPDXIdentifier: common.ElementID("File1232"),
Checksums: []common.Checksum{{Value: "85ed0817af83a24ad8da68c2b5094de69833983d", Algorithm: common.SHA1}},
LicenseConcluded: "MIT",
LicenseInfoInFiles: []string{"MIT"},
FileCopyrightText: "Copyright (c) John Doe",
}
unFiles := []*v2_3.File{
f1,
f2,
}
// Package 1: packaged files with snippets
sn1 := &v2_3.Snippet{
SnippetSPDXIdentifier: "Snippet19",
SnippetFromFileSPDXIdentifier: common.MakeDocElementID("", "FileHasSnippets").ElementRefID,
Ranges: []common.SnippetRange{{StartPointer: common.SnippetRangePointer{Offset: 17}, EndPointer: common.SnippetRangePointer{Offset: 209}}},
SnippetLicenseConcluded: "GPL-2.0-or-later",
SnippetCopyrightText: "Copyright (c) John Doe 20x6",
}
sn2 := &v2_3.Snippet{
SnippetSPDXIdentifier: "Snippet20",
SnippetFromFileSPDXIdentifier: common.MakeDocElementID("", "FileHasSnippets").ElementRefID,
Ranges: []common.SnippetRange{{StartPointer: common.SnippetRangePointer{Offset: 268}, EndPointer: common.SnippetRangePointer{Offset: 309}}},
SnippetLicenseConcluded: "WTFPL",
SnippetCopyrightText: "NOASSERTION",
}
f3 := &v2_3.File{
FileName: "/tmp/file-with-snippets.txt",
FileSPDXIdentifier: common.ElementID("FileHasSnippets"),
Checksums: []common.Checksum{{Value: "85ed0817af83a24ad8da68c2b5094de69833983e", Algorithm: common.SHA1}},
LicenseConcluded: "GPL-2.0-or-later AND WTFPL",
LicenseInfoInFiles: []string{
"Apache-2.0",
"GPL-2.0-or-later",
"WTFPL",
},
FileCopyrightText: "Copyright (c) Jane Doe",
Snippets: map[common.ElementID]*v2_3.Snippet{
common.ElementID("Snippet19"): sn1,
common.ElementID("Snippet20"): sn2,
},
}
f4 := &v2_3.File{
FileName: "/tmp/another-file.txt",
FileSPDXIdentifier: common.ElementID("FileAnother"),
Checksums: []common.Checksum{{Value: "85ed0817af83a24ad8da68c2b5094de69833983f", Algorithm: common.SHA1}},
LicenseConcluded: "BSD-3-Clause",
LicenseInfoInFiles: []string{"BSD-3-Clause"},
FileCopyrightText: "Copyright (c) Jane Doe LLC",
}
pkgWith := &v2_3.Package{
PackageName: "p1",
PackageSPDXIdentifier: common.ElementID("p1"),
PackageDownloadLocation: "http://example.com/p1/p1-0.1.0-master.tar.gz",
FilesAnalyzed: true,
IsFilesAnalyzedTagPresent: true,
PackageVerificationCode: &common.PackageVerificationCode{Value: "0123456789abcdef0123456789abcdef01234567"},
PackageLicenseConcluded: "GPL-2.0-or-later AND BSD-3-Clause AND WTFPL",
PackageLicenseInfoFromFiles: []string{
"Apache-2.0",
"GPL-2.0-or-later",
"WTFPL",
"BSD-3-Clause",
},
PackageLicenseDeclared: "Apache-2.0 OR GPL-2.0-or-later",
PackageCopyrightText: "Copyright (c) John Doe, Inc.",
Files: []*v2_3.File{
f3,
f4,
},
}
// Other Licenses 1 and 2
ol1 := &v2_3.OtherLicense{
LicenseIdentifier: "LicenseRef-1",
ExtractedText: `License 1 text
blah blah blah
blah blah blah blah`,
LicenseName: "License 1",
}
ol2 := &v2_3.OtherLicense{
LicenseIdentifier: "LicenseRef-2",
ExtractedText: `License 2 text - this is a license that does some stuff`,
LicenseName: "License 2",
}
// Relationships
rln1 := &v2_3.Relationship{
RefA: common.MakeDocElementID("", "DOCUMENT"),
RefB: common.MakeDocElementID("", "p1"),
Relationship: "DESCRIBES",
}
rln2 := &v2_3.Relationship{
RefA: common.MakeDocElementID("", "DOCUMENT"),
RefB: common.MakeDocElementID("", "File1231"),
Relationship: "DESCRIBES",
}
rln3 := &v2_3.Relationship{
RefA: common.MakeDocElementID("", "DOCUMENT"),
RefB: common.MakeDocElementID("", "File1232"),
Relationship: "DESCRIBES",
}
// Annotations
ann1 := &v2_3.Annotation{
Annotator: common.Annotator{Annotator: "John Doe",
AnnotatorType: "Person"},
AnnotationDate: "2018-10-10T17:52:00Z",
AnnotationType: "REVIEW",
AnnotationSPDXIdentifier: common.MakeDocElementID("", "DOCUMENT"),
AnnotationComment: "This is an annotation about the SPDX document",
}
ann2 := &v2_3.Annotation{
Annotator: common.Annotator{Annotator: "John Doe, Inc.",
AnnotatorType: "Organization"},
AnnotationDate: "2018-10-10T17:52:00Z",
AnnotationType: "REVIEW",
AnnotationSPDXIdentifier: common.MakeDocElementID("", "p1"),
AnnotationComment: "This is an annotation about Package p1",
}
// Reviews
rev1 := &v2_3.Review{
Reviewer: "John Doe",
ReviewerType: "Person",
ReviewDate: "2018-10-14T10:28:00Z",
}
rev2 := &v2_3.Review{
Reviewer: "Jane Doe LLC",
ReviewerType: "Organization",
ReviewDate: "2018-10-14T10:28:00Z",
ReviewComment: "I have reviewed this SPDX document and it is awesome",
}
// now, build the document
doc := &v2_3.Document{
SPDXVersion: "SPDX-2.2",
DataLicense: "CC0-1.0",
SPDXIdentifier: common.ElementID("DOCUMENT"),
DocumentName: "tools-golang-0.0.1.abcdef",
DocumentNamespace: "https://github.com/spdx/spdx-docs/tools-golang/tools-golang-0.0.1.abcdef.whatever",
CreationInfo: ci,
Packages: []*v2_3.Package{
pkgWith,
},
Files: unFiles,
OtherLicenses: []*v2_3.OtherLicense{
ol1,
ol2,
},
Relationships: []*v2_3.Relationship{
rln1,
rln2,
rln3,
},
Annotations: []*v2_3.Annotation{
ann1,
ann2,
},
Reviews: []*v2_3.Review{
rev1,
rev2,
},
}
want := bytes.NewBufferString(`SPDXVersion: SPDX-2.2
DataLicense: CC0-1.0
SPDXID: SPDXRef-DOCUMENT
DocumentName: tools-golang-0.0.1.abcdef
DocumentNamespace: https://github.com/spdx/spdx-docs/tools-golang/tools-golang-0.0.1.abcdef.whatever
Creator: Person: John Doe
Created: 2018-10-10T06:20:00Z
##### Unpackaged files
FileName: /tmp/whatever1.txt
SPDXID: SPDXRef-File1231
FileChecksum: SHA1: 85ed0817af83a24ad8da68c2b5094de69833983c
LicenseConcluded: Apache-2.0
LicenseInfoInFile: Apache-2.0
FileCopyrightText: Copyright (c) Jane Doe
FileName: /tmp/whatever2.txt
SPDXID: SPDXRef-File1232
FileChecksum: SHA1: 85ed0817af83a24ad8da68c2b5094de69833983d
LicenseConcluded: MIT
LicenseInfoInFile: MIT
FileCopyrightText: Copyright (c) John Doe
##### Package: p1
PackageName: p1
SPDXID: SPDXRef-p1
PackageDownloadLocation: http://example.com/p1/p1-0.1.0-master.tar.gz
FilesAnalyzed: true
PackageVerificationCode: 0123456789abcdef0123456789abcdef01234567
PackageLicenseConcluded: GPL-2.0-or-later AND BSD-3-Clause AND WTFPL
PackageLicenseInfoFromFiles: Apache-2.0
PackageLicenseInfoFromFiles: GPL-2.0-or-later
PackageLicenseInfoFromFiles: WTFPL
PackageLicenseInfoFromFiles: BSD-3-Clause
PackageLicenseDeclared: Apache-2.0 OR GPL-2.0-or-later
PackageCopyrightText: Copyright (c) John Doe, Inc.
FileName: /tmp/another-file.txt
SPDXID: SPDXRef-FileAnother
FileChecksum: SHA1: 85ed0817af83a24ad8da68c2b5094de69833983f
LicenseConcluded: BSD-3-Clause
LicenseInfoInFile: BSD-3-Clause
FileCopyrightText: Copyright (c) Jane Doe LLC
FileName: /tmp/file-with-snippets.txt
SPDXID: SPDXRef-FileHasSnippets
FileChecksum: SHA1: 85ed0817af83a24ad8da68c2b5094de69833983e
LicenseConcluded: GPL-2.0-or-later AND WTFPL
LicenseInfoInFile: Apache-2.0
LicenseInfoInFile: GPL-2.0-or-later
LicenseInfoInFile: WTFPL
FileCopyrightText: Copyright (c) Jane Doe
SnippetSPDXID: SPDXRef-Snippet19
SnippetFromFileSPDXID: SPDXRef-FileHasSnippets
SnippetByteRange: 17:209
SnippetLicenseConcluded: GPL-2.0-or-later
SnippetCopyrightText: Copyright (c) John Doe 20x6
SnippetSPDXID: SPDXRef-Snippet20
SnippetFromFileSPDXID: SPDXRef-FileHasSnippets
SnippetByteRange: 268:309
SnippetLicenseConcluded: WTFPL
SnippetCopyrightText: NOASSERTION
##### Other Licenses
LicenseID: LicenseRef-1
ExtractedText: <text>License 1 text
blah blah blah
blah blah blah blah</text>
LicenseName: License 1
LicenseID: LicenseRef-2
ExtractedText: License 2 text - this is a license that does some stuff
LicenseName: License 2
##### Relationships
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-p1
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-File1231
Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-File1232
##### Annotations
Annotator: Person: John Doe
AnnotationDate: 2018-10-10T17:52:00Z
AnnotationType: REVIEW
SPDXREF: SPDXRef-DOCUMENT
AnnotationComment: This is an annotation about the SPDX document
Annotator: Organization: John Doe, Inc.
AnnotationDate: 2018-10-10T17:52:00Z
AnnotationType: REVIEW
SPDXREF: SPDXRef-p1
AnnotationComment: This is an annotation about Package p1
##### Reviews
Reviewer: Person: John Doe
ReviewDate: 2018-10-14T10:28:00Z
Reviewer: Organization: Jane Doe LLC
ReviewDate: 2018-10-14T10:28:00Z
ReviewComment: I have reviewed this SPDX document and it is awesome
`)
// render as buffer of bytes
var got bytes.Buffer
err := RenderDocument2_3(doc, &got)
if err != nil {
t.Errorf("Expected nil error, got %v", err)
}
// check that they match
c := bytes.Compare(want.Bytes(), got.Bytes())
if c != 0 {
t.Errorf("Expected {{{%v}}}, got {{{%v}}}", want.String(), got.String())
}
}
func TestSaver2_3DocumentReturnsErrorIfNilCreationInfo(t *testing.T) {
doc := &v2_3.Document{}
var got bytes.Buffer
err := RenderDocument2_3(doc, &got)
if err == nil {
t.Errorf("Expected error, got nil")
}
}