1// SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 2 3package parser2v2 4 5import ( 6 "testing" 7 8 gordfParser "github.com/spdx/gordf/rdfloader/parser" 9) 10 11func Test_rdfParser2_2_getExternalDocumentRefFromNode(t *testing.T) { 12 var parser *rdfParser2_2 13 var node *gordfParser.Node 14 var err error 15 16 // TestCase 1: invalid checksum 17 parser, _ = parserFromBodyContent(` 18 <spdx:ExternalDocumentRef> 19 <spdx:externalDocumentId>DocumentRef-spdx-tool-1.2</spdx:externalDocumentId> 20 <spdx:checksum> 21 <spdx:Checksum> 22 <spdx:checksumValue>d6a770ba38583ed4bb4525bd96e50461655d2759</spdx:checksumValue> 23 <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha999"/> 24 </spdx:Checksum> 25 </spdx:checksum> 26 <spdx:spdxDocument rdf:resource="http://spdx.org/spdxdocs/spdx-tools-v1.2-3F2504E0-4F89-41D3-9A0C-0305E82C3301"/> 27 </spdx:ExternalDocumentRef> 28 `) 29 node = parser.gordfParserObj.Triples[0].Subject 30 _, err = parser.getExternalDocumentRefFromNode(node) 31 if err == nil { 32 t.Errorf("expected an error due to invalid checksum, found %v", err) 33 } 34 35 // TestCase 2: unknown predicate 36 parser, _ = parserFromBodyContent(` 37 <spdx:ExternalDocumentRef> 38 <spdx:unknownTag /> 39 </spdx:ExternalDocumentRef> 40 `) 41 node = parser.gordfParserObj.Triples[0].Subject 42 _, err = parser.getExternalDocumentRefFromNode(node) 43 if err == nil { 44 t.Errorf("expected an error due to invalid predicate, found %v", err) 45 } 46 47 // TestCase 3: valid example 48 parser, _ = parserFromBodyContent(` 49 <spdx:ExternalDocumentRef> 50 <spdx:externalDocumentId>DocumentRef-spdx-tool-1.2</spdx:externalDocumentId> 51 <spdx:checksum> 52 <spdx:Checksum> 53 <spdx:checksumValue>d6a770ba38583ed4bb4525bd96e50461655d2759</spdx:checksumValue> 54 <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha256"/> 55 </spdx:Checksum> 56 </spdx:checksum> 57 <spdx:spdxDocument rdf:resource="http://spdx.org/spdxdocs/spdx-tools-v1.2-3F2504E0-4F89-41D3-9A0C-0305E82C3301"/> 58 </spdx:ExternalDocumentRef> 59 `) 60 node = parser.gordfParserObj.Triples[0].Subject 61 _, err = parser.getExternalDocumentRefFromNode(node) 62 if err != nil { 63 t.Errorf("unexpected error: %v", err) 64 } 65} 66 67func Test_rdfParser2_2_parseSpdxDocumentNode(t *testing.T) { 68 var parser *rdfParser2_2 69 var node *gordfParser.Node 70 var err error 71 72 // TestCase 1: invalid spdx id of the document 73 parser, _ = parserFromBodyContent(` 74 <spdx:SpdxDocument rdf:about="http://spdx.org/spdxdocs/spdx-example-444504E0-4F89-41D3-9A0C-0305E82C3301/Document"/> 75 `) 76 node = parser.gordfParserObj.Triples[0].Subject 77 err = parser.parseSpdxDocumentNode(node) 78 if err == nil { 79 t.Errorf("expected an error due to invalid document id, got %v", err) 80 } 81 82 // TestCase 2: erroneous dataLicense 83 parser, _ = parserFromBodyContent(` 84 <spdx:SpdxDocument rdf:about="#SPDXRef-Document"> 85 <spdx:dataLicense rdf:resource="http://spdx.org/rdf/terms#Unknown" /> 86 </spdx:SpdxDocument> 87 `) 88 node = parser.gordfParserObj.Triples[0].Subject 89 err = parser.parseSpdxDocumentNode(node) 90 if err == nil { 91 t.Errorf("expected an error due to invalid dataLicense, got %v", err) 92 } 93 94 // TestCase 3: invalid external document ref 95 parser, _ = parserFromBodyContent(` 96 <spdx:SpdxDocument rdf:about="#SPDXRef-Document"> 97 <spdx:externalDocumentRef> 98 <spdx:ExternalDocumentRef> 99 <spdx:externalDocumentId>DocumentRef-spdx-tool-1.2</spdx:externalDocumentId> 100 <spdx:checksum> 101 <spdx:Checksum> 102 <spdx:checksumValue>d6a770ba38583ed4bb4525bd96e50461655d2759</spdx:checksumValue> 103 <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha999"/> 104 </spdx:Checksum> 105 </spdx:checksum> 106 <spdx:spdxDocument rdf:resource="http://spdx.org/spdxdocs/spdx-tools-v1.2-3F2504E0-4F89-41D3-9A0C-0305E82C3301"/> 107 </spdx:ExternalDocumentRef> 108 </spdx:externalDocumentRef> 109 </spdx:SpdxDocument> 110 `) 111 node = parser.gordfParserObj.Triples[0].Subject 112 err = parser.parseSpdxDocumentNode(node) 113 if err == nil { 114 t.Errorf("expected an error due to invalid externalDocumentRef, got %v", err) 115 } 116 117 // TestCase 4: invalid package 118 parser, _ = parserFromBodyContent(` 119 <spdx:SpdxDocument rdf:about="#SPDXRef-Document"> 120 <spdx:describesPackage> 121 <spdx:Package rdf:about="http://www.spdx.org/spdxdocs/8f141b09-1138-4fc5-aecb-fc10d9ac1eed#SPDX-1"/> 122 </spdx:describesPackage> 123 </spdx:SpdxDocument> 124 `) 125 node = parser.gordfParserObj.Triples[0].Subject 126 err = parser.parseSpdxDocumentNode(node) 127 if err == nil { 128 t.Errorf("expected an error due to invalid externalDocumentRef, got %v", err) 129 } 130 131 // TestCase 5: error in extractedLicensingInfo 132 parser, _ = parserFromBodyContent(` 133 <spdx:SpdxDocument rdf:about="#SPDXRef-Document"> 134 <spdx:hasExtractedLicensingInfo> 135 <spdx:ExtractedLicensingInfo rdf:about="#LicenseRef-Freeware"> 136 <spdx:invalidTag /> 137 <spdx:licenseId>LicenseRef-Freeware</spdx:licenseId> 138 <spdx:name>freeware</spdx:name> 139 <spdx:extractedText> 140<![CDATA[Software classified as freeware is licensed at no cost and is either fully functional for an unlimited time; or has only basic functions enabled with a fully functional version available commercially or as shareware.[8] In contrast to free software, the author usually restricts one or more rights of the user, including the rights to use, copy, distribute, modify and make derivative works of the software or extract the source code.[1][2][9][10] The software license may impose various additional restrictions on the type of use, e.g. only for personal use, private use, individual use, non-profit use, non-commercial use, academic use, educational use, use in charity or humanitarian organizations, non-military use, use by public authorities or various other combinations of these type of restrictions.[11] For instance, the license may be "free for private, non-commercial use". The software license may also impose various other restrictions, such as restricted use over a network, restricted use on a server, restricted use in a combination with some types of other software or with some hardware devices, prohibited distribution over the Internet other than linking to author's website, restricted distribution without author's consent, restricted number of copies, etc.]]> 141 </spdx:extractedText> 142 </spdx:ExtractedLicensingInfo> 143 </spdx:hasExtractedLicensingInfo> 144 </spdx:SpdxDocument> 145 `) 146 node = parser.gordfParserObj.Triples[0].Subject 147 err = parser.parseSpdxDocumentNode(node) 148 if err == nil { 149 t.Errorf("expected an error due to invalid extractedLicensingInfo, got %v", err) 150 } 151 152 // TestCase 6: error in annotation 153 parser, _ = parserFromBodyContent(` 154 <spdx:SpdxDocument rdf:about="#SPDXRef-Document"> 155 <spdx:annotation> 156 <spdx:Annotation> 157 <spdx:unknownAttribute /> 158 </spdx:Annotation> 159 </spdx:annotation> 160 </spdx:SpdxDocument> 161 `) 162 node = parser.gordfParserObj.Triples[0].Subject 163 err = parser.parseSpdxDocumentNode(node) 164 if err == nil { 165 t.Errorf("expected an error due to invalid extractedLicensingInfo, got %v", err) 166 } 167 168 // TestCase 7: invalid predicate 169 parser, _ = parserFromBodyContent(` 170 <spdx:SpdxDocument rdf:about="#SPDXRef-Document"> 171 <spdx:unknownTag /> 172 </spdx:SpdxDocument> 173 `) 174 node = parser.gordfParserObj.Triples[0].Subject 175 err = parser.parseSpdxDocumentNode(node) 176 if err == nil { 177 t.Errorf("expected an error due to unknown predicate, got %v", err) 178 } 179 180 // TestCase 7: everything valid 181 parser, _ = parserFromBodyContent(` 182 <spdx:SpdxDocument rdf:about="#SPDXRef-Document"> 183 <spdx:specVersion>SPDX-2.1</spdx:specVersion> 184 <spdx:dataLicense rdf:resource="http://spdx.org/licenses/CC0-1.0" /> 185 <spdx:name>/test/example</spdx:name> 186 <spdx:externalDocumentRef> 187 <spdx:ExternalDocumentRef> 188 <spdx:externalDocumentId>DocumentRef-spdx-tool-1.2</spdx:externalDocumentId> 189 <spdx:checksum> 190 <spdx:Checksum> 191 <spdx:checksumValue>d6a770ba38583ed4bb4525bd96e50461655d2759</spdx:checksumValue> 192 <spdx:algorithm rdf:resource="http://spdx.org/rdf/terms#checksumAlgorithm_sha1"/> 193 </spdx:Checksum> 194 </spdx:checksum> 195 <spdx:spdxDocument rdf:resource="http://spdx.org/spdxdocs/spdx-tools-v1.2-3F2504E0-4F89-41D3-9A0C-0305E82C3301"/> 196 </spdx:ExternalDocumentRef> 197 </spdx:externalDocumentRef> 198 <spdx:creationInfo> 199 <spdx:CreationInfo> 200 <spdx:licenseListVersion>2.6</spdx:licenseListVersion> 201 <spdx:creator>Person: spdx (y)</spdx:creator> 202 <spdx:creator>Organization: </spdx:creator> 203 <spdx:creator>Tool: spdx2</spdx:creator> 204 <spdx:created>2018-08-24T19:55:34Z</spdx:created> 205 </spdx:CreationInfo> 206 </spdx:creationInfo> 207 <rdfs:comment>test</rdfs:comment> 208 <spdx:reviewed> 209 <spdx:Review> 210 <rdfs:comment>Another example reviewer.</rdfs:comment> 211 <spdx:reviewDate>2011-03-13T00:00:00Z</spdx:reviewDate> 212 <spdx:reviewer>Person: Suzanne Reviewer</spdx:reviewer> 213 </spdx:Review> 214 </spdx:reviewed> 215 <spdx:describesPackage> 216 <spdx:Package rdf:about="#SPDXRef-1"/> 217 </spdx:describesPackage> 218 <spdx:hasExtractedLicensingInfo rdf:resource="http://spdx.org/licenses/CC0-1.0"/> 219 <spdx:relationship> 220 <spdx:Relationship> 221 <spdx:relationshipType rdf:resource="http://spdx.org/rdf/terms#relationshipType_containedBy"/> 222 <spdx:relatedSpdxElement rdf:resource="http://spdx.org/documents/spdx-toolsv2.1.7-SNAPSHOT#SPDXRef-1"/> 223 <rdfs:comment></rdfs:comment> 224 </spdx:Relationship> 225 </spdx:relationship> 226 <spdx:annotation> 227 <spdx:Annotation> 228 <spdx:annotationDate>2011-01-29T18:30:22Z</spdx:annotationDate> 229 <rdfs:comment>test annotation</rdfs:comment> 230 <spdx:annotator>Person: Rishabh Bhatnagar</spdx:annotator> 231 <spdx:annotationType rdf:resource="http://spdx.org/rdf/terms#annotationType_other"/> 232 </spdx:Annotation> 233 </spdx:annotation> 234 </spdx:SpdxDocument> 235 `) 236 node = parser.gordfParserObj.Triples[0].Subject 237 err = parser.parseSpdxDocumentNode(node) 238 if err != nil { 239 t.Errorf("unexpected error: %v", err) 240 } 241} 242