diff options
Diffstat (limited to 'spdxlib')
-rw-r--r-- | spdxlib/described_elements.go | 21 | ||||
-rw-r--r-- | spdxlib/described_elements_test.go | 196 | ||||
-rw-r--r-- | spdxlib/documents.go | 17 | ||||
-rw-r--r-- | spdxlib/documents_test.go | 100 | ||||
-rw-r--r-- | spdxlib/element_ids.go | 5 | ||||
-rw-r--r-- | spdxlib/element_ids_test.go | 7 | ||||
-rw-r--r-- | spdxlib/relationships.go | 14 | ||||
-rw-r--r-- | spdxlib/relationships_test.go | 72 |
8 files changed, 225 insertions, 207 deletions
diff --git a/spdxlib/described_elements.go b/spdxlib/described_elements.go index 21d8e7e..61833b4 100644 --- a/spdxlib/described_elements.go +++ b/spdxlib/described_elements.go @@ -5,7 +5,10 @@ package spdxlib import ( "fmt" - "github.com/spdx/tools-golang/spdx" + + "github.com/spdx/tools-golang/spdx/common" + "github.com/spdx/tools-golang/spdx/v2_1" + "github.com/spdx/tools-golang/spdx/v2_2" ) // GetDescribedPackageIDs2_1 returns a slice of ElementIDs for all Packages @@ -13,7 +16,7 @@ import ( // - If the document has only one Package, its ID is returned. // - If the document has 2+ Packages, it returns the IDs of those that have // a DESCRIBES (or DESCRIBED_BY) relationship to this DOCUMENT. -func GetDescribedPackageIDs2_1(doc *spdx.Document2_1) ([]spdx.ElementID, error) { +func GetDescribedPackageIDs2_1(doc *v2_1.Document) ([]common.ElementID, error) { // if nil Packages map or zero packages in it, return empty slice if doc.Packages == nil { return nil, fmt.Errorf("Packages map is nil") @@ -24,7 +27,7 @@ func GetDescribedPackageIDs2_1(doc *spdx.Document2_1) ([]spdx.ElementID, error) if len(doc.Packages) == 1 { // get first (only) one and return its ID for _, pkg := range doc.Packages { - return []spdx.ElementID{pkg.PackageSPDXIdentifier}, nil + return []common.ElementID{pkg.PackageSPDXIdentifier}, nil } } @@ -35,8 +38,8 @@ func GetDescribedPackageIDs2_1(doc *spdx.Document2_1) ([]spdx.ElementID, error) return nil, fmt.Errorf("multiple Packages in Document but Relationships slice is nil") } - eIDs, err := FilterRelationships2_1(doc, func(relationship *spdx.Relationship2_1) *spdx.ElementID { - refDocument := spdx.MakeDocElementID("", "DOCUMENT") + eIDs, err := FilterRelationships2_1(doc, func(relationship *v2_1.Relationship) *common.ElementID { + refDocument := common.MakeDocElementID("", "DOCUMENT") if relationship.Relationship == "DESCRIBES" && relationship.RefA == refDocument { return &relationship.RefB.ElementRefID @@ -64,7 +67,7 @@ func GetDescribedPackageIDs2_1(doc *spdx.Document2_1) ([]spdx.ElementID, error) // - If the document has only one Package, its ID is returned. // - If the document has 2+ Packages, it returns the IDs of those that have // a DESCRIBES (or DESCRIBED_BY) relationship to this DOCUMENT. -func GetDescribedPackageIDs2_2(doc *spdx.Document2_2) ([]spdx.ElementID, error) { +func GetDescribedPackageIDs2_2(doc *v2_2.Document) ([]common.ElementID, error) { // if nil Packages map or zero packages in it, return empty slice if doc.Packages == nil { return nil, fmt.Errorf("Packages map is nil") @@ -75,7 +78,7 @@ func GetDescribedPackageIDs2_2(doc *spdx.Document2_2) ([]spdx.ElementID, error) if len(doc.Packages) == 1 { // get first (only) one and return its ID for _, pkg := range doc.Packages { - return []spdx.ElementID{pkg.PackageSPDXIdentifier}, nil + return []common.ElementID{pkg.PackageSPDXIdentifier}, nil } } @@ -86,8 +89,8 @@ func GetDescribedPackageIDs2_2(doc *spdx.Document2_2) ([]spdx.ElementID, error) return nil, fmt.Errorf("multiple Packages in Document but Relationships slice is nil") } - eIDs, err := FilterRelationships2_2(doc, func(relationship *spdx.Relationship2_2) *spdx.ElementID { - refDocument := spdx.MakeDocElementID("", "DOCUMENT") + eIDs, err := FilterRelationships2_2(doc, func(relationship *v2_2.Relationship) *common.ElementID { + refDocument := common.MakeDocElementID("", "DOCUMENT") if relationship.Relationship == "DESCRIBES" && relationship.RefA == refDocument { return &relationship.RefB.ElementRefID diff --git a/spdxlib/described_elements_test.go b/spdxlib/described_elements_test.go index 4c2a1a1..8ea9cd5 100644 --- a/spdxlib/described_elements_test.go +++ b/spdxlib/described_elements_test.go @@ -5,46 +5,48 @@ package spdxlib import ( "testing" - "github.com/spdx/tools-golang/spdx" + "github.com/spdx/tools-golang/spdx/common" + "github.com/spdx/tools-golang/spdx/v2_1" + "github.com/spdx/tools-golang/spdx/v2_2" ) // ===== 2.1 tests ===== func Test2_1CanGetIDsOfDescribedPackages(t *testing.T) { // set up document and some packages and relationships - doc := &spdx.Document2_1{ + doc := &v2_1.Document{ SPDXVersion: "SPDX-2.1", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_1{}, - Packages: []*spdx.Package2_1{ + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_1.CreationInfo{}, + Packages: []*v2_1.Package{ {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, {PackageName: "pkg4", PackageSPDXIdentifier: "p4"}, {PackageName: "pkg5", PackageSPDXIdentifier: "p5"}, }, - Relationships: []*spdx.Relationship2_1{ - &spdx.Relationship2_1{ - RefA: spdx.MakeDocElementID("", "DOCUMENT"), - RefB: spdx.MakeDocElementID("", "p1"), + Relationships: []*v2_1.Relationship{ + &v2_1.Relationship{ + RefA: common.MakeDocElementID("", "DOCUMENT"), + RefB: common.MakeDocElementID("", "p1"), Relationship: "DESCRIBES", }, - &spdx.Relationship2_1{ - RefA: spdx.MakeDocElementID("", "DOCUMENT"), - RefB: spdx.MakeDocElementID("", "p5"), + &v2_1.Relationship{ + RefA: common.MakeDocElementID("", "DOCUMENT"), + RefB: common.MakeDocElementID("", "p5"), Relationship: "DESCRIBES", }, // inverse relationship -- should also get detected - &spdx.Relationship2_1{ - RefA: spdx.MakeDocElementID("", "p4"), - RefB: spdx.MakeDocElementID("", "DOCUMENT"), + &v2_1.Relationship{ + RefA: common.MakeDocElementID("", "p4"), + RefB: common.MakeDocElementID("", "DOCUMENT"), Relationship: "DESCRIBED_BY", }, // different relationship - &spdx.Relationship2_1{ - RefA: spdx.MakeDocElementID("", "p1"), - RefB: spdx.MakeDocElementID("", "p2"), + &v2_1.Relationship{ + RefA: common.MakeDocElementID("", "p1"), + RefB: common.MakeDocElementID("", "p2"), Relationship: "DEPENDS_ON", }, }, @@ -59,26 +61,26 @@ func Test2_1CanGetIDsOfDescribedPackages(t *testing.T) { if len(describedPkgIDs) != 3 { t.Fatalf("expected %d packages, got %d", 3, len(describedPkgIDs)) } - if describedPkgIDs[0] != spdx.ElementID("p1") { - t.Errorf("expected %v, got %v", spdx.ElementID("p1"), describedPkgIDs[0]) + if describedPkgIDs[0] != common.ElementID("p1") { + t.Errorf("expected %v, got %v", common.ElementID("p1"), describedPkgIDs[0]) } - if describedPkgIDs[1] != spdx.ElementID("p4") { - t.Errorf("expected %v, got %v", spdx.ElementID("p4"), describedPkgIDs[1]) + if describedPkgIDs[1] != common.ElementID("p4") { + t.Errorf("expected %v, got %v", common.ElementID("p4"), describedPkgIDs[1]) } - if describedPkgIDs[2] != spdx.ElementID("p5") { - t.Errorf("expected %v, got %v", spdx.ElementID("p5"), describedPkgIDs[2]) + if describedPkgIDs[2] != common.ElementID("p5") { + t.Errorf("expected %v, got %v", common.ElementID("p5"), describedPkgIDs[2]) } } func Test2_1GetDescribedPackagesReturnsSinglePackageIfOnlyOne(t *testing.T) { // set up document and one package, but no relationships // b/c only one package - doc := &spdx.Document2_1{ + doc := &v2_1.Document{ SPDXVersion: "SPDX-2.1", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_1{}, - Packages: []*spdx.Package2_1{ + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_1.CreationInfo{}, + Packages: []*v2_1.Package{ {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, }, } @@ -92,30 +94,30 @@ func Test2_1GetDescribedPackagesReturnsSinglePackageIfOnlyOne(t *testing.T) { if len(describedPkgIDs) != 1 { t.Fatalf("expected %d package, got %d", 1, len(describedPkgIDs)) } - if describedPkgIDs[0] != spdx.ElementID("p1") { - t.Errorf("expected %v, got %v", spdx.ElementID("p1"), describedPkgIDs[0]) + if describedPkgIDs[0] != common.ElementID("p1") { + t.Errorf("expected %v, got %v", common.ElementID("p1"), describedPkgIDs[0]) } } func Test2_1FailsToGetDescribedPackagesIfMoreThanOneWithoutDescribesRelationship(t *testing.T) { // set up document and multiple packages, but no DESCRIBES relationships - doc := &spdx.Document2_1{ + doc := &v2_1.Document{ SPDXVersion: "SPDX-2.1", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_1{}, - Packages: []*spdx.Package2_1{ + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_1.CreationInfo{}, + Packages: []*v2_1.Package{ {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, {PackageName: "pkg4", PackageSPDXIdentifier: "p4"}, {PackageName: "pkg5", PackageSPDXIdentifier: "p5"}, }, - Relationships: []*spdx.Relationship2_1{ + Relationships: []*v2_1.Relationship{ // different relationship - &spdx.Relationship2_1{ - RefA: spdx.MakeDocElementID("", "p1"), - RefB: spdx.MakeDocElementID("", "p2"), + &v2_1.Relationship{ + RefA: common.MakeDocElementID("", "p1"), + RefB: common.MakeDocElementID("", "p2"), Relationship: "DEPENDS_ON", }, }, @@ -129,12 +131,12 @@ func Test2_1FailsToGetDescribedPackagesIfMoreThanOneWithoutDescribesRelationship func Test2_1FailsToGetDescribedPackagesIfMoreThanOneWithNilRelationships(t *testing.T) { // set up document and multiple packages, but no relationships slice - doc := &spdx.Document2_1{ + doc := &v2_1.Document{ SPDXVersion: "SPDX-2.1", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_1{}, - Packages: []*spdx.Package2_1{ + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_1.CreationInfo{}, + Packages: []*v2_1.Package{ {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, }, @@ -148,12 +150,12 @@ func Test2_1FailsToGetDescribedPackagesIfMoreThanOneWithNilRelationships(t *test func Test2_1FailsToGetDescribedPackagesIfZeroPackagesInMap(t *testing.T) { // set up document but no packages - doc := &spdx.Document2_1{ + doc := &v2_1.Document{ SPDXVersion: "SPDX-2.1", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_1{}, - Packages: []*spdx.Package2_1{}, + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_1.CreationInfo{}, + Packages: []*v2_1.Package{}, } _, err := GetDescribedPackageIDs2_1(doc) @@ -164,11 +166,11 @@ func Test2_1FailsToGetDescribedPackagesIfZeroPackagesInMap(t *testing.T) { func Test2_1FailsToGetDescribedPackagesIfNilMap(t *testing.T) { // set up document but no packages - doc := &spdx.Document2_1{ + doc := &v2_1.Document{ SPDXVersion: "SPDX-2.1", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_1{}, + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_1.CreationInfo{}, } _, err := GetDescribedPackageIDs2_1(doc) @@ -181,39 +183,39 @@ func Test2_1FailsToGetDescribedPackagesIfNilMap(t *testing.T) { func Test2_2CanGetIDsOfDescribedPackages(t *testing.T) { // set up document and some packages and relationships - doc := &spdx.Document2_2{ + doc := &v2_2.Document{ SPDXVersion: "SPDX-2.2", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_2{}, - Packages: []*spdx.Package2_2{ + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_2.CreationInfo{}, + Packages: []*v2_2.Package{ {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, {PackageName: "pkg4", PackageSPDXIdentifier: "p4"}, {PackageName: "pkg5", PackageSPDXIdentifier: "p5"}, }, - Relationships: []*spdx.Relationship2_2{ - &spdx.Relationship2_2{ - RefA: spdx.MakeDocElementID("", "DOCUMENT"), - RefB: spdx.MakeDocElementID("", "p1"), + Relationships: []*v2_2.Relationship{ + &v2_2.Relationship{ + RefA: common.MakeDocElementID("", "DOCUMENT"), + RefB: common.MakeDocElementID("", "p1"), Relationship: "DESCRIBES", }, - &spdx.Relationship2_2{ - RefA: spdx.MakeDocElementID("", "DOCUMENT"), - RefB: spdx.MakeDocElementID("", "p5"), + &v2_2.Relationship{ + RefA: common.MakeDocElementID("", "DOCUMENT"), + RefB: common.MakeDocElementID("", "p5"), Relationship: "DESCRIBES", }, // inverse relationship -- should also get detected - &spdx.Relationship2_2{ - RefA: spdx.MakeDocElementID("", "p4"), - RefB: spdx.MakeDocElementID("", "DOCUMENT"), + &v2_2.Relationship{ + RefA: common.MakeDocElementID("", "p4"), + RefB: common.MakeDocElementID("", "DOCUMENT"), Relationship: "DESCRIBED_BY", }, // different relationship - &spdx.Relationship2_2{ - RefA: spdx.MakeDocElementID("", "p1"), - RefB: spdx.MakeDocElementID("", "p2"), + &v2_2.Relationship{ + RefA: common.MakeDocElementID("", "p1"), + RefB: common.MakeDocElementID("", "p2"), Relationship: "DEPENDS_ON", }, }, @@ -228,26 +230,26 @@ func Test2_2CanGetIDsOfDescribedPackages(t *testing.T) { if len(describedPkgIDs) != 3 { t.Fatalf("expected %d packages, got %d", 3, len(describedPkgIDs)) } - if describedPkgIDs[0] != spdx.ElementID("p1") { - t.Errorf("expected %v, got %v", spdx.ElementID("p1"), describedPkgIDs[0]) + if describedPkgIDs[0] != common.ElementID("p1") { + t.Errorf("expected %v, got %v", common.ElementID("p1"), describedPkgIDs[0]) } - if describedPkgIDs[1] != spdx.ElementID("p4") { - t.Errorf("expected %v, got %v", spdx.ElementID("p4"), describedPkgIDs[1]) + if describedPkgIDs[1] != common.ElementID("p4") { + t.Errorf("expected %v, got %v", common.ElementID("p4"), describedPkgIDs[1]) } - if describedPkgIDs[2] != spdx.ElementID("p5") { - t.Errorf("expected %v, got %v", spdx.ElementID("p5"), describedPkgIDs[2]) + if describedPkgIDs[2] != common.ElementID("p5") { + t.Errorf("expected %v, got %v", common.ElementID("p5"), describedPkgIDs[2]) } } func Test2_2GetDescribedPackagesReturnsSinglePackageIfOnlyOne(t *testing.T) { // set up document and one package, but no relationships // b/c only one package - doc := &spdx.Document2_2{ + doc := &v2_2.Document{ SPDXVersion: "SPDX-2.2", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_2{}, - Packages: []*spdx.Package2_2{ + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_2.CreationInfo{}, + Packages: []*v2_2.Package{ {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, }, } @@ -261,30 +263,30 @@ func Test2_2GetDescribedPackagesReturnsSinglePackageIfOnlyOne(t *testing.T) { if len(describedPkgIDs) != 1 { t.Fatalf("expected %d package, got %d", 1, len(describedPkgIDs)) } - if describedPkgIDs[0] != spdx.ElementID("p1") { - t.Errorf("expected %v, got %v", spdx.ElementID("p1"), describedPkgIDs[0]) + if describedPkgIDs[0] != common.ElementID("p1") { + t.Errorf("expected %v, got %v", common.ElementID("p1"), describedPkgIDs[0]) } } func Test2_2FailsToGetDescribedPackagesIfMoreThanOneWithoutDescribesRelationship(t *testing.T) { // set up document and multiple packages, but no DESCRIBES relationships - doc := &spdx.Document2_2{ + doc := &v2_2.Document{ SPDXVersion: "SPDX-2.2", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_2{}, - Packages: []*spdx.Package2_2{ + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_2.CreationInfo{}, + Packages: []*v2_2.Package{ {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, {PackageName: "pkg4", PackageSPDXIdentifier: "p4"}, {PackageName: "pkg5", PackageSPDXIdentifier: "p5"}, }, - Relationships: []*spdx.Relationship2_2{ + Relationships: []*v2_2.Relationship{ // different relationship - &spdx.Relationship2_2{ - RefA: spdx.MakeDocElementID("", "p1"), - RefB: spdx.MakeDocElementID("", "p2"), + &v2_2.Relationship{ + RefA: common.MakeDocElementID("", "p1"), + RefB: common.MakeDocElementID("", "p2"), Relationship: "DEPENDS_ON", }, }, @@ -298,12 +300,12 @@ func Test2_2FailsToGetDescribedPackagesIfMoreThanOneWithoutDescribesRelationship func Test2_2FailsToGetDescribedPackagesIfMoreThanOneWithNilRelationships(t *testing.T) { // set up document and multiple packages, but no relationships slice - doc := &spdx.Document2_2{ + doc := &v2_2.Document{ SPDXVersion: "SPDX-2.2", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_2{}, - Packages: []*spdx.Package2_2{ + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_2.CreationInfo{}, + Packages: []*v2_2.Package{ {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, }, @@ -317,12 +319,12 @@ func Test2_2FailsToGetDescribedPackagesIfMoreThanOneWithNilRelationships(t *test func Test2_2FailsToGetDescribedPackagesIfZeroPackagesInMap(t *testing.T) { // set up document but no packages - doc := &spdx.Document2_2{ + doc := &v2_2.Document{ SPDXVersion: "SPDX-2.2", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_2{}, - Packages: []*spdx.Package2_2{}, + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_2.CreationInfo{}, + Packages: []*v2_2.Package{}, } _, err := GetDescribedPackageIDs2_2(doc) @@ -333,11 +335,11 @@ func Test2_2FailsToGetDescribedPackagesIfZeroPackagesInMap(t *testing.T) { func Test2_2FailsToGetDescribedPackagesIfNilMap(t *testing.T) { // set up document but no packages - doc := &spdx.Document2_2{ + doc := &v2_2.Document{ SPDXVersion: "SPDX-2.2", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_2{}, + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_2.CreationInfo{}, } _, err := GetDescribedPackageIDs2_2(doc) diff --git a/spdxlib/documents.go b/spdxlib/documents.go index 1f7122a..8560f08 100644 --- a/spdxlib/documents.go +++ b/spdxlib/documents.go @@ -3,15 +3,18 @@ package spdxlib import ( "fmt" - "github.com/spdx/tools-golang/spdx" + + "github.com/spdx/tools-golang/spdx/common" + "github.com/spdx/tools-golang/spdx/v2_1" + "github.com/spdx/tools-golang/spdx/v2_2" ) // ValidateDocument2_1 returns an error if the Document is found to be invalid, or nil if the Document is valid. // Currently, this only verifies that all Element IDs mentioned in Relationships exist in the Document as either a // Package or an UnpackagedFile. -func ValidateDocument2_1(doc *spdx.Document2_1) error { +func ValidateDocument2_1(doc *v2_1.Document) error { // cache a map of valid package IDs for quick lookups - validElementIDs := make(map[spdx.ElementID]bool) + validElementIDs := make(map[common.ElementID]bool) for _, docPackage := range doc.Packages { validElementIDs[docPackage.PackageSPDXIdentifier] = true } @@ -21,7 +24,7 @@ func ValidateDocument2_1(doc *spdx.Document2_1) error { } // add the Document element ID - validElementIDs[spdx.MakeDocElementID("", "DOCUMENT").ElementRefID] = true + validElementIDs[common.MakeDocElementID("", "DOCUMENT").ElementRefID] = true for _, relationship := range doc.Relationships { if !validElementIDs[relationship.RefA.ElementRefID] { @@ -39,9 +42,9 @@ func ValidateDocument2_1(doc *spdx.Document2_1) error { // ValidateDocument2_2 returns an error if the Document is found to be invalid, or nil if the Document is valid. // Currently, this only verifies that all Element IDs mentioned in Relationships exist in the Document as either a // Package or an UnpackagedFile. -func ValidateDocument2_2(doc *spdx.Document2_2) error { +func ValidateDocument2_2(doc *v2_2.Document) error { // cache a map of package IDs for quick lookups - validElementIDs := make(map[spdx.ElementID]bool) + validElementIDs := make(map[common.ElementID]bool) for _, docPackage := range doc.Packages { validElementIDs[docPackage.PackageSPDXIdentifier] = true } @@ -51,7 +54,7 @@ func ValidateDocument2_2(doc *spdx.Document2_2) error { } // add the Document element ID - validElementIDs[spdx.MakeDocElementID("", "DOCUMENT").ElementRefID] = true + validElementIDs[common.MakeDocElementID("", "DOCUMENT").ElementRefID] = true for _, relationship := range doc.Relationships { if !validElementIDs[relationship.RefA.ElementRefID] { diff --git a/spdxlib/documents_test.go b/spdxlib/documents_test.go index aa1f6c3..586cabd 100644 --- a/spdxlib/documents_test.go +++ b/spdxlib/documents_test.go @@ -5,46 +5,48 @@ package spdxlib import ( "testing" - "github.com/spdx/tools-golang/spdx" + "github.com/spdx/tools-golang/spdx/common" + "github.com/spdx/tools-golang/spdx/v2_1" + "github.com/spdx/tools-golang/spdx/v2_2" ) // ===== 2.1 tests ===== func Test2_1ValidDocumentPassesValidation(t *testing.T) { // set up document and some packages and relationships - doc := &spdx.Document2_1{ + doc := &v2_1.Document{ SPDXVersion: "SPDX-2.1", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_1{}, - Packages: []*spdx.Package2_1{ + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_1.CreationInfo{}, + Packages: []*v2_1.Package{ {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, {PackageName: "pkg4", PackageSPDXIdentifier: "p4"}, {PackageName: "pkg5", PackageSPDXIdentifier: "p5"}, }, - Relationships: []*spdx.Relationship2_1{ + Relationships: []*v2_1.Relationship{ { - RefA: spdx.MakeDocElementID("", "DOCUMENT"), - RefB: spdx.MakeDocElementID("", "p1"), + RefA: common.MakeDocElementID("", "DOCUMENT"), + RefB: common.MakeDocElementID("", "p1"), Relationship: "DESCRIBES", }, { - RefA: spdx.MakeDocElementID("", "DOCUMENT"), - RefB: spdx.MakeDocElementID("", "p5"), + RefA: common.MakeDocElementID("", "DOCUMENT"), + RefB: common.MakeDocElementID("", "p5"), Relationship: "DESCRIBES", }, // inverse relationship -- should also get detected { - RefA: spdx.MakeDocElementID("", "p4"), - RefB: spdx.MakeDocElementID("", "DOCUMENT"), + RefA: common.MakeDocElementID("", "p4"), + RefB: common.MakeDocElementID("", "DOCUMENT"), Relationship: "DESCRIBED_BY", }, // different relationship { - RefA: spdx.MakeDocElementID("", "p1"), - RefB: spdx.MakeDocElementID("", "p2"), + RefA: common.MakeDocElementID("", "p1"), + RefB: common.MakeDocElementID("", "p2"), Relationship: "DEPENDS_ON", }, }, @@ -58,31 +60,31 @@ func Test2_1ValidDocumentPassesValidation(t *testing.T) { func Test2_1InvalidDocumentFailsValidation(t *testing.T) { // set up document and some packages and relationships - doc := &spdx.Document2_1{ + doc := &v2_1.Document{ SPDXVersion: "SPDX-2.1", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_1{}, - Packages: []*spdx.Package2_1{ + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_1.CreationInfo{}, + Packages: []*v2_1.Package{ {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, }, - Relationships: []*spdx.Relationship2_1{ + Relationships: []*v2_1.Relationship{ { - RefA: spdx.MakeDocElementID("", "DOCUMENT"), - RefB: spdx.MakeDocElementID("", "p1"), + RefA: common.MakeDocElementID("", "DOCUMENT"), + RefB: common.MakeDocElementID("", "p1"), Relationship: "DESCRIBES", }, { - RefA: spdx.MakeDocElementID("", "DOCUMENT"), - RefB: spdx.MakeDocElementID("", "p2"), + RefA: common.MakeDocElementID("", "DOCUMENT"), + RefB: common.MakeDocElementID("", "p2"), Relationship: "DESCRIBES", }, // invalid ID p99 { - RefA: spdx.MakeDocElementID("", "p1"), - RefB: spdx.MakeDocElementID("", "p99"), + RefA: common.MakeDocElementID("", "p1"), + RefB: common.MakeDocElementID("", "p99"), Relationship: "DEPENDS_ON", }, }, @@ -98,39 +100,39 @@ func Test2_1InvalidDocumentFailsValidation(t *testing.T) { func Test2_2ValidDocumentPassesValidation(t *testing.T) { // set up document and some packages and relationships - doc := &spdx.Document2_2{ + doc := &v2_2.Document{ SPDXVersion: "SPDX-2.1", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_2{}, - Packages: []*spdx.Package2_2{ + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_2.CreationInfo{}, + Packages: []*v2_2.Package{ {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, {PackageName: "pkg4", PackageSPDXIdentifier: "p4"}, {PackageName: "pkg5", PackageSPDXIdentifier: "p5"}, }, - Relationships: []*spdx.Relationship2_2{ + Relationships: []*v2_2.Relationship{ { - RefA: spdx.MakeDocElementID("", "DOCUMENT"), - RefB: spdx.MakeDocElementID("", "p1"), + RefA: common.MakeDocElementID("", "DOCUMENT"), + RefB: common.MakeDocElementID("", "p1"), Relationship: "DESCRIBES", }, { - RefA: spdx.MakeDocElementID("", "DOCUMENT"), - RefB: spdx.MakeDocElementID("", "p5"), + RefA: common.MakeDocElementID("", "DOCUMENT"), + RefB: common.MakeDocElementID("", "p5"), Relationship: "DESCRIBES", }, // inverse relationship -- should also get detected { - RefA: spdx.MakeDocElementID("", "p4"), - RefB: spdx.MakeDocElementID("", "DOCUMENT"), + RefA: common.MakeDocElementID("", "p4"), + RefB: common.MakeDocElementID("", "DOCUMENT"), Relationship: "DESCRIBED_BY", }, // different relationship { - RefA: spdx.MakeDocElementID("", "p1"), - RefB: spdx.MakeDocElementID("", "p2"), + RefA: common.MakeDocElementID("", "p1"), + RefB: common.MakeDocElementID("", "p2"), Relationship: "DEPENDS_ON", }, }, @@ -144,31 +146,31 @@ func Test2_2ValidDocumentPassesValidation(t *testing.T) { func Test2_2InvalidDocumentFailsValidation(t *testing.T) { // set up document and some packages and relationships - doc := &spdx.Document2_2{ + doc := &v2_2.Document{ SPDXVersion: "SPDX-2.1", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_2{}, - Packages: []*spdx.Package2_2{ + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_2.CreationInfo{}, + Packages: []*v2_2.Package{ {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, }, - Relationships: []*spdx.Relationship2_2{ + Relationships: []*v2_2.Relationship{ { - RefA: spdx.MakeDocElementID("", "DOCUMENT"), - RefB: spdx.MakeDocElementID("", "p1"), + RefA: common.MakeDocElementID("", "DOCUMENT"), + RefB: common.MakeDocElementID("", "p1"), Relationship: "DESCRIBES", }, { - RefA: spdx.MakeDocElementID("", "DOCUMENT"), - RefB: spdx.MakeDocElementID("", "p5"), + RefA: common.MakeDocElementID("", "DOCUMENT"), + RefB: common.MakeDocElementID("", "p5"), Relationship: "DESCRIBES", }, // invalid ID p99 { - RefA: spdx.MakeDocElementID("", "p1"), - RefB: spdx.MakeDocElementID("", "p99"), + RefA: common.MakeDocElementID("", "p1"), + RefB: common.MakeDocElementID("", "p99"), Relationship: "DEPENDS_ON", }, }, diff --git a/spdxlib/element_ids.go b/spdxlib/element_ids.go index f0c5ee0..d505d40 100644 --- a/spdxlib/element_ids.go +++ b/spdxlib/element_ids.go @@ -3,12 +3,13 @@ package spdxlib import ( - "github.com/spdx/tools-golang/spdx" "sort" + + "github.com/spdx/tools-golang/spdx/common" ) // SortElementIDs sorts and returns the given slice of ElementIDs -func SortElementIDs(eIDs []spdx.ElementID) []spdx.ElementID { +func SortElementIDs(eIDs []common.ElementID) []common.ElementID { sort.Slice(eIDs, func(i, j int) bool { return eIDs[i] < eIDs[j] }) diff --git a/spdxlib/element_ids_test.go b/spdxlib/element_ids_test.go index 3642e16..83893ba 100644 --- a/spdxlib/element_ids_test.go +++ b/spdxlib/element_ids_test.go @@ -3,16 +3,17 @@ package spdxlib import ( - "github.com/spdx/tools-golang/spdx" "reflect" "testing" + + "github.com/spdx/tools-golang/spdx/common" ) func TestSortElementIDs(t *testing.T) { - eIDs := []spdx.ElementID{"def", "abc", "123"} + eIDs := []common.ElementID{"def", "abc", "123"} eIDs = SortElementIDs(eIDs) - if !reflect.DeepEqual(eIDs, []spdx.ElementID{"123", "abc", "def"}) { + if !reflect.DeepEqual(eIDs, []common.ElementID{"123", "abc", "def"}) { t.Fatalf("expected sorted ElementIDs, got: %v", eIDs) } } diff --git a/spdxlib/relationships.go b/spdxlib/relationships.go index ecc5a19..5ff4197 100644 --- a/spdxlib/relationships.go +++ b/spdxlib/relationships.go @@ -2,12 +2,16 @@ package spdxlib -import "github.com/spdx/tools-golang/spdx" +import ( + "github.com/spdx/tools-golang/spdx/common" + "github.com/spdx/tools-golang/spdx/v2_1" + "github.com/spdx/tools-golang/spdx/v2_2" +) // FilterRelationships2_1 returns a slice of Element IDs returned by the given filter closure. The closure is passed // one relationship at a time, and it can return an ElementID or nil. -func FilterRelationships2_1(doc *spdx.Document2_1, filter func(*spdx.Relationship2_1) *spdx.ElementID) ([]spdx.ElementID, error) { - elementIDs := []spdx.ElementID{} +func FilterRelationships2_1(doc *v2_1.Document, filter func(*v2_1.Relationship) *common.ElementID) ([]common.ElementID, error) { + elementIDs := []common.ElementID{} for _, relationship := range doc.Relationships { if id := filter(relationship); id != nil { @@ -20,8 +24,8 @@ func FilterRelationships2_1(doc *spdx.Document2_1, filter func(*spdx.Relationshi // FilterRelationships2_2 returns a slice of Element IDs returned by the given filter closure. The closure is passed // one relationship at a time, and it can return an ElementID or nil. -func FilterRelationships2_2(doc *spdx.Document2_2, filter func(*spdx.Relationship2_2) *spdx.ElementID) ([]spdx.ElementID, error) { - elementIDs := []spdx.ElementID{} +func FilterRelationships2_2(doc *v2_2.Document, filter func(*v2_2.Relationship) *common.ElementID) ([]common.ElementID, error) { + elementIDs := []common.ElementID{} for _, relationship := range doc.Relationships { if id := filter(relationship); id != nil { diff --git a/spdxlib/relationships_test.go b/spdxlib/relationships_test.go index e710d6e..5772887 100644 --- a/spdxlib/relationships_test.go +++ b/spdxlib/relationships_test.go @@ -5,56 +5,58 @@ package spdxlib import ( "testing" - "github.com/spdx/tools-golang/spdx" + "github.com/spdx/tools-golang/spdx/common" + "github.com/spdx/tools-golang/spdx/v2_1" + "github.com/spdx/tools-golang/spdx/v2_2" ) // ===== 2.1 tests ===== func Test2_1FilterForDependencies(t *testing.T) { // set up document and some packages and relationships - doc := &spdx.Document2_1{ + doc := &v2_1.Document{ SPDXVersion: "SPDX-2.1", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_1{}, - Packages: []*spdx.Package2_1{ + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_1.CreationInfo{}, + Packages: []*v2_1.Package{ {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, {PackageName: "pkg4", PackageSPDXIdentifier: "p4"}, {PackageName: "pkg5", PackageSPDXIdentifier: "p5"}, }, - Relationships: []*spdx.Relationship2_1{ + Relationships: []*v2_1.Relationship{ { - RefA: spdx.MakeDocElementID("", "DOCUMENT"), - RefB: spdx.MakeDocElementID("", "p1"), + RefA: common.MakeDocElementID("", "DOCUMENT"), + RefB: common.MakeDocElementID("", "p1"), Relationship: "DESCRIBES", }, { - RefA: spdx.MakeDocElementID("", "DOCUMENT"), - RefB: spdx.MakeDocElementID("", "p5"), + RefA: common.MakeDocElementID("", "DOCUMENT"), + RefB: common.MakeDocElementID("", "p5"), Relationship: "DESCRIBES", }, { - RefA: spdx.MakeDocElementID("", "p4"), - RefB: spdx.MakeDocElementID("", "DOCUMENT"), + RefA: common.MakeDocElementID("", "p4"), + RefB: common.MakeDocElementID("", "DOCUMENT"), Relationship: "DESCRIBED_BY", }, { - RefA: spdx.MakeDocElementID("", "p1"), - RefB: spdx.MakeDocElementID("", "p2"), + RefA: common.MakeDocElementID("", "p1"), + RefB: common.MakeDocElementID("", "p2"), Relationship: "DEPENDS_ON", }, { - RefA: spdx.MakeDocElementID("", "p3"), - RefB: spdx.MakeDocElementID("", "p4"), + RefA: common.MakeDocElementID("", "p3"), + RefB: common.MakeDocElementID("", "p4"), Relationship: "DEPENDENCY_OF", }, }, } - eIDs, err := FilterRelationships2_1(doc, func(relationship *spdx.Relationship2_1) *spdx.ElementID { - p1EID := spdx.MakeDocElementID("", "p1") + eIDs, err := FilterRelationships2_1(doc, func(relationship *v2_1.Relationship) *common.ElementID { + p1EID := common.MakeDocElementID("", "p1") if relationship.Relationship == "DEPENDS_ON" && relationship.RefA == p1EID { return &relationship.RefB.ElementRefID } else if relationship.Relationship == "DEPENDENCY_OF" && relationship.RefB == p1EID { @@ -71,7 +73,7 @@ func Test2_1FilterForDependencies(t *testing.T) { t.Fatalf("expected 1 ElementID, got: %v", eIDs) } - if eIDs[0] != spdx.MakeDocElementID("", "p2").ElementRefID { + if eIDs[0] != common.MakeDocElementID("", "p2").ElementRefID { t.Fatalf("received unexpected relationship: %v", eIDs[0]) } } @@ -80,46 +82,46 @@ func Test2_1FilterForDependencies(t *testing.T) { func Test2_2FindsDependsOnRelationships(t *testing.T) { // set up document and some packages and relationships - doc := &spdx.Document2_2{ + doc := &v2_2.Document{ SPDXVersion: "SPDX-2.2", DataLicense: "CC0-1.0", - SPDXIdentifier: spdx.ElementID("DOCUMENT"), - CreationInfo: &spdx.CreationInfo2_2{}, - Packages: []*spdx.Package2_2{ + SPDXIdentifier: common.ElementID("DOCUMENT"), + CreationInfo: &v2_2.CreationInfo{}, + Packages: []*v2_2.Package{ {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, {PackageName: "pkg4", PackageSPDXIdentifier: "p4"}, {PackageName: "pkg5", PackageSPDXIdentifier: "p5"}, }, - Relationships: []*spdx.Relationship2_2{ + Relationships: []*v2_2.Relationship{ { - RefA: spdx.MakeDocElementID("", "DOCUMENT"), - RefB: spdx.MakeDocElementID("", "p1"), + RefA: common.MakeDocElementID("", "DOCUMENT"), + RefB: common.MakeDocElementID("", "p1"), Relationship: "DESCRIBES", }, { - RefA: spdx.MakeDocElementID("", "DOCUMENT"), - RefB: spdx.MakeDocElementID("", "p5"), + RefA: common.MakeDocElementID("", "DOCUMENT"), + RefB: common.MakeDocElementID("", "p5"), Relationship: "DESCRIBES", }, // inverse relationship -- should also get detected { - RefA: spdx.MakeDocElementID("", "p4"), - RefB: spdx.MakeDocElementID("", "DOCUMENT"), + RefA: common.MakeDocElementID("", "p4"), + RefB: common.MakeDocElementID("", "DOCUMENT"), Relationship: "DESCRIBED_BY", }, // different relationship { - RefA: spdx.MakeDocElementID("", "p1"), - RefB: spdx.MakeDocElementID("", "p2"), + RefA: common.MakeDocElementID("", "p1"), + RefB: common.MakeDocElementID("", "p2"), Relationship: "DEPENDS_ON", }, }, } - eIDs, err := FilterRelationships2_2(doc, func(relationship *spdx.Relationship2_2) *spdx.ElementID { - p1EID := spdx.MakeDocElementID("", "p1") + eIDs, err := FilterRelationships2_2(doc, func(relationship *v2_2.Relationship) *common.ElementID { + p1EID := common.MakeDocElementID("", "p1") if relationship.Relationship == "DEPENDS_ON" && relationship.RefA == p1EID { return &relationship.RefB.ElementRefID } else if relationship.Relationship == "DEPENDENCY_OF" && relationship.RefB == p1EID { @@ -136,7 +138,7 @@ func Test2_2FindsDependsOnRelationships(t *testing.T) { t.Fatalf("expected 1 ElementID, got: %v", eIDs) } - if eIDs[0] != spdx.MakeDocElementID("", "p2").ElementRefID { + if eIDs[0] != common.MakeDocElementID("", "p2").ElementRefID { t.Fatalf("received unexpected relationship: %v", eIDs[0]) } } |