blob: 5e705801373551f953f3c654940f526ac65b87f8 [file] [log] [blame]
Ibrahim Kanouchebedf1a82022-10-22 01:28:05 +00001// Copyright 2022 Google LLC
2//
3// Licensed under the Apache License, Version 2.0 (the "License");
4// you may not use this file except in compliance with the License.
5// You may obtain a copy of the License at
6//
7// http://www.apache.org/licenses/LICENSE-2.0
8//
9// Unless required by applicable law or agreed to in writing, software
10// distributed under the License is distributed on an "AS IS" BASIS,
11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12// See the License for the specific language governing permissions and
13// limitations under the License.
14
15package main
16
17import (
18 "bufio"
19 "bytes"
20 "fmt"
21 "os"
22 "reflect"
23 "regexp"
24 "strings"
25 "testing"
26 "time"
27
28 "android/soong/tools/compliance"
29)
30
31var (
32 spdxVersionTag = regexp.MustCompile(`^\s*SPDXVersion: SPDX-2.2\s*$`)
33 spdxDataLicenseTag = regexp.MustCompile(`^\s*DataLicense: CC-1.0\s*$`)
34 spdxDocumentNameTag = regexp.MustCompile(`^\s*DocumentName:\s*Android*\s*$`)
35 spdxIDTag = regexp.MustCompile(`^\s*SPDXID:\s*SPDXRef-DOCUMENT-(.*)\s*$`)
36 spdxDocumentNameSpaceTag = regexp.MustCompile(`^\s*DocumentNamespace:\s*Android\s*$`)
37 spdxCreatorOrganizationTag = regexp.MustCompile(`^\s*Creator:\s*Organization:\s*Google LLC\s*$`)
38 spdxCreatedTimeTag = regexp.MustCompile(`^\s*Created: 1970-01-01T00:00:00Z\s*$`)
39 spdxPackageTag = regexp.MustCompile(`^\s*#####\s*Package:\s*(.*)\s*$`)
40 spdxPackageNameTag = regexp.MustCompile(`^\s*PackageName:\s*(.*)\s*$`)
41 spdxPkgIDTag = regexp.MustCompile(`^\s*SPDXID:\s*SPDXRef-Package-(.*)\s*$`)
42 spdxPkgDownloadLocationTag = regexp.MustCompile(`^\s*PackageDownloadLocation:\s*NOASSERTION\s*$`)
43 spdxPkgLicenseDeclaredTag = regexp.MustCompile(`^\s*PackageLicenseConcluded:\s*LicenseRef-(.*)\s*$`)
44 spdxRelationshipTag = regexp.MustCompile(`^\s*Relationship:\s*SPDXRef-(.*)\s*(DESCRIBES|CONTAINS|BUILD_TOOL_OF|RUNTIME_DEPENDENCY_OF)\s*SPDXRef-Package-(.*)\s*$`)
45 spdxLicenseTag = regexp.MustCompile(`^\s*##### Non-standard license:\s*$`)
46 spdxLicenseIDTag = regexp.MustCompile(`^\s*LicenseID: LicenseRef-(.*)\s*$`)
47 spdxExtractedTextTag = regexp.MustCompile(`^\s*ExtractedText:\s*<text>(.*)\s*$`)
48 spdxExtractedClosingTextTag = regexp.MustCompile(`^\s*</text>\s*$`)
49)
50
51func TestMain(m *testing.M) {
52 // Change into the parent directory before running the tests
53 // so they can find the testdata directory.
54 if err := os.Chdir(".."); err != nil {
55 fmt.Printf("failed to change to testdata directory: %s\n", err)
56 os.Exit(1)
57 }
58 os.Exit(m.Run())
59}
60
61func Test(t *testing.T) {
62 tests := []struct {
63 condition string
64 name string
65 outDir string
66 roots []string
67 stripPrefix string
68 expectedOut []matcher
69 expectedDeps []string
70 }{
71 {
72 condition: "firstparty",
73 name: "apex",
74 roots: []string{"highest.apex.meta_lic"},
75 expectedOut: []matcher{
76 spdxVersion{},
77 spdxDataLicense{},
78 spdxDocumentName{"Android"},
79 spdxID{"Android"},
80 spdxDocumentNameSpace{},
81 spdxCreatorOrganization{},
82 spdxCreatedTime{},
83 packageTag{"testdata/firstparty/highest.apex.meta_lic"},
84 packageName{"testdata/firstparty/highest.apex.meta_lic"},
85 spdxPkgID{"testdata/firstparty/highest.apex.meta_lic"},
86 spdxPkgDownloadLocation{"NOASSERTION"},
87 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
88 spdxRelationship{"DOCUMENT-Android ", "testdata-firstparty-highest.apex.meta_lic", "DESCRIBES"},
89 packageTag{"testdata/firstparty/bin/bin1.meta_lic"},
90 packageName{"testdata/firstparty/bin/bin1.meta_lic"},
91 spdxPkgID{"testdata/firstparty/bin/bin1.meta_lic"},
92 spdxPkgDownloadLocation{"NOASSERTION"},
93 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
94 spdxRelationship{"Package-testdata/firstparty/highest.apex.meta_lic ", "testdata/firstparty/bin/bin1.meta_lic", "CONTAINS"},
95 packageTag{"testdata/firstparty/bin/bin2.meta_lic"},
96 packageName{"testdata/firstparty/bin/bin2.meta_lic"},
97 spdxPkgID{"testdata/firstparty/bin/bin2.meta_lic"},
98 spdxPkgDownloadLocation{"NOASSERTION"},
99 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
100 spdxRelationship{"Package-testdata/firstparty/highest.apex.meta_lic ", "testdata-firstparty-bin-bin2.meta_lic", "CONTAINS"},
101 packageTag{"testdata/firstparty/lib/liba.so.meta_lic"},
102 packageName{"testdata/firstparty/lib/liba.so.meta_lic"},
103 spdxPkgID{"testdata/firstparty/lib/liba.so.meta_lic"},
104 spdxPkgDownloadLocation{"NOASSERTION"},
105 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
106 spdxRelationship{"Package-testdata/firstparty/highest.apex.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"},
107 packageTag{"testdata/firstparty/lib/libb.so.meta_lic"},
108 packageName{"testdata/firstparty/lib/libb.so.meta_lic"},
109 spdxPkgID{"testdata/firstparty/lib/libb.so.meta_lic"},
110 spdxPkgDownloadLocation{"NOASSERTION"},
111 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
112 spdxRelationship{"Package-testdata/firstparty/highest.apex.meta_lic ", "testdata/firstparty/lib/libb.so.meta_lic", "CONTAINS"},
113 spdxRelationship{"Package-testdata/firstparty/bin/bin1.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"},
114 packageTag{"testdata/firstparty/lib/libc.a.meta_lic"},
115 packageName{"testdata/firstparty/lib/libc.a.meta_lic"},
116 spdxPkgID{"testdata/firstparty/lib/libc.a.meta_lic"},
117 spdxPkgDownloadLocation{"NOASSERTION"},
118 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
119 spdxRelationship{"Package-testdata-firstparty-bin-bin1.meta_lic ", "testdata/firstparty/lib/libc.a.meta_lic", "CONTAINS"},
120 spdxRelationship{"Package-testdata/firstparty/lib/libb.so.meta_lic ", "testdata/firstparty/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
121 packageTag{"testdata/firstparty/lib/libd.so.meta_lic"},
122 packageName{"testdata/firstparty/lib/libd.so.meta_lic"},
123 spdxPkgID{"testdata/firstparty/lib/libd.so.meta_lic"},
124 spdxPkgDownloadLocation{"NOASSERTION"},
125 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
126 spdxRelationship{"Package-testdata/firstparty/lib/libd.so.meta_lic ", "testdata/firstparty/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
127 spdxLicense{},
128 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
129 spdxExtractedText{"&&&First Party License&&&"},
130 spdxExtractedClosingText{},
131 },
132 expectedDeps: []string{"testdata/firstparty/FIRST_PARTY_LICENSE"},
133 },
134 {
135 condition: "firstparty",
136 name: "application",
137 roots: []string{"application.meta_lic"},
138 expectedOut: []matcher{
139 spdxVersion{},
140 spdxDataLicense{},
141 spdxDocumentName{"Android"},
142 spdxID{"Android"},
143 spdxDocumentNameSpace{},
144 spdxCreatorOrganization{},
145 spdxCreatedTime{},
146 packageTag{"testdata/firstparty/application.meta_lic"},
147 packageName{"testdata/firstparty/application.meta_lic"},
148 spdxPkgID{"testdata/firstparty/application.meta_lic"},
149 spdxPkgDownloadLocation{"NOASSERTION"},
150 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
151 spdxRelationship{"DOCUMENT-Android ", "testdata/firstparty/application.meta_lic", "DESCRIBES"},
152 packageTag{"testdata/firstparty/bin/bin3.meta_lic"},
153 packageName{"testdata/firstparty/bin/bin3.meta_lic"},
154 spdxPkgID{"testdata/firstparty/bin/bin3.meta_lic"},
155 spdxPkgDownloadLocation{"NOASSERTION"},
156 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
157 spdxRelationship{"Package-testdata/firstparty/bin/bin3.meta_lic ", "testdata-firstparty-application.meta_lic", "BUILD_TOOL_OF"},
158 packageTag{"testdata/firstparty/lib/liba.so.meta_lic"},
159 packageName{"testdata/firstparty/lib/liba.so.meta_lic"},
160 spdxPkgID{"testdata/firstparty/lib/liba.so.meta_lic"},
161 spdxPkgDownloadLocation{"NOASSERTION"},
162 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
163 spdxRelationship{"Package-testdata/firstparty/application.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"},
164 packageTag{"testdata/firstparty/lib/libb.so.meta_lic"},
165 packageName{"testdata/firstparty/lib/libb.so.meta_lic"},
166 spdxPkgID{"testdata/firstparty/lib/libb.so.meta_lic"},
167 spdxPkgDownloadLocation{"NOASSERTION"},
168 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
169 spdxRelationship{"Package-testdata/firstparty/lib/libb.so.meta_lic ", "testdata-firstparty-application.meta_lic", "RUNTIME_DEPENDENCY_OF"},
170 spdxLicense{},
171 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
172 spdxExtractedText{"&&&First Party License&&&"},
173 spdxExtractedClosingText{},
174 },
175 expectedDeps: []string{"testdata/firstparty/FIRST_PARTY_LICENSE"},
176 },
177 {
178 condition: "firstparty",
179 name: "container",
180 roots: []string{"container.zip.meta_lic"},
181 expectedOut: []matcher{
182 spdxVersion{},
183 spdxDataLicense{},
184 spdxDocumentName{"Android"},
185 spdxID{"Android"},
186 spdxDocumentNameSpace{},
187 spdxCreatorOrganization{},
188 spdxCreatedTime{},
189 packageTag{"testdata/firstparty/container.zip.meta_lic"},
190 packageName{"testdata/firstparty/container.zip.meta_lic"},
191 spdxPkgID{"testdata/firstparty/container.zip.meta_lic"},
192 spdxPkgDownloadLocation{"NOASSERTION"},
193 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
194 spdxRelationship{"DOCUMENT-Android ", "testdata/firstparty/container.zip.meta_lic", "DESCRIBES"},
195 packageTag{"testdata/firstparty/bin/bin1.meta_lic"},
196 packageName{"testdata/firstparty/bin/bin1.meta_lic"},
197 spdxPkgID{"testdata/firstparty/bin/bin1.meta_lic"},
198 spdxPkgDownloadLocation{"NOASSERTION"},
199 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
200 spdxRelationship{"Package-testdata/firstparty/container.zip.meta_lic ", "testdata/firstparty/bin/bin1.meta_lic", "CONTAINS"},
201 packageTag{"testdata/firstparty/bin/bin2.meta_lic"},
202 packageName{"testdata/firstparty/bin/bin2.meta_lic"},
203 spdxPkgID{"testdata/firstparty/bin/bin2.meta_lic"},
204 spdxPkgDownloadLocation{"NOASSERTION"},
205 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
206 spdxRelationship{"Package-testdata/firstparty/container.zip.meta_lic ", "testdata/firstparty/bin/bin2.meta_lic", "CONTAINS"},
207 packageTag{"testdata/firstparty/lib/liba.so.meta_lic"},
208 packageName{"testdata/firstparty/lib/liba.so.meta_lic"},
209 spdxPkgID{"testdata/firstparty/lib/liba.so.meta_lic"},
210 spdxPkgDownloadLocation{"NOASSERTION"},
211 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
212 spdxRelationship{"Package-testdata/firstparty/container.zip.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"},
213 packageTag{"testdata/firstparty/lib/libb.so.meta_lic"},
214 packageName{"testdata/firstparty/lib/libb.so.meta_lic"},
215 spdxPkgID{"testdata/firstparty/lib/libb.so.meta_lic"},
216 spdxPkgDownloadLocation{"NOASSERTION"},
217 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
218 spdxRelationship{"Package-testdata/firstparty/container.zip.meta_lic ", "testdata/firstparty/lib/libb.so.meta_lic", "CONTAINS"},
219 spdxRelationship{"Package-testdata/firstparty/bin/bin1.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"},
220 packageTag{"testdata/firstparty/lib/libc.a.meta_lic"},
221 packageName{"testdata/firstparty/lib/libc.a.meta_lic"},
222 spdxPkgID{"testdata/firstparty/lib/libc.a.meta_lic"},
223 spdxPkgDownloadLocation{"NOASSERTION"},
224 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
225 spdxRelationship{"Package-testdata/firstparty/bin/bin1.meta_lic ", "testdata/firstparty/lib/libc.a.meta_lic", "CONTAINS"},
226 spdxRelationship{"Package-testdata/firstparty/lib/libb.so.meta_lic ", "testdata/firstparty/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
227 packageTag{"testdata/firstparty/lib/libd.so.meta_lic"},
228 packageName{"testdata/firstparty/lib/libd.so.meta_lic"},
229 spdxPkgID{"testdata/firstparty/lib/libd.so.meta_lic"},
230 spdxPkgDownloadLocation{"NOASSERTION"},
231 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
232 spdxRelationship{"Package-testdata/firstparty/lib/libd.so.meta_lic ", "testdata/firstparty/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
233 spdxLicense{},
234 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
235 spdxExtractedText{"&&&First Party License&&&"},
236 spdxExtractedClosingText{},
237 },
238 expectedDeps: []string{"testdata/firstparty/FIRST_PARTY_LICENSE"},
239 },
240 {
241 condition: "firstparty",
242 name: "binary",
243 roots: []string{"bin/bin1.meta_lic"},
244 expectedOut: []matcher{
245 spdxVersion{},
246 spdxDataLicense{},
247 spdxDocumentName{"Android"},
248 spdxID{"Android"},
249 spdxDocumentNameSpace{},
250 spdxCreatorOrganization{},
251 spdxCreatedTime{},
252 packageTag{"testdata/firstparty/bin/bin1.meta_lic"},
253 packageName{"testdata/firstparty/bin/bin1.meta_lic"},
254 spdxPkgID{"testdata/firstparty/bin/bin1.meta_lic"},
255 spdxPkgDownloadLocation{"NOASSERTION"},
256 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
257 spdxRelationship{"DOCUMENT-Android ", "testdata/firstparty/bin/bin1.meta_lic", "DESCRIBES"},
258 packageTag{"testdata/firstparty/lib/liba.so.meta_lic"},
259 packageName{"testdata/firstparty/lib/liba.so.meta_lic"},
260 spdxPkgID{"testdata/firstparty/lib/liba.so.meta_lic"},
261 spdxPkgDownloadLocation{"NOASSERTION"},
262 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
263 spdxRelationship{"Package-testdata/firstparty/bin/bin1.meta_lic ", "testdata/firstparty/lib/liba.so.meta_lic", "CONTAINS"},
264 packageTag{"testdata/firstparty/lib/libc.a.meta_lic"},
265 packageName{"testdata/firstparty/lib/libc.a.meta_lic"},
266 spdxPkgID{"testdata/firstparty/lib/libc.a.meta_lic"},
267 spdxPkgDownloadLocation{"NOASSERTION"},
268 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
269 spdxRelationship{"Package-testdata/firstparty/bin/bin1.meta_lic ", "testdata/firstparty/lib/libc.a.meta_lic", "CONTAINS"},
270 spdxLicense{},
271 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
272 spdxExtractedText{"&&&First Party License&&&"},
273 spdxExtractedClosingText{},
274 },
275 expectedDeps: []string{"testdata/firstparty/FIRST_PARTY_LICENSE"},
276 },
277 {
278 condition: "firstparty",
279 name: "library",
280 roots: []string{"lib/libd.so.meta_lic"},
281 expectedOut: []matcher{
282 spdxVersion{},
283 spdxDataLicense{},
284 spdxDocumentName{"Android"},
285 spdxID{"Android"},
286 spdxDocumentNameSpace{},
287 spdxCreatorOrganization{},
288 spdxCreatedTime{},
289 packageTag{"testdata/firstparty/lib/libd.so.meta_lic"},
290 packageName{"testdata/firstparty/lib/libd.so.meta_lic"},
291 spdxPkgID{"testdata/firstparty/lib/libd.so.meta_lic"},
292 spdxPkgDownloadLocation{"NOASSERTION"},
293 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
294 spdxRelationship{"DOCUMENT-Android ", "testdata/firstparty/lib/libd.so.meta_lic", "DESCRIBES"},
295 spdxLicense{},
296 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
297 spdxExtractedText{"&&&First Party License&&&"},
298 spdxExtractedClosingText{},
299 },
300 expectedDeps: []string{"testdata/firstparty/FIRST_PARTY_LICENSE"},
301 },
302 {
303 condition: "notice",
304 name: "apex",
305 roots: []string{"highest.apex.meta_lic"},
306 expectedOut: []matcher{
307 spdxVersion{},
308 spdxDataLicense{},
309 spdxDocumentName{"Android"},
310 spdxID{"Android"},
311 spdxDocumentNameSpace{},
312 spdxCreatorOrganization{},
313 spdxCreatedTime{},
314 packageTag{"testdata/notice/highest.apex.meta_lic"},
315 packageName{"testdata/notice/highest.apex.meta_lic"},
316 spdxPkgID{"testdata/notice/highest.apex.meta_lic"},
317 spdxPkgDownloadLocation{"NOASSERTION"},
318 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
319 spdxRelationship{"DOCUMENT-Android ", "testdata/notice/highest.apex.meta_lic", "DESCRIBES"},
320 packageTag{"testdata/notice/bin/bin1.meta_lic"},
321 packageName{"testdata/notice/bin/bin1.meta_lic"},
322 spdxPkgID{"testdata/notice/bin/bin1.meta_lic"},
323 spdxPkgDownloadLocation{"NOASSERTION"},
324 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
325 spdxRelationship{"Package-testdata/notice/highest.apex.meta_lic ", "testdata/notice/bin/bin1.meta_lic", "CONTAINS"},
326 packageTag{"testdata/notice/bin/bin2.meta_lic"},
327 packageName{"testdata/notice/bin/bin2.meta_lic"},
328 spdxPkgID{"testdata/notice/bin/bin2.meta_lic"},
329 spdxPkgDownloadLocation{"NOASSERTION"},
330 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
331 spdxRelationship{"Package-testdata/notice/highest.apex.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "CONTAINS"},
332 packageTag{"testdata/notice/lib/liba.so.meta_lic"},
333 packageName{"testdata/notice/lib/liba.so.meta_lic"},
334 spdxPkgID{"testdata/notice/lib/liba.so.meta_lic"},
335 spdxPkgDownloadLocation{"NOASSERTION"},
336 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
337 spdxRelationship{"Package-testdata/notice/highest.apex.meta_lic ", "testdata/notice/lib/liba.so.meta_lic", "CONTAINS"},
338 packageTag{"testdata/notice/lib/libb.so.meta_lic"},
339 packageName{"testdata/notice/lib/libb.so.meta_lic"},
340 spdxPkgID{"testdata/notice/lib/libb.so.meta_lic"},
341 spdxPkgDownloadLocation{"NOASSERTION"},
342 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
343 spdxRelationship{"Package-testdata/notice/highest.apex.meta_lic ", "testdata/notice/lib/libb.so.meta_lic", "CONTAINS"},
344 spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/liba.so.meta_lic", "CONTAINS"},
345 packageTag{"testdata/notice/lib/libc.a.meta_lic"},
346 packageName{"testdata/notice/lib/libc.a.meta_lic"},
347 spdxPkgID{"testdata/notice/lib/libc.a.meta_lic"},
348 spdxPkgDownloadLocation{"NOASSERTION"},
349 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
350 spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/libc.a.meta_lic", "CONTAINS"},
351 spdxRelationship{"Package-testdata/notice/lib/libb.so.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
352 packageTag{"testdata/notice/lib/libd.so.meta_lic"},
353 packageName{"testdata/notice/lib/libd.so.meta_lic"},
354 spdxPkgID{"testdata/notice/lib/libd.so.meta_lic"},
355 spdxPkgDownloadLocation{"NOASSERTION"},
356 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
357 spdxRelationship{"Package-testdata/notice/lib/libd.so.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
358 spdxLicense{},
359 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
360 spdxExtractedText{"&&&First Party License&&&"},
361 spdxExtractedClosingText{},
362 spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
363 spdxExtractedText{"%%%Notice License%%%"},
364 spdxExtractedClosingText{},
365 },
366 expectedDeps: []string{
367 "testdata/firstparty/FIRST_PARTY_LICENSE",
368 "testdata/notice/NOTICE_LICENSE",
369 },
370 },
371 {
372 condition: "notice",
373 name: "container",
374 roots: []string{"container.zip.meta_lic"},
375 expectedOut: []matcher{
376 spdxVersion{},
377 spdxDataLicense{},
378 spdxDocumentName{"Android"},
379 spdxID{"Android"},
380 spdxDocumentNameSpace{},
381 spdxCreatorOrganization{},
382 spdxCreatedTime{},
383 packageTag{"testdata/notice/container.zip.meta_lic"},
384 packageName{"testdata/notice/container.zip.meta_lic"},
385 spdxPkgID{"testdata/notice/container.zip.meta_lic"},
386 spdxPkgDownloadLocation{"NOASSERTION"},
387 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
388 spdxRelationship{"DOCUMENT-Android ", "testdata/notice/container.zip.meta_lic", "DESCRIBES"},
389 packageTag{"testdata/notice/bin/bin1.meta_lic"},
390 packageName{"testdata/notice/bin/bin1.meta_lic"},
391 spdxPkgID{"testdata/notice/bin/bin1.meta_lic"},
392 spdxPkgDownloadLocation{"NOASSERTION"},
393 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
394 spdxRelationship{"Package-testdata/notice/container.zip.meta_lic ", "testdata/notice/bin/bin1.meta_lic", "CONTAINS"},
395 packageTag{"testdata/notice/bin/bin2.meta_lic"},
396 packageName{"testdata/notice/bin/bin2.meta_lic"},
397 spdxPkgID{"testdata/notice/bin/bin2.meta_lic"},
398 spdxPkgDownloadLocation{"NOASSERTION"},
399 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
400 spdxRelationship{"Package-testdata/notice/container.zip.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "CONTAINS"},
401 packageTag{"testdata/notice/lib/liba.so.meta_lic"},
402 packageName{"testdata/notice/lib/liba.so.meta_lic"},
403 spdxPkgID{"testdata/notice/lib/liba.so.meta_lic"},
404 spdxPkgDownloadLocation{"NOASSERTION"},
405 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
406 spdxRelationship{"Package-testdata/notice/container.zip.meta_lic ", "testdata/notice/lib/liba.so.meta_lic", "CONTAINS"},
407 packageTag{"testdata/notice/lib/libb.so.meta_lic"},
408 packageName{"testdata/notice/lib/libb.so.meta_lic"},
409 spdxPkgID{"testdata/notice/lib/libb.so.meta_lic"},
410 spdxPkgDownloadLocation{"NOASSERTION"},
411 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
412 spdxRelationship{"Package-testdata/notice/container.zip.meta_lic ", "testdata/notice/lib/libb.so.meta_lic", "CONTAINS"},
413 spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/liba.so.meta_lic", "CONTAINS"},
414 packageTag{"testdata/notice/lib/libc.a.meta_lic"},
415 packageName{"testdata/notice/lib/libc.a.meta_lic"},
416 spdxPkgID{"testdata/notice/lib/libc.a.meta_lic"},
417 spdxPkgDownloadLocation{"NOASSERTION"},
418 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
419 spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/libc.a.meta_lic", "CONTAINS"},
420 spdxRelationship{"Package-testdata/notice/lib/libb.so.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
421 packageTag{"testdata/notice/lib/libd.so.meta_lic"},
422 packageName{"testdata/notice/lib/libd.so.meta_lic"},
423 spdxPkgID{"testdata/notice/lib/libd.so.meta_lic"},
424 spdxPkgDownloadLocation{"NOASSERTION"},
425 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
426 spdxRelationship{"Package-testdata/notice/lib/libd.so.meta_lic ", "testdata/notice/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
427 spdxLicense{},
428 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
429 spdxExtractedText{"&&&First Party License&&&"},
430 spdxExtractedClosingText{},
431 spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
432 spdxExtractedText{"%%%Notice License%%%"},
433 spdxExtractedClosingText{},
434 },
435 expectedDeps: []string{
436 "testdata/firstparty/FIRST_PARTY_LICENSE",
437 "testdata/notice/NOTICE_LICENSE",
438 },
439 },
440 {
441 condition: "notice",
442 name: "application",
443 roots: []string{"application.meta_lic"},
444 expectedOut: []matcher{
445 spdxVersion{},
446 spdxDataLicense{},
447 spdxDocumentName{"Android"},
448 spdxID{"Android"},
449 spdxDocumentNameSpace{},
450 spdxCreatorOrganization{},
451 spdxCreatedTime{},
452 packageTag{"testdata/notice/application.meta_lic"},
453 packageName{"testdata/notice/application.meta_lic"},
454 spdxPkgID{"testdata/notice/application.meta_lic"},
455 spdxPkgDownloadLocation{"NOASSERTION"},
456 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
457 spdxRelationship{"DOCUMENT-Android ", "testdata-notice-application.meta_lic", "DESCRIBES"},
458 packageTag{"testdata/notice/bin/bin3.meta_lic"},
459 packageName{"testdata/notice/bin/bin3.meta_lic"},
460 spdxPkgID{"testdata/notice/bin/bin3.meta_lic"},
461 spdxPkgDownloadLocation{"NOASSERTION"},
462 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
463 spdxRelationship{"Package-testdata-notice-bin-bin3.meta_lic ", "testdata/notice/application.meta_lic", "BUILD_TOOL_OF"},
464 packageTag{"testdata/notice/lib/liba.so.meta_lic"},
465 packageName{"testdata/notice/lib/liba.so.meta_lic"},
466 spdxPkgID{"testdata/notice/lib/liba.so.meta_lic"},
467 spdxPkgDownloadLocation{"NOASSERTION"},
468 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
469 spdxRelationship{"Package-testdata/notice/application.meta_lic ", "testdata-notice-lib-liba.so.meta_lic", "CONTAINS"},
470 packageTag{"testdata/notice/lib/libb.so.meta_lic"},
471 packageName{"testdata/notice/lib/libb.so.meta_lic"},
472 spdxPkgID{"testdata/notice/lib/libb.so.meta_lic"},
473 spdxPkgDownloadLocation{"NOASSERTION"},
474 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
475 spdxRelationship{"Package-testdata-notice-lib-libb.so.meta_lic ", "testdata/notice/application.meta_lic", "RUNTIME_DEPENDENCY_OF"},
476 spdxLicense{},
477 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
478 spdxExtractedText{"&&&First Party License&&&"},
479 spdxExtractedClosingText{},
480 spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
481 spdxExtractedText{"%%%Notice License%%%"},
482 spdxExtractedClosingText{},
483 },
484 expectedDeps: []string{
485 "testdata/firstparty/FIRST_PARTY_LICENSE",
486 "testdata/notice/NOTICE_LICENSE",
487 },
488 },
489 {
490 condition: "notice",
491 name: "binary",
492 roots: []string{"bin/bin1.meta_lic"},
493 expectedOut: []matcher{
494 spdxVersion{},
495 spdxDataLicense{},
496 spdxDocumentName{"Android"},
497 spdxID{"Android"},
498 spdxDocumentNameSpace{},
499 spdxCreatorOrganization{},
500 spdxCreatedTime{},
501 packageTag{"testdata/notice/bin/bin1.meta_lic"},
502 packageName{"testdata/notice/bin/bin1.meta_lic"},
503 spdxPkgID{"testdata/notice/bin/bin1.meta_lic"},
504 spdxPkgDownloadLocation{"NOASSERTION"},
505 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
506 spdxRelationship{"DOCUMENT-Android ", "testdata/notice/bin/bin1.meta_lic", "DESCRIBES"},
507 packageTag{"testdata/notice/lib/liba.so.meta_lic"},
508 packageName{"testdata/notice/lib/liba.so.meta_lic"},
509 spdxPkgID{"testdata/notice/lib/liba.so.meta_lic"},
510 spdxPkgDownloadLocation{"NOASSERTION"},
511 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
512 spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/liba.so.meta_lic", "CONTAINS"},
513 packageTag{"testdata/notice/lib/libc.a.meta_lic"},
514 packageName{"testdata/notice/lib/libc.a.meta_lic"},
515 spdxPkgID{"testdata/notice/lib/libc.a.meta_lic"},
516 spdxPkgDownloadLocation{"NOASSERTION"},
517 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
518 spdxRelationship{"Package-testdata/notice/bin/bin1.meta_lic ", "testdata/notice/lib/libc.a.meta_lic", "CONTAINS"},
519 spdxLicense{},
520 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
521 spdxExtractedText{"&&&First Party License&&&"},
522 spdxExtractedClosingText{},
523 spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
524 spdxExtractedText{"%%%Notice License%%%"},
525 spdxExtractedClosingText{},
526 },
527 expectedDeps: []string{
528 "testdata/firstparty/FIRST_PARTY_LICENSE",
529 "testdata/notice/NOTICE_LICENSE",
530 },
531 },
532 {
533 condition: "notice",
534 name: "library",
535 roots: []string{"lib/libd.so.meta_lic"},
536 expectedOut: []matcher{
537 spdxVersion{},
538 spdxDataLicense{},
539 spdxDocumentName{"Android"},
540 spdxID{"Android"},
541 spdxDocumentNameSpace{},
542 spdxCreatorOrganization{},
543 spdxCreatedTime{},
544 packageTag{"testdata/notice/lib/libd.so.meta_lic"},
545 packageName{"testdata/notice/lib/libd.so.meta_lic"},
546 spdxPkgID{"testdata/notice/lib/libd.so.meta_lic"},
547 spdxPkgDownloadLocation{"NOASSERTION"},
548 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
549 spdxRelationship{"DOCUMENT-Android ", "testdata/notice/lib/libd.so.meta_lic", "DESCRIBES"},
550 spdxLicense{},
551 spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
552 spdxExtractedText{"%%%Notice License%%%"},
553 spdxExtractedClosingText{},
554 },
555 expectedDeps: []string{"testdata/notice/NOTICE_LICENSE"},
556 },
557 {
558 condition: "reciprocal",
559 name: "apex",
560 roots: []string{"highest.apex.meta_lic"},
561 expectedOut: []matcher{
562 spdxVersion{},
563 spdxDataLicense{},
564 spdxDocumentName{"Android"},
565 spdxID{"Android"},
566 spdxDocumentNameSpace{},
567 spdxCreatorOrganization{},
568 spdxCreatedTime{},
569 packageTag{"testdata/reciprocal/highest.apex.meta_lic"},
570 packageName{"testdata/reciprocal/highest.apex.meta_lic"},
571 spdxPkgID{"testdata/reciprocal/highest.apex.meta_lic"},
572 spdxPkgDownloadLocation{"NOASSERTION"},
573 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
574 spdxRelationship{"DOCUMENT-Android ", "testdata/reciprocal/highest.apex.meta_lic", "DESCRIBES"},
575 packageTag{"testdata/reciprocal/bin/bin1.meta_lic"},
576 packageName{"testdata/reciprocal/bin/bin1.meta_lic"},
577 spdxPkgID{"testdata/reciprocal/bin/bin1.meta_lic"},
578 spdxPkgDownloadLocation{"NOASSERTION"},
579 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
580 spdxRelationship{"Package-testdata/reciprocal/highest.apex.meta_lic ", "testdata-reciprocal-bin-bin1.meta_lic", "CONTAINS"},
581 packageTag{"testdata/reciprocal/bin/bin2.meta_lic"},
582 packageName{"testdata/reciprocal/bin/bin2.meta_lic"},
583 spdxPkgID{"testdata/reciprocal/bin/bin2.meta_lic"},
584 spdxPkgDownloadLocation{"NOASSERTION"},
585 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
586 spdxRelationship{"Package-testdata/reciprocal/highest.apex.meta_lic ", "testdata-reciprocal-bin-bin2.meta_lic", "CONTAINS"},
587 packageTag{"testdata/reciprocal/lib/liba.so.meta_lic"},
588 packageName{"testdata/reciprocal/lib/liba.so.meta_lic"},
589 spdxPkgID{"testdata/reciprocal/lib/liba.so.meta_lic"},
590 spdxPkgDownloadLocation{"NOASSERTION"},
591 spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
592 spdxRelationship{"Package-testdata/reciprocal/highest.apex.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"},
593 packageTag{"testdata/reciprocal/lib/libb.so.meta_lic"},
594 packageName{"testdata/reciprocal/lib/libb.so.meta_lic"},
595 spdxPkgID{"testdata/reciprocal/lib/libb.so.meta_lic"},
596 spdxPkgDownloadLocation{"NOASSERTION"},
597 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
598 spdxRelationship{"Package-testdata/reciprocal/highest.apex.meta_lic ", "testdata/reciprocal/lib/libb.so.meta_lic", "CONTAINS"},
599 spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"},
600 packageTag{"testdata/reciprocal/lib/libc.a.meta_lic"},
601 packageName{"testdata/reciprocal/lib/libc.a.meta_lic"},
602 spdxPkgID{"testdata/reciprocal/lib/libc.a.meta_lic"},
603 spdxPkgDownloadLocation{"NOASSERTION"},
604 spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
605 spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/libc.a.meta_lic", "CONTAINS"},
606 spdxRelationship{"Package-testdata/reciprocal/lib/libb.so.meta_lic ", "testdata/reciprocal/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
607 packageTag{"testdata/reciprocal/lib/libd.so.meta_lic"},
608 packageName{"testdata/reciprocal/lib/libd.so.meta_lic"},
609 spdxPkgID{"testdata/reciprocal/lib/libd.so.meta_lic"},
610 spdxPkgDownloadLocation{"NOASSERTION"},
611 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
612 spdxRelationship{"Package-testdata/reciprocal/lib/libd.so.meta_lic ", "testdata/reciprocal/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
613 spdxLicense{},
614 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
615 spdxExtractedText{"&&&First Party License&&&"},
616 spdxExtractedClosingText{},
617 spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
618 spdxExtractedText{"%%%Notice License%%%"},
619 spdxExtractedClosingText{},
620 spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"},
621 spdxExtractedText{"$$$Reciprocal License$$$"},
622 spdxExtractedClosingText{},
623 },
624 expectedDeps: []string{
625 "testdata/firstparty/FIRST_PARTY_LICENSE",
626 "testdata/notice/NOTICE_LICENSE",
627 "testdata/reciprocal/RECIPROCAL_LICENSE",
628 },
629 },
630 {
631 condition: "reciprocal",
632 name: "container",
633 roots: []string{"container.zip.meta_lic"},
634 expectedOut: []matcher{
635 spdxVersion{},
636 spdxDataLicense{},
637 spdxDocumentName{"Android"},
638 spdxID{"Android"},
639 spdxDocumentNameSpace{},
640 spdxCreatorOrganization{},
641 spdxCreatedTime{},
642 packageTag{"testdata/reciprocal/container.zip.meta_lic"},
643 packageName{"testdata/reciprocal/container.zip.meta_lic"},
644 spdxPkgID{"testdata/reciprocal/container.zip.meta_lic"},
645 spdxPkgDownloadLocation{"NOASSERTION"},
646 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
647 spdxRelationship{"DOCUMENT-Android ", "testdata/reciprocal/container.zip.meta_lic", "DESCRIBES"},
648 packageTag{"testdata/reciprocal/bin/bin1.meta_lic"},
649 packageName{"testdata/reciprocal/bin/bin1.meta_lic"},
650 spdxPkgID{"testdata/reciprocal/bin/bin1.meta_lic"},
651 spdxPkgDownloadLocation{"NOASSERTION"},
652 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
653 spdxRelationship{"Package-testdata/reciprocal/container.zip.meta_lic ", "testdata-reciprocal-bin-bin1.meta_lic", "CONTAINS"},
654 packageTag{"testdata/reciprocal/bin/bin2.meta_lic"},
655 packageName{"testdata/reciprocal/bin/bin2.meta_lic"},
656 spdxPkgID{"testdata/reciprocal/bin/bin2.meta_lic"},
657 spdxPkgDownloadLocation{"NOASSERTION"},
658 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
659 spdxRelationship{"Package-testdata/reciprocal/container.zip.meta_lic ", "testdata-reciprocal-bin-bin2.meta_lic", "CONTAINS"},
660 packageTag{"testdata/reciprocal/lib/liba.so.meta_lic"},
661 packageName{"testdata/reciprocal/lib/liba.so.meta_lic"},
662 spdxPkgID{"testdata/reciprocal/lib/liba.so.meta_lic"},
663 spdxPkgDownloadLocation{"NOASSERTION"},
664 spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
665 spdxRelationship{"Package-testdata/reciprocal/container.zip.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"},
666 packageTag{"testdata/reciprocal/lib/libb.so.meta_lic"},
667 packageName{"testdata/reciprocal/lib/libb.so.meta_lic"},
668 spdxPkgID{"testdata/reciprocal/lib/libb.so.meta_lic"},
669 spdxPkgDownloadLocation{"NOASSERTION"},
670 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
671 spdxRelationship{"Package-testdata/reciprocal/container.zip.meta_lic ", "testdata/reciprocal/lib/libb.so.meta_lic", "CONTAINS"},
672 spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"},
673 packageTag{"testdata/reciprocal/lib/libc.a.meta_lic"},
674 packageName{"testdata/reciprocal/lib/libc.a.meta_lic"},
675 spdxPkgID{"testdata/reciprocal/lib/libc.a.meta_lic"},
676 spdxPkgDownloadLocation{"NOASSERTION"},
677 spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
678 spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/libc.a.meta_lic", "CONTAINS"},
679 spdxRelationship{"Package-testdata/reciprocal/lib/libb.so.meta_lic ", "testdata/reciprocal/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
680 packageTag{"testdata/reciprocal/lib/libd.so.meta_lic"},
681 packageName{"testdata/reciprocal/lib/libd.so.meta_lic"},
682 spdxPkgID{"testdata/reciprocal/lib/libd.so.meta_lic"},
683 spdxPkgDownloadLocation{"NOASSERTION"},
684 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
685 spdxRelationship{"Package-testdata/reciprocal/lib/libd.so.meta_lic ", "testdata/reciprocal/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
686 spdxLicense{},
687 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
688 spdxExtractedText{"&&&First Party License&&&"},
689 spdxExtractedClosingText{},
690 spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
691 spdxExtractedText{"%%%Notice License%%%"},
692 spdxExtractedClosingText{},
693 spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"},
694 spdxExtractedText{"$$$Reciprocal License$$$"},
695 spdxExtractedClosingText{},
696 },
697 expectedDeps: []string{
698 "testdata/firstparty/FIRST_PARTY_LICENSE",
699 "testdata/notice/NOTICE_LICENSE",
700 "testdata/reciprocal/RECIPROCAL_LICENSE",
701 },
702 },
703 {
704 condition: "reciprocal",
705 name: "application",
706 roots: []string{"application.meta_lic"},
707 expectedOut: []matcher{
708 spdxVersion{},
709 spdxDataLicense{},
710 spdxDocumentName{"Android"},
711 spdxID{"Android"},
712 spdxDocumentNameSpace{},
713 spdxCreatorOrganization{},
714 spdxCreatedTime{},
715 packageTag{"testdata/reciprocal/application.meta_lic"},
716 packageName{"testdata/reciprocal/application.meta_lic"},
717 spdxPkgID{"testdata/reciprocal/application.meta_lic"},
718 spdxPkgDownloadLocation{"NOASSERTION"},
719 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
720 spdxRelationship{"DOCUMENT-Android ", "testdata/reciprocal/application.meta_lic", "DESCRIBES"},
721 packageTag{"testdata/reciprocal/bin/bin3.meta_lic"},
722 packageName{"testdata/reciprocal/bin/bin3.meta_lic"},
723 spdxPkgID{"testdata/reciprocal/bin/bin3.meta_lic"},
724 spdxPkgDownloadLocation{"NOASSERTION"},
725 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
726 spdxRelationship{"Package-testdata-reciprocal-bin-bin3.meta_lic ", "testdata/reciprocal/application.meta_lic", "BUILD_TOOL_OF"},
727 packageTag{"testdata/reciprocal/lib/liba.so.meta_lic"},
728 packageName{"testdata/reciprocal/lib/liba.so.meta_lic"},
729 spdxPkgID{"testdata/reciprocal/lib/liba.so.meta_lic"},
730 spdxPkgDownloadLocation{"NOASSERTION"},
731 spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
732 spdxRelationship{"Package-testdata/reciprocal/application.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"},
733 packageTag{"testdata/reciprocal/lib/libb.so.meta_lic"},
734 packageName{"testdata/reciprocal/lib/libb.so.meta_lic"},
735 spdxPkgID{"testdata/reciprocal/lib/libb.so.meta_lic"},
736 spdxPkgDownloadLocation{"NOASSERTION"},
737 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
738 spdxRelationship{"Package-testdata/reciprocal/lib/libb.so.meta_lic ", "testdata/reciprocal/application.meta_lic", "RUNTIME_DEPENDENCY_OF"},
739 spdxLicense{},
740 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
741 spdxExtractedText{"&&&First Party License&&&"},
742 spdxExtractedClosingText{},
743 spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
744 spdxExtractedText{"%%%Notice License%%%"},
745 spdxExtractedClosingText{},
746 spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"},
747 spdxExtractedText{"$$$Reciprocal License$$$"},
748 spdxExtractedClosingText{},
749 },
750 expectedDeps: []string{
751 "testdata/firstparty/FIRST_PARTY_LICENSE",
752 "testdata/notice/NOTICE_LICENSE",
753 "testdata/reciprocal/RECIPROCAL_LICENSE",
754 },
755 },
756 {
757 condition: "reciprocal",
758 name: "binary",
759 roots: []string{"bin/bin1.meta_lic"},
760 expectedOut: []matcher{
761 spdxVersion{},
762 spdxDataLicense{},
763 spdxDocumentName{"Android"},
764 spdxID{"Android"},
765 spdxDocumentNameSpace{},
766 spdxCreatorOrganization{},
767 spdxCreatedTime{},
768 packageTag{"testdata/reciprocal/bin/bin1.meta_lic"},
769 packageName{"testdata/reciprocal/bin/bin1.meta_lic"},
770 spdxPkgID{"testdata/reciprocal/bin/bin1.meta_lic"},
771 spdxPkgDownloadLocation{"NOASSERTION"},
772 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
773 spdxRelationship{"DOCUMENT-Android ", "testdata/reciprocal/bin/bin1.meta_lic", "DESCRIBES"},
774 packageTag{"testdata/reciprocal/lib/liba.so.meta_lic"},
775 packageName{"testdata/reciprocal/lib/liba.so.meta_lic"},
776 spdxPkgID{"testdata/reciprocal/lib/liba.so.meta_lic"},
777 spdxPkgDownloadLocation{"NOASSERTION"},
778 spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
779 spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/liba.so.meta_lic", "CONTAINS"},
780 packageTag{"testdata/reciprocal/lib/libc.a.meta_lic"},
781 packageName{"testdata/reciprocal/lib/libc.a.meta_lic"},
782 spdxPkgID{"testdata/reciprocal/lib/libc.a.meta_lic"},
783 spdxPkgDownloadLocation{"NOASSERTION"},
784 spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
785 spdxRelationship{"Package-testdata/reciprocal/bin/bin1.meta_lic ", "testdata/reciprocal/lib/libc.a.meta_lic", "CONTAINS"},
786 spdxLicense{},
787 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
788 spdxExtractedText{"&&&First Party License&&&"},
789 spdxExtractedClosingText{},
790 spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"},
791 spdxExtractedText{"$$$Reciprocal License$$$"},
792 spdxExtractedClosingText{},
793 },
794 expectedDeps: []string{
795 "testdata/firstparty/FIRST_PARTY_LICENSE",
796 "testdata/reciprocal/RECIPROCAL_LICENSE",
797 },
798 },
799 {
800 condition: "reciprocal",
801 name: "library",
802 roots: []string{"lib/libd.so.meta_lic"},
803 expectedOut: []matcher{
804 spdxVersion{},
805 spdxDataLicense{},
806 spdxDocumentName{"Android"},
807 spdxID{"Android"},
808 spdxDocumentNameSpace{},
809 spdxCreatorOrganization{},
810 spdxCreatedTime{},
811 packageTag{"testdata/reciprocal/lib/libd.so.meta_lic"},
812 packageName{"testdata/reciprocal/lib/libd.so.meta_lic"},
813 spdxPkgID{"testdata/reciprocal/lib/libd.so.meta_lic"},
814 spdxPkgDownloadLocation{"NOASSERTION"},
815 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
816 spdxRelationship{"DOCUMENT-Android ", "testdata/reciprocal/lib/libd.so.meta_lic", "DESCRIBES"},
817 spdxLicense{},
818 spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
819 spdxExtractedText{"%%%Notice License%%%"},
820 spdxExtractedClosingText{},
821 },
822 expectedDeps: []string{
823 "testdata/notice/NOTICE_LICENSE",
824 },
825 },
826 {
827 condition: "restricted",
828 name: "apex",
829 roots: []string{"highest.apex.meta_lic"},
830 stripPrefix: "out/target/product/fictional/system/apex/",
831 expectedOut: []matcher{
832 spdxVersion{},
833 spdxDataLicense{},
834 spdxDocumentName{"Android"},
835 spdxID{"Android"},
836 spdxDocumentNameSpace{},
837 spdxCreatorOrganization{},
838 spdxCreatedTime{},
839 packageTag{"testdata/restricted/highest.apex.meta_lic"},
840 packageName{"testdata/restricted/highest.apex.meta_lic"},
841 spdxPkgID{"testdata/restricted/highest.apex.meta_lic"},
842 spdxPkgDownloadLocation{"NOASSERTION"},
843 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
844 spdxRelationship{"DOCUMENT-Android ", "testdata/restricted/highest.apex.meta_lic", "DESCRIBES"},
845 packageTag{"testdata/restricted/bin/bin1.meta_lic"},
846 packageName{"testdata/restricted/bin/bin1.meta_lic"},
847 spdxPkgID{"testdata/restricted/bin/bin1.meta_lic"},
848 spdxPkgDownloadLocation{"NOASSERTION"},
849 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
850 spdxRelationship{"Package-testdata/restricted/highest.apex.meta_lic ", "testdata/restricted/bin/bin1.meta_lic", "CONTAINS"},
851 packageTag{"testdata/restricted/bin/bin2.meta_lic"},
852 packageName{"testdata/restricted/bin/bin2.meta_lic"},
853 spdxPkgID{"testdata/restricted/bin/bin2.meta_lic"},
854 spdxPkgDownloadLocation{"NOASSERTION"},
855 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
856 spdxRelationship{"Package-testdata/restricted/highest.apex.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "CONTAINS"},
857 packageTag{"testdata/restricted/lib/liba.so.meta_lic"},
858 packageName{"testdata/restricted/lib/liba.so.meta_lic"},
859 spdxPkgID{"testdata/restricted/lib/liba.so.meta_lic"},
860 spdxPkgDownloadLocation{"NOASSERTION"},
861 spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
862 spdxRelationship{"Package-testdata/restricted/highest.apex.meta_lic ", "testdata/restricted/lib/liba.so.meta_lic", "CONTAINS"},
863 packageTag{"testdata/restricted/lib/libb.so.meta_lic"},
864 packageName{"testdata/restricted/lib/libb.so.meta_lic"},
865 spdxPkgID{"testdata/restricted/lib/libb.so.meta_lic"},
866 spdxPkgDownloadLocation{"NOASSERTION"},
867 spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
868 spdxRelationship{"Package-testdata/restricted/highest.apex.meta_lic ", "testdata/restricted/lib/libb.so.meta_lic", "CONTAINS"},
869 spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/liba.so.meta_lic", "CONTAINS"},
870 packageTag{"testdata/restricted/lib/libc.a.meta_lic"},
871 packageName{"testdata/restricted/lib/libc.a.meta_lic"},
872 spdxPkgID{"testdata/restricted/lib/libc.a.meta_lic"},
873 spdxPkgDownloadLocation{"NOASSERTION"},
874 spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
875 spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/libc.a.meta_lic", "CONTAINS"},
876 spdxRelationship{"Package-testdata/restricted/lib/libb.so.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
877 packageTag{"testdata/restricted/lib/libd.so.meta_lic"},
878 packageName{"testdata/restricted/lib/libd.so.meta_lic"},
879 spdxPkgID{"testdata/restricted/lib/libd.so.meta_lic"},
880 spdxPkgDownloadLocation{"NOASSERTION"},
881 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
882 spdxRelationship{"Package-testdata/restricted/lib/libd.so.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
883 spdxLicense{},
884 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
885 spdxExtractedText{"&&&First Party License&&&"},
886 spdxExtractedClosingText{},
887 spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
888 spdxExtractedText{"%%%Notice License%%%"},
889 spdxExtractedClosingText{},
890 spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"},
891 spdxExtractedText{"$$$Reciprocal License$$$"},
892 spdxExtractedClosingText{},
893 spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"},
894 spdxExtractedText{"###Restricted License###"},
895 spdxExtractedClosingText{},
896 },
897 expectedDeps: []string{
898 "testdata/firstparty/FIRST_PARTY_LICENSE",
899 "testdata/notice/NOTICE_LICENSE",
900 "testdata/reciprocal/RECIPROCAL_LICENSE",
901 "testdata/restricted/RESTRICTED_LICENSE",
902 },
903 },
904 {
905 condition: "restricted",
906 name: "container",
907 roots: []string{"container.zip.meta_lic"},
908 stripPrefix: "out/target/product/fictional/system/apex/",
909 expectedOut: []matcher{
910 spdxVersion{},
911 spdxDataLicense{},
912 spdxDocumentName{"Android"},
913 spdxID{"Android"},
914 spdxDocumentNameSpace{},
915 spdxCreatorOrganization{},
916 spdxCreatedTime{},
917 packageTag{"testdata/restricted/container.zip.meta_lic"},
918 packageName{"testdata/restricted/container.zip.meta_lic"},
919 spdxPkgID{"testdata/restricted/container.zip.meta_lic"},
920 spdxPkgDownloadLocation{"NOASSERTION"},
921 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
922 spdxRelationship{"DOCUMENT-Android ", "testdata/restricted/container.zip.meta_lic", "DESCRIBES"},
923 packageTag{"testdata/restricted/bin/bin1.meta_lic"},
924 packageName{"testdata/restricted/bin/bin1.meta_lic"},
925 spdxPkgID{"testdata/restricted/bin/bin1.meta_lic"},
926 spdxPkgDownloadLocation{"NOASSERTION"},
927 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
928 spdxRelationship{"Package-testdata/restricted/container.zip.meta_lic ", "testdata/restricted/bin/bin1.meta_lic", "CONTAINS"},
929 packageTag{"testdata/restricted/bin/bin2.meta_lic"},
930 packageName{"testdata/restricted/bin/bin2.meta_lic"},
931 spdxPkgID{"testdata/restricted/bin/bin2.meta_lic"},
932 spdxPkgDownloadLocation{"NOASSERTION"},
933 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
934 spdxRelationship{"Package-testdata/restricted/container.zip.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "CONTAINS"},
935 packageTag{"testdata/restricted/lib/liba.so.meta_lic"},
936 packageName{"testdata/restricted/lib/liba.so.meta_lic"},
937 spdxPkgID{"testdata/restricted/lib/liba.so.meta_lic"},
938 spdxPkgDownloadLocation{"NOASSERTION"},
939 spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
940 spdxRelationship{"Package-testdata/restricted/container.zip.meta_lic ", "testdata/restricted/lib/liba.so.meta_lic", "CONTAINS"},
941 packageTag{"testdata/restricted/lib/libb.so.meta_lic"},
942 packageName{"testdata/restricted/lib/libb.so.meta_lic"},
943 spdxPkgID{"testdata/restricted/lib/libb.so.meta_lic"},
944 spdxPkgDownloadLocation{"NOASSERTION"},
945 spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
946 spdxRelationship{"Package-testdata/restricted/container.zip.meta_lic ", "testdata/restricted/lib/libb.so.meta_lic", "CONTAINS"},
947 spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/liba.so.meta_lic", "CONTAINS"},
948 packageTag{"testdata/restricted/lib/libc.a.meta_lic"},
949 packageName{"testdata/restricted/lib/libc.a.meta_lic"},
950 spdxPkgID{"testdata/restricted/lib/libc.a.meta_lic"},
951 spdxPkgDownloadLocation{"NOASSERTION"},
952 spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
953 spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/libc.a.meta_lic", "CONTAINS"},
954 spdxRelationship{"Package-testdata/restricted/lib/libb.so.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
955 packageTag{"testdata/restricted/lib/libd.so.meta_lic"},
956 packageName{"testdata/restricted/lib/libd.so.meta_lic"},
957 spdxPkgID{"testdata/restricted/lib/libd.so.meta_lic"},
958 spdxPkgDownloadLocation{"NOASSERTION"},
959 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
960 spdxRelationship{"Package-testdata/restricted/lib/libd.so.meta_lic ", "testdata/restricted/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
961 spdxLicense{},
962 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
963 spdxExtractedText{"&&&First Party License&&&"},
964 spdxExtractedClosingText{},
965 spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
966 spdxExtractedText{"%%%Notice License%%%"},
967 spdxExtractedClosingText{},
968 spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"},
969 spdxExtractedText{"$$$Reciprocal License$$$"},
970 spdxExtractedClosingText{},
971 spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"},
972 spdxExtractedText{"###Restricted License###"},
973 spdxExtractedClosingText{},
974 },
975 expectedDeps: []string{
976 "testdata/firstparty/FIRST_PARTY_LICENSE",
977 "testdata/notice/NOTICE_LICENSE",
978 "testdata/reciprocal/RECIPROCAL_LICENSE",
979 "testdata/restricted/RESTRICTED_LICENSE",
980 },
981 },
982 {
983 condition: "restricted",
984 name: "binary",
985 roots: []string{"bin/bin1.meta_lic"},
986 expectedOut: []matcher{
987 spdxVersion{},
988 spdxDataLicense{},
989 spdxDocumentName{"Android"},
990 spdxID{"Android"},
991 spdxDocumentNameSpace{},
992 spdxCreatorOrganization{},
993 spdxCreatedTime{},
994 packageTag{"testdata/restricted/bin/bin1.meta_lic"},
995 packageName{"testdata/restricted/bin/bin1.meta_lic"},
996 spdxPkgID{"testdata/restricted/bin/bin1.meta_lic"},
997 spdxPkgDownloadLocation{"NOASSERTION"},
998 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
999 spdxRelationship{"DOCUMENT-Android ", "testdata/restricted/bin/bin1.meta_lic", "DESCRIBES"},
1000 packageTag{"testdata/restricted/lib/liba.so.meta_lic"},
1001 packageName{"testdata/restricted/lib/liba.so.meta_lic"},
1002 spdxPkgID{"testdata/restricted/lib/liba.so.meta_lic"},
1003 spdxPkgDownloadLocation{"NOASSERTION"},
1004 spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
1005 spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/liba.so.meta_lic", "CONTAINS"},
1006 packageTag{"testdata/restricted/lib/libc.a.meta_lic"},
1007 packageName{"testdata/restricted/lib/libc.a.meta_lic"},
1008 spdxPkgID{"testdata/restricted/lib/libc.a.meta_lic"},
1009 spdxPkgDownloadLocation{"NOASSERTION"},
1010 spdxPkgLicenseDeclared{"testdata-reciprocal-RECIPROCAL_LICENSE"},
1011 spdxRelationship{"Package-testdata/restricted/bin/bin1.meta_lic ", "testdata/restricted/lib/libc.a.meta_lic", "CONTAINS"},
1012 spdxLicense{},
1013 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
1014 spdxExtractedText{"&&&First Party License&&&"},
1015 spdxExtractedClosingText{},
1016 spdxLicenseID{"testdata-reciprocal-RECIPROCAL_LICENSE"},
1017 spdxExtractedText{"$$$Reciprocal License$$$"},
1018 spdxExtractedClosingText{},
1019 spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"},
1020 spdxExtractedText{"###Restricted License###"},
1021 spdxExtractedClosingText{},
1022 },
1023 expectedDeps: []string{
1024 "testdata/firstparty/FIRST_PARTY_LICENSE",
1025 "testdata/reciprocal/RECIPROCAL_LICENSE",
1026 "testdata/restricted/RESTRICTED_LICENSE",
1027 },
1028 },
1029 {
1030 condition: "restricted",
1031 name: "library",
1032 roots: []string{"lib/libd.so.meta_lic"},
1033 expectedOut: []matcher{
1034 spdxVersion{},
1035 spdxDataLicense{},
1036 spdxDocumentName{"Android"},
1037 spdxID{"Android"},
1038 spdxDocumentNameSpace{},
1039 spdxCreatorOrganization{},
1040 spdxCreatedTime{},
1041 packageTag{"testdata/restricted/lib/libd.so.meta_lic"},
1042 packageName{"testdata/restricted/lib/libd.so.meta_lic"},
1043 spdxPkgID{"testdata/restricted/lib/libd.so.meta_lic"},
1044 spdxPkgDownloadLocation{"NOASSERTION"},
1045 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
1046 spdxRelationship{"DOCUMENT-Android ", "testdata/restricted/lib/libd.so.meta_lic", "DESCRIBES"},
1047 spdxLicense{},
1048 spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
1049 spdxExtractedText{"%%%Notice License%%%"},
1050 spdxExtractedClosingText{},
1051 },
1052 expectedDeps: []string{"testdata/notice/NOTICE_LICENSE"},
1053 },
1054 {
1055 condition: "proprietary",
1056 name: "apex",
1057 roots: []string{"highest.apex.meta_lic"},
1058 expectedOut: []matcher{
1059 spdxVersion{},
1060 spdxDataLicense{},
1061 spdxDocumentName{"Android"},
1062 spdxID{"Android"},
1063 spdxDocumentNameSpace{},
1064 spdxCreatorOrganization{},
1065 spdxCreatedTime{},
1066 packageTag{"testdata/proprietary/highest.apex.meta_lic"},
1067 packageName{"testdata/proprietary/highest.apex.meta_lic"},
1068 spdxPkgID{"testdata/proprietary/highest.apex.meta_lic"},
1069 spdxPkgDownloadLocation{"NOASSERTION"},
1070 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
1071 spdxRelationship{"DOCUMENT-Android ", "testdata/proprietary/highest.apex.meta_lic", "DESCRIBES"},
1072 packageTag{"testdata/proprietary/bin/bin1.meta_lic"},
1073 packageName{"testdata/proprietary/bin/bin1.meta_lic"},
1074 spdxPkgID{"testdata/proprietary/bin/bin1.meta_lic"},
1075 spdxPkgDownloadLocation{"NOASSERTION"},
1076 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
1077 spdxRelationship{"Package-testdata/proprietary/highest.apex.meta_lic ", "testdata/proprietary/bin/bin1.meta_lic", "CONTAINS"},
1078 packageTag{"testdata/proprietary/bin/bin2.meta_lic"},
1079 packageName{"testdata/proprietary/bin/bin2.meta_lic"},
1080 spdxPkgID{"testdata/proprietary/bin/bin2.meta_lic"},
1081 spdxPkgDownloadLocation{"NOASSERTION"},
1082 spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
1083 spdxRelationship{"Package-testdata/proprietary/highest.apex.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "CONTAINS"},
1084 packageTag{"testdata/proprietary/lib/liba.so.meta_lic"},
1085 packageName{"testdata/proprietary/lib/liba.so.meta_lic"},
1086 spdxPkgID{"testdata/proprietary/lib/liba.so.meta_lic"},
1087 spdxPkgDownloadLocation{"NOASSERTION"},
1088 spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
1089 spdxRelationship{"Package-testdata/proprietary/highest.apex.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"},
1090 packageTag{"testdata/proprietary/lib/libb.so.meta_lic"},
1091 packageName{"testdata/proprietary/lib/libb.so.meta_lic"},
1092 spdxPkgID{"testdata/proprietary/lib/libb.so.meta_lic"},
1093 spdxPkgDownloadLocation{"NOASSERTION"},
1094 spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
1095 spdxRelationship{"Package-testdata/proprietary/highest.apex.meta_lic ", "testdata/proprietary/lib/libb.so.meta_lic", "CONTAINS"},
1096 spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"},
1097 packageTag{"testdata/proprietary/lib/libc.a.meta_lic"},
1098 packageName{"testdata/proprietary/lib/libc.a.meta_lic"},
1099 spdxPkgID{"testdata/proprietary/lib/libc.a.meta_lic"},
1100 spdxPkgDownloadLocation{"NOASSERTION"},
1101 spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
1102 spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/libc.a.meta_lic", "CONTAINS"},
1103 spdxRelationship{"Package-testdata-proprietary-lib-libb.so.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
1104 packageTag{"testdata/proprietary/lib/libd.so.meta_lic"},
1105 packageName{"testdata/proprietary/lib/libd.so.meta_lic"},
1106 spdxPkgID{"testdata/proprietary/lib/libd.so.meta_lic"},
1107 spdxPkgDownloadLocation{"NOASSERTION"},
1108 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
1109 spdxRelationship{"Package-testdata-proprietary-lib-libd.so.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
1110 spdxLicense{},
1111 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
1112 spdxExtractedText{"&&&First Party License&&&"},
1113 spdxExtractedClosingText{},
1114 spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
1115 spdxExtractedText{"%%%Notice License%%%"},
1116 spdxExtractedClosingText{},
1117 spdxLicenseID{"testdata-proprietary-PROPRIETARY_LICENSE"},
1118 spdxExtractedText{"@@@Proprietary License@@@"},
1119 spdxExtractedClosingText{},
1120 spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"},
1121 spdxExtractedText{"###Restricted License###"},
1122 spdxExtractedClosingText{},
1123 },
1124 expectedDeps: []string{
1125 "testdata/firstparty/FIRST_PARTY_LICENSE",
1126 "testdata/notice/NOTICE_LICENSE",
1127 "testdata/proprietary/PROPRIETARY_LICENSE",
1128 "testdata/restricted/RESTRICTED_LICENSE",
1129 },
1130 },
1131 {
1132 condition: "proprietary",
1133 name: "container",
1134 roots: []string{"container.zip.meta_lic"},
1135 expectedOut: []matcher{
1136 spdxVersion{},
1137 spdxDataLicense{},
1138 spdxDocumentName{"Android"},
1139 spdxID{"Android"},
1140 spdxDocumentNameSpace{},
1141 spdxCreatorOrganization{},
1142 spdxCreatedTime{},
1143 packageTag{"testdata/proprietary/container.zip.meta_lic"},
1144 packageName{"testdata/proprietary/container.zip.meta_lic"},
1145 spdxPkgID{"testdata/proprietary/container.zip.meta_lic"},
1146 spdxPkgDownloadLocation{"NOASSERTION"},
1147 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
1148 spdxRelationship{"DOCUMENT-Android ", "testdata/proprietary/container.zip.meta_lic", "DESCRIBES"},
1149 packageTag{"testdata/proprietary/bin/bin1.meta_lic"},
1150 packageName{"testdata/proprietary/bin/bin1.meta_lic"},
1151 spdxPkgID{"testdata/proprietary/bin/bin1.meta_lic"},
1152 spdxPkgDownloadLocation{"NOASSERTION"},
1153 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
1154 spdxRelationship{"Package-testdata/proprietary/container.zip.meta_lic ", "testdata/proprietary/bin/bin1.meta_lic", "CONTAINS"},
1155 packageTag{"testdata/proprietary/bin/bin2.meta_lic"},
1156 packageName{"testdata/proprietary/bin/bin2.meta_lic"},
1157 spdxPkgID{"testdata/proprietary/bin/bin2.meta_lic"},
1158 spdxPkgDownloadLocation{"NOASSERTION"},
1159 spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
1160 spdxRelationship{"Package-testdata/proprietary/container.zip.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "CONTAINS"},
1161 packageTag{"testdata/proprietary/lib/liba.so.meta_lic"},
1162 packageName{"testdata/proprietary/lib/liba.so.meta_lic"},
1163 spdxPkgID{"testdata/proprietary/lib/liba.so.meta_lic"},
1164 spdxPkgDownloadLocation{"NOASSERTION"},
1165 spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
1166 spdxRelationship{"Package-testdata/proprietary/container.zip.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"},
1167 packageTag{"testdata/proprietary/lib/libb.so.meta_lic"},
1168 packageName{"testdata/proprietary/lib/libb.so.meta_lic"},
1169 spdxPkgID{"testdata/proprietary/lib/libb.so.meta_lic"},
1170 spdxPkgDownloadLocation{"NOASSERTION"},
1171 spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
1172 spdxRelationship{"Package-testdata/proprietary/container.zip.meta_lic ", "testdata/proprietary/lib/libb.so.meta_lic", "CONTAINS"},
1173 spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"},
1174 packageTag{"testdata/proprietary/lib/libc.a.meta_lic"},
1175 packageName{"testdata/proprietary/lib/libc.a.meta_lic"},
1176 spdxPkgID{"testdata/proprietary/lib/libc.a.meta_lic"},
1177 spdxPkgDownloadLocation{"NOASSERTION"},
1178 spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
1179 spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/libc.a.meta_lic", "CONTAINS"},
1180 spdxRelationship{"Package-testdata-proprietary-lib-libb.so.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
1181 packageTag{"testdata/proprietary/lib/libd.so.meta_lic"},
1182 packageName{"testdata/proprietary/lib/libd.so.meta_lic"},
1183 spdxPkgID{"testdata/proprietary/lib/libd.so.meta_lic"},
1184 spdxPkgDownloadLocation{"NOASSERTION"},
1185 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
1186 spdxRelationship{"Package-testdata-proprietary-lib-libd.so.meta_lic ", "testdata/proprietary/bin/bin2.meta_lic", "RUNTIME_DEPENDENCY_OF"},
1187 spdxLicense{},
1188 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
1189 spdxExtractedText{"&&&First Party License&&&"},
1190 spdxExtractedClosingText{},
1191 spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
1192 spdxExtractedText{"%%%Notice License%%%"},
1193 spdxExtractedClosingText{},
1194 spdxLicenseID{"testdata-proprietary-PROPRIETARY_LICENSE"},
1195 spdxExtractedText{"@@@Proprietary License@@@"},
1196 spdxExtractedClosingText{},
1197 spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"},
1198 spdxExtractedText{"###Restricted License###"},
1199 spdxExtractedClosingText{},
1200 },
1201 expectedDeps: []string{
1202 "testdata/firstparty/FIRST_PARTY_LICENSE",
1203 "testdata/notice/NOTICE_LICENSE",
1204 "testdata/proprietary/PROPRIETARY_LICENSE",
1205 "testdata/restricted/RESTRICTED_LICENSE",
1206 },
1207 },
1208 {
1209 condition: "proprietary",
1210 name: "application",
1211 roots: []string{"application.meta_lic"},
1212 expectedOut: []matcher{
1213 spdxVersion{},
1214 spdxDataLicense{},
1215 spdxDocumentName{"Android"},
1216 spdxID{"Android"},
1217 spdxDocumentNameSpace{},
1218 spdxCreatorOrganization{},
1219 spdxCreatedTime{},
1220 packageTag{"testdata/proprietary/application.meta_lic"},
1221 packageName{"testdata/proprietary/application.meta_lic"},
1222 spdxPkgID{"testdata/proprietary/application.meta_lic"},
1223 spdxPkgDownloadLocation{"NOASSERTION"},
1224 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
1225 spdxRelationship{"DOCUMENT-Android ", "testdata/proprietary/application.meta_lic", "DESCRIBES"},
1226 packageTag{"testdata/proprietary/bin/bin3.meta_lic"},
1227 packageName{"testdata/proprietary/bin/bin3.meta_lic"},
1228 spdxPkgID{"testdata/proprietary/bin/bin3.meta_lic"},
1229 spdxPkgDownloadLocation{"NOASSERTION"},
1230 spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
1231 spdxRelationship{"Package-testdata/proprietary/bin/bin3.meta_lic ", "testdata/proprietary/application.meta_lic", "BUILD_TOOL_OF"},
1232 packageTag{"testdata/proprietary/lib/liba.so.meta_lic"},
1233 packageName{"testdata/proprietary/lib/liba.so.meta_lic"},
1234 spdxPkgID{"testdata/proprietary/lib/liba.so.meta_lic"},
1235 spdxPkgDownloadLocation{"NOASSERTION"},
1236 spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
1237 spdxRelationship{"Package-testdata/proprietary/application.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"},
1238 packageTag{"testdata/proprietary/lib/libb.so.meta_lic"},
1239 packageName{"testdata/proprietary/lib/libb.so.meta_lic"},
1240 spdxPkgID{"testdata/proprietary/lib/libb.so.meta_lic"},
1241 spdxPkgDownloadLocation{"NOASSERTION"},
1242 spdxPkgLicenseDeclared{"testdata-restricted-RESTRICTED_LICENSE"},
1243 spdxRelationship{"Package-testdata/proprietary/lib/libb.so.meta_lic ", "testdata/proprietary/application.meta_lic", "RUNTIME_DEPENDENCY_OF"},
1244 spdxLicense{},
1245 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
1246 spdxExtractedText{"&&&First Party License&&&"},
1247 spdxExtractedClosingText{},
1248 spdxLicenseID{"testdata-proprietary-PROPRIETARY_LICENSE"},
1249 spdxExtractedText{"@@@Proprietary License@@@"},
1250 spdxExtractedClosingText{},
1251 spdxLicenseID{"testdata-restricted-RESTRICTED_LICENSE"},
1252 spdxExtractedText{"###Restricted License###"},
1253 spdxExtractedClosingText{},
1254 },
1255 expectedDeps: []string{
1256 "testdata/firstparty/FIRST_PARTY_LICENSE",
1257 "testdata/proprietary/PROPRIETARY_LICENSE",
1258 "testdata/restricted/RESTRICTED_LICENSE",
1259 },
1260 },
1261 {
1262 condition: "proprietary",
1263 name: "binary",
1264 roots: []string{"bin/bin1.meta_lic"},
1265 expectedOut: []matcher{
1266 spdxVersion{},
1267 spdxDataLicense{},
1268 spdxDocumentName{"Android"},
1269 spdxID{"Android"},
1270 spdxDocumentNameSpace{},
1271 spdxCreatorOrganization{},
1272 spdxCreatedTime{},
1273 packageTag{"testdata/proprietary/bin/bin1.meta_lic"},
1274 packageName{"testdata/proprietary/bin/bin1.meta_lic"},
1275 spdxPkgID{"testdata/proprietary/bin/bin1.meta_lic"},
1276 spdxPkgDownloadLocation{"NOASSERTION"},
1277 spdxPkgLicenseDeclared{"testdata-firstparty-FIRST_PARTY_LICENSE"},
1278 spdxRelationship{"DOCUMENT-Android ", "testdata/proprietary/bin/bin1.meta_lic", "DESCRIBES"},
1279 packageTag{"testdata/proprietary/lib/liba.so.meta_lic"},
1280 packageName{"testdata/proprietary/lib/liba.so.meta_lic"},
1281 spdxPkgID{"testdata/proprietary/lib/liba.so.meta_lic"},
1282 spdxPkgDownloadLocation{"NOASSERTION"},
1283 spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
1284 spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/liba.so.meta_lic", "CONTAINS"},
1285 packageTag{"testdata/proprietary/lib/libc.a.meta_lic"},
1286 packageName{"testdata/proprietary/lib/libc.a.meta_lic"},
1287 spdxPkgID{"testdata/proprietary/lib/libc.a.meta_lic"},
1288 spdxPkgDownloadLocation{"NOASSERTION"},
1289 spdxPkgLicenseDeclared{"testdata-proprietary-PROPRIETARY_LICENSE"},
1290 spdxRelationship{"Package-testdata/proprietary/bin/bin1.meta_lic ", "testdata/proprietary/lib/libc.a.meta_lic", "CONTAINS"},
1291 spdxLicense{},
1292 spdxLicenseID{"testdata-firstparty-FIRST_PARTY_LICENSE"},
1293 spdxExtractedText{"&&&First Party License&&&"},
1294 spdxExtractedClosingText{},
1295 spdxLicenseID{"testdata-proprietary-PROPRIETARY_LICENSE"},
1296 spdxExtractedText{"@@@Proprietary License@@@"},
1297 spdxExtractedClosingText{},
1298 },
1299 expectedDeps: []string{
1300 "testdata/firstparty/FIRST_PARTY_LICENSE",
1301 "testdata/proprietary/PROPRIETARY_LICENSE",
1302 },
1303 },
1304 {
1305 condition: "proprietary",
1306 name: "library",
1307 roots: []string{"lib/libd.so.meta_lic"},
1308 expectedOut: []matcher{
1309 spdxVersion{},
1310 spdxDataLicense{},
1311 spdxDocumentName{"Android"},
1312 spdxID{"Android"},
1313 spdxDocumentNameSpace{},
1314 spdxCreatorOrganization{},
1315 spdxCreatedTime{},
1316 packageTag{"testdata/proprietary/lib/libd.so.meta_lic"},
1317 packageName{"testdata/proprietary/lib/libd.so.meta_lic"},
1318 spdxPkgID{"testdata/proprietary/lib/libd.so.meta_lic"},
1319 spdxPkgDownloadLocation{"NOASSERTION"},
1320 spdxPkgLicenseDeclared{"testdata-notice-NOTICE_LICENSE"},
1321 spdxRelationship{"DOCUMENT-Android ", "testdata/proprietary/lib/libd.so.meta_lic", "DESCRIBES"},
1322 spdxLicense{},
1323 spdxLicenseID{"testdata-notice-NOTICE_LICENSE"},
1324 spdxExtractedText{"%%%Notice License%%%"},
1325 spdxExtractedClosingText{},
1326 },
1327 expectedDeps: []string{"testdata/notice/NOTICE_LICENSE"},
1328 },
1329 }
1330 for _, tt := range tests {
1331 t.Run(tt.condition+" "+tt.name, func(t *testing.T) {
1332 stdout := &bytes.Buffer{}
1333 stderr := &bytes.Buffer{}
1334
1335 rootFiles := make([]string, 0, len(tt.roots))
1336 for _, r := range tt.roots {
1337 rootFiles = append(rootFiles, "testdata/"+tt.condition+"/"+r)
1338 }
1339
1340 ctx := context{stdout, stderr, compliance.GetFS(tt.outDir), "Android", []string{tt.stripPrefix}, fakeTime}
1341
1342 deps, err := sbomGenerator(&ctx, rootFiles...)
1343 if err != nil {
1344 t.Fatalf("sbom: error = %v, stderr = %v", err, stderr)
1345 return
1346 }
1347 if stderr.Len() > 0 {
1348 t.Errorf("sbom: gotStderr = %v, want none", stderr)
1349 }
1350
1351 t.Logf("got stdout: %s", stdout.String())
1352
1353 t.Logf("want stdout: %s", matcherList(tt.expectedOut).String())
1354
1355 out := bufio.NewScanner(stdout)
1356 lineno := 0
1357 for out.Scan() {
1358 line := out.Text()
1359 if strings.TrimLeft(line, " ") == "" {
1360 continue
1361 }
1362 if len(tt.expectedOut) <= lineno {
1363 t.Errorf("sbom: unexpected output at line %d: got %q, want nothing (wanted %d lines)", lineno+1, line, len(tt.expectedOut))
1364 } else if !tt.expectedOut[lineno].isMatch(line) {
1365 t.Errorf("sbom: unexpected output at line %d: got %q, want %q", lineno+1, line, tt.expectedOut[lineno])
1366 }
1367 lineno++
1368 }
1369 for ; lineno < len(tt.expectedOut); lineno++ {
1370 t.Errorf("bom: missing output line %d: ended early, want %q", lineno+1, tt.expectedOut[lineno])
1371 }
1372
1373 t.Logf("got deps: %q", deps)
1374
1375 t.Logf("want deps: %q", tt.expectedDeps)
1376
1377 if g, w := deps, tt.expectedDeps; !reflect.DeepEqual(g, w) {
1378 t.Errorf("unexpected deps, wanted:\n%s\ngot:\n%s\n",
1379 strings.Join(w, "\n"), strings.Join(g, "\n"))
1380 }
1381 })
1382 }
1383}
1384
1385type matcher interface {
1386 isMatch(line string) bool
1387 String() string
1388}
1389
1390type packageTag struct {
1391 name string
1392}
1393
1394func (m packageTag) isMatch(line string) bool {
1395 groups := spdxPackageTag.FindStringSubmatch(line)
1396 if len(groups) != 2 {
1397 return false
1398 }
1399 return groups[1] == m.name
1400}
1401
1402func (m packageTag) String() string {
1403 return "##### Package: " + m.name
1404}
1405
1406type packageName struct {
1407 name string
1408}
1409
1410func (m packageName) isMatch(line string) bool {
1411 groups := spdxPackageNameTag.FindStringSubmatch(line)
1412 if len(groups) != 2 {
1413 return false
1414 }
1415 return groups[1] == replaceSlashes(m.name)
1416}
1417
1418func (m packageName) String() string {
1419 return "PackageName: " + replaceSlashes(m.name)
1420}
1421
1422type spdxID struct {
1423 name string
1424}
1425
1426func (m spdxID) isMatch(line string) bool {
1427 groups := spdxIDTag.FindStringSubmatch(line)
1428 if len(groups) != 2 {
1429 return false
1430 }
1431 return groups[1] == replaceSlashes(m.name)
1432}
1433
1434func (m spdxID) String() string {
1435 return "SPDXID: SPDXRef-DOCUMENT-" + replaceSlashes(m.name)
1436}
1437
1438type spdxPkgID struct {
1439 name string
1440}
1441
1442func (m spdxPkgID) isMatch(line string) bool {
1443 groups := spdxPkgIDTag.FindStringSubmatch(line)
1444 if len(groups) != 2 {
1445 return false
1446 }
1447 return groups[1] == replaceSlashes(m.name)
1448}
1449
1450func (m spdxPkgID) String() string {
1451 return "SPDXID: SPDXRef-Package-" + replaceSlashes(m.name)
1452}
1453
1454type spdxVersion struct{}
1455
1456func (m spdxVersion) isMatch(line string) bool {
1457 return spdxVersionTag.MatchString(line)
1458}
1459
1460func (m spdxVersion) String() string {
1461 return "SPDXVersion: SPDX-2.2"
1462}
1463
1464type spdxDataLicense struct{}
1465
1466func (m spdxDataLicense) isMatch(line string) bool {
1467 return spdxDataLicenseTag.MatchString(line)
1468}
1469
1470func (m spdxDataLicense) String() string {
1471 return "DataLicense: CC-1.0"
1472}
1473
1474type spdxDocumentName struct {
1475 name string
1476}
1477
1478func (m spdxDocumentName) isMatch(line string) bool {
1479 return spdxDocumentNameTag.MatchString(line)
1480}
1481
1482func (m spdxDocumentName) String() string {
1483 return "DocumentName: " + m.name
1484}
1485
1486type spdxDocumentNameSpace struct {
1487 name string
1488}
1489
1490func (m spdxDocumentNameSpace) isMatch(line string) bool {
1491 return spdxDocumentNameSpaceTag.MatchString(line)
1492}
1493
1494func (m spdxDocumentNameSpace) String() string {
1495 return "DocumentNameSpace: Android"
1496}
1497
1498type spdxCreatorOrganization struct{}
1499
1500func (m spdxCreatorOrganization) isMatch(line string) bool {
1501 return spdxCreatorOrganizationTag.MatchString(line)
1502}
1503
1504func (m spdxCreatorOrganization) String() string {
1505 return "Creator: Organization: Google LLC"
1506}
1507
1508func fakeTime() time.Time {
1509 return time.UnixMicro(0)
1510}
1511
1512type spdxCreatedTime struct{}
1513
1514func (m spdxCreatedTime) isMatch(line string) bool {
1515 return spdxCreatedTimeTag.MatchString(line)
1516}
1517
1518func (m spdxCreatedTime) String() string {
1519 return "Created: 1970-01-01T00:00:00Z"
1520}
1521
1522type spdxPkgDownloadLocation struct {
1523 name string
1524}
1525
1526func (m spdxPkgDownloadLocation) isMatch(line string) bool {
1527 return spdxPkgDownloadLocationTag.MatchString(line)
1528}
1529
1530func (m spdxPkgDownloadLocation) String() string {
1531 return "PackageDownloadLocation: " + m.name
1532}
1533
1534type spdxPkgLicenseDeclared struct {
1535 name string
1536}
1537
1538func (m spdxPkgLicenseDeclared) isMatch(line string) bool {
1539 groups := spdxPkgLicenseDeclaredTag.FindStringSubmatch(line)
1540 if len(groups) != 2 {
1541 return false
1542 }
1543 return groups[1] == replaceSlashes(m.name)
1544}
1545
1546func (m spdxPkgLicenseDeclared) String() string {
1547 return "PackageLicenseConcluded: LicenseRef-" + m.name
1548}
1549
1550type spdxRelationship struct {
1551 pkg1 string
1552 pkg2 string
1553 relation string
1554}
1555
1556func (m spdxRelationship) isMatch(line string) bool {
1557 groups := spdxRelationshipTag.FindStringSubmatch(line)
1558 if len(groups) != 4 {
1559 return false
1560 }
1561 return groups[1] == replaceSlashes(m.pkg1) && groups[2] == m.relation && groups[3] == replaceSlashes(m.pkg2)
1562}
1563
1564func (m spdxRelationship) String() string {
1565 return "Relationship: SPDXRef-" + replaceSlashes(m.pkg1) + " " + m.relation + " SPDXRef-Package-" + replaceSlashes(m.pkg2)
1566}
1567
1568type spdxLicense struct{}
1569
1570func (m spdxLicense) isMatch(line string) bool {
1571 return spdxLicenseTag.MatchString(line)
1572}
1573
1574func (m spdxLicense) String() string {
1575 return "##### Non-standard license:"
1576}
1577
1578type spdxLicenseID struct {
1579 name string
1580}
1581
1582func (m spdxLicenseID) isMatch(line string) bool {
1583 groups := spdxLicenseIDTag.FindStringSubmatch(line)
1584 if len(groups) != 2 {
1585 return false
1586 }
1587 return groups[1] == replaceSlashes(m.name)
1588}
1589
1590func (m spdxLicenseID) String() string {
1591 return "LicenseID: LicenseRef-" + m.name
1592}
1593
1594type spdxExtractedText struct {
1595 name string
1596}
1597
1598func (m spdxExtractedText) isMatch(line string) bool {
1599 groups := spdxExtractedTextTag.FindStringSubmatch(line)
1600 if len(groups) != 2 {
1601 return false
1602 }
1603 return groups[1] == replaceSlashes(m.name)
1604}
1605
1606func (m spdxExtractedText) String() string {
1607 return "ExtractedText: <text>" + m.name
1608}
1609
1610type spdxExtractedClosingText struct{}
1611
1612func (m spdxExtractedClosingText) isMatch(line string) bool {
1613 return spdxExtractedClosingTextTag.MatchString(line)
1614}
1615
1616func (m spdxExtractedClosingText) String() string {
1617 return "</text>"
1618}
1619
1620type matcherList []matcher
1621
1622func (l matcherList) String() string {
1623 var sb strings.Builder
1624 for _, m := range l {
1625 s := m.String()
1626 fmt.Fprintf(&sb, "%s\n", s)
1627 }
1628 return sb.String()
1629}