1// 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", "gplLib.meta_lic", "restricted"}, 157 {"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 { 460 t.Errorf("unexpected test data error: got %s, want no error", err) 461 return 462 } 463 expectedRs := toResolutionSet(lg, tt.expectedResolutions) 464 actualRs := ResolveNotices(lg) 465 checkSame(actualRs, expectedRs, t) 466 }) 467 } 468} 469