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 "github.com/spdx/tools-golang/spdx/v2_3" 12*ba677afaSXin Li) 13*ba677afaSXin Li 14*ba677afaSXin Li// ===== 2.1 tests ===== 15*ba677afaSXin Li 16*ba677afaSXin Lifunc Test2_1ValidDocumentPassesValidation(t *testing.T) { 17*ba677afaSXin Li // set up document and some packages and relationships 18*ba677afaSXin Li doc := &v2_1.Document{ 19*ba677afaSXin Li SPDXVersion: "SPDX-2.1", 20*ba677afaSXin Li DataLicense: "CC0-1.0", 21*ba677afaSXin Li SPDXIdentifier: common.ElementID("DOCUMENT"), 22*ba677afaSXin Li CreationInfo: &v2_1.CreationInfo{}, 23*ba677afaSXin Li Packages: []*v2_1.Package{ 24*ba677afaSXin Li {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, 25*ba677afaSXin Li {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, 26*ba677afaSXin Li {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, 27*ba677afaSXin Li {PackageName: "pkg4", PackageSPDXIdentifier: "p4"}, 28*ba677afaSXin Li {PackageName: "pkg5", PackageSPDXIdentifier: "p5"}, 29*ba677afaSXin Li }, 30*ba677afaSXin Li Relationships: []*v2_1.Relationship{ 31*ba677afaSXin Li { 32*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 33*ba677afaSXin Li RefB: common.MakeDocElementID("", "p1"), 34*ba677afaSXin Li Relationship: "DESCRIBES", 35*ba677afaSXin Li }, 36*ba677afaSXin Li { 37*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 38*ba677afaSXin Li RefB: common.MakeDocElementID("", "p5"), 39*ba677afaSXin Li Relationship: "DESCRIBES", 40*ba677afaSXin Li }, 41*ba677afaSXin Li // inverse relationship -- should also get detected 42*ba677afaSXin Li { 43*ba677afaSXin Li RefA: common.MakeDocElementID("", "p4"), 44*ba677afaSXin Li RefB: common.MakeDocElementID("", "DOCUMENT"), 45*ba677afaSXin Li Relationship: "DESCRIBED_BY", 46*ba677afaSXin Li }, 47*ba677afaSXin Li // different relationship 48*ba677afaSXin Li { 49*ba677afaSXin Li RefA: common.MakeDocElementID("", "p1"), 50*ba677afaSXin Li RefB: common.MakeDocElementID("", "p2"), 51*ba677afaSXin Li Relationship: "DEPENDS_ON", 52*ba677afaSXin Li }, 53*ba677afaSXin Li }, 54*ba677afaSXin Li } 55*ba677afaSXin Li 56*ba677afaSXin Li err := ValidateDocument2_1(doc) 57*ba677afaSXin Li if err != nil { 58*ba677afaSXin Li t.Fatalf("expected nil error, got: %s", err.Error()) 59*ba677afaSXin Li } 60*ba677afaSXin Li} 61*ba677afaSXin Li 62*ba677afaSXin Lifunc Test2_1InvalidDocumentFailsValidation(t *testing.T) { 63*ba677afaSXin Li // set up document and some packages and relationships 64*ba677afaSXin Li doc := &v2_1.Document{ 65*ba677afaSXin Li SPDXVersion: "SPDX-2.1", 66*ba677afaSXin Li DataLicense: "CC0-1.0", 67*ba677afaSXin Li SPDXIdentifier: common.ElementID("DOCUMENT"), 68*ba677afaSXin Li CreationInfo: &v2_1.CreationInfo{}, 69*ba677afaSXin Li Packages: []*v2_1.Package{ 70*ba677afaSXin Li {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, 71*ba677afaSXin Li {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, 72*ba677afaSXin Li {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, 73*ba677afaSXin Li }, 74*ba677afaSXin Li Relationships: []*v2_1.Relationship{ 75*ba677afaSXin Li { 76*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 77*ba677afaSXin Li RefB: common.MakeDocElementID("", "p1"), 78*ba677afaSXin Li Relationship: "DESCRIBES", 79*ba677afaSXin Li }, 80*ba677afaSXin Li { 81*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 82*ba677afaSXin Li RefB: common.MakeDocElementID("", "p2"), 83*ba677afaSXin Li Relationship: "DESCRIBES", 84*ba677afaSXin Li }, 85*ba677afaSXin Li // invalid ID p99 86*ba677afaSXin Li { 87*ba677afaSXin Li RefA: common.MakeDocElementID("", "p1"), 88*ba677afaSXin Li RefB: common.MakeDocElementID("", "p99"), 89*ba677afaSXin Li Relationship: "DEPENDS_ON", 90*ba677afaSXin Li }, 91*ba677afaSXin Li }, 92*ba677afaSXin Li } 93*ba677afaSXin Li 94*ba677afaSXin Li err := ValidateDocument2_1(doc) 95*ba677afaSXin Li if err == nil { 96*ba677afaSXin Li t.Fatalf("expected non-nil error, got nil") 97*ba677afaSXin Li } 98*ba677afaSXin Li} 99*ba677afaSXin Li 100*ba677afaSXin Li// ===== 2.2 tests ===== 101*ba677afaSXin Li 102*ba677afaSXin Lifunc Test2_2ValidDocumentPassesValidation(t *testing.T) { 103*ba677afaSXin Li // set up document and some packages and relationships 104*ba677afaSXin Li doc := &v2_2.Document{ 105*ba677afaSXin Li SPDXVersion: "SPDX-2.1", 106*ba677afaSXin Li DataLicense: "CC0-1.0", 107*ba677afaSXin Li SPDXIdentifier: common.ElementID("DOCUMENT"), 108*ba677afaSXin Li CreationInfo: &v2_2.CreationInfo{}, 109*ba677afaSXin Li Packages: []*v2_2.Package{ 110*ba677afaSXin Li {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, 111*ba677afaSXin Li {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, 112*ba677afaSXin Li {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, 113*ba677afaSXin Li {PackageName: "pkg4", PackageSPDXIdentifier: "p4"}, 114*ba677afaSXin Li {PackageName: "pkg5", PackageSPDXIdentifier: "p5"}, 115*ba677afaSXin Li }, 116*ba677afaSXin Li Relationships: []*v2_2.Relationship{ 117*ba677afaSXin Li { 118*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 119*ba677afaSXin Li RefB: common.MakeDocElementID("", "p1"), 120*ba677afaSXin Li Relationship: "DESCRIBES", 121*ba677afaSXin Li }, 122*ba677afaSXin Li { 123*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 124*ba677afaSXin Li RefB: common.MakeDocElementID("", "p5"), 125*ba677afaSXin Li Relationship: "DESCRIBES", 126*ba677afaSXin Li }, 127*ba677afaSXin Li // inverse relationship -- should also get detected 128*ba677afaSXin Li { 129*ba677afaSXin Li RefA: common.MakeDocElementID("", "p4"), 130*ba677afaSXin Li RefB: common.MakeDocElementID("", "DOCUMENT"), 131*ba677afaSXin Li Relationship: "DESCRIBED_BY", 132*ba677afaSXin Li }, 133*ba677afaSXin Li // different relationship 134*ba677afaSXin Li { 135*ba677afaSXin Li RefA: common.MakeDocElementID("", "p1"), 136*ba677afaSXin Li RefB: common.MakeDocElementID("", "p2"), 137*ba677afaSXin Li Relationship: "DEPENDS_ON", 138*ba677afaSXin Li }, 139*ba677afaSXin Li }, 140*ba677afaSXin Li } 141*ba677afaSXin Li 142*ba677afaSXin Li err := ValidateDocument2_2(doc) 143*ba677afaSXin Li if err != nil { 144*ba677afaSXin Li t.Fatalf("expected nil error, got: %s", err.Error()) 145*ba677afaSXin Li } 146*ba677afaSXin Li} 147*ba677afaSXin Li 148*ba677afaSXin Lifunc Test2_2InvalidDocumentFailsValidation(t *testing.T) { 149*ba677afaSXin Li // set up document and some packages and relationships 150*ba677afaSXin Li doc := &v2_2.Document{ 151*ba677afaSXin Li SPDXVersion: "SPDX-2.1", 152*ba677afaSXin Li DataLicense: "CC0-1.0", 153*ba677afaSXin Li SPDXIdentifier: common.ElementID("DOCUMENT"), 154*ba677afaSXin Li CreationInfo: &v2_2.CreationInfo{}, 155*ba677afaSXin Li Packages: []*v2_2.Package{ 156*ba677afaSXin Li {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, 157*ba677afaSXin Li {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, 158*ba677afaSXin Li {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, 159*ba677afaSXin Li }, 160*ba677afaSXin Li Relationships: []*v2_2.Relationship{ 161*ba677afaSXin Li { 162*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 163*ba677afaSXin Li RefB: common.MakeDocElementID("", "p1"), 164*ba677afaSXin Li Relationship: "DESCRIBES", 165*ba677afaSXin Li }, 166*ba677afaSXin Li { 167*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 168*ba677afaSXin Li RefB: common.MakeDocElementID("", "p5"), 169*ba677afaSXin Li Relationship: "DESCRIBES", 170*ba677afaSXin Li }, 171*ba677afaSXin Li // invalid ID p99 172*ba677afaSXin Li { 173*ba677afaSXin Li RefA: common.MakeDocElementID("", "p1"), 174*ba677afaSXin Li RefB: common.MakeDocElementID("", "p99"), 175*ba677afaSXin Li Relationship: "DEPENDS_ON", 176*ba677afaSXin Li }, 177*ba677afaSXin Li }, 178*ba677afaSXin Li } 179*ba677afaSXin Li 180*ba677afaSXin Li err := ValidateDocument2_2(doc) 181*ba677afaSXin Li if err == nil { 182*ba677afaSXin Li t.Fatalf("expected non-nil error, got nil") 183*ba677afaSXin Li } 184*ba677afaSXin Li} 185*ba677afaSXin Li 186*ba677afaSXin Li// ===== 2.3 tests ===== 187*ba677afaSXin Li 188*ba677afaSXin Lifunc Test2_3ValidDocumentPassesValidation(t *testing.T) { 189*ba677afaSXin Li // set up document and some packages and relationships 190*ba677afaSXin Li doc := &v2_3.Document{ 191*ba677afaSXin Li SPDXVersion: "SPDX-2.3", 192*ba677afaSXin Li DataLicense: "CC0-1.0", 193*ba677afaSXin Li SPDXIdentifier: common.ElementID("DOCUMENT"), 194*ba677afaSXin Li CreationInfo: &v2_3.CreationInfo{}, 195*ba677afaSXin Li Packages: []*v2_3.Package{ 196*ba677afaSXin Li {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, 197*ba677afaSXin Li {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, 198*ba677afaSXin Li {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, 199*ba677afaSXin Li {PackageName: "pkg4", PackageSPDXIdentifier: "p4"}, 200*ba677afaSXin Li {PackageName: "pkg5", PackageSPDXIdentifier: "p5"}, 201*ba677afaSXin Li }, 202*ba677afaSXin Li Relationships: []*v2_3.Relationship{ 203*ba677afaSXin Li { 204*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 205*ba677afaSXin Li RefB: common.MakeDocElementID("", "p1"), 206*ba677afaSXin Li Relationship: "DESCRIBES", 207*ba677afaSXin Li }, 208*ba677afaSXin Li { 209*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 210*ba677afaSXin Li RefB: common.MakeDocElementID("", "p5"), 211*ba677afaSXin Li Relationship: "DESCRIBES", 212*ba677afaSXin Li }, 213*ba677afaSXin Li // inverse relationship -- should also get detected 214*ba677afaSXin Li { 215*ba677afaSXin Li RefA: common.MakeDocElementID("", "p4"), 216*ba677afaSXin Li RefB: common.MakeDocElementID("", "DOCUMENT"), 217*ba677afaSXin Li Relationship: "DESCRIBED_BY", 218*ba677afaSXin Li }, 219*ba677afaSXin Li // different relationship 220*ba677afaSXin Li { 221*ba677afaSXin Li RefA: common.MakeDocElementID("", "p1"), 222*ba677afaSXin Li RefB: common.MakeDocElementID("", "p2"), 223*ba677afaSXin Li Relationship: "DEPENDS_ON", 224*ba677afaSXin Li }, 225*ba677afaSXin Li }, 226*ba677afaSXin Li } 227*ba677afaSXin Li 228*ba677afaSXin Li err := ValidateDocument2_3(doc) 229*ba677afaSXin Li if err != nil { 230*ba677afaSXin Li t.Fatalf("expected nil error, got: %s", err.Error()) 231*ba677afaSXin Li } 232*ba677afaSXin Li} 233*ba677afaSXin Li 234*ba677afaSXin Lifunc Test2_3InvalidDocumentFailsValidation(t *testing.T) { 235*ba677afaSXin Li // set up document and some packages and relationships 236*ba677afaSXin Li doc := &v2_3.Document{ 237*ba677afaSXin Li SPDXVersion: "SPDX-2.3", 238*ba677afaSXin Li DataLicense: "CC0-1.0", 239*ba677afaSXin Li SPDXIdentifier: common.ElementID("DOCUMENT"), 240*ba677afaSXin Li CreationInfo: &v2_3.CreationInfo{}, 241*ba677afaSXin Li Packages: []*v2_3.Package{ 242*ba677afaSXin Li {PackageName: "pkg1", PackageSPDXIdentifier: "p1"}, 243*ba677afaSXin Li {PackageName: "pkg2", PackageSPDXIdentifier: "p2"}, 244*ba677afaSXin Li {PackageName: "pkg3", PackageSPDXIdentifier: "p3"}, 245*ba677afaSXin Li }, 246*ba677afaSXin Li Relationships: []*v2_3.Relationship{ 247*ba677afaSXin Li { 248*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 249*ba677afaSXin Li RefB: common.MakeDocElementID("", "p1"), 250*ba677afaSXin Li Relationship: "DESCRIBES", 251*ba677afaSXin Li }, 252*ba677afaSXin Li { 253*ba677afaSXin Li RefA: common.MakeDocElementID("", "DOCUMENT"), 254*ba677afaSXin Li RefB: common.MakeDocElementID("", "p5"), 255*ba677afaSXin Li Relationship: "DESCRIBES", 256*ba677afaSXin Li }, 257*ba677afaSXin Li // invalid ID p99 258*ba677afaSXin Li { 259*ba677afaSXin Li RefA: common.MakeDocElementID("", "p1"), 260*ba677afaSXin Li RefB: common.MakeDocElementID("", "p99"), 261*ba677afaSXin Li Relationship: "DEPENDS_ON", 262*ba677afaSXin Li }, 263*ba677afaSXin Li }, 264*ba677afaSXin Li } 265*ba677afaSXin Li 266*ba677afaSXin Li err := ValidateDocument2_3(doc) 267*ba677afaSXin Li if err == nil { 268*ba677afaSXin Li t.Fatalf("expected non-nil error, got nil") 269*ba677afaSXin Li } 270*ba677afaSXin Li} 271