blob: cd9dd71bdc286058054c88c0a7e49a13b256df11 [file] [log] [blame]
Bob Badour9ee7d032021-10-25 16:51:48 -07001// Copyright 2021 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 compliance
16
17import (
18 "bytes"
19 "testing"
20)
21
22func TestResolveNotices(t *testing.T) {
23 tests := []struct {
24 name string
25 roots []string
26 edges []annotated
27 expectedResolutions []res
28 }{
29 {
30 name: "firstparty",
31 roots: []string{"apacheBin.meta_lic"},
32 edges: []annotated{
33 {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
34 },
35 expectedResolutions: []res{
36 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
37 {"apacheBin.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
38 },
39 },
40 {
41 name: "firstpartydynamic",
42 roots: []string{"apacheBin.meta_lic"},
43 edges: []annotated{
44 {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
45 },
46 expectedResolutions: []res{
47 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
48 },
49 },
50 {
51 name: "firstpartydynamicshipped",
52 roots: []string{"apacheBin.meta_lic", "apacheLib.meta_lic"},
53 edges: []annotated{
54 {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
55 },
56 expectedResolutions: []res{
57 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
58 {"apacheLib.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
59 },
60 },
61 {
62 name: "restricted",
63 roots: []string{"apacheBin.meta_lic"},
64 edges: []annotated{
65 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}},
66 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
67 },
68 expectedResolutions: []res{
69 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
70 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
71 {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
72 {"apacheBin.meta_lic", "mitLib.meta_lic", "gplLib.meta_lic", "restricted"},
73 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
74 },
75 },
76 {
77 name: "restrictedtool",
78 roots: []string{"apacheBin.meta_lic"},
79 edges: []annotated{
80 {"apacheBin.meta_lic", "gplBin.meta_lic", []string{"toolchain"}},
81 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
82 },
83 expectedResolutions: []res{
84 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
85 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
86 },
87 },
88 {
89 name: "restricteddeep",
90 roots: []string{"apacheContainer.meta_lic"},
91 edges: []annotated{
92 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
93 {"apacheContainer.meta_lic", "mitBin.meta_lic", []string{"static"}},
94 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}},
95 {"apacheBin.meta_lic", "mplLib.meta_lic", []string{"static"}},
96 {"mitBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
97 },
98 expectedResolutions: []res{
99 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
100 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
101 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
102 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
103 {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
104 {"apacheContainer.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
105 {"apacheContainer.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
106 {"apacheContainer.meta_lic", "mplLib.meta_lic", "gplLib.meta_lic", "restricted"},
107 {"apacheContainer.meta_lic", "mplLib.meta_lic", "mplLib.meta_lic", "reciprocal"},
108 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
109 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
110 {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
111 {"apacheBin.meta_lic", "mplLib.meta_lic", "gplLib.meta_lic", "restricted"},
112 {"apacheBin.meta_lic", "mplLib.meta_lic", "mplLib.meta_lic", "reciprocal"},
113 {"mitBin.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
114 {"mitBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
115 },
116 },
117 {
118 name: "restrictedwide",
119 roots: []string{"apacheContainer.meta_lic"},
120 edges: []annotated{
121 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
122 {"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"static"}},
123 },
124 expectedResolutions: []res{
125 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
126 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
127 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
128 {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
129 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
130 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
131 },
132 },
133 {
134 name: "restricteddynamic",
135 roots: []string{"apacheBin.meta_lic"},
136 edges: []annotated{
137 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"dynamic"}},
138 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"dynamic"}},
139 },
140 expectedResolutions: []res{
141 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
142 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
143 },
144 },
145 {
146 name: "restricteddynamicshipped",
147 roots: []string{"apacheBin.meta_lic", "mitLib.meta_lic"},
148 edges: []annotated{
149 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"dynamic"}},
150 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"dynamic"}},
151 },
152 expectedResolutions: []res{
153 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
154 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
155 {"apacheBin.meta_lic", "mitLib.meta_lic", "gplLib.meta_lic", "restricted"},
Bob Badourb2855152021-12-08 12:52:59 -0800156 {"mitLib.meta_lic", "mitLib.meta_lic", "gplLib.meta_lic", "restricted"},
Bob Badour9ee7d032021-10-25 16:51:48 -0700157 {"mitLib.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
158 },
159 },
160 {
161 name: "restricteddynamicdeep",
162 roots: []string{"apacheContainer.meta_lic"},
163 edges: []annotated{
164 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
165 {"apacheContainer.meta_lic", "mitBin.meta_lic", []string{"static"}},
166 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"dynamic"}},
167 {"apacheBin.meta_lic", "mplLib.meta_lic", []string{"dynamic"}},
168 {"mitBin.meta_lic", "mitLib.meta_lic", []string{"dynamic"}},
169 },
170 expectedResolutions: []res{
171 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
172 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
173 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
174 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
175 {"apacheContainer.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
176 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
177 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
178 {"mitBin.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
179 },
180 },
181 {
182 name: "restricteddynamicwide",
183 roots: []string{"apacheContainer.meta_lic"},
184 edges: []annotated{
185 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
186 {"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"dynamic"}},
187 },
188 expectedResolutions: []res{
189 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
190 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
191 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
192 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
193 },
194 },
195 {
196 name: "restricteddynamicwideshipped",
197 roots: []string{"apacheContainer.meta_lic", "gplLib.meta_lic"},
198 edges: []annotated{
199 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
200 {"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"dynamic"}},
201 },
202 expectedResolutions: []res{
203 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
204 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
205 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
206 {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
207 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
208 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
209 },
210 },
211 {
212 name: "weakrestricted",
213 roots: []string{"apacheBin.meta_lic"},
214 edges: []annotated{
215 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"static"}},
216 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
217 },
218 expectedResolutions: []res{
219 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
220 {"apacheBin.meta_lic", "apacheBin.meta_lic", "lgplLib.meta_lic", "restricted"},
221 {"apacheBin.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
222 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
223 {"apacheBin.meta_lic", "mitLib.meta_lic", "lgplLib.meta_lic", "restricted"},
224 },
225 },
226 {
227 name: "weakrestrictedtool",
228 roots: []string{"apacheBin.meta_lic"},
229 edges: []annotated{
230 {"apacheBin.meta_lic", "lgplBin.meta_lic", []string{"toolchain"}},
231 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
232 },
233 expectedResolutions: []res{
234 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
235 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
236 },
237 },
238 {
239 name: "weakrestrictedtoolshipped",
240 roots: []string{"apacheBin.meta_lic", "lgplBin.meta_lic"},
241 edges: []annotated{
242 {"apacheBin.meta_lic", "lgplBin.meta_lic", []string{"toolchain"}},
243 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
244 },
245 expectedResolutions: []res{
246 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
247 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
248 {"lgplBin.meta_lic", "lgplBin.meta_lic", "lgplBin.meta_lic", "restricted"},
249 },
250 },
251 {
252 name: "weakrestricteddeep",
253 roots: []string{"apacheContainer.meta_lic"},
254 edges: []annotated{
255 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
256 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"static"}},
257 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
258 },
259 expectedResolutions: []res{
260 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
261 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "lgplLib.meta_lic", "restricted"},
262 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
263 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "lgplLib.meta_lic", "restricted"},
264 {"apacheContainer.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
265 {"apacheContainer.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
266 {"apacheContainer.meta_lic", "mitLib.meta_lic", "lgplLib.meta_lic", "restricted"},
267 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
268 {"apacheBin.meta_lic", "apacheBin.meta_lic", "lgplLib.meta_lic", "restricted"},
269 {"apacheBin.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
270 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
271 {"apacheBin.meta_lic", "mitLib.meta_lic", "lgplLib.meta_lic", "restricted"},
272 },
273 },
274 {
275 name: "weakrestrictedwide",
276 roots: []string{"apacheContainer.meta_lic"},
277 edges: []annotated{
278 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
279 {"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"static"}},
280 },
281 expectedResolutions: []res{
282 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
283 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "lgplLib.meta_lic", "restricted"},
284 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
285 {"apacheContainer.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
286 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
287 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
288 },
289 },
290 {
291 name: "weakrestricteddynamic",
292 roots: []string{"apacheBin.meta_lic"},
293 edges: []annotated{
294 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
295 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
296 },
297 expectedResolutions: []res{
298 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
299 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
300 },
301 },
302 {
303 name: "weakrestricteddynamicshipped",
304 roots: []string{"apacheBin.meta_lic", "lgplLib.meta_lic"},
305 edges: []annotated{
306 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
307 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
308 },
309 expectedResolutions: []res{
310 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
311 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
312 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
313 },
314 },
315 {
316 name: "weakrestricteddynamicdeep",
317 roots: []string{"apacheContainer.meta_lic"},
318 edges: []annotated{
319 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
320 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
321 },
322 expectedResolutions: []res{
323 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
324 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
325 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
326 },
327 },
328 {
329 name: "weakrestricteddynamicdeepshipped",
330 roots: []string{"apacheContainer.meta_lic", "lgplLib.meta_lic"},
331 edges: []annotated{
332 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
333 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
334 },
335 expectedResolutions: []res{
336 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
337 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
338 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
339 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
340 },
341 },
342 {
343 name: "weakrestricteddynamicwide",
344 roots: []string{"apacheContainer.meta_lic"},
345 edges: []annotated{
346 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
347 {"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
348 },
349 expectedResolutions: []res{
350 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
351 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
352 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
353 },
354 },
355 {
356 name: "weakrestricteddynamicwideshipped",
357 roots: []string{"apacheContainer.meta_lic", "lgplLib.meta_lic"},
358 edges: []annotated{
359 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
360 {"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
361 },
362 expectedResolutions: []res{
363 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
364 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
365 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
366 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
367 },
368 },
369 {
370 name: "classpath",
371 roots: []string{"apacheBin.meta_lic"},
372 edges: []annotated{
373 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"static"}},
374 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
375 },
376 expectedResolutions: []res{
377 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
378 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
379 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
380 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
381 {"apacheBin.meta_lic", "mitLib.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
382 },
383 },
384 {
385 name: "classpathdependent",
386 roots: []string{"dependentModule.meta_lic"},
387 edges: []annotated{
388 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"static"}},
389 {"dependentModule.meta_lic", "mitLib.meta_lic", []string{"static"}},
390 },
391 expectedResolutions: []res{
392 {"dependentModule.meta_lic", "dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
393 {"dependentModule.meta_lic", "dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
394 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
395 {"dependentModule.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
396 {"dependentModule.meta_lic", "mitLib.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
397 },
398 },
399 {
400 name: "classpathdynamic",
401 roots: []string{"apacheBin.meta_lic"},
402 edges: []annotated{
403 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
404 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
405 },
406 expectedResolutions: []res{
407 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
408 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
409 },
410 },
411 {
412 name: "classpathdynamicshipped",
413 roots: []string{"apacheBin.meta_lic", "gplWithClasspathException.meta_lic"},
414 edges: []annotated{
415 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
416 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
417 },
418 expectedResolutions: []res{
419 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
420 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
421 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
422 },
423 },
424 {
425 name: "classpathdependentdynamic",
426 roots: []string{"dependentModule.meta_lic"},
427 edges: []annotated{
428 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
429 {"dependentModule.meta_lic", "mitLib.meta_lic", []string{"static"}},
430 },
431 expectedResolutions: []res{
432 {"dependentModule.meta_lic", "dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
433 {"dependentModule.meta_lic", "dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
434 {"dependentModule.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
435 {"dependentModule.meta_lic", "mitLib.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
436 },
437 },
438 {
439 name: "classpathdependentdynamicshipped",
440 roots: []string{"dependentModule.meta_lic", "gplWithClasspathException.meta_lic"},
441 edges: []annotated{
442 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
443 {"dependentModule.meta_lic", "mitLib.meta_lic", []string{"static"}},
444 },
445 expectedResolutions: []res{
446 {"dependentModule.meta_lic", "dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
447 {"dependentModule.meta_lic", "dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
448 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
449 {"dependentModule.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
450 {"dependentModule.meta_lic", "mitLib.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
451 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
452 },
453 },
454 }
455 for _, tt := range tests {
456 t.Run(tt.name, func(t *testing.T) {
457 stderr := &bytes.Buffer{}
458 lg, err := toGraph(stderr, tt.roots, tt.edges)
459 if err != nil {
Colin Cross179ec3e2022-01-27 15:47:09 -0800460 t.Errorf("unexpected test data error: got %s, want no error", err)
Bob Badour9ee7d032021-10-25 16:51:48 -0700461 return
462 }
463 expectedRs := toResolutionSet(lg, tt.expectedResolutions)
464 actualRs := ResolveNotices(lg)
465 checkSame(actualRs, expectedRs, t)
466 })
467 }
468}