blob: 2eef702ef6804aed3111fe47c83467fa0de4d968 [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 TestWalkResolutionsForCondition(t *testing.T) {
23 tests := []struct {
24 name string
25 condition ConditionNames
26 roots []string
27 edges []annotated
28 expectedResolutions []res
29 }{
30 {
31 name: "firstparty",
32 condition: ImpliesNotice,
33 roots: []string{"apacheBin.meta_lic"},
34 edges: []annotated{
35 {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
36 },
37 expectedResolutions: []res{
38 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
39 {"apacheBin.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
40 },
41 },
42 {
43 name: "notice",
44 condition: ImpliesNotice,
45 roots: []string{"mitBin.meta_lic"},
46 edges: []annotated{
47 {"mitBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
48 },
49 expectedResolutions: []res{
50 {"mitBin.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
51 {"mitBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
52 },
53 },
54 {
55 name: "fponlgplnotice",
56 condition: ImpliesNotice,
57 roots: []string{"apacheBin.meta_lic"},
58 edges: []annotated{
59 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"static"}},
60 },
61 expectedResolutions: []res{
62 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
63 {"apacheBin.meta_lic", "apacheBin.meta_lic", "lgplLib.meta_lic", "restricted"},
64 {"apacheBin.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
65 },
66 },
67 {
68 name: "fponlgpldynamicnotice",
69 condition: ImpliesNotice,
70 roots: []string{"apacheBin.meta_lic"},
71 edges: []annotated{
72 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
73 },
74 expectedResolutions: []res{
75 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
76 },
77 },
78 {
79 name: "independentmodulenotice",
80 condition: ImpliesNotice,
81 roots: []string{"apacheBin.meta_lic"},
82 edges: []annotated{
83 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
84 },
85 expectedResolutions: []res{
86 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
87 },
88 },
89 {
90 name: "independentmodulerestricted",
91 condition: ImpliesRestricted,
92 roots: []string{"apacheBin.meta_lic"},
93 edges: []annotated{
94 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
95 },
96 expectedResolutions: []res{},
97 },
98 {
99 name: "independentmodulestaticnotice",
100 condition: ImpliesNotice,
101 roots: []string{"apacheBin.meta_lic"},
102 edges: []annotated{
103 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"static"}},
104 },
105 expectedResolutions: []res{
106 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
107 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
108 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
109 },
110 },
111 {
112 name: "independentmodulestaticrestricted",
113 condition: ImpliesRestricted,
114 roots: []string{"apacheBin.meta_lic"},
115 edges: []annotated{
116 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"static"}},
117 },
118 expectedResolutions: []res{
119 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
120 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
121 },
122 },
123 {
124 name: "dependentmodulenotice",
125 condition: ImpliesNotice,
126 roots: []string{"dependentModule.meta_lic"},
127 edges: []annotated{
128 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
129 },
130 expectedResolutions: []res{
131 {"dependentModule.meta_lic", "dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
132 {"dependentModule.meta_lic", "dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
133 },
134 },
135 {
136 name: "dependentmodulerestricted",
137 condition: ImpliesRestricted,
138 roots: []string{"dependentModule.meta_lic"},
139 edges: []annotated{
140 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
141 },
142 expectedResolutions: []res{
143 {"dependentModule.meta_lic", "dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
144 },
145 },
146 {
147 name: "lgplonfpnotice",
148 condition: ImpliesNotice,
149 roots: []string{"lgplBin.meta_lic"},
150 edges: []annotated{
151 {"lgplBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
152 },
153 expectedResolutions: []res{
154 {"lgplBin.meta_lic", "lgplBin.meta_lic", "lgplBin.meta_lic", "restricted"},
155 {"lgplBin.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
156 {"lgplBin.meta_lic", "apacheLib.meta_lic", "lgplBin.meta_lic", "restricted"},
157 },
158 },
159 {
160 name: "lgplonfprestricted",
161 condition: ImpliesRestricted,
162 roots: []string{"lgplBin.meta_lic"},
163 edges: []annotated{
164 {"lgplBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
165 },
166 expectedResolutions: []res{
167 {"lgplBin.meta_lic", "lgplBin.meta_lic", "lgplBin.meta_lic", "restricted"},
168 {"lgplBin.meta_lic", "apacheLib.meta_lic", "lgplBin.meta_lic", "restricted"},
169 },
170 },
171 {
172 name: "lgplonfpdynamicnotice",
173 condition: ImpliesNotice,
174 roots: []string{"lgplBin.meta_lic"},
175 edges: []annotated{
176 {"lgplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
177 },
178 expectedResolutions: []res{
179 {"lgplBin.meta_lic", "lgplBin.meta_lic", "lgplBin.meta_lic", "restricted"},
180 },
181 },
182 {
183 name: "lgplonfpdynamicrestricted",
184 condition: ImpliesRestricted,
185 roots: []string{"lgplBin.meta_lic"},
186 edges: []annotated{
187 {"lgplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
188 },
189 expectedResolutions: []res{
190 {"lgplBin.meta_lic", "lgplBin.meta_lic", "lgplBin.meta_lic", "restricted"},
191 },
192 },
193 {
194 name: "gplonfpnotice",
195 condition: ImpliesNotice,
196 roots: []string{"gplBin.meta_lic"},
197 edges: []annotated{
198 {"gplBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
199 },
200 expectedResolutions: []res{
201 {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
202 {"gplBin.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
203 {"gplBin.meta_lic", "apacheLib.meta_lic", "gplBin.meta_lic", "restricted"},
204 },
205 },
206 {
207 name: "gplonfprestricted",
208 condition: ImpliesRestricted,
209 roots: []string{"gplBin.meta_lic"},
210 edges: []annotated{
211 {"gplBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
212 },
213 expectedResolutions: []res{
214 {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
215 {"gplBin.meta_lic", "apacheLib.meta_lic", "gplBin.meta_lic", "restricted"},
216 },
217 },
218 {
219 name: "gplcontainernotice",
220 condition: ImpliesNotice,
221 roots: []string{"gplContainer.meta_lic"},
222 edges: []annotated{
223 {"gplContainer.meta_lic", "apacheLib.meta_lic", []string{"static"}},
224 },
225 expectedResolutions: []res{
226 {"gplContainer.meta_lic", "gplContainer.meta_lic", "gplContainer.meta_lic", "restricted"},
227 {"gplContainer.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
228 {"gplContainer.meta_lic", "apacheLib.meta_lic", "gplContainer.meta_lic", "restricted"},
229 {"apacheLib.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
230 {"apacheLib.meta_lic", "apacheLib.meta_lic", "gplContainer.meta_lic", "restricted"},
231 },
232 },
233 {
234 name: "gplcontainerrestricted",
235 condition: ImpliesRestricted,
236 roots: []string{"gplContainer.meta_lic"},
237 edges: []annotated{
238 {"gplContainer.meta_lic", "apacheLib.meta_lic", []string{"static"}},
239 },
240 expectedResolutions: []res{
241 {"gplContainer.meta_lic", "gplContainer.meta_lic", "gplContainer.meta_lic", "restricted"},
242 {"gplContainer.meta_lic", "apacheLib.meta_lic", "gplContainer.meta_lic", "restricted"},
243 {"apacheLib.meta_lic", "apacheLib.meta_lic", "gplContainer.meta_lic", "restricted"},
244 },
245 },
246 {
247 name: "gploncontainernotice",
248 condition: ImpliesNotice,
249 roots: []string{"apacheContainer.meta_lic"},
250 edges: []annotated{
251 {"apacheContainer.meta_lic", "apacheLib.meta_lic", []string{"static"}},
252 {"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"static"}},
253 },
254 expectedResolutions: []res{
255 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
256 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
257 {"apacheContainer.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
258 {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
259 {"apacheLib.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
260 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
261 },
262 },
263 {
264 name: "gploncontainerrestricted",
265 condition: ImpliesRestricted,
266 roots: []string{"apacheContainer.meta_lic"},
267 edges: []annotated{
268 {"apacheContainer.meta_lic", "apacheLib.meta_lic", []string{"static"}},
269 {"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"static"}},
270 },
271 expectedResolutions: []res{
272 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
273 {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
274 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
275 },
276 },
277 {
278 name: "gplonbinnotice",
279 condition: ImpliesNotice,
280 roots: []string{"apacheBin.meta_lic"},
281 edges: []annotated{
282 {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
283 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}},
284 },
285 expectedResolutions: []res{
286 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
287 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
288 {"apacheBin.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
289 {"apacheBin.meta_lic", "apacheLib.meta_lic", "gplLib.meta_lic", "restricted"},
290 {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
291 },
292 },
293 {
294 name: "gplonbinrestricted",
295 condition: ImpliesRestricted,
296 roots: []string{"apacheBin.meta_lic"},
297 edges: []annotated{
298 {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
299 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}},
300 },
301 expectedResolutions: []res{
302 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
303 {"apacheBin.meta_lic", "apacheLib.meta_lic", "gplLib.meta_lic", "restricted"},
304 {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
305 },
306 },
307 {
308 name: "gplonfpdynamicnotice",
309 condition: ImpliesNotice,
310 roots: []string{"gplBin.meta_lic"},
311 edges: []annotated{
312 {"gplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
313 },
314 expectedResolutions: []res{
315 {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
316 },
317 },
318 {
319 name: "gplonfpdynamicrestricted",
320 condition: ImpliesRestricted,
321 roots: []string{"gplBin.meta_lic"},
322 edges: []annotated{
323 {"gplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
324 },
325 expectedResolutions: []res{
326 {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
327 },
328 },
329 {
330 name: "gplonfpdynamicrestrictedshipped",
331 condition: ImpliesRestricted,
332 roots: []string{"gplBin.meta_lic", "apacheLib.meta_lic"},
333 edges: []annotated{
334 {"gplBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
335 },
336 expectedResolutions: []res{
337 {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
338 {"gplBin.meta_lic", "apacheLib.meta_lic", "gplBin.meta_lic", "restricted"},
339 },
340 },
341 {
342 name: "independentmodulereversenotice",
343 condition: ImpliesNotice,
344 roots: []string{"gplWithClasspathException.meta_lic"},
345 edges: []annotated{
346 {"gplWithClasspathException.meta_lic", "apacheBin.meta_lic", []string{"dynamic"}},
347 },
348 expectedResolutions: []res{
349 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
350 },
351 },
352 {
353 name: "independentmodulereverserestricted",
354 condition: ImpliesRestricted,
355 roots: []string{"gplWithClasspathException.meta_lic"},
356 edges: []annotated{
357 {"gplWithClasspathException.meta_lic", "apacheBin.meta_lic", []string{"dynamic"}},
358 },
359 expectedResolutions: []res{
360 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
361 },
362 },
363 {
364 name: "independentmodulereverserestrictedshipped",
365 condition: ImpliesRestricted,
366 roots: []string{"gplWithClasspathException.meta_lic", "apacheBin.meta_lic"},
367 edges: []annotated{
368 {"gplWithClasspathException.meta_lic", "apacheBin.meta_lic", []string{"dynamic"}},
369 },
370 expectedResolutions: []res{
371 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
372 },
373 },
374 {
375 name: "independentmodulereversestaticnotice",
376 condition: ImpliesNotice,
377 roots: []string{"gplWithClasspathException.meta_lic"},
378 edges: []annotated{
379 {"gplWithClasspathException.meta_lic", "apacheBin.meta_lic", []string{"static"}},
380 },
381 expectedResolutions: []res{
382 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
383 {"gplWithClasspathException.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
384 {"gplWithClasspathException.meta_lic", "apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
385 },
386 },
387 {
388 name: "independentmodulereversestaticrestricted",
389 condition: ImpliesRestricted,
390 roots: []string{"gplWithClasspathException.meta_lic"},
391 edges: []annotated{
392 {"gplWithClasspathException.meta_lic", "apacheBin.meta_lic", []string{"static"}},
393 },
394 expectedResolutions: []res{
395 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
396 {"gplWithClasspathException.meta_lic", "apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
397 },
398 },
399 {
400 name: "dependentmodulereversenotice",
401 condition: ImpliesNotice,
402 roots: []string{"gplWithClasspathException.meta_lic"},
403 edges: []annotated{
404 {"gplWithClasspathException.meta_lic", "dependentModule.meta_lic", []string{"dynamic"}},
405 },
406 expectedResolutions: []res{
407 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
408 },
409 },
410 {
411 name: "dependentmodulereverserestricted",
412 condition: ImpliesRestricted,
413 roots: []string{"gplWithClasspathException.meta_lic"},
414 edges: []annotated{
415 {"gplWithClasspathException.meta_lic", "dependentModule.meta_lic", []string{"dynamic"}},
416 },
417 expectedResolutions: []res{
418 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
419 },
420 },
421 {
422 name: "dependentmodulereverserestrictedshipped",
423 condition: ImpliesRestricted,
424 roots: []string{"gplWithClasspathException.meta_lic", "dependentModule.meta_lic"},
425 edges: []annotated{
426 {"gplWithClasspathException.meta_lic", "dependentModule.meta_lic", []string{"dynamic"}},
427 },
428 expectedResolutions: []res{
429 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
430 {"gplWithClasspathException.meta_lic", "dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
431 },
432 },
433 {
434 name: "ponrnotice",
435 condition: ImpliesNotice,
436 roots: []string{"proprietary.meta_lic"},
437 edges: []annotated{
438 {"proprietary.meta_lic", "gplLib.meta_lic", []string{"static"}},
439 },
440 expectedResolutions: []res{
441 {"proprietary.meta_lic", "proprietary.meta_lic", "proprietary.meta_lic", "proprietary"},
442 {"proprietary.meta_lic", "proprietary.meta_lic", "gplLib.meta_lic", "restricted"},
443 {"proprietary.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
444 },
445 },
446 {
447 name: "ponrrestricted",
448 condition: ImpliesRestricted,
449 roots: []string{"proprietary.meta_lic"},
450 edges: []annotated{
451 {"proprietary.meta_lic", "gplLib.meta_lic", []string{"static"}},
452 },
453 expectedResolutions: []res{
454 {"proprietary.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
455 {"proprietary.meta_lic", "proprietary.meta_lic", "gplLib.meta_lic", "restricted"},
456 },
457 },
458 {
459 name: "ponrproprietary",
460 condition: ImpliesProprietary,
461 roots: []string{"proprietary.meta_lic"},
462 edges: []annotated{
463 {"proprietary.meta_lic", "gplLib.meta_lic", []string{"static"}},
464 },
465 expectedResolutions: []res{
466 {"proprietary.meta_lic", "proprietary.meta_lic", "proprietary.meta_lic", "proprietary"},
467 },
468 },
469 {
470 name: "ronpnotice",
471 condition: ImpliesNotice,
472 roots: []string{"gplBin.meta_lic"},
473 edges: []annotated{
474 {"gplBin.meta_lic", "proprietary.meta_lic", []string{"static"}},
475 },
476 expectedResolutions: []res{
477 {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
478 {"gplBin.meta_lic", "proprietary.meta_lic", "proprietary.meta_lic", "proprietary"},
479 {"gplBin.meta_lic", "proprietary.meta_lic", "gplBin.meta_lic", "restricted"},
480 },
481 },
482 {
483 name: "ronprestricted",
484 condition: ImpliesRestricted,
485 roots: []string{"gplBin.meta_lic"},
486 edges: []annotated{
487 {"gplBin.meta_lic", "proprietary.meta_lic", []string{"static"}},
488 },
489 expectedResolutions: []res{
490 {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
491 {"gplBin.meta_lic", "proprietary.meta_lic", "gplBin.meta_lic", "restricted"},
492 },
493 },
494 {
495 name: "ronpproprietary",
496 condition: ImpliesProprietary,
497 roots: []string{"gplBin.meta_lic"},
498 edges: []annotated{
499 {"gplBin.meta_lic", "proprietary.meta_lic", []string{"static"}},
500 },
501 expectedResolutions: []res{
502 {"gplBin.meta_lic", "proprietary.meta_lic", "proprietary.meta_lic", "proprietary"},
503 },
504 },
505 {
506 name: "noticeonb_e_onotice",
507 condition: ImpliesNotice,
508 roots: []string{"mitBin.meta_lic"},
509 edges: []annotated{
510 {"mitBin.meta_lic", "by_exception.meta_lic", []string{"static"}},
511 },
512 expectedResolutions: []res{
513 {"mitBin.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
514 {"mitBin.meta_lic", "by_exception.meta_lic", "by_exception.meta_lic", "by_exception_only"},
515 },
516 },
517 {
518 name: "noticeonb_e_orestricted",
519 condition: ImpliesRestricted,
520 roots: []string{"mitBin.meta_lic"},
521 edges: []annotated{
522 {"mitBin.meta_lic", "by_exception.meta_lic", []string{"static"}},
523 },
524 expectedResolutions: []res{},
525 },
526 {
527 name: "noticeonb_e_ob_e_o",
528 condition: ImpliesByExceptionOnly,
529 roots: []string{"mitBin.meta_lic"},
530 edges: []annotated{
531 {"mitBin.meta_lic", "by_exception.meta_lic", []string{"static"}},
532 },
533 expectedResolutions: []res{
534 {"mitBin.meta_lic", "by_exception.meta_lic", "by_exception.meta_lic", "by_exception_only"},
535 },
536 },
537 {
538 name: "b_e_oonnoticenotice",
539 condition: ImpliesNotice,
540 roots: []string{"by_exception.meta_lic"},
541 edges: []annotated{
542 {"by_exception.meta_lic", "mitLib.meta_lic", []string{"static"}},
543 },
544 expectedResolutions: []res{
545 {"by_exception.meta_lic", "by_exception.meta_lic", "by_exception.meta_lic", "by_exception_only"},
546 {"by_exception.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
547 },
548 },
549 {
550 name: "b_e_oonnoticerestricted",
551 condition: ImpliesRestricted,
552 roots: []string{"by_exception.meta_lic"},
553 edges: []annotated{
554 {"by_exception.meta_lic", "mitLib.meta_lic", []string{"static"}},
555 },
556 expectedResolutions: []res{},
557 },
558 {
559 name: "b_e_oonnoticeb_e_o",
560 condition: ImpliesByExceptionOnly,
561 roots: []string{"by_exception.meta_lic"},
562 edges: []annotated{
563 {"by_exception.meta_lic", "mitLib.meta_lic", []string{"static"}},
564 },
565 expectedResolutions: []res{
566 {"by_exception.meta_lic", "by_exception.meta_lic", "by_exception.meta_lic", "by_exception_only"},
567 },
568 },
569 {
570 name: "noticeonrecipnotice",
571 condition: ImpliesNotice,
572 roots: []string{"mitBin.meta_lic"},
573 edges: []annotated{
574 {"mitBin.meta_lic", "mplLib.meta_lic", []string{"static"}},
575 },
576 expectedResolutions: []res{
577 {"mitBin.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
578 {"mitBin.meta_lic", "mplLib.meta_lic", "mplLib.meta_lic", "reciprocal"},
579 },
580 },
581 {
582 name: "noticeonreciprecip",
583 condition: ImpliesReciprocal,
584 roots: []string{"mitBin.meta_lic"},
585 edges: []annotated{
586 {"mitBin.meta_lic", "mplLib.meta_lic", []string{"static"}},
587 },
588 expectedResolutions: []res{
589 {"mitBin.meta_lic", "mplLib.meta_lic", "mplLib.meta_lic", "reciprocal"},
590 },
591 },
592 {
593 name: "reciponnoticenotice",
594 condition: ImpliesNotice,
595 roots: []string{"mplBin.meta_lic"},
596 edges: []annotated{
597 {"mplBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
598 },
599 expectedResolutions: []res{
600 {"mplBin.meta_lic", "mplBin.meta_lic", "mplBin.meta_lic", "reciprocal"},
601 {"mplBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
602 },
603 },
604 {
605 name: "reciponnoticerecip",
606 condition: ImpliesReciprocal,
607 roots: []string{"mplBin.meta_lic"},
608 edges: []annotated{
609 {"mplBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
610 },
611 expectedResolutions: []res{
612 {"mplBin.meta_lic", "mplBin.meta_lic", "mplBin.meta_lic", "reciprocal"},
613 },
614 },
615 }
616 for _, tt := range tests {
617 t.Run(tt.name, func(t *testing.T) {
618 stderr := &bytes.Buffer{}
619 lg, err := toGraph(stderr, tt.roots, tt.edges)
620 if err != nil {
621 t.Errorf("unexpected test data error: got %w, want no error", err)
622 return
623 }
624 expectedRs := toResolutionSet(lg, tt.expectedResolutions)
625 actualRs := WalkResolutionsForCondition(lg, ResolveTopDownConditions(lg), tt.condition)
626 checkSame(actualRs, expectedRs, t)
627 })
628 }
629}