blob: b428d5b549ecd0a95080ca15fddbcb056d770f6a [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"},
156 {"mitLib.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
157 },
158 },
159 {
160 name: "restricteddynamicdeep",
161 roots: []string{"apacheContainer.meta_lic"},
162 edges: []annotated{
163 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
164 {"apacheContainer.meta_lic", "mitBin.meta_lic", []string{"static"}},
165 {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"dynamic"}},
166 {"apacheBin.meta_lic", "mplLib.meta_lic", []string{"dynamic"}},
167 {"mitBin.meta_lic", "mitLib.meta_lic", []string{"dynamic"}},
168 },
169 expectedResolutions: []res{
170 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
171 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
172 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
173 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
174 {"apacheContainer.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
175 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
176 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplLib.meta_lic", "restricted"},
177 {"mitBin.meta_lic", "mitBin.meta_lic", "mitBin.meta_lic", "notice"},
178 },
179 },
180 {
181 name: "restricteddynamicwide",
182 roots: []string{"apacheContainer.meta_lic"},
183 edges: []annotated{
184 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
185 {"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"dynamic"}},
186 },
187 expectedResolutions: []res{
188 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
189 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "gplLib.meta_lic", "restricted"},
190 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
191 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
192 },
193 },
194 {
195 name: "restricteddynamicwideshipped",
196 roots: []string{"apacheContainer.meta_lic", "gplLib.meta_lic"},
197 edges: []annotated{
198 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
199 {"apacheContainer.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", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
206 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
207 {"gplLib.meta_lic", "gplLib.meta_lic", "gplLib.meta_lic", "restricted"},
208 },
209 },
210 {
211 name: "weakrestricted",
212 roots: []string{"apacheBin.meta_lic"},
213 edges: []annotated{
214 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"static"}},
215 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
216 },
217 expectedResolutions: []res{
218 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
219 {"apacheBin.meta_lic", "apacheBin.meta_lic", "lgplLib.meta_lic", "restricted"},
220 {"apacheBin.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
221 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
222 {"apacheBin.meta_lic", "mitLib.meta_lic", "lgplLib.meta_lic", "restricted"},
223 },
224 },
225 {
226 name: "weakrestrictedtool",
227 roots: []string{"apacheBin.meta_lic"},
228 edges: []annotated{
229 {"apacheBin.meta_lic", "lgplBin.meta_lic", []string{"toolchain"}},
230 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
231 },
232 expectedResolutions: []res{
233 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
234 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
235 },
236 },
237 {
238 name: "weakrestrictedtoolshipped",
239 roots: []string{"apacheBin.meta_lic", "lgplBin.meta_lic"},
240 edges: []annotated{
241 {"apacheBin.meta_lic", "lgplBin.meta_lic", []string{"toolchain"}},
242 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
243 },
244 expectedResolutions: []res{
245 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
246 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
247 {"lgplBin.meta_lic", "lgplBin.meta_lic", "lgplBin.meta_lic", "restricted"},
248 },
249 },
250 {
251 name: "weakrestricteddeep",
252 roots: []string{"apacheContainer.meta_lic"},
253 edges: []annotated{
254 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
255 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"static"}},
256 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
257 },
258 expectedResolutions: []res{
259 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
260 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "lgplLib.meta_lic", "restricted"},
261 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
262 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "lgplLib.meta_lic", "restricted"},
263 {"apacheContainer.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
264 {"apacheContainer.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
265 {"apacheContainer.meta_lic", "mitLib.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 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
270 {"apacheBin.meta_lic", "mitLib.meta_lic", "lgplLib.meta_lic", "restricted"},
271 },
272 },
273 {
274 name: "weakrestrictedwide",
275 roots: []string{"apacheContainer.meta_lic"},
276 edges: []annotated{
277 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
278 {"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"static"}},
279 },
280 expectedResolutions: []res{
281 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
282 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "lgplLib.meta_lic", "restricted"},
283 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
284 {"apacheContainer.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
285 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
286 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
287 },
288 },
289 {
290 name: "weakrestricteddynamic",
291 roots: []string{"apacheBin.meta_lic"},
292 edges: []annotated{
293 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
294 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
295 },
296 expectedResolutions: []res{
297 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
298 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
299 },
300 },
301 {
302 name: "weakrestricteddynamicshipped",
303 roots: []string{"apacheBin.meta_lic", "lgplLib.meta_lic"},
304 edges: []annotated{
305 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
306 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
307 },
308 expectedResolutions: []res{
309 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
310 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
311 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
312 },
313 },
314 {
315 name: "weakrestricteddynamicdeep",
316 roots: []string{"apacheContainer.meta_lic"},
317 edges: []annotated{
318 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
319 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
320 },
321 expectedResolutions: []res{
322 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
323 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
324 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
325 },
326 },
327 {
328 name: "weakrestricteddynamicdeepshipped",
329 roots: []string{"apacheContainer.meta_lic", "lgplLib.meta_lic"},
330 edges: []annotated{
331 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
332 {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
333 },
334 expectedResolutions: []res{
335 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
336 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
337 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
338 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
339 },
340 },
341 {
342 name: "weakrestricteddynamicwide",
343 roots: []string{"apacheContainer.meta_lic"},
344 edges: []annotated{
345 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
346 {"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
347 },
348 expectedResolutions: []res{
349 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
350 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
351 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
352 },
353 },
354 {
355 name: "weakrestricteddynamicwideshipped",
356 roots: []string{"apacheContainer.meta_lic", "lgplLib.meta_lic"},
357 edges: []annotated{
358 {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}},
359 {"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}},
360 },
361 expectedResolutions: []res{
362 {"apacheContainer.meta_lic", "apacheContainer.meta_lic", "apacheContainer.meta_lic", "notice"},
363 {"apacheContainer.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
364 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
365 {"lgplLib.meta_lic", "lgplLib.meta_lic", "lgplLib.meta_lic", "restricted"},
366 },
367 },
368 {
369 name: "classpath",
370 roots: []string{"apacheBin.meta_lic"},
371 edges: []annotated{
372 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"static"}},
373 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
374 },
375 expectedResolutions: []res{
376 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
377 {"apacheBin.meta_lic", "apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
378 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
379 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
380 {"apacheBin.meta_lic", "mitLib.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
381 },
382 },
383 {
384 name: "classpathdependent",
385 roots: []string{"dependentModule.meta_lic"},
386 edges: []annotated{
387 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"static"}},
388 {"dependentModule.meta_lic", "mitLib.meta_lic", []string{"static"}},
389 },
390 expectedResolutions: []res{
391 {"dependentModule.meta_lic", "dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
392 {"dependentModule.meta_lic", "dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
393 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
394 {"dependentModule.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
395 {"dependentModule.meta_lic", "mitLib.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
396 },
397 },
398 {
399 name: "classpathdynamic",
400 roots: []string{"apacheBin.meta_lic"},
401 edges: []annotated{
402 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
403 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
404 },
405 expectedResolutions: []res{
406 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
407 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
408 },
409 },
410 {
411 name: "classpathdynamicshipped",
412 roots: []string{"apacheBin.meta_lic", "gplWithClasspathException.meta_lic"},
413 edges: []annotated{
414 {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
415 {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}},
416 },
417 expectedResolutions: []res{
418 {"apacheBin.meta_lic", "apacheBin.meta_lic", "apacheBin.meta_lic", "notice"},
419 {"apacheBin.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
420 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
421 },
422 },
423 {
424 name: "classpathdependentdynamic",
425 roots: []string{"dependentModule.meta_lic"},
426 edges: []annotated{
427 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
428 {"dependentModule.meta_lic", "mitLib.meta_lic", []string{"static"}},
429 },
430 expectedResolutions: []res{
431 {"dependentModule.meta_lic", "dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
432 {"dependentModule.meta_lic", "dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
433 {"dependentModule.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
434 {"dependentModule.meta_lic", "mitLib.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
435 },
436 },
437 {
438 name: "classpathdependentdynamicshipped",
439 roots: []string{"dependentModule.meta_lic", "gplWithClasspathException.meta_lic"},
440 edges: []annotated{
441 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}},
442 {"dependentModule.meta_lic", "mitLib.meta_lic", []string{"static"}},
443 },
444 expectedResolutions: []res{
445 {"dependentModule.meta_lic", "dependentModule.meta_lic", "dependentModule.meta_lic", "notice"},
446 {"dependentModule.meta_lic", "dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
447 {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
448 {"dependentModule.meta_lic", "mitLib.meta_lic", "mitLib.meta_lic", "notice"},
449 {"dependentModule.meta_lic", "mitLib.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
450 {"gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "gplWithClasspathException.meta_lic", "restricted"},
451 },
452 },
453 }
454 for _, tt := range tests {
455 t.Run(tt.name, func(t *testing.T) {
456 stderr := &bytes.Buffer{}
457 lg, err := toGraph(stderr, tt.roots, tt.edges)
458 if err != nil {
459 t.Errorf("unexpected test data error: got %w, want no error", err)
460 return
461 }
462 expectedRs := toResolutionSet(lg, tt.expectedResolutions)
463 actualRs := ResolveNotices(lg)
464 checkSame(actualRs, expectedRs, t)
465 })
466 }
467}