1*ba677afaSXin Li// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2*ba677afaSXin Li 3*ba677afaSXin Lipackage rdfloader 4*ba677afaSXin Li 5*ba677afaSXin Liimport ( 6*ba677afaSXin Li "io" 7*ba677afaSXin Li "strings" 8*ba677afaSXin Li "testing" 9*ba677afaSXin Li) 10*ba677afaSXin Li 11*ba677afaSXin Lifunc TestLoad2_2(t *testing.T) { 12*ba677afaSXin Li var reader io.Reader 13*ba677afaSXin Li var err error 14*ba677afaSXin Li 15*ba677afaSXin Li // TestCase 1: invalid rdf/xml must raise an error 16*ba677afaSXin Li reader = strings.NewReader("") 17*ba677afaSXin Li _, err = Load2_2(reader) 18*ba677afaSXin Li if err == nil { 19*ba677afaSXin Li t.Errorf("expected an EOF error reading an empty file, got %v", err) 20*ba677afaSXin Li } 21*ba677afaSXin Li 22*ba677afaSXin Li // TestCase 2: Valid rdf/xml but invalid spdx document must raise an error 23*ba677afaSXin Li reader = strings.NewReader(` 24*ba677afaSXin Li <rdf:RDF 25*ba677afaSXin Li xmlns:spdx="http://spdx.org/rdf/terms#" 26*ba677afaSXin Li xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 27*ba677afaSXin Li xmlns="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#"> 28*ba677afaSXin Li </rdf:RDF> 29*ba677afaSXin Li `) 30*ba677afaSXin Li _, err = Load2_2(reader) 31*ba677afaSXin Li if err == nil { 32*ba677afaSXin Li t.Errorf("expected an error due to no SpdxDocument Node in the document") 33*ba677afaSXin Li } 34*ba677afaSXin Li} 35*ba677afaSXin Li 36*ba677afaSXin Lifunc TestLoad2_3(t *testing.T) { 37*ba677afaSXin Li var reader io.Reader 38*ba677afaSXin Li var err error 39*ba677afaSXin Li 40*ba677afaSXin Li // TestCase 1: invalid rdf/xml must raise an error 41*ba677afaSXin Li reader = strings.NewReader("") 42*ba677afaSXin Li _, err = Load2_3(reader) 43*ba677afaSXin Li if err == nil { 44*ba677afaSXin Li t.Errorf("expected an EOF error reading an empty file, got %v", err) 45*ba677afaSXin Li } 46*ba677afaSXin Li 47*ba677afaSXin Li // TestCase 2: Valid rdf/xml but invalid spdx document must raise an error 48*ba677afaSXin Li reader = strings.NewReader(` 49*ba677afaSXin Li <rdf:RDF 50*ba677afaSXin Li xmlns:spdx="http://spdx.org/rdf/terms#" 51*ba677afaSXin Li xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 52*ba677afaSXin Li xmlns="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#"> 53*ba677afaSXin Li </rdf:RDF> 54*ba677afaSXin Li `) 55*ba677afaSXin Li _, err = Load2_3(reader) 56*ba677afaSXin Li if err == nil { 57*ba677afaSXin Li t.Errorf("expected an error due to no SpdxDocument Node in the document") 58*ba677afaSXin Li } 59*ba677afaSXin Li 60*ba677afaSXin Li // TestCase 3: New SPDX package elements 61*ba677afaSXin Li reader = strings.NewReader(` 62*ba677afaSXin Li <rdf:RDF 63*ba677afaSXin Li xmlns:spdx="http://spdx.org/rdf/terms#" 64*ba677afaSXin Li xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 65*ba677afaSXin Li xmlns="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#" 66*ba677afaSXin Li xmlns:doap="http://usefulinc.com/ns/doap#" 67*ba677afaSXin Li xmlns:j.0="http://www.w3.org/2009/pointers#" 68*ba677afaSXin Li xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"> 69*ba677afaSXin Li <spdx:SpdxDocument rdf:about="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-DOCUMENT"> 70*ba677afaSXin Li <spdx:specVersion>SPDX-2.0</spdx:specVersion> 71*ba677afaSXin Li <spdx:relationship> 72*ba677afaSXin Li <spdx:Relationship> 73*ba677afaSXin Li <spdx:relationshipType rdf:resource="http://spdx.org/rdf/terms#relationshipType_describes"/> 74*ba677afaSXin Li <spdx:relatedSpdxElement> 75*ba677afaSXin Li <spdx:Package rdf:about="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301#SPDXRef-Saxon"> 76*ba677afaSXin Li <spdx:name>Some-Package</spdx:name> 77*ba677afaSXin Li <spdx:primaryPackagePurpose rdf:resource="packagePurpose_container" /> 78*ba677afaSXin Li <spdx:releaseDate>2021-10-15T02:38:00Z</spdx:releaseDate> 79*ba677afaSXin Li <spdx:builtDate>2021-09-15T02:38:00Z</spdx:builtDate> 80*ba677afaSXin Li <spdx:validUntilDate>2022-10-15T02:38:00Z</spdx:validUntilDate> 81*ba677afaSXin Li </spdx:Package> 82*ba677afaSXin Li </spdx:relatedSpdxElement> 83*ba677afaSXin Li </spdx:Relationship> 84*ba677afaSXin Li </spdx:relationship> 85*ba677afaSXin Li </spdx:SpdxDocument> 86*ba677afaSXin Li </rdf:RDF> 87*ba677afaSXin Li `) 88*ba677afaSXin Li 89*ba677afaSXin Li doc, err := Load2_3(reader) 90*ba677afaSXin Li if err != nil { 91*ba677afaSXin Li t.Errorf("expected valid SPDX document: %v", err) 92*ba677afaSXin Li } 93*ba677afaSXin Li 94*ba677afaSXin Li if doc == nil { 95*ba677afaSXin Li t.Fatalf("expected valid SPDX document but got nil") 96*ba677afaSXin Li } 97*ba677afaSXin Li 98*ba677afaSXin Li if len(doc.Packages) == 0 { 99*ba677afaSXin Li t.Errorf("expected packages but got none") 100*ba677afaSXin Li } 101*ba677afaSXin Li 102*ba677afaSXin Li pkg := doc.Packages[0] 103*ba677afaSXin Li if pkg.PackageName != "Some-Package" { 104*ba677afaSXin Li t.Errorf("expected package nameof Some-Package but got: %s", pkg.PackageName) 105*ba677afaSXin Li } 106*ba677afaSXin Li if pkg.PrimaryPackagePurpose != "CONTAINER" { 107*ba677afaSXin Li t.Errorf("expected package primary purpose of CONTAINER but got: %s", pkg.PrimaryPackagePurpose) 108*ba677afaSXin Li } 109*ba677afaSXin Li if pkg.ReleaseDate != "2021-10-15T02:38:00Z" { 110*ba677afaSXin Li t.Errorf("expected release date of 2021-10-15T02:38:00Z but got: %s", pkg.ReleaseDate) 111*ba677afaSXin Li } 112*ba677afaSXin Li if pkg.BuiltDate != "2021-09-15T02:38:00Z" { 113*ba677afaSXin Li t.Errorf("expected built date of 2021-09-15T02:38:00Z but got: %s", pkg.BuiltDate) 114*ba677afaSXin Li } 115*ba677afaSXin Li if pkg.ValidUntilDate != "2022-10-15T02:38:00Z" { 116*ba677afaSXin Li t.Errorf("expected valid until date of 2022-10-15T02:38:00Z but got: %s", pkg.ValidUntilDate) 117*ba677afaSXin Li } 118*ba677afaSXin Li} 119