blob: 4c99d3546fc9c2777fe0150480f9477999a2bcbb [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 TestResolveBottomUpConditions(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 {"apacheLib.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
39 },
40 },
41 {
42 name: "firstpartytool",
43 roots: []string{"apacheBin.meta_lic"},
44 edges: []annotated{
45 {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"toolchain"}},
46 },
47 expectedResolutions: []res{
48 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
49 {"apacheLib.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
50 },
51 },
52 {
53 name: "firstpartydeep",
54 roots: []string{"apacheContainer.meta_lic"},
55 edges: []annotated{
56 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
57 {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
58 },
59 expectedResolutions: []res{
60 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
61 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
62 {"apacheContainer.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
63 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
64 {"apacheBin.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
65 {"apacheLib.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
66 },
67 },
68 {
69 name: "firstpartywide",
70 roots: []string{"apacheContainer.meta_lic"},
71 edges: []annotated{
72 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
73 {"apacheContainer.meta_lic", "apacheLib.meta_lic", []string{"static"}},
74 },
75 expectedResolutions: []res{
76 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
77 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
78 {"apacheContainer.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
79 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
80 {"apacheLib.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
81 },
82 },
83 {
84 name: "firstpartydynamic",
85 roots: []string{"apacheBin.meta_lic"},
86 edges: []annotated{
87 {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
88 },
89 expectedResolutions: []res{
90 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
91 {"apacheLib.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
92 },
93 },
94 {
95 name: "firstpartydynamicdeep",
96 roots: []string{"apacheContainer.meta_lic"},
97 edges: []annotated{
98 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
99 {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
100 },
101 expectedResolutions: []res{
102 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
103 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
104 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
105 {"apacheLib.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
106 },
107 },
108 {
109 name: "firstpartydynamicwide",
110 roots: []string{"apacheContainer.meta_lic"},
111 edges: []annotated{
112 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
113 {"apacheContainer.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
114 },
115 expectedResolutions: []res{
116 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
117 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
118 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
119 {"apacheLib.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
120 },
121 },
122 {
123 name: "restricted",
124 roots: []string{"apacheBin.meta_lic"},
125 edges: []annotated{
126 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}},
127 },
128 expectedResolutions: []res{
129 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
130 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
131 {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
132 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
133 },
134 },
135 {
136 name: "restrictedtool",
137 roots: []string{"apacheBin.meta_lic"},
138 edges: []annotated{
139 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"toolchain"}},
140 },
141 expectedResolutions: []res{
142 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
143 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
144 },
145 },
146 {
147 name: "restricteddeep",
148 roots: []string{"apacheContainer.meta_lic"},
149 edges: []annotated{
150 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
151 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}},
152 },
153 expectedResolutions: []res{
154 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
155 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
156 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
157 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
158 {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
159 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
160 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
161 {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
162 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
163 },
164 },
165 {
166 name: "restrictedwide",
167 roots: []string{"apacheContainer.meta_lic"},
168 edges: []annotated{
169 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
170 {"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"static"}},
171 },
172 expectedResolutions: []res{
173 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
174 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
175 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
176 {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
177 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
178 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
179 },
180 },
181 {
182 name: "restricteddynamic",
183 roots: []string{"apacheBin.meta_lic"},
184 edges: []annotated{
185 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"dynamic"}},
186 },
187 expectedResolutions: []res{
188 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
189 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
190 {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
191 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
192 },
193 },
194 {
195 name: "restricteddynamicdeep",
196 roots: []string{"apacheContainer.meta_lic"},
197 edges: []annotated{
198 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
199 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"dynamic"}},
200 },
201 expectedResolutions: []res{
202 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
203 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
204 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
205 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
206 {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
207 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
208 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
209 {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
210 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
211 },
212 },
213 {
214 name: "restricteddynamicwide",
215 roots: []string{"apacheContainer.meta_lic"},
216 edges: []annotated{
217 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
218 {"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"dynamic"}},
219 },
220 expectedResolutions: []res{
221 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
222 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
223 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
224 {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
225 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
226 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
227 },
228 },
229 {
230 name: "weakrestricted",
231 roots: []string{"apacheBin.meta_lic"},
232 edges: []annotated{
233 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"static"}},
234 },
235 expectedResolutions: []res{
236 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
237 {"apacheBin.meta_lic", "apacheBin.meta_lic", "lgplLib.meta_lic", "restricted"},
238 {"apacheBin.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
239 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
240 },
241 },
242 {
243 name: "weakrestrictedtool",
244 roots: []string{"apacheBin.meta_lic"},
245 edges: []annotated{
246 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"toolchain"}},
247 },
248 expectedResolutions: []res{
249 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
250 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
251 },
252 },
253 {
254 name: "weakrestricteddeep",
255 roots: []string{"apacheContainer.meta_lic"},
256 edges: []annotated{
257 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
258 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"static"}},
259 },
260 expectedResolutions: []res{
261 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
262 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "lgplLib.meta_lic", "restricted"},
263 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
264 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "lgplLib.meta_lic", "restricted"},
265 {"apacheContainer.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
266 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
267 {"apacheBin.meta_lic", "apacheBin.meta_lic", "lgplLib.meta_lic", "restricted"},
268 {"apacheBin.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
269 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
270 },
271 },
272 {
273 name: "weakrestrictedwide",
274 roots: []string{"apacheContainer.meta_lic"},
275 edges: []annotated{
276 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
277 {"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"static"}},
278 },
279 expectedResolutions: []res{
280 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
281 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "lgplLib.meta_lic", "restricted"},
282 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
283 {"apacheContainer.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
284 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
285 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
286 },
287 },
288 {
289 name: "weakrestricteddynamic",
290 roots: []string{"apacheBin.meta_lic"},
291 edges: []annotated{
292 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
293 },
294 expectedResolutions: []res{
295 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
296 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
297 },
298 },
299 {
300 name: "weakrestricteddynamicdeep",
301 roots: []string{"apacheContainer.meta_lic"},
302 edges: []annotated{
303 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
304 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
305 },
306 expectedResolutions: []res{
307 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
308 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
309 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
310 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
311 },
312 },
313 {
314 name: "weakrestricteddynamicwide",
315 roots: []string{"apacheContainer.meta_lic"},
316 edges: []annotated{
317 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
318 {"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
319 },
320 expectedResolutions: []res{
321 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
322 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
323 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
324 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
325 },
326 },
327 {
328 name: "classpath",
329 roots: []string{"apacheBin.meta_lic"},
330 edges: []annotated{
331 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"static"}},
332 },
333 expectedResolutions: []res{
334 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
335 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
336 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
337 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
338 },
339 },
340 {
341 name: "classpathdependent",
342 roots: []string{"dependentModule.meta_lic"},
343 edges: []annotated{
344 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"static"}},
345 },
346 expectedResolutions: []res{
347 {"dependentModule.meta_lic", "dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
348 {"dependentModule.meta_lic", "dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
349 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
350 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
351 },
352 },
353 {
354 name: "classpathdynamic",
355 roots: []string{"apacheBin.meta_lic"},
356 edges: []annotated{
357 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
358 },
359 expectedResolutions: []res{
360 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
361 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
362 },
363 },
364 {
365 name: "classpathdependentdynamic",
366 roots: []string{"dependentModule.meta_lic"},
367 edges: []annotated{
368 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
369 },
370 expectedResolutions: []res{
371 {"dependentModule.meta_lic", "dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
372 {"dependentModule.meta_lic", "dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
373 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
374 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
375 },
376 },
377 }
378 for _, tt := range tests {
379 t.Run(tt.name, func(t *testing.T) {
380 stderr := &bytes.Buffer{}
381 lg, err := toGraph(stderr, tt.roots, tt.edges)
382 if err != nil {
383 t.Errorf("unexpected test data error: got %w, want no error", err)
384 return
385 }
386 expectedRs := toResolutionSet(lg, tt.expectedResolutions)
387 actualRs := ResolveBottomUpConditions(lg)
388 checkSame(actualRs, expectedRs, t)
389 })
390 }
391}
392
393func TestResolveTopDownConditions(t *testing.T) {
394 tests := []struct {
395 name string
396 roots []string
397 edges []annotated
398 expectedResolutions []res
399 }{
400 {
401 name: "firstparty",
402 roots: []string{"apacheBin.meta_lic"},
403 edges: []annotated{
404 {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"static"}},
405 },
406 expectedResolutions: []res{
407 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
408 {"apacheBin.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
409 {"apacheLib.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
410 },
411 },
412 {
413 name: "firstpartydynamic",
414 roots: []string{"apacheBin.meta_lic"},
415 edges: []annotated{
416 {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}},
417 },
418 expectedResolutions: []res{
419 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
420 {"apacheLib.meta_lic", "apacheLib.meta_lic", "apacheLib.meta_lic", "notice"},
421 },
422 },
423 {
424 name: "restricted",
425 roots: []string{"apacheBin.meta_lic"},
426 edges: []annotated{
427 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}},
428 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
429 },
430 expectedResolutions: []res{
431 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
432 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
433 {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
434 {"apacheBin.meta_lic", "mitLib.meta_lic", "gplLib.meta_lic", "restricted"},
435 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
436 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
Bob Badourb2855152021-12-08 12:52:59 -0800437 {"mitLib.meta_lic", "mitLib.meta_lic", "gplLib.meta_lic", "restricted"},
Bob Badour9ee7d032021-10-25 16:51:48 -0700438 {"mitLib.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
439 },
440 },
441 {
442 name: "restrictedtool",
443 roots: []string{"apacheBin.meta_lic"},
444 edges: []annotated{
445 {"apacheBin.meta_lic", "gplBin.meta_lic", []string{"toolchain"}},
446 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
447 },
448 expectedResolutions: []res{
449 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
450 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
451 {"gplBin.meta_lic", "gplBin.meta_lic", "gplBin.meta_lic", "restricted"},
452 {"mitLib.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
453 },
454 },
455 {
456 name: "restricteddeep",
457 roots: []string{"apacheContainer.meta_lic"},
458 edges: []annotated{
459 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
460 {"apacheContainer.meta_lic", "mitBin.meta_lic", []string{"static"}},
461 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}},
462 {"apacheBin.meta_lic", "mplLib.meta_lic", []string{"static"}},
463 {"mitBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
464 },
465 expectedResolutions: []res{
466 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
467 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
468 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
469 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
470 {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
471 {"apacheContainer.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
472 {"apacheContainer.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
473 {"apacheContainer.meta_lic", "mplLib.meta_lic", "gplLib.meta_lic", "restricted"},
474 {"apacheContainer.meta_lic", "mplLib.meta_lic", "mplLib.meta_lic", "reciprocal"},
475 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
476 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
477 {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
478 {"apacheBin.meta_lic", "mplLib.meta_lic", "gplLib.meta_lic", "restricted"},
479 {"apacheBin.meta_lic", "mplLib.meta_lic", "mplLib.meta_lic", "reciprocal"},
480 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
481 {"mitBin.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
482 {"mitBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
483 {"mitLib.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
Bob Badourb2855152021-12-08 12:52:59 -0800484 {"mplLib.meta_lic", "mplLib.meta_lic", "gplLib.meta_lic", "restricted"},
Bob Badour9ee7d032021-10-25 16:51:48 -0700485 {"mplLib.meta_lic", "mplLib.meta_lic", "mplLib.meta_lic", "reciprocal"},
486 },
487 },
488 {
489 name: "restrictedwide",
490 roots: []string{"apacheContainer.meta_lic"},
491 edges: []annotated{
492 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
493 {"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"static"}},
494 },
495 expectedResolutions: []res{
496 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
497 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
498 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
499 {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
500 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
501 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
502 },
503 },
504 {
505 name: "restricteddynamic",
506 roots: []string{"apacheBin.meta_lic"},
507 edges: []annotated{
508 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"dynamic"}},
509 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"dynamic"}},
510 },
511 expectedResolutions: []res{
512 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
513 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
514 {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
515 {"apacheBin.meta_lic", "mitLib.meta_lic", "gplLib.meta_lic", "restricted"},
516 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
Bob Badourb2855152021-12-08 12:52:59 -0800517 {"mitLib.meta_lic", "mitLib.meta_lic", "gplLib.meta_lic", "restricted"},
Bob Badour9ee7d032021-10-25 16:51:48 -0700518 {"mitLib.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
519 },
520 },
521 {
522 name: "restricteddynamicdeep",
523 roots: []string{"apacheContainer.meta_lic"},
524 edges: []annotated{
525 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
526 {"apacheContainer.meta_lic", "mitBin.meta_lic", []string{"static"}},
527 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"dynamic"}},
528 {"apacheBin.meta_lic", "mplLib.meta_lic", []string{"dynamic"}},
529 {"mitBin.meta_lic", "mitLib.meta_lic", []string{"dynamic"}},
530 },
531 expectedResolutions: []res{
532 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
533 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
534 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
535 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
536 {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
537 {"apacheContainer.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
538 {"apacheContainer.meta_lic", "mplLib.meta_lic", "gplLib.meta_lic", "restricted"},
539 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
540 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
541 {"apacheBin.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
542 {"apacheBin.meta_lic", "mplLib.meta_lic", "gplLib.meta_lic", "restricted"},
543 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
544 {"mitBin.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
545 {"mitLib.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
Bob Badourb2855152021-12-08 12:52:59 -0800546 {"mplLib.meta_lic", "mplLib.meta_lic", "gplLib.meta_lic", "restricted"},
Bob Badour9ee7d032021-10-25 16:51:48 -0700547 {"mplLib.meta_lic", "mplLib.meta_lic", "mplLib.meta_lic", "reciprocal"},
548 },
549 },
550 {
551 name: "restricteddynamicwide",
552 roots: []string{"apacheContainer.meta_lic"},
553 edges: []annotated{
554 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
555 {"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"dynamic"}},
556 },
557 expectedResolutions: []res{
558 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
559 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
560 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
561 {"apacheContainer.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
562 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
563 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
564 },
565 },
566 {
567 name: "weakrestricted",
568 roots: []string{"apacheBin.meta_lic"},
569 edges: []annotated{
570 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"static"}},
571 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
572 },
573 expectedResolutions: []res{
574 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
575 {"apacheBin.meta_lic", "apacheBin.meta_lic", "lgplLib.meta_lic", "restricted"},
576 {"apacheBin.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
577 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
578 {"apacheBin.meta_lic", "mitLib.meta_lic", "lgplLib.meta_lic", "restricted"},
579 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
Bob Badourb2855152021-12-08 12:52:59 -0800580 {"mitLib.meta_lic", "mitLib.meta_lic", "lgplLib.meta_lic", "restricted"},
Bob Badour9ee7d032021-10-25 16:51:48 -0700581 {"mitLib.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
582 },
583 },
584 {
585 name: "weakrestrictedtool",
586 roots: []string{"apacheBin.meta_lic"},
587 edges: []annotated{
588 {"apacheBin.meta_lic", "lgplBin.meta_lic", []string{"toolchain"}},
589 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
590 },
591 expectedResolutions: []res{
592 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
593 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
594 {"lgplBin.meta_lic", "lgplBin.meta_lic", "lgplBin.meta_lic", "restricted"},
595 {"mitLib.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
596 },
597 },
598 {
599 name: "weakrestricteddeep",
600 roots: []string{"apacheContainer.meta_lic"},
601 edges: []annotated{
602 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
603 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"static"}},
604 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
605 },
606 expectedResolutions: []res{
607 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
608 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "lgplLib.meta_lic", "restricted"},
609 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
610 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "lgplLib.meta_lic", "restricted"},
611 {"apacheContainer.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
612 {"apacheContainer.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
613 {"apacheContainer.meta_lic", "mitLib.meta_lic", "lgplLib.meta_lic", "restricted"},
614 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
615 {"apacheBin.meta_lic", "apacheBin.meta_lic", "lgplLib.meta_lic", "restricted"},
616 {"apacheBin.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
617 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
618 {"apacheBin.meta_lic", "mitLib.meta_lic", "lgplLib.meta_lic", "restricted"},
619 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
Bob Badourb2855152021-12-08 12:52:59 -0800620 {"mitLib.meta_lic", "mitLib.meta_lic", "lgplLib.meta_lic", "restricted"},
Bob Badour9ee7d032021-10-25 16:51:48 -0700621 {"mitLib.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
622 },
623 },
624 {
625 name: "weakrestrictedwide",
626 roots: []string{"apacheContainer.meta_lic"},
627 edges: []annotated{
628 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
629 {"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"static"}},
630 },
631 expectedResolutions: []res{
632 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
633 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "lgplLib.meta_lic", "restricted"},
634 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
635 {"apacheContainer.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
636 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
637 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
638 },
639 },
640 {
641 name: "weakrestricteddynamic",
642 roots: []string{"apacheBin.meta_lic"},
643 edges: []annotated{
644 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
645 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
646 },
647 expectedResolutions: []res{
648 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
649 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
650 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
651 {"mitLib.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
652 },
653 },
654 {
655 name: "weakrestricteddynamicdeep",
656 roots: []string{"apacheContainer.meta_lic"},
657 edges: []annotated{
658 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
659 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
660 },
661 expectedResolutions: []res{
662 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
663 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
664 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
665 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
666 },
667 },
668 {
669 name: "weakrestricteddynamicwide",
670 roots: []string{"apacheContainer.meta_lic"},
671 edges: []annotated{
672 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
673 {"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
674 },
675 expectedResolutions: []res{
676 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
677 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
678 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
679 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
680 },
681 },
682 {
683 name: "classpath",
684 roots: []string{"apacheBin.meta_lic"},
685 edges: []annotated{
686 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"static"}},
687 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
688 },
689 expectedResolutions: []res{
690 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
691 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
692 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
693 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
694 {"apacheBin.meta_lic", "mitLib.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
695 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
Bob Badourb2855152021-12-08 12:52:59 -0800696 {"mitLib.meta_lic", "mitLib.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
Bob Badour9ee7d032021-10-25 16:51:48 -0700697 {"mitLib.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
698 },
699 },
700 {
701 name: "classpathdependent",
702 roots: []string{"dependentModule.meta_lic"},
703 edges: []annotated{
704 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"static"}},
705 {"dependentModule.meta_lic", "mitLib.meta_lic", []string{"static"}},
706 },
707 expectedResolutions: []res{
708 {"dependentModule.meta_lic", "dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
709 {"dependentModule.meta_lic", "dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
710 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
711 {"dependentModule.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
712 {"dependentModule.meta_lic", "mitLib.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
713 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
Bob Badourb2855152021-12-08 12:52:59 -0800714 {"mitLib.meta_lic", "mitLib.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
Bob Badour9ee7d032021-10-25 16:51:48 -0700715 {"mitLib.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
716 },
717 },
718 {
719 name: "classpathdynamic",
720 roots: []string{"apacheBin.meta_lic"},
721 edges: []annotated{
722 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
723 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
724 },
725 expectedResolutions: []res{
726 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
727 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
728 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
729 {"mitLib.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
730 },
731 },
732 {
733 name: "classpathdependentdynamic",
734 roots: []string{"dependentModule.meta_lic"},
735 edges: []annotated{
736 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
737 {"dependentModule.meta_lic", "mitLib.meta_lic", []string{"static"}},
738 },
739 expectedResolutions: []res{
740 {"dependentModule.meta_lic", "dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
741 {"dependentModule.meta_lic", "dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
742 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
743 {"dependentModule.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
744 {"dependentModule.meta_lic", "mitLib.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
745 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
Bob Badourb2855152021-12-08 12:52:59 -0800746 {"mitLib.meta_lic", "mitLib.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
Bob Badour9ee7d032021-10-25 16:51:48 -0700747 {"mitLib.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
748 },
749 },
750 }
751 for _, tt := range tests {
752 t.Run(tt.name, func(t *testing.T) {
753 stderr := &bytes.Buffer{}
754 lg, err := toGraph(stderr, tt.roots, tt.edges)
755 if err != nil {
756 t.Errorf("unexpected test data error: got %w, want no error", err)
757 return
758 }
759 expectedRs := toResolutionSet(lg, tt.expectedResolutions)
760 actualRs := ResolveTopDownConditions(lg)
761 checkSame(actualRs, expectedRs, t)
762 })
763 }
764}