diff --git a/tools/compliance/Android.bp b/tools/compliance/Android.bp index f85a46f6c2..8e13f2f661 100644 --- a/tools/compliance/Android.bp +++ b/tools/compliance/Android.bp @@ -138,10 +138,6 @@ blueprint_go_binary { "compliance-module", "blueprint-deptools", "soong-response", - "spdx-tools-spdxv2_2", - "spdx-tools-builder2v2", - "spdx-tools-spdxcommon", - "spdx-tools-spdx-json", ], testSrcs: ["cmd/sbom/sbom_test.go"], } diff --git a/tools/compliance/cmd/sbom/sbom.go b/tools/compliance/cmd/sbom/sbom.go index eddcd8b71b..0f8a876f24 100644 --- a/tools/compliance/cmd/sbom/sbom.go +++ b/tools/compliance/cmd/sbom/sbom.go @@ -31,21 +31,13 @@ import ( "android/soong/tools/compliance/projectmetadata" "github.com/google/blueprint/deptools" - - "github.com/spdx/tools-golang/builder/builder2v2" - "github.com/spdx/tools-golang/json" - "github.com/spdx/tools-golang/spdx/common" - spdx "github.com/spdx/tools-golang/spdx/v2_2" ) var ( failNoneRequested = fmt.Errorf("\nNo license metadata files requested") failNoLicenses = fmt.Errorf("No licenses found") - mainPkgName = flag.String("main_package_name", "", "The name of the first target node in the licensegraph") ) -const NOASSERTION = "NOASSERTION" - type context struct { stdout io.Writer stderr io.Writer @@ -162,8 +154,7 @@ Options: ctx := &context{ofile, os.Stderr, compliance.FS, *product, *stripPrefix, actualTime} - spdxDoc, deps, err := sbomGenerator(ctx, flags.Args()...) - + deps, err := sbomGenerator(ctx, flags.Args()...) if err != nil { if err == failNoneRequested { flags.Usage() @@ -172,11 +163,6 @@ Options: os.Exit(1) } - if err := spdx_json.Save2_2(spdxDoc, ofile); err != nil { - fmt.Fprintf(os.Stderr, "failed to write document to %v: %v", *outputFile, err) - os.Exit(1) - } - if *outputFile != "-" { err := os.WriteFile(*outputFile, obuf.Bytes(), 0666) if err != nil { @@ -232,17 +218,17 @@ func getDocumentName(ctx *context, tn *compliance.TargetNode, pm *projectmetadat // or NOASSERTION if not available, none determined or ambiguous func getDownloadUrl(_ *context, pm *projectmetadata.ProjectMetadata) string { if pm == nil { - return NOASSERTION + return "NOASSERTION" } urlsByTypeName := pm.UrlsByTypeName() if urlsByTypeName == nil { - return NOASSERTION + return "NOASSERTION" } url := urlsByTypeName.DownloadUrl() if url == "" { - return NOASSERTION + return "NOASSERTION" } return url } @@ -288,7 +274,7 @@ func getProjectMetadata(_ *context, pmix *projectmetadata.Index, // inputFiles returns the complete list of files read func inputFiles(lg *compliance.LicenseGraph, pmix *projectmetadata.Index, licenseTexts []string) []string { projectMeta := pmix.AllMetadataFiles() - targets := lg.TargetNames() + targets := lg.TargetNames() files := make([]string, 0, len(licenseTexts)+len(targets)+len(projectMeta)) files = append(files, licenseTexts...) files = append(files, targets...) @@ -303,10 +289,10 @@ func inputFiles(lg *compliance.LicenseGraph, pmix *projectmetadata.Index, licens // sbomGenerator uses the SPDX standard, see the SPDX specification (https://spdx.github.io/spdx-spec/) // sbomGenerator is also following the internal google SBOM styleguide (http://goto.google.com/spdx-style-guide) -func sbomGenerator(ctx *context, files ...string) (*spdx.Document, []string, error) { +func sbomGenerator(ctx *context, files ...string) ([]string, error) { // Must be at least one root file. if len(files) < 1 { - return nil, nil, failNoneRequested + return nil, failNoneRequested } pmix := projectmetadata.NewIndex(ctx.rootFS) @@ -314,18 +300,9 @@ func sbomGenerator(ctx *context, files ...string) (*spdx.Document, []string, err lg, err := compliance.ReadLicenseGraph(ctx.rootFS, ctx.stderr, files) if err != nil { - return nil, nil, fmt.Errorf("Unable to read license text file(s) for %q: %v\n", files, err) + return nil, fmt.Errorf("Unable to read license text file(s) for %q: %v\n", files, err) } - // creating the packages section - pkgs := []*spdx.Package{} - - // creating the relationship section - relationships := []*spdx.Relationship{} - - // creating the license section - otherLicenses := []*spdx.OtherLicense{} - // implementing the licenses references for the packages licenses := make(map[string]string) concludedLicenses := func(licenseTexts []string) string { @@ -348,6 +325,7 @@ func sbomGenerator(ctx *context, files ...string) (*spdx.Document, []string, err } isMainPackage := true + var mainPackage string visitedNodes := make(map[*compliance.TargetNode]struct{}) // performing a Breadth-first top down walk of licensegraph and building package information @@ -363,50 +341,45 @@ func sbomGenerator(ctx *context, files ...string) (*spdx.Document, []string, err } if isMainPackage { - *mainPkgName = replaceSlashes(getPackageName(ctx, tn)) + mainPackage = getDocumentName(ctx, tn, pm) + fmt.Fprintf(ctx.stdout, "SPDXVersion: SPDX-2.2\n") + fmt.Fprintf(ctx.stdout, "DataLicense: CC0-1.0\n") + fmt.Fprintf(ctx.stdout, "DocumentName: %s\n", mainPackage) + fmt.Fprintf(ctx.stdout, "SPDXID: SPDXRef-DOCUMENT\n") + fmt.Fprintf(ctx.stdout, "DocumentNamespace: Android\n") + fmt.Fprintf(ctx.stdout, "Creator: Organization: Google LLC\n") + fmt.Fprintf(ctx.stdout, "Created: %s\n", ctx.creationTime().Format("2006-01-02T15:04:05Z")) isMainPackage = false } - if len(path) == 0 { - // Add the describe relationship for the main package - rln := &spdx.Relationship{ - RefA: common.MakeDocElementID("" /* this document */, "DOCUMENT"), - RefB: common.MakeDocElementID("", *mainPkgName), - Relationship: "DESCRIBES", + relationships := make([]string, 0, 1) + defer func() { + if r := recover(); r != nil { + panic(r) } - relationships = append(relationships, rln) - + for _, relationship := range relationships { + fmt.Fprintln(ctx.stdout, relationship) + } + }() + if len(path) == 0 { + relationships = append(relationships, + fmt.Sprintf("Relationship: SPDXRef-DOCUMENT DESCRIBES SPDXRef-Package-%s", + getPackageName(ctx, tn))) } else { // Check parent and identify annotation parent := path[len(path)-1] targetEdge := parent.Edge() if targetEdge.IsRuntimeDependency() { // Adding the dynamic link annotation RUNTIME_DEPENDENCY_OF relationship - rln := &spdx.Relationship{ - RefA: common.MakeDocElementID("", replaceSlashes(getPackageName(ctx, tn))), - RefB: common.MakeDocElementID("", replaceSlashes(getPackageName(ctx, targetEdge.Target()))), - Relationship: "RUNTIME_DEPENDENCY_OF", - } - relationships = append(relationships, rln) + relationships = append(relationships, fmt.Sprintf("Relationship: SPDXRef-Package-%s RUNTIME_DEPENDENCY_OF SPDXRef-Package-%s", getPackageName(ctx, tn), getPackageName(ctx, targetEdge.Target()))) } else if targetEdge.IsDerivation() { // Adding the derivation annotation as a CONTAINS relationship - rln := &spdx.Relationship{ - RefA: common.MakeDocElementID("", replaceSlashes(getPackageName(ctx, targetEdge.Target()))), - RefB: common.MakeDocElementID("", replaceSlashes(getPackageName(ctx, tn))), - Relationship: "CONTAINS", - } - relationships = append(relationships, rln) + relationships = append(relationships, fmt.Sprintf("Relationship: SPDXRef-Package-%s CONTAINS SPDXRef-Package-%s", getPackageName(ctx, targetEdge.Target()), getPackageName(ctx, tn))) } else if targetEdge.IsBuildTool() { // Adding the toolchain annotation as a BUILD_TOOL_OF relationship - rln := &spdx.Relationship{ - RefA: common.MakeDocElementID("", replaceSlashes(getPackageName(ctx, tn))), - RefB: common.MakeDocElementID("", replaceSlashes(getPackageName(ctx, targetEdge.Target()))), - Relationship: "BUILD_TOOL_OF", - } - relationships = append(relationships, rln) - + relationships = append(relationships, fmt.Sprintf("Relationship: SPDXRef-Package-%s BUILD_TOOL_OF SPDXRef-Package-%s", getPackageName(ctx, tn), getPackageName(ctx, targetEdge.Target()))) } else { panic(fmt.Errorf("Unknown dependency type: %v", targetEdge.Annotations())) } @@ -417,27 +390,18 @@ func sbomGenerator(ctx *context, files ...string) (*spdx.Document, []string, err } visitedNodes[tn] = struct{}{} pkgName := getPackageName(ctx, tn) - - // Making an spdx package and adding it to pkgs - pkg := &spdx.Package{ - PackageName: replaceSlashes(pkgName), - PackageDownloadLocation: getDownloadUrl(ctx, pm), - PackageSPDXIdentifier: common.ElementID(replaceSlashes(pkgName)), - PackageLicenseConcluded: concludedLicenses(tn.LicenseTexts()), - } - + fmt.Fprintf(ctx.stdout, "##### Package: %s\n", strings.Replace(pkgName, "-", "/", -2)) + fmt.Fprintf(ctx.stdout, "PackageName: %s\n", pkgName) if pm != nil && pm.Version() != "" { - pkg.PackageVersion = pm.Version() - } else { - pkg.PackageVersion = NOASSERTION + fmt.Fprintf(ctx.stdout, "PackageVersion: %s\n", pm.Version()) } - - pkgs = append(pkgs, pkg) - + fmt.Fprintf(ctx.stdout, "SPDXID: SPDXRef-Package-%s\n", pkgName) + fmt.Fprintf(ctx.stdout, "PackageDownloadLocation: %s\n", getDownloadUrl(ctx, pm)) + fmt.Fprintf(ctx.stdout, "PackageLicenseConcluded: %s\n", concludedLicenses(tn.LicenseTexts())) return true }) - // Adding Non-standard licenses + fmt.Fprintf(ctx.stdout, "##### Non-standard license:\n") licenseTexts := make([]string, 0, len(licenses)) @@ -448,39 +412,23 @@ func sbomGenerator(ctx *context, files ...string) (*spdx.Document, []string, err sort.Strings(licenseTexts) for _, licenseText := range licenseTexts { + fmt.Fprintf(ctx.stdout, "LicenseID: %s\n", licenses[licenseText]) // open the file f, err := ctx.rootFS.Open(filepath.Clean(licenseText)) if err != nil { - return nil, nil, fmt.Errorf("error opening license text file %q: %w", licenseText, err) + return nil, fmt.Errorf("error opening license text file %q: %w", licenseText, err) } // read the file text, err := io.ReadAll(f) if err != nil { - return nil, nil, fmt.Errorf("error reading license text file %q: %w", licenseText, err) + return nil, fmt.Errorf("error reading license text file %q: %w", licenseText, err) } - // Making an spdx License and adding it to otherLicenses - otherLicenses = append(otherLicenses, &spdx.OtherLicense{ - LicenseName: strings.Replace(licenses[licenseText], "LicenseRef-", "", -1), - LicenseIdentifier: string(licenses[licenseText]), - ExtractedText: string(text), - }) + // adding the extracted license text + fmt.Fprintf(ctx.stdout, "ExtractedText: %v\n", string(text)) } deps := inputFiles(lg, pmix, licenseTexts) sort.Strings(deps) - - // Making the SPDX doc - ci, err := builder2v2.BuildCreationInfoSection2_2("Organization", "Google LLC", nil) - if err != nil { - return nil, nil, fmt.Errorf("Unable to build creation info section for SPDX doc: %v\n", err) - } - - return &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: ci, - Packages: pkgs, - Relationships: relationships, - OtherLicenses: otherLicenses, - }, deps, nil + return deps, nil } diff --git a/tools/compliance/cmd/sbom/sbom_test.go b/tools/compliance/cmd/sbom/sbom_test.go index cc8805f927..6df74e2dcc 100644 --- a/tools/compliance/cmd/sbom/sbom_test.go +++ b/tools/compliance/cmd/sbom/sbom_test.go @@ -15,19 +15,37 @@ package main import ( + "bufio" "bytes" - "encoding/json" "fmt" "os" "reflect" + "regexp" "strings" "testing" "time" "android/soong/tools/compliance" - "github.com/spdx/tools-golang/builder/builder2v2" - "github.com/spdx/tools-golang/spdx/common" - spdx "github.com/spdx/tools-golang/spdx/v2_2" +) + +var ( + spdxVersionTag = regexp.MustCompile(`^\s*SPDXVersion: SPDX-2.2\s*$`) + spdxDataLicenseTag = regexp.MustCompile(`^\s*DataLicense: CC0-1.0\s*$`) + spdxDocumentNameTag = regexp.MustCompile(`^\s*DocumentName:\s*Android*\s*$`) + spdxIDTag = regexp.MustCompile(`^\s*SPDXID:\s*SPDXRef-DOCUMENT\s*$`) + spdxDocumentNameSpaceTag = regexp.MustCompile(`^\s*DocumentNamespace:\s*Android\s*$`) + spdxCreatorOrganizationTag = regexp.MustCompile(`^\s*Creator:\s*Organization:\s*Google LLC\s*$`) + spdxCreatedTimeTag = regexp.MustCompile(`^\s*Created: 1970-01-01T00:00:00Z\s*$`) + spdxPackageTag = regexp.MustCompile(`^\s*#####\s*Package:\s*(.*)\s*$`) + spdxPackageNameTag = regexp.MustCompile(`^\s*PackageName:\s*(.*)\s*$`) + spdxPkgIDTag = regexp.MustCompile(`^\s*SPDXID:\s*SPDXRef-Package-(.*)\s*$`) + spdxPkgDownloadLocationTag = regexp.MustCompile(`^\s*PackageDownloadLocation:\s*NOASSERTION\s*$`) + spdxPkgLicenseDeclaredTag = regexp.MustCompile(`^\s*PackageLicenseConcluded:\s*LicenseRef-(.*)\s*$`) + spdxRelationshipTag = regexp.MustCompile(`^\s*Relationship:\s*SPDXRef-(.*)\s*(DESCRIBES|CONTAINS|BUILD_TOOL_OF|RUNTIME_DEPENDENCY_OF)\s*SPDXRef-Package-(.*)\s*$`) + spdxLicenseTag = regexp.MustCompile(`^\s*##### Non-standard license:\s*$`) + spdxLicenseIDTag = regexp.MustCompile(`^\s*LicenseID: LicenseRef-(.*)\s*$`) + spdxExtractedTextTag = regexp.MustCompile(`^\s*ExtractedText:\s*(.*)\s*$`) + spdxExtractedClosingTextTag = regexp.MustCompile(`^\s*\s*$`) ) func TestMain(m *testing.M) { @@ -47,121 +65,69 @@ func Test(t *testing.T) { outDir string roots []string stripPrefix string - expectedOut *spdx.Document + expectedOut []matcher expectedDeps []string }{ { condition: "firstparty", name: "apex", roots: []string{"highest.apex.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-firstparty-highest.apex.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-highest.apex.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-bin-bin1.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-bin-bin1.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-bin-bin2.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-bin-bin2.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-lib-libb.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libb.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-lib-libc.a.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libc.a.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-lib-libd.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libd.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-firstparty-highest.apex.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin2.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-lib-libb.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-lib-libc.a.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-lib-libb.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-lib-libd.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/firstparty/highest.apex.meta_lic"}, + packageName{"testdata/firstparty/highest.apex.meta_lic"}, + spdxPkgID{"testdata/firstparty/highest.apex.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata-firstparty-highest.apex.meta_lic", "DESCRIBES"}, + packageTag{"testdata/firstparty/bin/bin1.meta_lic"}, + packageName{"testdata/firstparty/bin/bin1.meta_lic"}, + spdxPkgID{"testdata/firstparty/bin/bin1.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/firstparty/highest.apex.meta_lic ", "testdata/firstparty/bin/bin1.meta_lic", "CONTAINS"}, + packageTag{"testdata/firstparty/bin/bin2.meta_lic"}, + packageName{"testdata/firstparty/bin/bin2.meta_lic"}, + spdxPkgID{"testdata/firstparty/bin/bin2.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/firstparty/highest.apex.meta_lic ", "testdata-firstparty-bin-bin2.meta_lic", "CONTAINS"}, + packageTag{"testdata/firstparty/lib/liba.so.meta_lic"}, + packageName{"testdata/firstparty/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/firstparty/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/firstparty/highest.apex.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/firstparty/lib/libb.so.meta_lic"}, + packageName{"testdata/firstparty/lib/libb.so.meta_lic"}, + spdxPkgID{"testdata/firstparty/lib/libb.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/firstparty/highest.apex.meta_lic ", "testdata/firstparty/lib/libb.so.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/firstparty/bin/bin1.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/firstparty/lib/libc.a.meta_lic"}, + packageName{"testdata/firstparty/lib/libc.a.meta_lic"}, + spdxPkgID{"testdata/firstparty/lib/libc.a.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata-firstparty-bin-bin1.meta_lic ", "testdata/firstparty/lib/libc.a.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/firstparty/lib/libb.so.meta_lic ", "testdata/firstparty/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + packageTag{"testdata/firstparty/lib/libd.so.meta_lic"}, + packageName{"testdata/firstparty/lib/libd.so.meta_lic"}, + spdxPkgID{"testdata/firstparty/lib/libd.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/firstparty/lib/libd.so.meta_lic ", "testdata/firstparty/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -178,68 +144,42 @@ func Test(t *testing.T) { condition: "firstparty", name: "application", roots: []string{"application.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-firstparty-application.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-application.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-bin-bin3.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-bin-bin3.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-lib-libb.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libb.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-firstparty-application.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-bin-bin3.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-application.meta_lic"), - Relationship: "BUILD_TOOL_OF", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-application.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-lib-libb.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-application.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/firstparty/application.meta_lic"}, + packageName{"testdata/firstparty/application.meta_lic"}, + spdxPkgID{"testdata/firstparty/application.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/firstparty/application.meta_lic", "DESCRIBES"}, + packageTag{"testdata/firstparty/bin/bin3.meta_lic"}, + packageName{"testdata/firstparty/bin/bin3.meta_lic"}, + spdxPkgID{"testdata/firstparty/bin/bin3.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/firstparty/bin/bin3.meta_lic ", "testdata-firstparty-application.meta_lic", "BUILD_TOOL_OF"}, + packageTag{"testdata/firstparty/lib/liba.so.meta_lic"}, + packageName{"testdata/firstparty/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/firstparty/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/firstparty/application.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/firstparty/lib/libb.so.meta_lic"}, + packageName{"testdata/firstparty/lib/libb.so.meta_lic"}, + spdxPkgID{"testdata/firstparty/lib/libb.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/firstparty/lib/libb.so.meta_lic ", "testdata-firstparty-application.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -253,114 +193,62 @@ func Test(t *testing.T) { condition: "firstparty", name: "container", roots: []string{"container.zip.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-firstparty-container.zip.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-container.zip.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-bin-bin1.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-bin-bin1.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-bin-bin2.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-bin-bin2.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-lib-libb.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libb.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-lib-libc.a.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libc.a.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-lib-libd.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libd.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-firstparty-container.zip.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-container.zip.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-container.zip.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin2.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-container.zip.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-container.zip.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-lib-libb.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-lib-libc.a.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-lib-libb.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-lib-libd.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/firstparty/container.zip.meta_lic"}, + packageName{"testdata/firstparty/container.zip.meta_lic"}, + spdxPkgID{"testdata/firstparty/container.zip.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/firstparty/container.zip.meta_lic", "DESCRIBES"}, + packageTag{"testdata/firstparty/bin/bin1.meta_lic"}, + packageName{"testdata/firstparty/bin/bin1.meta_lic"}, + spdxPkgID{"testdata/firstparty/bin/bin1.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/firstparty/container.zip.meta_lic ", "testdata/firstparty/bin/bin1.meta_lic", "CONTAINS"}, + packageTag{"testdata/firstparty/bin/bin2.meta_lic"}, + packageName{"testdata/firstparty/bin/bin2.meta_lic"}, + spdxPkgID{"testdata/firstparty/bin/bin2.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/firstparty/container.zip.meta_lic ", "testdata/firstparty/bin/bin2.meta_lic", "CONTAINS"}, + packageTag{"testdata/firstparty/lib/liba.so.meta_lic"}, + packageName{"testdata/firstparty/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/firstparty/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/firstparty/container.zip.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/firstparty/lib/libb.so.meta_lic"}, + packageName{"testdata/firstparty/lib/libb.so.meta_lic"}, + spdxPkgID{"testdata/firstparty/lib/libb.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/firstparty/container.zip.meta_lic ", "testdata/firstparty/lib/libb.so.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/firstparty/bin/bin1.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/firstparty/lib/libc.a.meta_lic"}, + packageName{"testdata/firstparty/lib/libc.a.meta_lic"}, + spdxPkgID{"testdata/firstparty/lib/libc.a.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/firstparty/bin/bin1.meta_lic ", "testdata/firstparty/lib/libc.a.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/firstparty/lib/libb.so.meta_lic ", "testdata/firstparty/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + packageTag{"testdata/firstparty/lib/libd.so.meta_lic"}, + packageName{"testdata/firstparty/lib/libd.so.meta_lic"}, + spdxPkgID{"testdata/firstparty/lib/libd.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/firstparty/lib/libd.so.meta_lic ", "testdata/firstparty/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -377,56 +265,36 @@ func Test(t *testing.T) { condition: "firstparty", name: "binary", roots: []string{"bin/bin1.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-firstparty-bin-bin1.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-bin-bin1.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-firstparty-lib-libc.a.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libc.a.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-firstparty-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-firstparty-lib-libc.a.meta_lic"), - Relationship: "CONTAINS", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/firstparty/bin/bin1.meta_lic"}, + packageName{"testdata/firstparty/bin/bin1.meta_lic"}, + spdxPkgID{"testdata/firstparty/bin/bin1.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/firstparty/bin/bin1.meta_lic", "DESCRIBES"}, + packageTag{"testdata/firstparty/lib/liba.so.meta_lic"}, + packageName{"testdata/firstparty/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/firstparty/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/firstparty/bin/bin1.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/firstparty/lib/libc.a.meta_lic"}, + packageName{"testdata/firstparty/lib/libc.a.meta_lic"}, + spdxPkgID{"testdata/firstparty/lib/libc.a.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/firstparty/bin/bin1.meta_lic ", "testdata/firstparty/lib/libc.a.meta_lic", "CONTAINS"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -439,32 +307,24 @@ func Test(t *testing.T) { condition: "firstparty", name: "library", roots: []string{"lib/libd.so.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-firstparty-lib-libd.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-firstparty-lib-libd.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-firstparty-lib-libd.so.meta_lic"), - Relationship: "DESCRIBES", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/firstparty/lib/libd.so.meta_lic"}, + packageName{"testdata/firstparty/lib/libd.so.meta_lic"}, + spdxPkgID{"testdata/firstparty/lib/libd.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/firstparty/lib/libd.so.meta_lic", "DESCRIBES"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -475,119 +335,65 @@ func Test(t *testing.T) { condition: "notice", name: "apex", roots: []string{"highest.apex.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-notice-highest.apex.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-highest.apex.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-notice-bin-bin1.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-bin-bin1.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-notice-bin-bin2.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-bin-bin2.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-notice-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - { - PackageName: "testdata-notice-lib-libb.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libb.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-notice-lib-libc.a.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libc.a.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - { - PackageName: "testdata-notice-lib-libd.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libd.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-notice-highest.apex.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-bin-bin2.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-lib-libb.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-lib-libc.a.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-lib-libb.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-lib-libd.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE", - ExtractedText: "%%%Notice License%%%\n", - LicenseName: "testdata-notice-NOTICE_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/notice/highest.apex.meta_lic"}, + packageName{"testdata/notice/highest.apex.meta_lic"}, + spdxPkgID{"testdata/notice/highest.apex.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/notice/highest.apex.meta_lic", "DESCRIBES"}, + packageTag{"testdata/notice/bin/bin1.meta_lic"}, + packageName{"testdata/notice/bin/bin1.meta_lic"}, + spdxPkgID{"testdata/notice/bin/bin1.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/notice/highest.apex.meta_lic ", "testdata/notice/bin/bin1.meta_lic", "CONTAINS"}, + packageTag{"testdata/notice/bin/bin2.meta_lic"}, + packageName{"testdata/notice/bin/bin2.meta_lic"}, + spdxPkgID{"testdata/notice/bin/bin2.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/notice/highest.apex.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "CONTAINS"}, + packageTag{"testdata/notice/lib/liba.so.meta_lic"}, + packageName{"testdata/notice/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/notice/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata/notice/highest.apex.meta_lic ", "testdata/notice/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/notice/lib/libb.so.meta_lic"}, + packageName{"testdata/notice/lib/libb.so.meta_lic"}, + spdxPkgID{"testdata/notice/lib/libb.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/notice/highest.apex.meta_lic ", "testdata/notice/lib/libb.so.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/notice/lib/libc.a.meta_lic"}, + packageName{"testdata/notice/lib/libc.a.meta_lic"}, + spdxPkgID{"testdata/notice/lib/libc.a.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/libc.a.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/notice/lib/libb.so.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + packageTag{"testdata/notice/lib/libd.so.meta_lic"}, + packageName{"testdata/notice/lib/libd.so.meta_lic"}, + spdxPkgID{"testdata/notice/lib/libd.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata/notice/lib/libd.so.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-notice-NOTICE_LICENSE"}, + spdxExtractedText{"%%%Notice License%%%"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -605,119 +411,65 @@ func Test(t *testing.T) { condition: "notice", name: "container", roots: []string{"container.zip.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-notice-container.zip.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-container.zip.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-notice-bin-bin1.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-bin-bin1.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-notice-bin-bin2.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-bin-bin2.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-notice-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - { - PackageName: "testdata-notice-lib-libb.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libb.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-notice-lib-libc.a.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libc.a.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - { - PackageName: "testdata-notice-lib-libd.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libd.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-notice-container.zip.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-container.zip.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-container.zip.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-bin-bin2.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-container.zip.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-container.zip.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-lib-libb.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-lib-libc.a.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-lib-libb.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-lib-libd.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE", - ExtractedText: "%%%Notice License%%%\n", - LicenseName: "testdata-notice-NOTICE_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/notice/container.zip.meta_lic"}, + packageName{"testdata/notice/container.zip.meta_lic"}, + spdxPkgID{"testdata/notice/container.zip.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/notice/container.zip.meta_lic", "DESCRIBES"}, + packageTag{"testdata/notice/bin/bin1.meta_lic"}, + packageName{"testdata/notice/bin/bin1.meta_lic"}, + spdxPkgID{"testdata/notice/bin/bin1.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/notice/container.zip.meta_lic ", "testdata/notice/bin/bin1.meta_lic", "CONTAINS"}, + packageTag{"testdata/notice/bin/bin2.meta_lic"}, + packageName{"testdata/notice/bin/bin2.meta_lic"}, + spdxPkgID{"testdata/notice/bin/bin2.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/notice/container.zip.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "CONTAINS"}, + packageTag{"testdata/notice/lib/liba.so.meta_lic"}, + packageName{"testdata/notice/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/notice/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata/notice/container.zip.meta_lic ", "testdata/notice/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/notice/lib/libb.so.meta_lic"}, + packageName{"testdata/notice/lib/libb.so.meta_lic"}, + spdxPkgID{"testdata/notice/lib/libb.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/notice/container.zip.meta_lic ", "testdata/notice/lib/libb.so.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/notice/lib/libc.a.meta_lic"}, + packageName{"testdata/notice/lib/libc.a.meta_lic"}, + spdxPkgID{"testdata/notice/lib/libc.a.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/libc.a.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/notice/lib/libb.so.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + packageTag{"testdata/notice/lib/libd.so.meta_lic"}, + packageName{"testdata/notice/lib/libd.so.meta_lic"}, + spdxPkgID{"testdata/notice/lib/libd.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata/notice/lib/libd.so.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-notice-NOTICE_LICENSE"}, + spdxExtractedText{"%%%Notice License%%%"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -735,73 +487,45 @@ func Test(t *testing.T) { condition: "notice", name: "application", roots: []string{"application.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-notice-application.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-application.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-notice-bin-bin3.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-bin-bin3.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - { - PackageName: "testdata-notice-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - { - PackageName: "testdata-notice-lib-libb.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libb.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-notice-application.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-bin-bin3.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-application.meta_lic"), - Relationship: "BUILD_TOOL_OF", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-application.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-lib-libb.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-application.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE", - ExtractedText: "%%%Notice License%%%\n", - LicenseName: "testdata-notice-NOTICE_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/notice/application.meta_lic"}, + packageName{"testdata/notice/application.meta_lic"}, + spdxPkgID{"testdata/notice/application.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata-notice-application.meta_lic", "DESCRIBES"}, + packageTag{"testdata/notice/bin/bin3.meta_lic"}, + packageName{"testdata/notice/bin/bin3.meta_lic"}, + spdxPkgID{"testdata/notice/bin/bin3.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata-notice-bin-bin3.meta_lic ", "testdata/notice/application.meta_lic", "BUILD_TOOL_OF"}, + packageTag{"testdata/notice/lib/liba.so.meta_lic"}, + packageName{"testdata/notice/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/notice/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata/notice/application.meta_lic ", "testdata-notice-lib-liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/notice/lib/libb.so.meta_lic"}, + packageName{"testdata/notice/lib/libb.so.meta_lic"}, + spdxPkgID{"testdata/notice/lib/libb.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata-notice-lib-libb.so.meta_lic ", "testdata/notice/application.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-notice-NOTICE_LICENSE"}, + spdxExtractedText{"%%%Notice License%%%"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -816,61 +540,39 @@ func Test(t *testing.T) { condition: "notice", name: "binary", roots: []string{"bin/bin1.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-notice-bin-bin1.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-bin-bin1.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-notice-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - { - PackageName: "testdata-notice-lib-libc.a.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libc.a.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-notice-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-notice-lib-libc.a.meta_lic"), - Relationship: "CONTAINS", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE", - ExtractedText: "%%%Notice License%%%\n", - LicenseName: "testdata-notice-NOTICE_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/notice/bin/bin1.meta_lic"}, + packageName{"testdata/notice/bin/bin1.meta_lic"}, + spdxPkgID{"testdata/notice/bin/bin1.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/notice/bin/bin1.meta_lic", "DESCRIBES"}, + packageTag{"testdata/notice/lib/liba.so.meta_lic"}, + packageName{"testdata/notice/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/notice/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/notice/lib/libc.a.meta_lic"}, + packageName{"testdata/notice/lib/libc.a.meta_lic"}, + spdxPkgID{"testdata/notice/lib/libc.a.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/libc.a.meta_lic", "CONTAINS"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-notice-NOTICE_LICENSE"}, + spdxExtractedText{"%%%Notice License%%%"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -884,32 +586,24 @@ func Test(t *testing.T) { condition: "notice", name: "library", roots: []string{"lib/libd.so.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-notice-lib-libd.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-notice-lib-libd.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-notice-lib-libd.so.meta_lic"), - Relationship: "DESCRIBES", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE", - ExtractedText: "%%%Notice License%%%\n", - LicenseName: "testdata-notice-NOTICE_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/notice/lib/libd.so.meta_lic"}, + packageName{"testdata/notice/lib/libd.so.meta_lic"}, + spdxPkgID{"testdata/notice/lib/libd.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/notice/lib/libd.so.meta_lic", "DESCRIBES"}, + spdxLicense{}, + spdxLicenseID{"testdata-notice-NOTICE_LICENSE"}, + spdxExtractedText{"%%%Notice License%%%"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/notice/NOTICE_LICENSE", @@ -920,124 +614,68 @@ func Test(t *testing.T) { condition: "reciprocal", name: "apex", roots: []string{"highest.apex.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-reciprocal-highest.apex.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-highest.apex.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-reciprocal-bin-bin1.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-bin-bin1.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-reciprocal-bin-bin2.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-bin-bin2.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-reciprocal-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE", - }, - { - PackageName: "testdata-reciprocal-lib-libb.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-libb.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-reciprocal-lib-libc.a.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-libc.a.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE", - }, - { - PackageName: "testdata-reciprocal-lib-libd.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-libd.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-highest.apex.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-reciprocal-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-bin-bin1.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-reciprocal-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-bin-bin2.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-reciprocal-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-reciprocal-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-lib-libb.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-reciprocal-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-reciprocal-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-lib-libc.a.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-reciprocal-lib-libb.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - { - RefA: common.MakeDocElementID("", "testdata-reciprocal-lib-libd.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE", - ExtractedText: "%%%Notice License%%%\n", - LicenseName: "testdata-notice-NOTICE_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE", - ExtractedText: "$$$Reciprocal License$$$\n", - LicenseName: "testdata-reciprocal-RECIPROCAL_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/reciprocal/highest.apex.meta_lic"}, + packageName{"testdata/reciprocal/highest.apex.meta_lic"}, + spdxPkgID{"testdata/reciprocal/highest.apex.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/reciprocal/highest.apex.meta_lic", "DESCRIBES"}, + packageTag{"testdata/reciprocal/bin/bin1.meta_lic"}, + packageName{"testdata/reciprocal/bin/bin1.meta_lic"}, + spdxPkgID{"testdata/reciprocal/bin/bin1.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/reciprocal/highest.apex.meta_lic ", "testdata-reciprocal-bin-bin1.meta_lic", "CONTAINS"}, + packageTag{"testdata/reciprocal/bin/bin2.meta_lic"}, + packageName{"testdata/reciprocal/bin/bin2.meta_lic"}, + spdxPkgID{"testdata/reciprocal/bin/bin2.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/reciprocal/highest.apex.meta_lic ", "testdata-reciprocal-bin-bin2.meta_lic", "CONTAINS"}, + packageTag{"testdata/reciprocal/lib/liba.so.meta_lic"}, + packageName{"testdata/reciprocal/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/reciprocal/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxRelationship{"Package-testdata/reciprocal/highest.apex.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/reciprocal/lib/libb.so.meta_lic"}, + packageName{"testdata/reciprocal/lib/libb.so.meta_lic"}, + spdxPkgID{"testdata/reciprocal/lib/libb.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/reciprocal/highest.apex.meta_lic ", "testdata/reciprocal/lib/libb.so.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/reciprocal/lib/libc.a.meta_lic"}, + packageName{"testdata/reciprocal/lib/libc.a.meta_lic"}, + spdxPkgID{"testdata/reciprocal/lib/libc.a.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/libc.a.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/reciprocal/lib/libb.so.meta_lic ", "testdata/reciprocal/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + packageTag{"testdata/reciprocal/lib/libd.so.meta_lic"}, + packageName{"testdata/reciprocal/lib/libd.so.meta_lic"}, + spdxPkgID{"testdata/reciprocal/lib/libd.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata/reciprocal/lib/libd.so.meta_lic ", "testdata/reciprocal/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-notice-NOTICE_LICENSE"}, + spdxExtractedText{"%%%Notice License%%%"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxExtractedText{"$$$Reciprocal License$$$"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -1052,82 +690,132 @@ func Test(t *testing.T) { "testdata/reciprocal/lib/libd.so.meta_lic", }, }, + { + condition: "reciprocal", + name: "container", + roots: []string{"container.zip.meta_lic"}, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/reciprocal/container.zip.meta_lic"}, + packageName{"testdata/reciprocal/container.zip.meta_lic"}, + spdxPkgID{"testdata/reciprocal/container.zip.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/reciprocal/container.zip.meta_lic", "DESCRIBES"}, + packageTag{"testdata/reciprocal/bin/bin1.meta_lic"}, + packageName{"testdata/reciprocal/bin/bin1.meta_lic"}, + spdxPkgID{"testdata/reciprocal/bin/bin1.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/reciprocal/container.zip.meta_lic ", "testdata-reciprocal-bin-bin1.meta_lic", "CONTAINS"}, + packageTag{"testdata/reciprocal/bin/bin2.meta_lic"}, + packageName{"testdata/reciprocal/bin/bin2.meta_lic"}, + spdxPkgID{"testdata/reciprocal/bin/bin2.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/reciprocal/container.zip.meta_lic ", "testdata-reciprocal-bin-bin2.meta_lic", "CONTAINS"}, + packageTag{"testdata/reciprocal/lib/liba.so.meta_lic"}, + packageName{"testdata/reciprocal/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/reciprocal/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxRelationship{"Package-testdata/reciprocal/container.zip.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/reciprocal/lib/libb.so.meta_lic"}, + packageName{"testdata/reciprocal/lib/libb.so.meta_lic"}, + spdxPkgID{"testdata/reciprocal/lib/libb.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/reciprocal/container.zip.meta_lic ", "testdata/reciprocal/lib/libb.so.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/reciprocal/lib/libc.a.meta_lic"}, + packageName{"testdata/reciprocal/lib/libc.a.meta_lic"}, + spdxPkgID{"testdata/reciprocal/lib/libc.a.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/libc.a.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/reciprocal/lib/libb.so.meta_lic ", "testdata/reciprocal/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + packageTag{"testdata/reciprocal/lib/libd.so.meta_lic"}, + packageName{"testdata/reciprocal/lib/libd.so.meta_lic"}, + spdxPkgID{"testdata/reciprocal/lib/libd.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata/reciprocal/lib/libd.so.meta_lic ", "testdata/reciprocal/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-notice-NOTICE_LICENSE"}, + spdxExtractedText{"%%%Notice License%%%"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxExtractedText{"$$$Reciprocal License$$$"}, + spdxExtractedClosingText{}, + }, + expectedDeps: []string{ + "testdata/firstparty/FIRST_PARTY_LICENSE", + "testdata/notice/NOTICE_LICENSE", + "testdata/reciprocal/RECIPROCAL_LICENSE", + "testdata/reciprocal/bin/bin1.meta_lic", + "testdata/reciprocal/bin/bin2.meta_lic", + "testdata/reciprocal/container.zip.meta_lic", + "testdata/reciprocal/lib/liba.so.meta_lic", + "testdata/reciprocal/lib/libb.so.meta_lic", + "testdata/reciprocal/lib/libc.a.meta_lic", + "testdata/reciprocal/lib/libd.so.meta_lic", + }, + }, { condition: "reciprocal", name: "application", roots: []string{"application.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-reciprocal-application.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-application.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-reciprocal-bin-bin3.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-bin-bin3.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - { - PackageName: "testdata-reciprocal-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE", - }, - { - PackageName: "testdata-reciprocal-lib-libb.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-libb.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-application.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-reciprocal-bin-bin3.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-application.meta_lic"), - Relationship: "BUILD_TOOL_OF", - }, - { - RefA: common.MakeDocElementID("", "testdata-reciprocal-application.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-reciprocal-lib-libb.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-application.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE", - ExtractedText: "%%%Notice License%%%\n", - LicenseName: "testdata-notice-NOTICE_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE", - ExtractedText: "$$$Reciprocal License$$$\n", - LicenseName: "testdata-reciprocal-RECIPROCAL_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/reciprocal/application.meta_lic"}, + packageName{"testdata/reciprocal/application.meta_lic"}, + spdxPkgID{"testdata/reciprocal/application.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/reciprocal/application.meta_lic", "DESCRIBES"}, + packageTag{"testdata/reciprocal/bin/bin3.meta_lic"}, + packageName{"testdata/reciprocal/bin/bin3.meta_lic"}, + spdxPkgID{"testdata/reciprocal/bin/bin3.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata-reciprocal-bin-bin3.meta_lic ", "testdata/reciprocal/application.meta_lic", "BUILD_TOOL_OF"}, + packageTag{"testdata/reciprocal/lib/liba.so.meta_lic"}, + packageName{"testdata/reciprocal/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/reciprocal/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxRelationship{"Package-testdata/reciprocal/application.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/reciprocal/lib/libb.so.meta_lic"}, + packageName{"testdata/reciprocal/lib/libb.so.meta_lic"}, + spdxPkgID{"testdata/reciprocal/lib/libb.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/reciprocal/lib/libb.so.meta_lic ", "testdata/reciprocal/application.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-notice-NOTICE_LICENSE"}, + spdxExtractedText{"%%%Notice License%%%"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxExtractedText{"$$$Reciprocal License$$$"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -1143,61 +831,39 @@ func Test(t *testing.T) { condition: "reciprocal", name: "binary", roots: []string{"bin/bin1.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-reciprocal-bin-bin1.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-bin-bin1.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-reciprocal-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE", - }, - { - PackageName: "testdata-reciprocal-lib-libc.a.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-libc.a.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-bin-bin1.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-reciprocal-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-reciprocal-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-lib-libc.a.meta_lic"), - Relationship: "CONTAINS", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE", - ExtractedText: "$$$Reciprocal License$$$\n", - LicenseName: "testdata-reciprocal-RECIPROCAL_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/reciprocal/bin/bin1.meta_lic"}, + packageName{"testdata/reciprocal/bin/bin1.meta_lic"}, + spdxPkgID{"testdata/reciprocal/bin/bin1.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/reciprocal/bin/bin1.meta_lic", "DESCRIBES"}, + packageTag{"testdata/reciprocal/lib/liba.so.meta_lic"}, + packageName{"testdata/reciprocal/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/reciprocal/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/reciprocal/lib/libc.a.meta_lic"}, + packageName{"testdata/reciprocal/lib/libc.a.meta_lic"}, + spdxPkgID{"testdata/reciprocal/lib/libc.a.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/libc.a.meta_lic", "CONTAINS"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxExtractedText{"$$$Reciprocal License$$$"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -1211,32 +877,24 @@ func Test(t *testing.T) { condition: "reciprocal", name: "library", roots: []string{"lib/libd.so.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-reciprocal-lib-libd.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-reciprocal-lib-libd.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-reciprocal-lib-libd.so.meta_lic"), - Relationship: "DESCRIBES", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE", - ExtractedText: "%%%Notice License%%%\n", - LicenseName: "testdata-notice-NOTICE_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/reciprocal/lib/libd.so.meta_lic"}, + packageName{"testdata/reciprocal/lib/libd.so.meta_lic"}, + spdxPkgID{"testdata/reciprocal/lib/libd.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/reciprocal/lib/libd.so.meta_lic", "DESCRIBES"}, + spdxLicense{}, + spdxLicenseID{"testdata-notice-NOTICE_LICENSE"}, + spdxExtractedText{"%%%Notice License%%%"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/notice/NOTICE_LICENSE", @@ -1244,132 +902,75 @@ func Test(t *testing.T) { }, }, { - condition: "restricted", - name: "apex", - roots: []string{"highest.apex.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-restricted-highest.apex.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-highest.apex.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-restricted-bin-bin1.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-bin-bin1.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-restricted-bin-bin2.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-bin-bin2.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-restricted-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE", - }, - { - PackageName: "testdata-restricted-lib-libb.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-libb.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE", - }, - { - PackageName: "testdata-restricted-lib-libc.a.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-libc.a.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE", - }, - { - PackageName: "testdata-restricted-lib-libd.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-libd.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-restricted-highest.apex.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin2.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-lib-libb.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-lib-libc.a.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-lib-libb.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-lib-libd.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE", - ExtractedText: "%%%Notice License%%%\n", - LicenseName: "testdata-notice-NOTICE_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE", - ExtractedText: "$$$Reciprocal License$$$\n", - LicenseName: "testdata-reciprocal-RECIPROCAL_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE", - ExtractedText: "###Restricted License###\n", - LicenseName: "testdata-restricted-RESTRICTED_LICENSE", - }, - }, + condition: "restricted", + name: "apex", + roots: []string{"highest.apex.meta_lic"}, + stripPrefix: "out/target/product/fictional/system/apex/", + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/restricted/highest.apex.meta_lic"}, + packageName{"testdata/restricted/highest.apex.meta_lic"}, + spdxPkgID{"testdata/restricted/highest.apex.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/restricted/highest.apex.meta_lic", "DESCRIBES"}, + packageTag{"testdata/restricted/bin/bin1.meta_lic"}, + packageName{"testdata/restricted/bin/bin1.meta_lic"}, + spdxPkgID{"testdata/restricted/bin/bin1.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/restricted/highest.apex.meta_lic ", "testdata/restricted/bin/bin1.meta_lic", "CONTAINS"}, + packageTag{"testdata/restricted/bin/bin2.meta_lic"}, + packageName{"testdata/restricted/bin/bin2.meta_lic"}, + spdxPkgID{"testdata/restricted/bin/bin2.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/restricted/highest.apex.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "CONTAINS"}, + packageTag{"testdata/restricted/lib/liba.so.meta_lic"}, + packageName{"testdata/restricted/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/restricted/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"}, + spdxRelationship{"Package-testdata/restricted/highest.apex.meta_lic ", "testdata/restricted/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/restricted/lib/libb.so.meta_lic"}, + packageName{"testdata/restricted/lib/libb.so.meta_lic"}, + spdxPkgID{"testdata/restricted/lib/libb.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"}, + spdxRelationship{"Package-testdata/restricted/highest.apex.meta_lic ", "testdata/restricted/lib/libb.so.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/restricted/lib/libc.a.meta_lic"}, + packageName{"testdata/restricted/lib/libc.a.meta_lic"}, + spdxPkgID{"testdata/restricted/lib/libc.a.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/libc.a.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/restricted/lib/libb.so.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + packageTag{"testdata/restricted/lib/libd.so.meta_lic"}, + packageName{"testdata/restricted/lib/libd.so.meta_lic"}, + spdxPkgID{"testdata/restricted/lib/libd.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata/restricted/lib/libd.so.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-notice-NOTICE_LICENSE"}, + spdxExtractedText{"%%%Notice License%%%"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxExtractedText{"$$$Reciprocal License$$$"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"}, + spdxExtractedText{"###Restricted License###"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -1386,132 +987,75 @@ func Test(t *testing.T) { }, }, { - condition: "restricted", - name: "container", - roots: []string{"container.zip.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-restricted-container.zip.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-container.zip.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-restricted-bin-bin1.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-bin-bin1.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-restricted-bin-bin2.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-bin-bin2.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-restricted-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE", - }, - { - PackageName: "testdata-restricted-lib-libb.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-libb.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE", - }, - { - PackageName: "testdata-restricted-lib-libc.a.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-libc.a.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE", - }, - { - PackageName: "testdata-restricted-lib-libd.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-libd.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-restricted-container.zip.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-container.zip.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-container.zip.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin2.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-container.zip.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-container.zip.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-lib-libb.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-lib-libc.a.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-lib-libb.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-lib-libd.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE", - ExtractedText: "%%%Notice License%%%\n", - LicenseName: "testdata-notice-NOTICE_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE", - ExtractedText: "$$$Reciprocal License$$$\n", - LicenseName: "testdata-reciprocal-RECIPROCAL_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE", - ExtractedText: "###Restricted License###\n", - LicenseName: "testdata-restricted-RESTRICTED_LICENSE", - }, - }, + condition: "restricted", + name: "container", + roots: []string{"container.zip.meta_lic"}, + stripPrefix: "out/target/product/fictional/system/apex/", + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/restricted/container.zip.meta_lic"}, + packageName{"testdata/restricted/container.zip.meta_lic"}, + spdxPkgID{"testdata/restricted/container.zip.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/restricted/container.zip.meta_lic", "DESCRIBES"}, + packageTag{"testdata/restricted/bin/bin1.meta_lic"}, + packageName{"testdata/restricted/bin/bin1.meta_lic"}, + spdxPkgID{"testdata/restricted/bin/bin1.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/restricted/container.zip.meta_lic ", "testdata/restricted/bin/bin1.meta_lic", "CONTAINS"}, + packageTag{"testdata/restricted/bin/bin2.meta_lic"}, + packageName{"testdata/restricted/bin/bin2.meta_lic"}, + spdxPkgID{"testdata/restricted/bin/bin2.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/restricted/container.zip.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "CONTAINS"}, + packageTag{"testdata/restricted/lib/liba.so.meta_lic"}, + packageName{"testdata/restricted/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/restricted/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"}, + spdxRelationship{"Package-testdata/restricted/container.zip.meta_lic ", "testdata/restricted/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/restricted/lib/libb.so.meta_lic"}, + packageName{"testdata/restricted/lib/libb.so.meta_lic"}, + spdxPkgID{"testdata/restricted/lib/libb.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"}, + spdxRelationship{"Package-testdata/restricted/container.zip.meta_lic ", "testdata/restricted/lib/libb.so.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/restricted/lib/libc.a.meta_lic"}, + packageName{"testdata/restricted/lib/libc.a.meta_lic"}, + spdxPkgID{"testdata/restricted/lib/libc.a.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/libc.a.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/restricted/lib/libb.so.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + packageTag{"testdata/restricted/lib/libd.so.meta_lic"}, + packageName{"testdata/restricted/lib/libd.so.meta_lic"}, + spdxPkgID{"testdata/restricted/lib/libd.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata/restricted/lib/libd.so.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-notice-NOTICE_LICENSE"}, + spdxExtractedText{"%%%Notice License%%%"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxExtractedText{"$$$Reciprocal License$$$"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"}, + spdxExtractedText{"###Restricted License###"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -1531,66 +1075,42 @@ func Test(t *testing.T) { condition: "restricted", name: "binary", roots: []string{"bin/bin1.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-restricted-bin-bin1.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-bin-bin1.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-restricted-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE", - }, - { - PackageName: "testdata-restricted-lib-libc.a.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-libc.a.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-restricted-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-restricted-lib-libc.a.meta_lic"), - Relationship: "CONTAINS", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-reciprocal-RECIPROCAL_LICENSE", - ExtractedText: "$$$Reciprocal License$$$\n", - LicenseName: "testdata-reciprocal-RECIPROCAL_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE", - ExtractedText: "###Restricted License###\n", - LicenseName: "testdata-restricted-RESTRICTED_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/restricted/bin/bin1.meta_lic"}, + packageName{"testdata/restricted/bin/bin1.meta_lic"}, + spdxPkgID{"testdata/restricted/bin/bin1.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/restricted/bin/bin1.meta_lic", "DESCRIBES"}, + packageTag{"testdata/restricted/lib/liba.so.meta_lic"}, + packageName{"testdata/restricted/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/restricted/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"}, + spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/restricted/lib/libc.a.meta_lic"}, + packageName{"testdata/restricted/lib/libc.a.meta_lic"}, + spdxPkgID{"testdata/restricted/lib/libc.a.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/libc.a.meta_lic", "CONTAINS"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"}, + spdxExtractedText{"$$$Reciprocal License$$$"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"}, + spdxExtractedText{"###Restricted License###"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -1605,32 +1125,24 @@ func Test(t *testing.T) { condition: "restricted", name: "library", roots: []string{"lib/libd.so.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-restricted-lib-libd.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-restricted-lib-libd.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-restricted-lib-libd.so.meta_lic"), - Relationship: "DESCRIBES", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE", - ExtractedText: "%%%Notice License%%%\n", - LicenseName: "testdata-notice-NOTICE_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/restricted/lib/libd.so.meta_lic"}, + packageName{"testdata/restricted/lib/libd.so.meta_lic"}, + spdxPkgID{"testdata/restricted/lib/libd.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/restricted/lib/libd.so.meta_lic", "DESCRIBES"}, + spdxLicense{}, + spdxLicenseID{"testdata-notice-NOTICE_LICENSE"}, + spdxExtractedText{"%%%Notice License%%%"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/notice/NOTICE_LICENSE", @@ -1641,129 +1153,71 @@ func Test(t *testing.T) { condition: "proprietary", name: "apex", roots: []string{"highest.apex.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-proprietary-highest.apex.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-highest.apex.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-proprietary-bin-bin1.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-bin-bin1.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-proprietary-bin-bin2.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-bin-bin2.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE", - }, - { - PackageName: "testdata-proprietary-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE", - }, - { - PackageName: "testdata-proprietary-lib-libb.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libb.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE", - }, - { - PackageName: "testdata-proprietary-lib-libc.a.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libc.a.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE", - }, - { - PackageName: "testdata-proprietary-lib-libd.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libd.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-proprietary-highest.apex.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin2.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-highest.apex.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-lib-libb.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-lib-libc.a.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-lib-libb.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-lib-libd.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE", - ExtractedText: "%%%Notice License%%%\n", - LicenseName: "testdata-notice-NOTICE_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE", - ExtractedText: "@@@Proprietary License@@@\n", - LicenseName: "testdata-proprietary-PROPRIETARY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE", - ExtractedText: "###Restricted License###\n", - LicenseName: "testdata-restricted-RESTRICTED_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/proprietary/highest.apex.meta_lic"}, + packageName{"testdata/proprietary/highest.apex.meta_lic"}, + spdxPkgID{"testdata/proprietary/highest.apex.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/proprietary/highest.apex.meta_lic", "DESCRIBES"}, + packageTag{"testdata/proprietary/bin/bin1.meta_lic"}, + packageName{"testdata/proprietary/bin/bin1.meta_lic"}, + spdxPkgID{"testdata/proprietary/bin/bin1.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/proprietary/highest.apex.meta_lic ", "testdata/proprietary/bin/bin1.meta_lic", "CONTAINS"}, + packageTag{"testdata/proprietary/bin/bin2.meta_lic"}, + packageName{"testdata/proprietary/bin/bin2.meta_lic"}, + spdxPkgID{"testdata/proprietary/bin/bin2.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"}, + spdxRelationship{"Package-testdata/proprietary/highest.apex.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "CONTAINS"}, + packageTag{"testdata/proprietary/lib/liba.so.meta_lic"}, + packageName{"testdata/proprietary/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/proprietary/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"}, + spdxRelationship{"Package-testdata/proprietary/highest.apex.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/proprietary/lib/libb.so.meta_lic"}, + packageName{"testdata/proprietary/lib/libb.so.meta_lic"}, + spdxPkgID{"testdata/proprietary/lib/libb.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"}, + spdxRelationship{"Package-testdata/proprietary/highest.apex.meta_lic ", "testdata/proprietary/lib/libb.so.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/proprietary/lib/libc.a.meta_lic"}, + packageName{"testdata/proprietary/lib/libc.a.meta_lic"}, + spdxPkgID{"testdata/proprietary/lib/libc.a.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"}, + spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/libc.a.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata-proprietary-lib-libb.so.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + packageTag{"testdata/proprietary/lib/libd.so.meta_lic"}, + packageName{"testdata/proprietary/lib/libd.so.meta_lic"}, + spdxPkgID{"testdata/proprietary/lib/libd.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata-proprietary-lib-libd.so.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-notice-NOTICE_LICENSE"}, + spdxExtractedText{"%%%Notice License%%%"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-proprietary-PROPRIETARY_LICENSE"}, + spdxExtractedText{"@@@Proprietary License@@@"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"}, + spdxExtractedText{"###Restricted License###"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -1783,129 +1237,71 @@ func Test(t *testing.T) { condition: "proprietary", name: "container", roots: []string{"container.zip.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-proprietary-container.zip.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-container.zip.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-proprietary-bin-bin1.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-bin-bin1.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-proprietary-bin-bin2.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-bin-bin2.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE", - }, - { - PackageName: "testdata-proprietary-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE", - }, - { - PackageName: "testdata-proprietary-lib-libb.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libb.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE", - }, - { - PackageName: "testdata-proprietary-lib-libc.a.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libc.a.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE", - }, - { - PackageName: "testdata-proprietary-lib-libd.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libd.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-proprietary-container.zip.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-container.zip.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-container.zip.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin2.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-container.zip.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-container.zip.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-lib-libb.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-lib-libc.a.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-lib-libb.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-lib-libd.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin2.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE", - ExtractedText: "%%%Notice License%%%\n", - LicenseName: "testdata-notice-NOTICE_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE", - ExtractedText: "@@@Proprietary License@@@\n", - LicenseName: "testdata-proprietary-PROPRIETARY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE", - ExtractedText: "###Restricted License###\n", - LicenseName: "testdata-restricted-RESTRICTED_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/proprietary/container.zip.meta_lic"}, + packageName{"testdata/proprietary/container.zip.meta_lic"}, + spdxPkgID{"testdata/proprietary/container.zip.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/proprietary/container.zip.meta_lic", "DESCRIBES"}, + packageTag{"testdata/proprietary/bin/bin1.meta_lic"}, + packageName{"testdata/proprietary/bin/bin1.meta_lic"}, + spdxPkgID{"testdata/proprietary/bin/bin1.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"Package-testdata/proprietary/container.zip.meta_lic ", "testdata/proprietary/bin/bin1.meta_lic", "CONTAINS"}, + packageTag{"testdata/proprietary/bin/bin2.meta_lic"}, + packageName{"testdata/proprietary/bin/bin2.meta_lic"}, + spdxPkgID{"testdata/proprietary/bin/bin2.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"}, + spdxRelationship{"Package-testdata/proprietary/container.zip.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "CONTAINS"}, + packageTag{"testdata/proprietary/lib/liba.so.meta_lic"}, + packageName{"testdata/proprietary/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/proprietary/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"}, + spdxRelationship{"Package-testdata/proprietary/container.zip.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/proprietary/lib/libb.so.meta_lic"}, + packageName{"testdata/proprietary/lib/libb.so.meta_lic"}, + spdxPkgID{"testdata/proprietary/lib/libb.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"}, + spdxRelationship{"Package-testdata/proprietary/container.zip.meta_lic ", "testdata/proprietary/lib/libb.so.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/proprietary/lib/libc.a.meta_lic"}, + packageName{"testdata/proprietary/lib/libc.a.meta_lic"}, + spdxPkgID{"testdata/proprietary/lib/libc.a.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"}, + spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/libc.a.meta_lic", "CONTAINS"}, + spdxRelationship{"Package-testdata-proprietary-lib-libb.so.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + packageTag{"testdata/proprietary/lib/libd.so.meta_lic"}, + packageName{"testdata/proprietary/lib/libd.so.meta_lic"}, + spdxPkgID{"testdata/proprietary/lib/libd.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"Package-testdata-proprietary-lib-libd.so.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-notice-NOTICE_LICENSE"}, + spdxExtractedText{"%%%Notice License%%%"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-proprietary-PROPRIETARY_LICENSE"}, + spdxExtractedText{"@@@Proprietary License@@@"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"}, + spdxExtractedText{"###Restricted License###"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -1925,78 +1321,48 @@ func Test(t *testing.T) { condition: "proprietary", name: "application", roots: []string{"application.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-proprietary-application.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-application.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-proprietary-bin-bin3.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-bin-bin3.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE", - }, - { - PackageName: "testdata-proprietary-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE", - }, - { - PackageName: "testdata-proprietary-lib-libb.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libb.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-proprietary-application.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-bin-bin3.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-application.meta_lic"), - Relationship: "BUILD_TOOL_OF", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-application.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-lib-libb.so.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-application.meta_lic"), - Relationship: "RUNTIME_DEPENDENCY_OF", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE", - ExtractedText: "@@@Proprietary License@@@\n", - LicenseName: "testdata-proprietary-PROPRIETARY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-restricted-RESTRICTED_LICENSE", - ExtractedText: "###Restricted License###\n", - LicenseName: "testdata-restricted-RESTRICTED_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/proprietary/application.meta_lic"}, + packageName{"testdata/proprietary/application.meta_lic"}, + spdxPkgID{"testdata/proprietary/application.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/proprietary/application.meta_lic", "DESCRIBES"}, + packageTag{"testdata/proprietary/bin/bin3.meta_lic"}, + packageName{"testdata/proprietary/bin/bin3.meta_lic"}, + spdxPkgID{"testdata/proprietary/bin/bin3.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"}, + spdxRelationship{"Package-testdata/proprietary/bin/bin3.meta_lic ", "testdata/proprietary/application.meta_lic", "BUILD_TOOL_OF"}, + packageTag{"testdata/proprietary/lib/liba.so.meta_lic"}, + packageName{"testdata/proprietary/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/proprietary/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"}, + spdxRelationship{"Package-testdata/proprietary/application.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/proprietary/lib/libb.so.meta_lic"}, + packageName{"testdata/proprietary/lib/libb.so.meta_lic"}, + spdxPkgID{"testdata/proprietary/lib/libb.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"}, + spdxRelationship{"Package-testdata/proprietary/lib/libb.so.meta_lic ", "testdata/proprietary/application.meta_lic", "RUNTIME_DEPENDENCY_OF"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-proprietary-PROPRIETARY_LICENSE"}, + spdxExtractedText{"@@@Proprietary License@@@"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"}, + spdxExtractedText{"###Restricted License###"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -2012,61 +1378,39 @@ func Test(t *testing.T) { condition: "proprietary", name: "binary", roots: []string{"bin/bin1.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-proprietary-bin-bin1.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-bin-bin1.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - PackageName: "testdata-proprietary-lib-liba.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-liba.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE", - }, - { - PackageName: "testdata-proprietary-lib-libc.a.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libc.a.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"), - Relationship: "DESCRIBES", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-lib-liba.so.meta_lic"), - Relationship: "CONTAINS", - }, - { - RefA: common.MakeDocElementID("", "testdata-proprietary-bin-bin1.meta_lic"), - RefB: common.MakeDocElementID("", "testdata-proprietary-lib-libc.a.meta_lic"), - Relationship: "CONTAINS", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-firstparty-FIRST_PARTY_LICENSE", - ExtractedText: "&&&First Party License&&&\n", - LicenseName: "testdata-firstparty-FIRST_PARTY_LICENSE", - }, - { - LicenseIdentifier: "LicenseRef-testdata-proprietary-PROPRIETARY_LICENSE", - ExtractedText: "@@@Proprietary License@@@\n", - LicenseName: "testdata-proprietary-PROPRIETARY_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/proprietary/bin/bin1.meta_lic"}, + packageName{"testdata/proprietary/bin/bin1.meta_lic"}, + spdxPkgID{"testdata/proprietary/bin/bin1.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/proprietary/bin/bin1.meta_lic", "DESCRIBES"}, + packageTag{"testdata/proprietary/lib/liba.so.meta_lic"}, + packageName{"testdata/proprietary/lib/liba.so.meta_lic"}, + spdxPkgID{"testdata/proprietary/lib/liba.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"}, + spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"}, + packageTag{"testdata/proprietary/lib/libc.a.meta_lic"}, + packageName{"testdata/proprietary/lib/libc.a.meta_lic"}, + spdxPkgID{"testdata/proprietary/lib/libc.a.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"}, + spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/libc.a.meta_lic", "CONTAINS"}, + spdxLicense{}, + spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"}, + spdxExtractedText{"&&&First Party License&&&"}, + spdxExtractedClosingText{}, + spdxLicenseID{"testdata-proprietary-PROPRIETARY_LICENSE"}, + spdxExtractedText{"@@@Proprietary License@@@"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/firstparty/FIRST_PARTY_LICENSE", @@ -2080,32 +1424,24 @@ func Test(t *testing.T) { condition: "proprietary", name: "library", roots: []string{"lib/libd.so.meta_lic"}, - expectedOut: &spdx.Document{ - SPDXIdentifier: "DOCUMENT", - CreationInfo: getCreationInfo(t), - Packages: []*spdx.Package{ - { - PackageName: "testdata-proprietary-lib-libd.so.meta_lic", - PackageVersion: "NOASSERTION", - PackageDownloadLocation: "NOASSERTION", - PackageSPDXIdentifier: common.ElementID("testdata-proprietary-lib-libd.so.meta_lic"), - PackageLicenseConcluded: "LicenseRef-testdata-notice-NOTICE_LICENSE", - }, - }, - Relationships: []*spdx.Relationship{ - { - RefA: common.MakeDocElementID("", "DOCUMENT"), - RefB: common.MakeDocElementID("", "testdata-proprietary-lib-libd.so.meta_lic"), - Relationship: "DESCRIBES", - }, - }, - OtherLicenses: []*spdx.OtherLicense{ - { - LicenseIdentifier: "LicenseRef-testdata-notice-NOTICE_LICENSE", - ExtractedText: "%%%Notice License%%%\n", - LicenseName: "testdata-notice-NOTICE_LICENSE", - }, - }, + expectedOut: []matcher{ + spdxVersion{}, + spdxDataLicense{}, + spdxDocumentName{"Android"}, + spdxID{}, + spdxDocumentNameSpace{}, + spdxCreatorOrganization{}, + spdxCreatedTime{}, + packageTag{"testdata/proprietary/lib/libd.so.meta_lic"}, + packageName{"testdata/proprietary/lib/libd.so.meta_lic"}, + spdxPkgID{"testdata/proprietary/lib/libd.so.meta_lic"}, + spdxPkgDownloadLocation{"NOASSERTION"}, + spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"}, + spdxRelationship{"DOCUMENT ", "testdata/proprietary/lib/libd.so.meta_lic", "DESCRIBES"}, + spdxLicense{}, + spdxLicenseID{"testdata-notice-NOTICE_LICENSE"}, + spdxExtractedText{"%%%Notice License%%%"}, + spdxExtractedClosingText{}, }, expectedDeps: []string{ "testdata/notice/NOTICE_LICENSE", @@ -2125,7 +1461,7 @@ func Test(t *testing.T) { ctx := context{stdout, stderr, compliance.GetFS(tt.outDir), "Android", []string{tt.stripPrefix}, fakeTime} - spdxDoc, deps, err := sbomGenerator(&ctx, rootFiles...) + deps, err := sbomGenerator(&ctx, rootFiles...) if err != nil { t.Fatalf("sbom: error = %v, stderr = %v", err, stderr) return @@ -2134,26 +1470,28 @@ func Test(t *testing.T) { t.Errorf("sbom: gotStderr = %v, want none", stderr) } - gotData, err := json.Marshal(spdxDoc) - if err != nil { - t.Fatalf("sbom: failed to marshal spdx doc: %v", err) - return + t.Logf("got stdout: %s", stdout.String()) + + t.Logf("want stdout: %s", matcherList(tt.expectedOut).String()) + + out := bufio.NewScanner(stdout) + lineno := 0 + for out.Scan() { + line := out.Text() + if strings.TrimLeft(line, " ") == "" { + continue + } + if len(tt.expectedOut) <= lineno { + t.Errorf("sbom: unexpected output at line %d: got %q, want nothing (wanted %d lines)", lineno+1, line, len(tt.expectedOut)) + } else if !tt.expectedOut[lineno].isMatch(line) { + t.Errorf("sbom: unexpected output at line %d: got %q, want %q", lineno+1, line, tt.expectedOut[lineno]) + } + lineno++ + } + for ; lineno < len(tt.expectedOut); lineno++ { + t.Errorf("bom: missing output line %d: ended early, want %q", lineno+1, tt.expectedOut[lineno]) } - t.Logf("Got SPDX Doc: %s", string(gotData)) - - expectedData, err := json.Marshal(tt.expectedOut) - if err != nil { - t.Fatalf("sbom: failed to marshal spdx doc: %v", err) - return - } - - t.Logf("Want SPDX Doc: %s", string(expectedData)) - - // compare the spdx Docs - compareSpdxDocs(t, spdxDoc, tt.expectedOut) - - // compare deps t.Logf("got deps: %q", deps) t.Logf("want deps: %q", tt.expectedDeps) @@ -2166,154 +1504,242 @@ func Test(t *testing.T) { } } -func getCreationInfo(t *testing.T) *spdx.CreationInfo { - ci, err := builder2v2.BuildCreationInfoSection2_2("Organization", "Google LLC", nil) - if err != nil { - t.Errorf("Unable to get creation info: %v", err) - return nil - } - return ci +type matcher interface { + isMatch(line string) bool + String() string } -// compareSpdxDocs deep-compares two spdx docs by going through the info section, packages, relationships and licenses -func compareSpdxDocs(t *testing.T, actual, expected *spdx.Document) { - - if actual == nil || expected == nil { - t.Errorf("SBOM: SPDX Doc is nil! Got %v: Expected %v", actual, expected) - } - // compare creation info - compareSpdxCreationInfo(t, actual.CreationInfo, expected.CreationInfo) - - // compare packages - if len(actual.Packages) != len(expected.Packages) { - t.Errorf("SBOM: Number of Packages is different! Got %d: Expected %d", len(actual.Packages), len(expected.Packages)) - } - - for i, pkg := range actual.Packages { - if !compareSpdxPackages(t, i, pkg, expected.Packages[i]) { - break - } - } - - // compare licenses - if len(actual.OtherLicenses) != len(expected.OtherLicenses) { - t.Errorf("SBOM: Number of Licenses in actual is different! Got %d: Expected %d", len(actual.OtherLicenses), len(expected.OtherLicenses)) - } - for i, license := range actual.OtherLicenses { - if !compareLicenses(t, i, license, expected.OtherLicenses[i]) { - break - } - } - - //compare Relationships - if len(actual.Relationships) != len(expected.Relationships) { - t.Errorf("SBOM: Number of Licenses in actual is different! Got %d: Expected %d", len(actual.Relationships), len(expected.Relationships)) - } - for i, rl := range actual.Relationships { - if !compareRelationShips(t, i, rl, expected.Relationships[i]) { - break - } - } +type packageTag struct { + name string } -func compareSpdxCreationInfo(t *testing.T, actual, expected *spdx.CreationInfo) { - if actual == nil || expected == nil { - t.Errorf("SBOM: Creation info is nil! Got %q: Expected %q", actual, expected) - } - - if actual.LicenseListVersion != expected.LicenseListVersion { - t.Errorf("SBOM: Creation info license version Error! Got %s: Expected %s", actual.LicenseListVersion, expected.LicenseListVersion) - } - - if len(actual.Creators) != len(expected.Creators) { - t.Errorf("SBOM: Creation info creators Error! Got %d: Expected %d", len(actual.Creators), len(expected.Creators)) - } - - for i, info := range actual.Creators { - if info != expected.Creators[i] { - t.Errorf("SBOM: Creation info creators Error! Got %q: Expected %q", info, expected.Creators[i]) - } +func (m packageTag) isMatch(line string) bool { + groups := spdxPackageTag.FindStringSubmatch(line) + if len(groups) != 2 { + return false } + return groups[1] == m.name } -func compareSpdxPackages(t *testing.T, i int, actual, expected *spdx.Package) bool { - if actual == nil || expected == nil { - t.Errorf("SBOM: Packages are nil at index %d! Got %v: Expected %v", i, actual, expected) - return false - } - if actual.PackageName != expected.PackageName { - t.Errorf("SBOM: Package name Error at index %d! Got %s: Expected %s", i, actual.PackageName, expected.PackageName) - return false - } - - if actual.PackageVersion != expected.PackageVersion { - t.Errorf("SBOM: Package version Error at index %d! Got %s: Expected %s", i, actual.PackageVersion, expected.PackageVersion) - return false - } - - if actual.PackageSPDXIdentifier != expected.PackageSPDXIdentifier { - t.Errorf("SBOM: Package identifier Error at index %d! Got %s: Expected %s", i, actual.PackageSPDXIdentifier, expected.PackageSPDXIdentifier) - return false - } - - if actual.PackageDownloadLocation != expected.PackageDownloadLocation { - t.Errorf("SBOM: Package download location Error at index %d! Got %s: Expected %s", i, actual.PackageDownloadLocation, expected.PackageDownloadLocation) - return false - } - - if actual.PackageLicenseConcluded != expected.PackageLicenseConcluded { - t.Errorf("SBOM: Package license concluded Error at index %d! Got %s: Expected %s", i, actual.PackageLicenseConcluded, expected.PackageLicenseConcluded) - return false - } - return true +func (m packageTag) String() string { + return "##### Package: " + m.name } -func compareRelationShips(t *testing.T, i int, actual, expected *spdx.Relationship) bool { - if actual == nil || expected == nil { - t.Errorf("SBOM: Relationships is nil at index %d! Got %v: Expected %v", i, actual, expected) - return false - } - - if actual.RefA != expected.RefA { - t.Errorf("SBOM: Relationship RefA Error at index %d! Got %s: Expected %s", i, actual.RefA, expected.RefA) - return false - } - - if actual.RefB != expected.RefB { - t.Errorf("SBOM: Relationship RefB Error at index %d! Got %s: Expected %s", i, actual.RefB, expected.RefB) - return false - } - - if actual.Relationship != expected.Relationship { - t.Errorf("SBOM: Relationship type Error at index %d! Got %s: Expected %s", i, actual.Relationship, expected.Relationship) - return false - } - return true +type packageName struct { + name string } -func compareLicenses(t *testing.T, i int, actual, expected *spdx.OtherLicense) bool { - if actual == nil || expected == nil { - t.Errorf("SBOM: Licenses is nil at index %d! Got %v: Expected %v", i, actual, expected) +func (m packageName) isMatch(line string) bool { + groups := spdxPackageNameTag.FindStringSubmatch(line) + if len(groups) != 2 { return false } + return groups[1] == replaceSlashes(m.name) +} - if actual.LicenseName != expected.LicenseName { - t.Errorf("SBOM: License Name Error at index %d! Got %s: Expected %s", i, actual.LicenseName, expected.LicenseName) - return false - } +func (m packageName) String() string { + return "PackageName: " + replaceSlashes(m.name) +} - if actual.LicenseIdentifier != expected.LicenseIdentifier { - t.Errorf("SBOM: License Identifier Error at index %d! Got %s: Expected %s", i, actual.LicenseIdentifier, expected.LicenseIdentifier) - return false - } +type spdxID struct {} - if actual.ExtractedText != expected.ExtractedText { - t.Errorf("SBOM: License Extracted Text Error at index %d! Got: %q want: %q", i, actual.ExtractedText, expected.ExtractedText) +func (m spdxID) isMatch(line string) bool { + return spdxIDTag.MatchString(line) +} + +func (m spdxID) String() string { + return "SPDXID: SPDXRef-DOCUMENT" +} + +type spdxPkgID struct { + name string +} + +func (m spdxPkgID) isMatch(line string) bool { + groups := spdxPkgIDTag.FindStringSubmatch(line) + if len(groups) != 2 { return false } - return true + return groups[1] == replaceSlashes(m.name) +} + +func (m spdxPkgID) String() string { + return "SPDXID: SPDXRef-Package-" + replaceSlashes(m.name) +} + +type spdxVersion struct{} + +func (m spdxVersion) isMatch(line string) bool { + return spdxVersionTag.MatchString(line) +} + +func (m spdxVersion) String() string { + return "SPDXVersion: SPDX-2.2" +} + +type spdxDataLicense struct{} + +func (m spdxDataLicense) isMatch(line string) bool { + return spdxDataLicenseTag.MatchString(line) +} + +func (m spdxDataLicense) String() string { + return "DataLicense: CC0-1.0" +} + +type spdxDocumentName struct { + name string +} + +func (m spdxDocumentName) isMatch(line string) bool { + return spdxDocumentNameTag.MatchString(line) +} + +func (m spdxDocumentName) String() string { + return "DocumentName: " + m.name +} + +type spdxDocumentNameSpace struct { + name string +} + +func (m spdxDocumentNameSpace) isMatch(line string) bool { + return spdxDocumentNameSpaceTag.MatchString(line) +} + +func (m spdxDocumentNameSpace) String() string { + return "DocumentNameSpace: Android" +} + +type spdxCreatorOrganization struct{} + +func (m spdxCreatorOrganization) isMatch(line string) bool { + return spdxCreatorOrganizationTag.MatchString(line) +} + +func (m spdxCreatorOrganization) String() string { + return "Creator: Organization: Google LLC" } func fakeTime() time.Time { return time.UnixMicro(0).UTC() } + +type spdxCreatedTime struct{} + +func (m spdxCreatedTime) isMatch(line string) bool { + return spdxCreatedTimeTag.MatchString(line) +} + +func (m spdxCreatedTime) String() string { + return "Created: 1970-01-01T00:00:00Z" +} + +type spdxPkgDownloadLocation struct { + name string +} + +func (m spdxPkgDownloadLocation) isMatch(line string) bool { + return spdxPkgDownloadLocationTag.MatchString(line) +} + +func (m spdxPkgDownloadLocation) String() string { + return "PackageDownloadLocation: " + m.name +} + +type spdxPkgLicenseDeclared struct { + name string +} + +func (m spdxPkgLicenseDeclared) isMatch(line string) bool { + groups := spdxPkgLicenseDeclaredTag.FindStringSubmatch(line) + if len(groups) != 2 { + return false + } + return groups[1] == replaceSlashes(m.name) +} + +func (m spdxPkgLicenseDeclared) String() string { + return "PackageLicenseConcluded: LicenseRef-" + m.name +} + +type spdxRelationship struct { + pkg1 string + pkg2 string + relation string +} + +func (m spdxRelationship) isMatch(line string) bool { + groups := spdxRelationshipTag.FindStringSubmatch(line) + if len(groups) != 4 { + return false + } + return groups[1] == replaceSlashes(m.pkg1) && groups[2] == m.relation && groups[3] == replaceSlashes(m.pkg2) +} + +func (m spdxRelationship) String() string { + return "Relationship: SPDXRef-" + replaceSlashes(m.pkg1) + " " + m.relation + " SPDXRef-Package-" + replaceSlashes(m.pkg2) +} + +type spdxLicense struct{} + +func (m spdxLicense) isMatch(line string) bool { + return spdxLicenseTag.MatchString(line) +} + +func (m spdxLicense) String() string { + return "##### Non-standard license:" +} + +type spdxLicenseID struct { + name string +} + +func (m spdxLicenseID) isMatch(line string) bool { + groups := spdxLicenseIDTag.FindStringSubmatch(line) + if len(groups) != 2 { + return false + } + return groups[1] == replaceSlashes(m.name) +} + +func (m spdxLicenseID) String() string { + return "LicenseID: LicenseRef-" + m.name +} + +type spdxExtractedText struct { + name string +} + +func (m spdxExtractedText) isMatch(line string) bool { + groups := spdxExtractedTextTag.FindStringSubmatch(line) + if len(groups) != 2 { + return false + } + return groups[1] == replaceSlashes(m.name) +} + +func (m spdxExtractedText) String() string { + return "ExtractedText: " + m.name +} + +type spdxExtractedClosingText struct{} + +func (m spdxExtractedClosingText) isMatch(line string) bool { + return spdxExtractedClosingTextTag.MatchString(line) +} + +func (m spdxExtractedClosingText) String() string { + return "" +} + +type matcherList []matcher + +func (l matcherList) String() string { + var sb strings.Builder + for _, m := range l { + s := m.String() + fmt.Fprintf(&sb, "%s\n", s) + } + return sb.String() +}