1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2*ba677afaSXin Li 3*ba677afaSXin Lipackage spdxlib 4*ba677afaSXin Li 5*ba677afaSXin Liimport ( 6*ba677afaSXin Li "testing" 7*ba677afaSXin Li 8*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/common" 9*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/v2_1" 10*ba677afaSXin Li "github.com/spdx/tools-golang/spdx/v2_2" 11*ba677afaSXin Li) 12*ba677afaSXin Li 13*ba677afaSXin Li// ===== 2.1 tests ===== 14*ba677afaSXin Li 15*ba677afaSXin Lifunc Test2_1FilterForDependencies(t *testing.T) { 16*ba677afaSXin Li // set up document and some packages and relationships 17*ba677afaSXin Li doc := &v2_1.Document{ 18*ba677afaSXin Li SPDXVersion: "SPDX-2.1", 19*ba677afaSXin Li DataLicense: "CC0-1.0", 20*ba677afaSXin Li SPDXIdentifier: common.ElementID("DOCUMENT"), 21*ba677afaSXin Li CreationInfo: &v2_1.CreationInfo{}, 22*ba677afaSXin Li Packages: []*v2_1.Package{ 23*ba677afaSXin Li {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, 24*ba677afaSXin Li {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, 25*ba677afaSXin Li {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, 26*ba677afaSXin Li {PackageName: "pkg4", PackageSPDXIdentifier: "p4"}, 27*ba677afaSXin Li {PackageName: "pkg5", PackageSPDXIdentifier: "p5"}, 28*ba677afaSXin Li }, 29*ba677afaSXin Li Relationships: []*v2_1.Relationship{ 30*ba677afaSXin Li { 31*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 32*ba677afaSXin Li RefB: common.MakeDocElementID("", "p1"), 33*ba677afaSXin Li Relationship: "DESCRIBES", 34*ba677afaSXin Li }, 35*ba677afaSXin Li { 36*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 37*ba677afaSXin Li RefB: common.MakeDocElementID("", "p5"), 38*ba677afaSXin Li Relationship: "DESCRIBES", 39*ba677afaSXin Li }, 40*ba677afaSXin Li { 41*ba677afaSXin Li RefA: common.MakeDocElementID("", "p4"), 42*ba677afaSXin Li RefB: common.MakeDocElementID("", "DOCUMENT"), 43*ba677afaSXin Li Relationship: "DESCRIBED_BY", 44*ba677afaSXin Li }, 45*ba677afaSXin Li { 46*ba677afaSXin Li RefA: common.MakeDocElementID("", "p1"), 47*ba677afaSXin Li RefB: common.MakeDocElementID("", "p2"), 48*ba677afaSXin Li Relationship: "DEPENDS_ON", 49*ba677afaSXin Li }, 50*ba677afaSXin Li { 51*ba677afaSXin Li RefA: common.MakeDocElementID("", "p3"), 52*ba677afaSXin Li RefB: common.MakeDocElementID("", "p4"), 53*ba677afaSXin Li Relationship: "DEPENDENCY_OF", 54*ba677afaSXin Li }, 55*ba677afaSXin Li }, 56*ba677afaSXin Li } 57*ba677afaSXin Li 58*ba677afaSXin Li eIDs, err := FilterRelationships2_1(doc, func(relationship *v2_1.Relationship) *common.ElementID { 59*ba677afaSXin Li p1EID := common.MakeDocElementID("", "p1") 60*ba677afaSXin Li if relationship.Relationship == "DEPENDS_ON" && relationship.RefA == p1EID { 61*ba677afaSXin Li return &relationship.RefB.ElementRefID 62*ba677afaSXin Li } else if relationship.Relationship == "DEPENDENCY_OF" && relationship.RefB == p1EID { 63*ba677afaSXin Li return &relationship.RefA.ElementRefID 64*ba677afaSXin Li } 65*ba677afaSXin Li 66*ba677afaSXin Li return nil 67*ba677afaSXin Li }) 68*ba677afaSXin Li if err != nil { 69*ba677afaSXin Li t.Fatalf("expected non-nil err, got: %s", err.Error()) 70*ba677afaSXin Li } 71*ba677afaSXin Li 72*ba677afaSXin Li if len(eIDs) != 1 { 73*ba677afaSXin Li t.Fatalf("expected 1 ElementID, got: %v", eIDs) 74*ba677afaSXin Li } 75*ba677afaSXin Li 76*ba677afaSXin Li if eIDs[0] != common.MakeDocElementID("", "p2").ElementRefID { 77*ba677afaSXin Li t.Fatalf("received unexpected relationship: %v", eIDs[0]) 78*ba677afaSXin Li } 79*ba677afaSXin Li} 80*ba677afaSXin Li 81*ba677afaSXin Li// ===== 2.2 tests ===== 82*ba677afaSXin Li 83*ba677afaSXin Lifunc Test2_2FindsDependsOnRelationships(t *testing.T) { 84*ba677afaSXin Li // set up document and some packages and relationships 85*ba677afaSXin Li doc := &v2_2.Document{ 86*ba677afaSXin Li SPDXVersion: "SPDX-2.2", 87*ba677afaSXin Li DataLicense: "CC0-1.0", 88*ba677afaSXin Li SPDXIdentifier: common.ElementID("DOCUMENT"), 89*ba677afaSXin Li CreationInfo: &v2_2.CreationInfo{}, 90*ba677afaSXin Li Packages: []*v2_2.Package{ 91*ba677afaSXin Li {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, 92*ba677afaSXin Li {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, 93*ba677afaSXin Li {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, 94*ba677afaSXin Li {PackageName: "pkg4", PackageSPDXIdentifier: "p4"}, 95*ba677afaSXin Li {PackageName: "pkg5", PackageSPDXIdentifier: "p5"}, 96*ba677afaSXin Li }, 97*ba677afaSXin Li Relationships: []*v2_2.Relationship{ 98*ba677afaSXin Li { 99*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 100*ba677afaSXin Li RefB: common.MakeDocElementID("", "p1"), 101*ba677afaSXin Li Relationship: "DESCRIBES", 102*ba677afaSXin Li }, 103*ba677afaSXin Li { 104*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 105*ba677afaSXin Li RefB: common.MakeDocElementID("", "p5"), 106*ba677afaSXin Li Relationship: "DESCRIBES", 107*ba677afaSXin Li }, 108*ba677afaSXin Li // inverse relationship -- should also get detected 109*ba677afaSXin Li { 110*ba677afaSXin Li RefA: common.MakeDocElementID("", "p4"), 111*ba677afaSXin Li RefB: common.MakeDocElementID("", "DOCUMENT"), 112*ba677afaSXin Li Relationship: "DESCRIBED_BY", 113*ba677afaSXin Li }, 114*ba677afaSXin Li // different relationship 115*ba677afaSXin Li { 116*ba677afaSXin Li RefA: common.MakeDocElementID("", "p1"), 117*ba677afaSXin Li RefB: common.MakeDocElementID("", "p2"), 118*ba677afaSXin Li Relationship: "DEPENDS_ON", 119*ba677afaSXin Li }, 120*ba677afaSXin Li }, 121*ba677afaSXin Li } 122*ba677afaSXin Li 123*ba677afaSXin Li eIDs, err := FilterRelationships2_2(doc, func(relationship *v2_2.Relationship) *common.ElementID { 124*ba677afaSXin Li p1EID := common.MakeDocElementID("", "p1") 125*ba677afaSXin Li if relationship.Relationship == "DEPENDS_ON" && relationship.RefA == p1EID { 126*ba677afaSXin Li return &relationship.RefB.ElementRefID 127*ba677afaSXin Li } else if relationship.Relationship == "DEPENDENCY_OF" && relationship.RefB == p1EID { 128*ba677afaSXin Li return &relationship.RefA.ElementRefID 129*ba677afaSXin Li } 130*ba677afaSXin Li 131*ba677afaSXin Li return nil 132*ba677afaSXin Li }) 133*ba677afaSXin Li if err != nil { 134*ba677afaSXin Li t.Fatalf("expected non-nil err, got: %s", err.Error()) 135*ba677afaSXin Li } 136*ba677afaSXin Li 137*ba677afaSXin Li if len(eIDs) != 1 { 138*ba677afaSXin Li t.Fatalf("expected 1 ElementID, got: %v", eIDs) 139*ba677afaSXin Li } 140*ba677afaSXin Li 141*ba677afaSXin Li if eIDs[0] != common.MakeDocElementID("", "p2").ElementRefID { 142*ba677afaSXin Li t.Fatalf("received unexpected relationship: %v", eIDs[0]) 143*ba677afaSXin Li } 144*ba677afaSXin Li} 145