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 main 16 17import ( 18 "bytes" 19 "fmt" 20 "os" 21 "strings" 22 "testing" 23 24 "android/soong/tools/compliance" 25) 26 27func TestMain(m *testing.M) { 28 // Change into the parent directory before running the tests 29 // so they can find the testdata directory. 30 if err := os.Chdir(".."); err != nil { 31 fmt.Printf("failed to change to testdata directory: %s\n", err) 32 os.Exit(1) 33 } 34 os.Exit(m.Run()) 35} 36 37func Test_plaintext(t *testing.T) { 38 tests := []struct { 39 condition string 40 name string 41 outDir string 42 roots []string 43 ctx context 44 expectedOut []string 45 }{ 46 { 47 condition: "firstparty", 48 name: "apex", 49 roots: []string{"highest.apex.meta_lic"}, 50 expectedOut: []string{ 51 "testdata/firstparty/bin/bin1.meta_lic testdata/firstparty/bin/bin1.meta_lic notice", 52 "testdata/firstparty/bin/bin1.meta_lic testdata/firstparty/lib/liba.so.meta_lic notice", 53 "testdata/firstparty/bin/bin1.meta_lic testdata/firstparty/lib/libc.a.meta_lic notice", 54 "testdata/firstparty/bin/bin2.meta_lic testdata/firstparty/bin/bin2.meta_lic notice", 55 "testdata/firstparty/highest.apex.meta_lic testdata/firstparty/bin/bin1.meta_lic notice", 56 "testdata/firstparty/highest.apex.meta_lic testdata/firstparty/bin/bin2.meta_lic notice", 57 "testdata/firstparty/highest.apex.meta_lic testdata/firstparty/highest.apex.meta_lic notice", 58 "testdata/firstparty/highest.apex.meta_lic testdata/firstparty/lib/liba.so.meta_lic notice", 59 "testdata/firstparty/highest.apex.meta_lic testdata/firstparty/lib/libb.so.meta_lic notice", 60 "testdata/firstparty/highest.apex.meta_lic testdata/firstparty/lib/libc.a.meta_lic notice", 61 "testdata/firstparty/lib/liba.so.meta_lic testdata/firstparty/lib/liba.so.meta_lic notice", 62 "testdata/firstparty/lib/libb.so.meta_lic testdata/firstparty/lib/libb.so.meta_lic notice", 63 }, 64 }, 65 { 66 condition: "firstparty", 67 name: "apex_trimmed", 68 roots: []string{"highest.apex.meta_lic"}, 69 ctx: context{stripPrefix: []string{"testdata/firstparty/"}}, 70 expectedOut: []string{ 71 "bin/bin1.meta_lic bin/bin1.meta_lic notice", 72 "bin/bin1.meta_lic lib/liba.so.meta_lic notice", 73 "bin/bin1.meta_lic lib/libc.a.meta_lic notice", 74 "bin/bin2.meta_lic bin/bin2.meta_lic notice", 75 "highest.apex.meta_lic bin/bin1.meta_lic notice", 76 "highest.apex.meta_lic bin/bin2.meta_lic notice", 77 "highest.apex.meta_lic highest.apex.meta_lic notice", 78 "highest.apex.meta_lic lib/liba.so.meta_lic notice", 79 "highest.apex.meta_lic lib/libb.so.meta_lic notice", 80 "highest.apex.meta_lic lib/libc.a.meta_lic notice", 81 "lib/liba.so.meta_lic lib/liba.so.meta_lic notice", 82 "lib/libb.so.meta_lic lib/libb.so.meta_lic notice", 83 }, 84 }, 85 { 86 condition: "firstparty", 87 name: "apex_trimmed_notice", 88 roots: []string{"highest.apex.meta_lic"}, 89 ctx: context{ 90 conditions: []compliance.LicenseCondition{compliance.NoticeCondition}, 91 stripPrefix: []string{"testdata/firstparty/"}, 92 }, 93 expectedOut: []string{ 94 "bin/bin1.meta_lic bin/bin1.meta_lic notice", 95 "bin/bin1.meta_lic lib/liba.so.meta_lic notice", 96 "bin/bin1.meta_lic lib/libc.a.meta_lic notice", 97 "bin/bin2.meta_lic bin/bin2.meta_lic notice", 98 "highest.apex.meta_lic bin/bin1.meta_lic notice", 99 "highest.apex.meta_lic bin/bin2.meta_lic notice", 100 "highest.apex.meta_lic highest.apex.meta_lic notice", 101 "highest.apex.meta_lic lib/liba.so.meta_lic notice", 102 "highest.apex.meta_lic lib/libb.so.meta_lic notice", 103 "highest.apex.meta_lic lib/libc.a.meta_lic notice", 104 "lib/liba.so.meta_lic lib/liba.so.meta_lic notice", 105 "lib/libb.so.meta_lic lib/libb.so.meta_lic notice", 106 }, 107 }, 108 { 109 condition: "firstparty", 110 name: "apex_trimmed_share", 111 roots: []string{"highest.apex.meta_lic"}, 112 ctx: context{ 113 conditions: compliance.ImpliesShared.AsList(), 114 stripPrefix: []string{"testdata/firstparty/"}, 115 }, 116 expectedOut: []string{}, 117 }, 118 { 119 condition: "firstparty", 120 name: "apex_trimmed_private", 121 roots: []string{"highest.apex.meta_lic"}, 122 ctx: context{ 123 conditions: compliance.ImpliesPrivate.AsList(), 124 stripPrefix: []string{"testdata/firstparty/"}, 125 }, 126 expectedOut: []string{}, 127 }, 128 { 129 condition: "firstparty", 130 name: "apex_trimmed_share_private", 131 roots: []string{"highest.apex.meta_lic"}, 132 ctx: context{ 133 conditions: append(compliance.ImpliesPrivate.AsList(), compliance.ImpliesShared.AsList()...), 134 stripPrefix: []string{"testdata/firstparty/"}, 135 }, 136 expectedOut: []string{}, 137 }, 138 { 139 condition: "firstparty", 140 name: "apex_trimmed_labelled", 141 roots: []string{"highest.apex.meta_lic"}, 142 ctx: context{stripPrefix: []string{"testdata/firstparty/"}, labelConditions: true}, 143 expectedOut: []string{ 144 "bin/bin1.meta_lic:notice bin/bin1.meta_lic:notice notice", 145 "bin/bin1.meta_lic:notice lib/liba.so.meta_lic:notice notice", 146 "bin/bin1.meta_lic:notice lib/libc.a.meta_lic:notice notice", 147 "bin/bin2.meta_lic:notice bin/bin2.meta_lic:notice notice", 148 "highest.apex.meta_lic:notice bin/bin1.meta_lic:notice notice", 149 "highest.apex.meta_lic:notice bin/bin2.meta_lic:notice notice", 150 "highest.apex.meta_lic:notice highest.apex.meta_lic:notice notice", 151 "highest.apex.meta_lic:notice lib/liba.so.meta_lic:notice notice", 152 "highest.apex.meta_lic:notice lib/libb.so.meta_lic:notice notice", 153 "highest.apex.meta_lic:notice lib/libc.a.meta_lic:notice notice", 154 "lib/liba.so.meta_lic:notice lib/liba.so.meta_lic:notice notice", 155 "lib/libb.so.meta_lic:notice lib/libb.so.meta_lic:notice notice", 156 }, 157 }, 158 { 159 condition: "firstparty", 160 name: "container", 161 roots: []string{"container.zip.meta_lic"}, 162 expectedOut: []string{ 163 "testdata/firstparty/bin/bin1.meta_lic testdata/firstparty/bin/bin1.meta_lic notice", 164 "testdata/firstparty/bin/bin1.meta_lic testdata/firstparty/lib/liba.so.meta_lic notice", 165 "testdata/firstparty/bin/bin1.meta_lic testdata/firstparty/lib/libc.a.meta_lic notice", 166 "testdata/firstparty/bin/bin2.meta_lic testdata/firstparty/bin/bin2.meta_lic notice", 167 "testdata/firstparty/container.zip.meta_lic testdata/firstparty/bin/bin1.meta_lic notice", 168 "testdata/firstparty/container.zip.meta_lic testdata/firstparty/bin/bin2.meta_lic notice", 169 "testdata/firstparty/container.zip.meta_lic testdata/firstparty/container.zip.meta_lic notice", 170 "testdata/firstparty/container.zip.meta_lic testdata/firstparty/lib/liba.so.meta_lic notice", 171 "testdata/firstparty/container.zip.meta_lic testdata/firstparty/lib/libb.so.meta_lic notice", 172 "testdata/firstparty/container.zip.meta_lic testdata/firstparty/lib/libc.a.meta_lic notice", 173 "testdata/firstparty/lib/liba.so.meta_lic testdata/firstparty/lib/liba.so.meta_lic notice", 174 "testdata/firstparty/lib/libb.so.meta_lic testdata/firstparty/lib/libb.so.meta_lic notice", 175 }, 176 }, 177 { 178 condition: "firstparty", 179 name: "application", 180 roots: []string{"application.meta_lic"}, 181 expectedOut: []string{ 182 "testdata/firstparty/application.meta_lic testdata/firstparty/application.meta_lic notice", 183 "testdata/firstparty/application.meta_lic testdata/firstparty/lib/liba.so.meta_lic notice", 184 }, 185 }, 186 { 187 condition: "firstparty", 188 name: "binary", 189 roots: []string{"bin/bin1.meta_lic"}, 190 expectedOut: []string{ 191 "testdata/firstparty/bin/bin1.meta_lic testdata/firstparty/bin/bin1.meta_lic notice", 192 "testdata/firstparty/bin/bin1.meta_lic testdata/firstparty/lib/liba.so.meta_lic notice", 193 "testdata/firstparty/bin/bin1.meta_lic testdata/firstparty/lib/libc.a.meta_lic notice", 194 }, 195 }, 196 { 197 condition: "firstparty", 198 name: "library", 199 roots: []string{"lib/libd.so.meta_lic"}, 200 expectedOut: []string{ 201 "testdata/firstparty/lib/libd.so.meta_lic testdata/firstparty/lib/libd.so.meta_lic notice", 202 }, 203 }, 204 { 205 condition: "notice", 206 name: "apex", 207 roots: []string{"highest.apex.meta_lic"}, 208 expectedOut: []string{ 209 "testdata/notice/bin/bin1.meta_lic testdata/notice/bin/bin1.meta_lic notice", 210 "testdata/notice/bin/bin1.meta_lic testdata/notice/lib/liba.so.meta_lic notice", 211 "testdata/notice/bin/bin1.meta_lic testdata/notice/lib/libc.a.meta_lic notice", 212 "testdata/notice/bin/bin2.meta_lic testdata/notice/bin/bin2.meta_lic notice", 213 "testdata/notice/highest.apex.meta_lic testdata/notice/bin/bin1.meta_lic notice", 214 "testdata/notice/highest.apex.meta_lic testdata/notice/bin/bin2.meta_lic notice", 215 "testdata/notice/highest.apex.meta_lic testdata/notice/highest.apex.meta_lic notice", 216 "testdata/notice/highest.apex.meta_lic testdata/notice/lib/liba.so.meta_lic notice", 217 "testdata/notice/highest.apex.meta_lic testdata/notice/lib/libb.so.meta_lic notice", 218 "testdata/notice/highest.apex.meta_lic testdata/notice/lib/libc.a.meta_lic notice", 219 "testdata/notice/lib/liba.so.meta_lic testdata/notice/lib/liba.so.meta_lic notice", 220 "testdata/notice/lib/libb.so.meta_lic testdata/notice/lib/libb.so.meta_lic notice", 221 }, 222 }, 223 { 224 condition: "notice", 225 name: "apex_trimmed", 226 roots: []string{"highest.apex.meta_lic"}, 227 ctx: context{stripPrefix: []string{"testdata/notice/"}}, 228 expectedOut: []string{ 229 "bin/bin1.meta_lic bin/bin1.meta_lic notice", 230 "bin/bin1.meta_lic lib/liba.so.meta_lic notice", 231 "bin/bin1.meta_lic lib/libc.a.meta_lic notice", 232 "bin/bin2.meta_lic bin/bin2.meta_lic notice", 233 "highest.apex.meta_lic bin/bin1.meta_lic notice", 234 "highest.apex.meta_lic bin/bin2.meta_lic notice", 235 "highest.apex.meta_lic highest.apex.meta_lic notice", 236 "highest.apex.meta_lic lib/liba.so.meta_lic notice", 237 "highest.apex.meta_lic lib/libb.so.meta_lic notice", 238 "highest.apex.meta_lic lib/libc.a.meta_lic notice", 239 "lib/liba.so.meta_lic lib/liba.so.meta_lic notice", 240 "lib/libb.so.meta_lic lib/libb.so.meta_lic notice", 241 }, 242 }, 243 { 244 condition: "notice", 245 name: "apex_trimmed_notice", 246 roots: []string{"highest.apex.meta_lic"}, 247 ctx: context{ 248 conditions: []compliance.LicenseCondition{compliance.NoticeCondition}, 249 stripPrefix: []string{"testdata/notice/"}, 250 }, 251 expectedOut: []string{ 252 "bin/bin1.meta_lic bin/bin1.meta_lic notice", 253 "bin/bin1.meta_lic lib/liba.so.meta_lic notice", 254 "bin/bin1.meta_lic lib/libc.a.meta_lic notice", 255 "bin/bin2.meta_lic bin/bin2.meta_lic notice", 256 "highest.apex.meta_lic bin/bin1.meta_lic notice", 257 "highest.apex.meta_lic bin/bin2.meta_lic notice", 258 "highest.apex.meta_lic highest.apex.meta_lic notice", 259 "highest.apex.meta_lic lib/liba.so.meta_lic notice", 260 "highest.apex.meta_lic lib/libb.so.meta_lic notice", 261 "highest.apex.meta_lic lib/libc.a.meta_lic notice", 262 "lib/liba.so.meta_lic lib/liba.so.meta_lic notice", 263 "lib/libb.so.meta_lic lib/libb.so.meta_lic notice", 264 }, 265 }, 266 { 267 condition: "notice", 268 name: "apex_trimmed_share", 269 roots: []string{"highest.apex.meta_lic"}, 270 ctx: context{ 271 conditions: compliance.ImpliesShared.AsList(), 272 stripPrefix: []string{"testdata/notice/"}, 273 }, 274 expectedOut: []string{}, 275 }, 276 { 277 condition: "notice", 278 name: "apex_trimmed_private", 279 roots: []string{"highest.apex.meta_lic"}, 280 ctx: context{ 281 conditions: compliance.ImpliesPrivate.AsList(), 282 stripPrefix: []string{"testdata/notice/"}, 283 }, 284 expectedOut: []string{}, 285 }, 286 { 287 condition: "notice", 288 name: "apex_trimmed_share_private", 289 roots: []string{"highest.apex.meta_lic"}, 290 ctx: context{ 291 conditions: append(compliance.ImpliesShared.AsList(), compliance.ImpliesPrivate.AsList()...), 292 stripPrefix: []string{"testdata/notice/"}, 293 }, 294 expectedOut: []string{}, 295 }, 296 { 297 condition: "notice", 298 name: "apex_trimmed_labelled", 299 roots: []string{"highest.apex.meta_lic"}, 300 ctx: context{stripPrefix: []string{"testdata/notice/"}, labelConditions: true}, 301 expectedOut: []string{ 302 "bin/bin1.meta_lic:notice bin/bin1.meta_lic:notice notice", 303 "bin/bin1.meta_lic:notice lib/liba.so.meta_lic:notice notice", 304 "bin/bin1.meta_lic:notice lib/libc.a.meta_lic:notice notice", 305 "bin/bin2.meta_lic:notice bin/bin2.meta_lic:notice notice", 306 "highest.apex.meta_lic:notice bin/bin1.meta_lic:notice notice", 307 "highest.apex.meta_lic:notice bin/bin2.meta_lic:notice notice", 308 "highest.apex.meta_lic:notice highest.apex.meta_lic:notice notice", 309 "highest.apex.meta_lic:notice lib/liba.so.meta_lic:notice notice", 310 "highest.apex.meta_lic:notice lib/libb.so.meta_lic:notice notice", 311 "highest.apex.meta_lic:notice lib/libc.a.meta_lic:notice notice", 312 "lib/liba.so.meta_lic:notice lib/liba.so.meta_lic:notice notice", 313 "lib/libb.so.meta_lic:notice lib/libb.so.meta_lic:notice notice", 314 }, 315 }, 316 { 317 condition: "notice", 318 name: "container", 319 roots: []string{"container.zip.meta_lic"}, 320 expectedOut: []string{ 321 "testdata/notice/bin/bin1.meta_lic testdata/notice/bin/bin1.meta_lic notice", 322 "testdata/notice/bin/bin1.meta_lic testdata/notice/lib/liba.so.meta_lic notice", 323 "testdata/notice/bin/bin1.meta_lic testdata/notice/lib/libc.a.meta_lic notice", 324 "testdata/notice/bin/bin2.meta_lic testdata/notice/bin/bin2.meta_lic notice", 325 "testdata/notice/container.zip.meta_lic testdata/notice/bin/bin1.meta_lic notice", 326 "testdata/notice/container.zip.meta_lic testdata/notice/bin/bin2.meta_lic notice", 327 "testdata/notice/container.zip.meta_lic testdata/notice/container.zip.meta_lic notice", 328 "testdata/notice/container.zip.meta_lic testdata/notice/lib/liba.so.meta_lic notice", 329 "testdata/notice/container.zip.meta_lic testdata/notice/lib/libb.so.meta_lic notice", 330 "testdata/notice/container.zip.meta_lic testdata/notice/lib/libc.a.meta_lic notice", 331 "testdata/notice/lib/liba.so.meta_lic testdata/notice/lib/liba.so.meta_lic notice", 332 "testdata/notice/lib/libb.so.meta_lic testdata/notice/lib/libb.so.meta_lic notice", 333 }, 334 }, 335 { 336 condition: "notice", 337 name: "application", 338 roots: []string{"application.meta_lic"}, 339 expectedOut: []string{ 340 "testdata/notice/application.meta_lic testdata/notice/application.meta_lic notice", 341 "testdata/notice/application.meta_lic testdata/notice/lib/liba.so.meta_lic notice", 342 }, 343 }, 344 { 345 condition: "notice", 346 name: "binary", 347 roots: []string{"bin/bin1.meta_lic"}, 348 expectedOut: []string{ 349 "testdata/notice/bin/bin1.meta_lic testdata/notice/bin/bin1.meta_lic notice", 350 "testdata/notice/bin/bin1.meta_lic testdata/notice/lib/liba.so.meta_lic notice", 351 "testdata/notice/bin/bin1.meta_lic testdata/notice/lib/libc.a.meta_lic notice", 352 }, 353 }, 354 { 355 condition: "notice", 356 name: "library", 357 roots: []string{"lib/libd.so.meta_lic"}, 358 expectedOut: []string{ 359 "testdata/notice/lib/libd.so.meta_lic testdata/notice/lib/libd.so.meta_lic notice", 360 }, 361 }, 362 { 363 condition: "reciprocal", 364 name: "apex", 365 roots: []string{"highest.apex.meta_lic"}, 366 expectedOut: []string{ 367 "testdata/reciprocal/bin/bin1.meta_lic testdata/reciprocal/bin/bin1.meta_lic notice", 368 "testdata/reciprocal/bin/bin1.meta_lic testdata/reciprocal/lib/liba.so.meta_lic reciprocal", 369 "testdata/reciprocal/bin/bin1.meta_lic testdata/reciprocal/lib/libc.a.meta_lic reciprocal", 370 "testdata/reciprocal/bin/bin2.meta_lic testdata/reciprocal/bin/bin2.meta_lic notice", 371 "testdata/reciprocal/highest.apex.meta_lic testdata/reciprocal/bin/bin1.meta_lic notice", 372 "testdata/reciprocal/highest.apex.meta_lic testdata/reciprocal/bin/bin2.meta_lic notice", 373 "testdata/reciprocal/highest.apex.meta_lic testdata/reciprocal/highest.apex.meta_lic notice", 374 "testdata/reciprocal/highest.apex.meta_lic testdata/reciprocal/lib/liba.so.meta_lic reciprocal", 375 "testdata/reciprocal/highest.apex.meta_lic testdata/reciprocal/lib/libb.so.meta_lic notice", 376 "testdata/reciprocal/highest.apex.meta_lic testdata/reciprocal/lib/libc.a.meta_lic reciprocal", 377 "testdata/reciprocal/lib/liba.so.meta_lic testdata/reciprocal/lib/liba.so.meta_lic reciprocal", 378 "testdata/reciprocal/lib/libb.so.meta_lic testdata/reciprocal/lib/libb.so.meta_lic notice", 379 }, 380 }, 381 { 382 condition: "reciprocal", 383 name: "apex_trimmed", 384 roots: []string{"highest.apex.meta_lic"}, 385 ctx: context{stripPrefix: []string{"testdata/reciprocal/"}}, 386 expectedOut: []string{ 387 "bin/bin1.meta_lic bin/bin1.meta_lic notice", 388 "bin/bin1.meta_lic lib/liba.so.meta_lic reciprocal", 389 "bin/bin1.meta_lic lib/libc.a.meta_lic reciprocal", 390 "bin/bin2.meta_lic bin/bin2.meta_lic notice", 391 "highest.apex.meta_lic bin/bin1.meta_lic notice", 392 "highest.apex.meta_lic bin/bin2.meta_lic notice", 393 "highest.apex.meta_lic highest.apex.meta_lic notice", 394 "highest.apex.meta_lic lib/liba.so.meta_lic reciprocal", 395 "highest.apex.meta_lic lib/libb.so.meta_lic notice", 396 "highest.apex.meta_lic lib/libc.a.meta_lic reciprocal", 397 "lib/liba.so.meta_lic lib/liba.so.meta_lic reciprocal", 398 "lib/libb.so.meta_lic lib/libb.so.meta_lic notice", 399 }, 400 }, 401 { 402 condition: "reciprocal", 403 name: "apex_trimmed_notice", 404 roots: []string{"highest.apex.meta_lic"}, 405 ctx: context{ 406 conditions: []compliance.LicenseCondition{compliance.NoticeCondition}, 407 stripPrefix: []string{"testdata/reciprocal/"}, 408 }, 409 expectedOut: []string{ 410 "bin/bin1.meta_lic bin/bin1.meta_lic notice", 411 "bin/bin2.meta_lic bin/bin2.meta_lic notice", 412 "highest.apex.meta_lic bin/bin1.meta_lic notice", 413 "highest.apex.meta_lic bin/bin2.meta_lic notice", 414 "highest.apex.meta_lic highest.apex.meta_lic notice", 415 "highest.apex.meta_lic lib/libb.so.meta_lic notice", 416 "lib/libb.so.meta_lic lib/libb.so.meta_lic notice", 417 }, 418 }, 419 { 420 condition: "reciprocal", 421 name: "apex_trimmed_share", 422 roots: []string{"highest.apex.meta_lic"}, 423 ctx: context{ 424 conditions: compliance.ImpliesShared.AsList(), 425 stripPrefix: []string{"testdata/reciprocal/"}, 426 }, 427 expectedOut: []string{ 428 "bin/bin1.meta_lic lib/liba.so.meta_lic reciprocal", 429 "bin/bin1.meta_lic lib/libc.a.meta_lic reciprocal", 430 "highest.apex.meta_lic lib/liba.so.meta_lic reciprocal", 431 "highest.apex.meta_lic lib/libc.a.meta_lic reciprocal", 432 "lib/liba.so.meta_lic lib/liba.so.meta_lic reciprocal", 433 }, 434 }, 435 { 436 condition: "reciprocal", 437 name: "apex_trimmed_private", 438 roots: []string{"highest.apex.meta_lic"}, 439 ctx: context{ 440 conditions: compliance.ImpliesPrivate.AsList(), 441 stripPrefix: []string{"testdata/reciprocal/"}, 442 }, 443 expectedOut: []string{}, 444 }, 445 { 446 condition: "reciprocal", 447 name: "apex_trimmed_share_private", 448 roots: []string{"highest.apex.meta_lic"}, 449 ctx: context{ 450 conditions: append(compliance.ImpliesShared.AsList(), compliance.ImpliesPrivate.AsList()...), 451 stripPrefix: []string{"testdata/reciprocal/"}, 452 }, 453 expectedOut: []string{ 454 "bin/bin1.meta_lic lib/liba.so.meta_lic reciprocal", 455 "bin/bin1.meta_lic lib/libc.a.meta_lic reciprocal", 456 "highest.apex.meta_lic lib/liba.so.meta_lic reciprocal", 457 "highest.apex.meta_lic lib/libc.a.meta_lic reciprocal", 458 "lib/liba.so.meta_lic lib/liba.so.meta_lic reciprocal", 459 }, 460 }, 461 { 462 condition: "reciprocal", 463 name: "apex_trimmed_labelled", 464 roots: []string{"highest.apex.meta_lic"}, 465 ctx: context{stripPrefix: []string{"testdata/reciprocal/"}, labelConditions: true}, 466 expectedOut: []string{ 467 "bin/bin1.meta_lic:notice bin/bin1.meta_lic:notice notice", 468 "bin/bin1.meta_lic:notice lib/liba.so.meta_lic:reciprocal reciprocal", 469 "bin/bin1.meta_lic:notice lib/libc.a.meta_lic:reciprocal reciprocal", 470 "bin/bin2.meta_lic:notice bin/bin2.meta_lic:notice notice", 471 "highest.apex.meta_lic:notice bin/bin1.meta_lic:notice notice", 472 "highest.apex.meta_lic:notice bin/bin2.meta_lic:notice notice", 473 "highest.apex.meta_lic:notice highest.apex.meta_lic:notice notice", 474 "highest.apex.meta_lic:notice lib/liba.so.meta_lic:reciprocal reciprocal", 475 "highest.apex.meta_lic:notice lib/libb.so.meta_lic:notice notice", 476 "highest.apex.meta_lic:notice lib/libc.a.meta_lic:reciprocal reciprocal", 477 "lib/liba.so.meta_lic:reciprocal lib/liba.so.meta_lic:reciprocal reciprocal", 478 "lib/libb.so.meta_lic:notice lib/libb.so.meta_lic:notice notice", 479 }, 480 }, 481 { 482 condition: "reciprocal", 483 name: "container", 484 roots: []string{"container.zip.meta_lic"}, 485 expectedOut: []string{ 486 "testdata/reciprocal/bin/bin1.meta_lic testdata/reciprocal/bin/bin1.meta_lic notice", 487 "testdata/reciprocal/bin/bin1.meta_lic testdata/reciprocal/lib/liba.so.meta_lic reciprocal", 488 "testdata/reciprocal/bin/bin1.meta_lic testdata/reciprocal/lib/libc.a.meta_lic reciprocal", 489 "testdata/reciprocal/bin/bin2.meta_lic testdata/reciprocal/bin/bin2.meta_lic notice", 490 "testdata/reciprocal/container.zip.meta_lic testdata/reciprocal/bin/bin1.meta_lic notice", 491 "testdata/reciprocal/container.zip.meta_lic testdata/reciprocal/bin/bin2.meta_lic notice", 492 "testdata/reciprocal/container.zip.meta_lic testdata/reciprocal/container.zip.meta_lic notice", 493 "testdata/reciprocal/container.zip.meta_lic testdata/reciprocal/lib/liba.so.meta_lic reciprocal", 494 "testdata/reciprocal/container.zip.meta_lic testdata/reciprocal/lib/libb.so.meta_lic notice", 495 "testdata/reciprocal/container.zip.meta_lic testdata/reciprocal/lib/libc.a.meta_lic reciprocal", 496 "testdata/reciprocal/lib/liba.so.meta_lic testdata/reciprocal/lib/liba.so.meta_lic reciprocal", 497 "testdata/reciprocal/lib/libb.so.meta_lic testdata/reciprocal/lib/libb.so.meta_lic notice", 498 }, 499 }, 500 { 501 condition: "reciprocal", 502 name: "application", 503 roots: []string{"application.meta_lic"}, 504 expectedOut: []string{ 505 "testdata/reciprocal/application.meta_lic testdata/reciprocal/application.meta_lic notice", 506 "testdata/reciprocal/application.meta_lic testdata/reciprocal/lib/liba.so.meta_lic reciprocal", 507 }, 508 }, 509 { 510 condition: "reciprocal", 511 name: "binary", 512 roots: []string{"bin/bin1.meta_lic"}, 513 expectedOut: []string{ 514 "testdata/reciprocal/bin/bin1.meta_lic testdata/reciprocal/bin/bin1.meta_lic notice", 515 "testdata/reciprocal/bin/bin1.meta_lic testdata/reciprocal/lib/liba.so.meta_lic reciprocal", 516 "testdata/reciprocal/bin/bin1.meta_lic testdata/reciprocal/lib/libc.a.meta_lic reciprocal", 517 }, 518 }, 519 { 520 condition: "reciprocal", 521 name: "library", 522 roots: []string{"lib/libd.so.meta_lic"}, 523 expectedOut: []string{ 524 "testdata/reciprocal/lib/libd.so.meta_lic testdata/reciprocal/lib/libd.so.meta_lic notice", 525 }, 526 }, 527 { 528 condition: "restricted", 529 name: "apex", 530 roots: []string{"highest.apex.meta_lic"}, 531 expectedOut: []string{ 532 "testdata/restricted/bin/bin1.meta_lic testdata/restricted/bin/bin1.meta_lic notice:restricted_if_statically_linked", 533 "testdata/restricted/bin/bin1.meta_lic testdata/restricted/lib/liba.so.meta_lic restricted_if_statically_linked", 534 "testdata/restricted/bin/bin1.meta_lic testdata/restricted/lib/libc.a.meta_lic reciprocal:restricted_if_statically_linked", 535 "testdata/restricted/bin/bin2.meta_lic testdata/restricted/bin/bin2.meta_lic notice:restricted", 536 "testdata/restricted/bin/bin2.meta_lic testdata/restricted/lib/libb.so.meta_lic restricted", 537 "testdata/restricted/highest.apex.meta_lic testdata/restricted/bin/bin1.meta_lic notice:restricted_if_statically_linked", 538 "testdata/restricted/highest.apex.meta_lic testdata/restricted/bin/bin2.meta_lic notice:restricted", 539 "testdata/restricted/highest.apex.meta_lic testdata/restricted/highest.apex.meta_lic notice:restricted:restricted_if_statically_linked", 540 "testdata/restricted/highest.apex.meta_lic testdata/restricted/lib/liba.so.meta_lic restricted_if_statically_linked", 541 "testdata/restricted/highest.apex.meta_lic testdata/restricted/lib/libb.so.meta_lic restricted", 542 "testdata/restricted/highest.apex.meta_lic testdata/restricted/lib/libc.a.meta_lic reciprocal:restricted_if_statically_linked", 543 "testdata/restricted/lib/liba.so.meta_lic testdata/restricted/lib/liba.so.meta_lic restricted_if_statically_linked", 544 "testdata/restricted/lib/libb.so.meta_lic testdata/restricted/lib/libb.so.meta_lic restricted", 545 }, 546 }, 547 { 548 condition: "restricted", 549 name: "apex_trimmed", 550 roots: []string{"highest.apex.meta_lic"}, 551 ctx: context{stripPrefix: []string{"testdata/restricted/"}}, 552 expectedOut: []string{ 553 "bin/bin1.meta_lic bin/bin1.meta_lic notice:restricted_if_statically_linked", 554 "bin/bin1.meta_lic lib/liba.so.meta_lic restricted_if_statically_linked", 555 "bin/bin1.meta_lic lib/libc.a.meta_lic reciprocal:restricted_if_statically_linked", 556 "bin/bin2.meta_lic bin/bin2.meta_lic notice:restricted", 557 "bin/bin2.meta_lic lib/libb.so.meta_lic restricted", 558 "highest.apex.meta_lic bin/bin1.meta_lic notice:restricted_if_statically_linked", 559 "highest.apex.meta_lic bin/bin2.meta_lic notice:restricted", 560 "highest.apex.meta_lic highest.apex.meta_lic notice:restricted:restricted_if_statically_linked", 561 "highest.apex.meta_lic lib/liba.so.meta_lic restricted_if_statically_linked", 562 "highest.apex.meta_lic lib/libb.so.meta_lic restricted", 563 "highest.apex.meta_lic lib/libc.a.meta_lic reciprocal:restricted_if_statically_linked", 564 "lib/liba.so.meta_lic lib/liba.so.meta_lic restricted_if_statically_linked", 565 "lib/libb.so.meta_lic lib/libb.so.meta_lic restricted", 566 }, 567 }, 568 { 569 condition: "restricted", 570 name: "apex_trimmed_notice", 571 roots: []string{"highest.apex.meta_lic"}, 572 ctx: context{ 573 conditions: []compliance.LicenseCondition{compliance.NoticeCondition}, 574 stripPrefix: []string{"testdata/restricted/"}, 575 }, 576 expectedOut: []string{ 577 "bin/bin1.meta_lic bin/bin1.meta_lic notice", 578 "bin/bin2.meta_lic bin/bin2.meta_lic notice", 579 "highest.apex.meta_lic bin/bin1.meta_lic notice", 580 "highest.apex.meta_lic bin/bin2.meta_lic notice", 581 "highest.apex.meta_lic highest.apex.meta_lic notice", 582 }, 583 }, 584 { 585 condition: "restricted", 586 name: "apex_trimmed_share", 587 roots: []string{"highest.apex.meta_lic"}, 588 ctx: context{ 589 conditions: compliance.ImpliesShared.AsList(), 590 stripPrefix: []string{"testdata/restricted/"}, 591 }, 592 expectedOut: []string{ 593 "bin/bin1.meta_lic bin/bin1.meta_lic restricted_if_statically_linked", 594 "bin/bin1.meta_lic lib/liba.so.meta_lic restricted_if_statically_linked", 595 "bin/bin1.meta_lic lib/libc.a.meta_lic reciprocal:restricted_if_statically_linked", 596 "bin/bin2.meta_lic bin/bin2.meta_lic restricted", 597 "bin/bin2.meta_lic lib/libb.so.meta_lic restricted", 598 "highest.apex.meta_lic bin/bin1.meta_lic restricted_if_statically_linked", 599 "highest.apex.meta_lic bin/bin2.meta_lic restricted", 600 "highest.apex.meta_lic highest.apex.meta_lic restricted:restricted_if_statically_linked", 601 "highest.apex.meta_lic lib/liba.so.meta_lic restricted_if_statically_linked", 602 "highest.apex.meta_lic lib/libb.so.meta_lic restricted", 603 "highest.apex.meta_lic lib/libc.a.meta_lic reciprocal:restricted_if_statically_linked", 604 "lib/liba.so.meta_lic lib/liba.so.meta_lic restricted_if_statically_linked", 605 "lib/libb.so.meta_lic lib/libb.so.meta_lic restricted", 606 }, 607 }, 608 { 609 condition: "restricted", 610 name: "apex_trimmed_private", 611 roots: []string{"highest.apex.meta_lic"}, 612 ctx: context{ 613 conditions: compliance.ImpliesPrivate.AsList(), 614 stripPrefix: []string{"testdata/restricted/"}, 615 }, 616 expectedOut: []string{}, 617 }, 618 { 619 condition: "restricted", 620 name: "apex_trimmed_share_private", 621 roots: []string{"highest.apex.meta_lic"}, 622 ctx: context{ 623 conditions: append(compliance.ImpliesShared.AsList(), compliance.ImpliesPrivate.AsList()...), 624 stripPrefix: []string{"testdata/restricted/"}, 625 }, 626 expectedOut: []string{ 627 "bin/bin1.meta_lic bin/bin1.meta_lic restricted_if_statically_linked", 628 "bin/bin1.meta_lic lib/liba.so.meta_lic restricted_if_statically_linked", 629 "bin/bin1.meta_lic lib/libc.a.meta_lic reciprocal:restricted_if_statically_linked", 630 "bin/bin2.meta_lic bin/bin2.meta_lic restricted", 631 "bin/bin2.meta_lic lib/libb.so.meta_lic restricted", 632 "highest.apex.meta_lic bin/bin1.meta_lic restricted_if_statically_linked", 633 "highest.apex.meta_lic bin/bin2.meta_lic restricted", 634 "highest.apex.meta_lic highest.apex.meta_lic restricted:restricted_if_statically_linked", 635 "highest.apex.meta_lic lib/liba.so.meta_lic restricted_if_statically_linked", 636 "highest.apex.meta_lic lib/libb.so.meta_lic restricted", 637 "highest.apex.meta_lic lib/libc.a.meta_lic reciprocal:restricted_if_statically_linked", 638 "lib/liba.so.meta_lic lib/liba.so.meta_lic restricted_if_statically_linked", 639 "lib/libb.so.meta_lic lib/libb.so.meta_lic restricted", 640 }, 641 }, 642 { 643 condition: "restricted", 644 name: "apex_trimmed_labelled", 645 roots: []string{"highest.apex.meta_lic"}, 646 ctx: context{stripPrefix: []string{"testdata/restricted/"}, labelConditions: true}, 647 expectedOut: []string{ 648 "bin/bin1.meta_lic:notice bin/bin1.meta_lic:notice notice:restricted_if_statically_linked", 649 "bin/bin1.meta_lic:notice lib/liba.so.meta_lic:restricted_if_statically_linked restricted_if_statically_linked", 650 "bin/bin1.meta_lic:notice lib/libc.a.meta_lic:reciprocal reciprocal:restricted_if_statically_linked", 651 "bin/bin2.meta_lic:notice bin/bin2.meta_lic:notice notice:restricted", 652 "bin/bin2.meta_lic:notice lib/libb.so.meta_lic:restricted restricted", 653 "highest.apex.meta_lic:notice bin/bin1.meta_lic:notice notice:restricted_if_statically_linked", 654 "highest.apex.meta_lic:notice bin/bin2.meta_lic:notice notice:restricted", 655 "highest.apex.meta_lic:notice highest.apex.meta_lic:notice notice:restricted:restricted_if_statically_linked", 656 "highest.apex.meta_lic:notice lib/liba.so.meta_lic:restricted_if_statically_linked restricted_if_statically_linked", 657 "highest.apex.meta_lic:notice lib/libb.so.meta_lic:restricted restricted", 658 "highest.apex.meta_lic:notice lib/libc.a.meta_lic:reciprocal reciprocal:restricted_if_statically_linked", 659 "lib/liba.so.meta_lic:restricted_if_statically_linked lib/liba.so.meta_lic:restricted_if_statically_linked restricted_if_statically_linked", 660 "lib/libb.so.meta_lic:restricted lib/libb.so.meta_lic:restricted restricted", 661 }, 662 }, 663 { 664 condition: "restricted", 665 name: "container", 666 roots: []string{"container.zip.meta_lic"}, 667 expectedOut: []string{ 668 "testdata/restricted/bin/bin1.meta_lic testdata/restricted/bin/bin1.meta_lic notice:restricted_if_statically_linked", 669 "testdata/restricted/bin/bin1.meta_lic testdata/restricted/lib/liba.so.meta_lic restricted_if_statically_linked", 670 "testdata/restricted/bin/bin1.meta_lic testdata/restricted/lib/libc.a.meta_lic reciprocal:restricted_if_statically_linked", 671 "testdata/restricted/bin/bin2.meta_lic testdata/restricted/bin/bin2.meta_lic notice:restricted", 672 "testdata/restricted/bin/bin2.meta_lic testdata/restricted/lib/libb.so.meta_lic restricted", 673 "testdata/restricted/container.zip.meta_lic testdata/restricted/bin/bin1.meta_lic notice:restricted_if_statically_linked", 674 "testdata/restricted/container.zip.meta_lic testdata/restricted/bin/bin2.meta_lic notice:restricted", 675 "testdata/restricted/container.zip.meta_lic testdata/restricted/container.zip.meta_lic notice:restricted:restricted_if_statically_linked", 676 "testdata/restricted/container.zip.meta_lic testdata/restricted/lib/liba.so.meta_lic restricted_if_statically_linked", 677 "testdata/restricted/container.zip.meta_lic testdata/restricted/lib/libb.so.meta_lic restricted", 678 "testdata/restricted/container.zip.meta_lic testdata/restricted/lib/libc.a.meta_lic reciprocal:restricted_if_statically_linked", 679 "testdata/restricted/lib/liba.so.meta_lic testdata/restricted/lib/liba.so.meta_lic restricted_if_statically_linked", 680 "testdata/restricted/lib/libb.so.meta_lic testdata/restricted/lib/libb.so.meta_lic restricted", 681 }, 682 }, 683 { 684 condition: "restricted", 685 name: "application", 686 roots: []string{"application.meta_lic"}, 687 expectedOut: []string{ 688 "testdata/restricted/application.meta_lic testdata/restricted/application.meta_lic notice:restricted:restricted_if_statically_linked", 689 "testdata/restricted/application.meta_lic testdata/restricted/lib/liba.so.meta_lic restricted:restricted_if_statically_linked", 690 }, 691 }, 692 { 693 condition: "restricted", 694 name: "binary", 695 roots: []string{"bin/bin1.meta_lic"}, 696 expectedOut: []string{ 697 "testdata/restricted/bin/bin1.meta_lic testdata/restricted/bin/bin1.meta_lic notice:restricted_if_statically_linked", 698 "testdata/restricted/bin/bin1.meta_lic testdata/restricted/lib/liba.so.meta_lic restricted_if_statically_linked", 699 "testdata/restricted/bin/bin1.meta_lic testdata/restricted/lib/libc.a.meta_lic reciprocal:restricted_if_statically_linked", 700 }, 701 }, 702 { 703 condition: "restricted", 704 name: "library", 705 roots: []string{"lib/libd.so.meta_lic"}, 706 expectedOut: []string{ 707 "testdata/restricted/lib/libd.so.meta_lic testdata/restricted/lib/libd.so.meta_lic notice", 708 }, 709 }, 710 { 711 condition: "proprietary", 712 name: "apex", 713 roots: []string{"highest.apex.meta_lic"}, 714 expectedOut: []string{ 715 "testdata/proprietary/bin/bin1.meta_lic testdata/proprietary/bin/bin1.meta_lic notice", 716 "testdata/proprietary/bin/bin1.meta_lic testdata/proprietary/lib/liba.so.meta_lic proprietary:by_exception_only", 717 "testdata/proprietary/bin/bin1.meta_lic testdata/proprietary/lib/libc.a.meta_lic proprietary:by_exception_only", 718 "testdata/proprietary/bin/bin2.meta_lic testdata/proprietary/bin/bin2.meta_lic restricted:proprietary:by_exception_only", 719 "testdata/proprietary/bin/bin2.meta_lic testdata/proprietary/lib/libb.so.meta_lic restricted", 720 "testdata/proprietary/highest.apex.meta_lic testdata/proprietary/bin/bin1.meta_lic notice", 721 "testdata/proprietary/highest.apex.meta_lic testdata/proprietary/bin/bin2.meta_lic restricted:proprietary:by_exception_only", 722 "testdata/proprietary/highest.apex.meta_lic testdata/proprietary/highest.apex.meta_lic notice:restricted", 723 "testdata/proprietary/highest.apex.meta_lic testdata/proprietary/lib/liba.so.meta_lic proprietary:by_exception_only", 724 "testdata/proprietary/highest.apex.meta_lic testdata/proprietary/lib/libb.so.meta_lic restricted", 725 "testdata/proprietary/highest.apex.meta_lic testdata/proprietary/lib/libc.a.meta_lic proprietary:by_exception_only", 726 "testdata/proprietary/lib/liba.so.meta_lic testdata/proprietary/lib/liba.so.meta_lic proprietary:by_exception_only", 727 "testdata/proprietary/lib/libb.so.meta_lic testdata/proprietary/lib/libb.so.meta_lic restricted", 728 }, 729 }, 730 { 731 condition: "proprietary", 732 name: "apex_trimmed", 733 roots: []string{"highest.apex.meta_lic"}, 734 ctx: context{stripPrefix: []string{"testdata/proprietary/"}}, 735 expectedOut: []string{ 736 "bin/bin1.meta_lic bin/bin1.meta_lic notice", 737 "bin/bin1.meta_lic lib/liba.so.meta_lic proprietary:by_exception_only", 738 "bin/bin1.meta_lic lib/libc.a.meta_lic proprietary:by_exception_only", 739 "bin/bin2.meta_lic bin/bin2.meta_lic restricted:proprietary:by_exception_only", 740 "bin/bin2.meta_lic lib/libb.so.meta_lic restricted", 741 "highest.apex.meta_lic bin/bin1.meta_lic notice", 742 "highest.apex.meta_lic bin/bin2.meta_lic restricted:proprietary:by_exception_only", 743 "highest.apex.meta_lic highest.apex.meta_lic notice:restricted", 744 "highest.apex.meta_lic lib/liba.so.meta_lic proprietary:by_exception_only", 745 "highest.apex.meta_lic lib/libb.so.meta_lic restricted", 746 "highest.apex.meta_lic lib/libc.a.meta_lic proprietary:by_exception_only", 747 "lib/liba.so.meta_lic lib/liba.so.meta_lic proprietary:by_exception_only", 748 "lib/libb.so.meta_lic lib/libb.so.meta_lic restricted", 749 }, 750 }, 751 { 752 condition: "proprietary", 753 name: "apex_trimmed_notice", 754 roots: []string{"highest.apex.meta_lic"}, 755 ctx: context{ 756 conditions: []compliance.LicenseCondition{compliance.NoticeCondition}, 757 stripPrefix: []string{"testdata/proprietary/"}, 758 }, 759 expectedOut: []string{ 760 "bin/bin1.meta_lic bin/bin1.meta_lic notice", 761 "highest.apex.meta_lic bin/bin1.meta_lic notice", 762 "highest.apex.meta_lic highest.apex.meta_lic notice", 763 }, 764 }, 765 { 766 condition: "proprietary", 767 name: "apex_trimmed_share", 768 roots: []string{"highest.apex.meta_lic"}, 769 ctx: context{ 770 conditions: compliance.ImpliesShared.AsList(), 771 stripPrefix: []string{"testdata/proprietary/"}, 772 }, 773 expectedOut: []string{ 774 "bin/bin2.meta_lic bin/bin2.meta_lic restricted", 775 "bin/bin2.meta_lic lib/libb.so.meta_lic restricted", 776 "highest.apex.meta_lic bin/bin2.meta_lic restricted", 777 "highest.apex.meta_lic highest.apex.meta_lic restricted", 778 "highest.apex.meta_lic lib/libb.so.meta_lic restricted", 779 "lib/libb.so.meta_lic lib/libb.so.meta_lic restricted", 780 }, 781 }, 782 { 783 condition: "proprietary", 784 name: "apex_trimmed_private", 785 roots: []string{"highest.apex.meta_lic"}, 786 ctx: context{ 787 conditions: compliance.ImpliesPrivate.AsList(), 788 stripPrefix: []string{"testdata/proprietary/"}, 789 }, 790 expectedOut: []string{ 791 "bin/bin1.meta_lic lib/liba.so.meta_lic proprietary", 792 "bin/bin1.meta_lic lib/libc.a.meta_lic proprietary", 793 "bin/bin2.meta_lic bin/bin2.meta_lic proprietary", 794 "highest.apex.meta_lic bin/bin2.meta_lic proprietary", 795 "highest.apex.meta_lic lib/liba.so.meta_lic proprietary", 796 "highest.apex.meta_lic lib/libc.a.meta_lic proprietary", 797 "lib/liba.so.meta_lic lib/liba.so.meta_lic proprietary", 798 }, 799 }, 800 { 801 condition: "proprietary", 802 name: "apex_trimmed_share_private", 803 roots: []string{"highest.apex.meta_lic"}, 804 ctx: context{ 805 conditions: append(compliance.ImpliesShared.AsList(), compliance.ImpliesPrivate.AsList()...), 806 stripPrefix: []string{"testdata/proprietary/"}, 807 }, 808 expectedOut: []string{ 809 "bin/bin1.meta_lic lib/liba.so.meta_lic proprietary", 810 "bin/bin1.meta_lic lib/libc.a.meta_lic proprietary", 811 "bin/bin2.meta_lic bin/bin2.meta_lic restricted:proprietary", 812 "bin/bin2.meta_lic lib/libb.so.meta_lic restricted", 813 "highest.apex.meta_lic bin/bin2.meta_lic restricted:proprietary", 814 "highest.apex.meta_lic highest.apex.meta_lic restricted", 815 "highest.apex.meta_lic lib/liba.so.meta_lic proprietary", 816 "highest.apex.meta_lic lib/libb.so.meta_lic restricted", 817 "highest.apex.meta_lic lib/libc.a.meta_lic proprietary", 818 "lib/liba.so.meta_lic lib/liba.so.meta_lic proprietary", 819 "lib/libb.so.meta_lic lib/libb.so.meta_lic restricted", 820 }, 821 }, 822 { 823 condition: "proprietary", 824 name: "apex_trimmed_labelled", 825 roots: []string{"highest.apex.meta_lic"}, 826 ctx: context{stripPrefix: []string{"testdata/proprietary/"}, labelConditions: true}, 827 expectedOut: []string{ 828 "bin/bin1.meta_lic:notice bin/bin1.meta_lic:notice notice", 829 "bin/bin1.meta_lic:notice lib/liba.so.meta_lic:proprietary:by_exception_only proprietary:by_exception_only", 830 "bin/bin1.meta_lic:notice lib/libc.a.meta_lic:proprietary:by_exception_only proprietary:by_exception_only", 831 "bin/bin2.meta_lic:proprietary:by_exception_only bin/bin2.meta_lic:proprietary:by_exception_only restricted:proprietary:by_exception_only", 832 "bin/bin2.meta_lic:proprietary:by_exception_only lib/libb.so.meta_lic:restricted restricted", 833 "highest.apex.meta_lic:notice bin/bin1.meta_lic:notice notice", 834 "highest.apex.meta_lic:notice bin/bin2.meta_lic:proprietary:by_exception_only restricted:proprietary:by_exception_only", 835 "highest.apex.meta_lic:notice highest.apex.meta_lic:notice notice:restricted", 836 "highest.apex.meta_lic:notice lib/liba.so.meta_lic:proprietary:by_exception_only proprietary:by_exception_only", 837 "highest.apex.meta_lic:notice lib/libb.so.meta_lic:restricted restricted", 838 "highest.apex.meta_lic:notice lib/libc.a.meta_lic:proprietary:by_exception_only proprietary:by_exception_only", 839 "lib/liba.so.meta_lic:proprietary:by_exception_only lib/liba.so.meta_lic:proprietary:by_exception_only proprietary:by_exception_only", 840 "lib/libb.so.meta_lic:restricted lib/libb.so.meta_lic:restricted restricted", 841 }, 842 }, 843 { 844 condition: "proprietary", 845 name: "container", 846 roots: []string{"container.zip.meta_lic"}, 847 expectedOut: []string{ 848 "testdata/proprietary/bin/bin1.meta_lic testdata/proprietary/bin/bin1.meta_lic notice", 849 "testdata/proprietary/bin/bin1.meta_lic testdata/proprietary/lib/liba.so.meta_lic proprietary:by_exception_only", 850 "testdata/proprietary/bin/bin1.meta_lic testdata/proprietary/lib/libc.a.meta_lic proprietary:by_exception_only", 851 "testdata/proprietary/bin/bin2.meta_lic testdata/proprietary/bin/bin2.meta_lic restricted:proprietary:by_exception_only", 852 "testdata/proprietary/bin/bin2.meta_lic testdata/proprietary/lib/libb.so.meta_lic restricted", 853 "testdata/proprietary/container.zip.meta_lic testdata/proprietary/bin/bin1.meta_lic notice", 854 "testdata/proprietary/container.zip.meta_lic testdata/proprietary/bin/bin2.meta_lic restricted:proprietary:by_exception_only", 855 "testdata/proprietary/container.zip.meta_lic testdata/proprietary/container.zip.meta_lic notice:restricted", 856 "testdata/proprietary/container.zip.meta_lic testdata/proprietary/lib/liba.so.meta_lic proprietary:by_exception_only", 857 "testdata/proprietary/container.zip.meta_lic testdata/proprietary/lib/libb.so.meta_lic restricted", 858 "testdata/proprietary/container.zip.meta_lic testdata/proprietary/lib/libc.a.meta_lic proprietary:by_exception_only", 859 "testdata/proprietary/lib/liba.so.meta_lic testdata/proprietary/lib/liba.so.meta_lic proprietary:by_exception_only", 860 "testdata/proprietary/lib/libb.so.meta_lic testdata/proprietary/lib/libb.so.meta_lic restricted", 861 }, 862 }, 863 { 864 condition: "proprietary", 865 name: "application", 866 roots: []string{"application.meta_lic"}, 867 expectedOut: []string{ 868 "testdata/proprietary/application.meta_lic testdata/proprietary/application.meta_lic notice:restricted", 869 "testdata/proprietary/application.meta_lic testdata/proprietary/lib/liba.so.meta_lic restricted:proprietary:by_exception_only", 870 }, 871 }, 872 { 873 condition: "proprietary", 874 name: "binary", 875 roots: []string{"bin/bin1.meta_lic"}, 876 expectedOut: []string{ 877 "testdata/proprietary/bin/bin1.meta_lic testdata/proprietary/bin/bin1.meta_lic notice", 878 "testdata/proprietary/bin/bin1.meta_lic testdata/proprietary/lib/liba.so.meta_lic proprietary:by_exception_only", 879 "testdata/proprietary/bin/bin1.meta_lic testdata/proprietary/lib/libc.a.meta_lic proprietary:by_exception_only", 880 }, 881 }, 882 { 883 condition: "proprietary", 884 name: "library", 885 roots: []string{"lib/libd.so.meta_lic"}, 886 expectedOut: []string{ 887 "testdata/proprietary/lib/libd.so.meta_lic testdata/proprietary/lib/libd.so.meta_lic notice", 888 }, 889 }, 890 } 891 for _, tt := range tests { 892 t.Run(tt.condition+" "+tt.name, func(t *testing.T) { 893 expectedOut := &bytes.Buffer{} 894 for _, eo := range tt.expectedOut { 895 expectedOut.WriteString(eo) 896 expectedOut.WriteString("\n") 897 } 898 899 stdout := &bytes.Buffer{} 900 stderr := &bytes.Buffer{} 901 902 rootFiles := make([]string, 0, len(tt.roots)) 903 for _, r := range tt.roots { 904 rootFiles = append(rootFiles, "testdata/"+tt.condition+"/"+r) 905 } 906 _, err := dumpResolutions(&tt.ctx, stdout, stderr, compliance.GetFS(tt.outDir), rootFiles...) 907 if err != nil { 908 t.Fatalf("dumpresolutions: error = %v, stderr = %v", err, stderr) 909 return 910 } 911 if stderr.Len() > 0 { 912 t.Errorf("dumpresolutions: gotStderr = %v, want none", stderr) 913 } 914 out := stdout.String() 915 expected := expectedOut.String() 916 if out != expected { 917 outList := strings.Split(out, "\n") 918 expectedList := strings.Split(expected, "\n") 919 startLine := 0 920 for len(outList) > startLine && len(expectedList) > startLine && outList[startLine] == expectedList[startLine] { 921 startLine++ 922 } 923 t.Errorf("dumpresoliutions: gotStdout = %v, want %v, somewhere near line %d Stdout = %v, want %v", 924 out, expected, startLine+1, outList[startLine], expectedList[startLine]) 925 } 926 }) 927 } 928} 929 930type testContext struct { 931 nextNode int 932 nodes map[string]string 933} 934 935type matcher interface { 936 matchString(*testContext, *compliance.LicenseGraph) string 937 typeString() string 938} 939 940type targetMatcher struct { 941 target string 942 conditions []string 943} 944 945// newTestCondition constructs a test license condition in the license graph. 946func newTestCondition(lg *compliance.LicenseGraph, conditionName ...string) compliance.LicenseConditionSet { 947 cs := compliance.NewLicenseConditionSet() 948 for _, name := range conditionName { 949 cs = cs.Plus(compliance.RecognizedConditionNames[name]) 950 } 951 if cs.IsEmpty() && len(conditionName) != 0 { 952 panic(fmt.Errorf("attempt to create unrecognized condition: %q", conditionName)) 953 } 954 return cs 955} 956 957func (tm *targetMatcher) matchString(ctx *testContext, lg *compliance.LicenseGraph) string { 958 cs := newTestCondition(lg, tm.conditions...) 959 m := tm.target 960 if !cs.IsEmpty() { 961 m += "\\n" + strings.Join(cs.Names(), "\\n") 962 } 963 m = ctx.nodes[tm.target] + " [label=\"" + m + "\"];" 964 return m 965} 966 967func (tm *targetMatcher) typeString() string { 968 return "target" 969} 970 971type resolutionMatcher struct { 972 appliesTo string 973 actsOn string 974 conditions []string 975} 976 977func (rm *resolutionMatcher) matchString(ctx *testContext, lg *compliance.LicenseGraph) string { 978 cs := newTestCondition(lg, rm.conditions...) 979 return ctx.nodes[rm.appliesTo] + " -> " + ctx.nodes[rm.actsOn] + 980 " [label=\"" + strings.Join(cs.Names(), "\\n") + "\"];" 981} 982 983func (rm *resolutionMatcher) typeString() string { 984 return "resolution" 985} 986 987type getMatcher func(*testContext) matcher 988 989func matchTarget(target string, conditions ...string) getMatcher { 990 return func(ctx *testContext) matcher { 991 ctx.nodes[target] = fmt.Sprintf("n%d", ctx.nextNode) 992 ctx.nextNode++ 993 return &targetMatcher{target, append([]string{}, conditions...)} 994 } 995} 996 997func matchResolution(appliesTo, actsOn string, conditions ...string) getMatcher { 998 return func(ctx *testContext) matcher { 999 if _, ok := ctx.nodes[appliesTo]; !ok { 1000 ctx.nodes[appliesTo] = fmt.Sprintf("unknown%d", ctx.nextNode) 1001 ctx.nextNode++ 1002 } 1003 if _, ok := ctx.nodes[actsOn]; !ok { 1004 ctx.nodes[actsOn] = fmt.Sprintf("unknown%d", ctx.nextNode) 1005 ctx.nextNode++ 1006 } 1007 return &resolutionMatcher{appliesTo, actsOn, append([]string{}, conditions...)} 1008 } 1009} 1010 1011func Test_graphviz(t *testing.T) { 1012 tests := []struct { 1013 condition string 1014 name string 1015 outDir string 1016 roots []string 1017 ctx context 1018 expectedOut []getMatcher 1019 }{ 1020 { 1021 condition: "firstparty", 1022 name: "apex", 1023 roots: []string{"highest.apex.meta_lic"}, 1024 expectedOut: []getMatcher{ 1025 matchTarget("testdata/firstparty/bin/bin1.meta_lic"), 1026 matchTarget("testdata/firstparty/lib/liba.so.meta_lic"), 1027 matchTarget("testdata/firstparty/lib/libc.a.meta_lic"), 1028 matchTarget("testdata/firstparty/bin/bin2.meta_lic"), 1029 matchTarget("testdata/firstparty/highest.apex.meta_lic"), 1030 matchTarget("testdata/firstparty/lib/libb.so.meta_lic"), 1031 matchResolution( 1032 "testdata/firstparty/bin/bin1.meta_lic", 1033 "testdata/firstparty/bin/bin1.meta_lic", 1034 "notice"), 1035 matchResolution( 1036 "testdata/firstparty/bin/bin1.meta_lic", 1037 "testdata/firstparty/lib/liba.so.meta_lic", 1038 "notice"), 1039 matchResolution( 1040 "testdata/firstparty/bin/bin1.meta_lic", 1041 "testdata/firstparty/lib/libc.a.meta_lic", 1042 "notice"), 1043 matchResolution( 1044 "testdata/firstparty/bin/bin2.meta_lic", 1045 "testdata/firstparty/bin/bin2.meta_lic", 1046 "notice"), 1047 matchResolution( 1048 "testdata/firstparty/highest.apex.meta_lic", 1049 "testdata/firstparty/bin/bin1.meta_lic", 1050 "notice"), 1051 matchResolution( 1052 "testdata/firstparty/highest.apex.meta_lic", 1053 "testdata/firstparty/bin/bin2.meta_lic", 1054 "notice"), 1055 matchResolution( 1056 "testdata/firstparty/highest.apex.meta_lic", 1057 "testdata/firstparty/highest.apex.meta_lic", 1058 "notice"), 1059 matchResolution( 1060 "testdata/firstparty/highest.apex.meta_lic", 1061 "testdata/firstparty/lib/liba.so.meta_lic", 1062 "notice"), 1063 matchResolution( 1064 "testdata/firstparty/highest.apex.meta_lic", 1065 "testdata/firstparty/lib/libb.so.meta_lic", 1066 "notice"), 1067 matchResolution( 1068 "testdata/firstparty/highest.apex.meta_lic", 1069 "testdata/firstparty/lib/libc.a.meta_lic", 1070 "notice"), 1071 matchResolution( 1072 "testdata/firstparty/lib/liba.so.meta_lic", 1073 "testdata/firstparty/lib/liba.so.meta_lic", 1074 "notice"), 1075 matchResolution( 1076 "testdata/firstparty/lib/libb.so.meta_lic", 1077 "testdata/firstparty/lib/libb.so.meta_lic", 1078 "notice"), 1079 }, 1080 }, 1081 { 1082 condition: "firstparty", 1083 name: "apex_trimmed", 1084 roots: []string{"highest.apex.meta_lic"}, 1085 ctx: context{stripPrefix: []string{"testdata/firstparty/"}}, 1086 expectedOut: []getMatcher{ 1087 matchTarget("bin/bin1.meta_lic"), 1088 matchTarget("lib/liba.so.meta_lic"), 1089 matchTarget("lib/libc.a.meta_lic"), 1090 matchTarget("bin/bin2.meta_lic"), 1091 matchTarget("highest.apex.meta_lic"), 1092 matchTarget("lib/libb.so.meta_lic"), 1093 matchResolution( 1094 "bin/bin1.meta_lic", 1095 "bin/bin1.meta_lic", 1096 "notice"), 1097 matchResolution( 1098 "bin/bin1.meta_lic", 1099 "lib/liba.so.meta_lic", 1100 "notice"), 1101 matchResolution( 1102 "bin/bin1.meta_lic", 1103 "lib/libc.a.meta_lic", 1104 "notice"), 1105 matchResolution( 1106 "bin/bin2.meta_lic", 1107 "bin/bin2.meta_lic", 1108 "notice"), 1109 matchResolution( 1110 "highest.apex.meta_lic", 1111 "bin/bin1.meta_lic", 1112 "notice"), 1113 matchResolution( 1114 "highest.apex.meta_lic", 1115 "bin/bin2.meta_lic", 1116 "notice"), 1117 matchResolution( 1118 "highest.apex.meta_lic", 1119 "highest.apex.meta_lic", 1120 "notice"), 1121 matchResolution( 1122 "highest.apex.meta_lic", 1123 "lib/liba.so.meta_lic", 1124 "notice"), 1125 matchResolution( 1126 "highest.apex.meta_lic", 1127 "lib/libb.so.meta_lic", 1128 "notice"), 1129 matchResolution( 1130 "highest.apex.meta_lic", 1131 "lib/libc.a.meta_lic", 1132 "notice"), 1133 matchResolution( 1134 "lib/liba.so.meta_lic", 1135 "lib/liba.so.meta_lic", 1136 "notice"), 1137 matchResolution( 1138 "lib/libb.so.meta_lic", 1139 "lib/libb.so.meta_lic", 1140 "notice"), 1141 }, 1142 }, 1143 { 1144 condition: "firstparty", 1145 name: "apex_trimmed_notice", 1146 roots: []string{"highest.apex.meta_lic"}, 1147 ctx: context{ 1148 conditions: []compliance.LicenseCondition{compliance.NoticeCondition}, 1149 stripPrefix: []string{"testdata/firstparty/"}, 1150 }, 1151 expectedOut: []getMatcher{ 1152 matchTarget("bin/bin1.meta_lic"), 1153 matchTarget("lib/liba.so.meta_lic"), 1154 matchTarget("lib/libc.a.meta_lic"), 1155 matchTarget("bin/bin2.meta_lic"), 1156 matchTarget("highest.apex.meta_lic"), 1157 matchTarget("lib/libb.so.meta_lic"), 1158 matchResolution( 1159 "bin/bin1.meta_lic", 1160 "bin/bin1.meta_lic", 1161 "notice"), 1162 matchResolution( 1163 "bin/bin1.meta_lic", 1164 "lib/liba.so.meta_lic", 1165 "notice"), 1166 matchResolution( 1167 "bin/bin1.meta_lic", 1168 "lib/libc.a.meta_lic", 1169 "notice"), 1170 matchResolution( 1171 "bin/bin2.meta_lic", 1172 "bin/bin2.meta_lic", 1173 "notice"), 1174 matchResolution( 1175 "highest.apex.meta_lic", 1176 "bin/bin1.meta_lic", 1177 "notice"), 1178 matchResolution( 1179 "highest.apex.meta_lic", 1180 "bin/bin2.meta_lic", 1181 "notice"), 1182 matchResolution( 1183 "highest.apex.meta_lic", 1184 "highest.apex.meta_lic", 1185 "notice"), 1186 matchResolution( 1187 "highest.apex.meta_lic", 1188 "lib/liba.so.meta_lic", 1189 "notice"), 1190 matchResolution( 1191 "highest.apex.meta_lic", 1192 "lib/libb.so.meta_lic", 1193 "notice"), 1194 matchResolution( 1195 "highest.apex.meta_lic", 1196 "lib/libc.a.meta_lic", 1197 "notice"), 1198 matchResolution( 1199 "lib/liba.so.meta_lic", 1200 "lib/liba.so.meta_lic", 1201 "notice"), 1202 matchResolution( 1203 "lib/libb.so.meta_lic", 1204 "lib/libb.so.meta_lic", 1205 "notice"), 1206 }, 1207 }, 1208 { 1209 condition: "firstparty", 1210 name: "apex_trimmed_share", 1211 roots: []string{"highest.apex.meta_lic"}, 1212 ctx: context{ 1213 conditions: compliance.ImpliesShared.AsList(), 1214 stripPrefix: []string{"testdata/firstparty/"}, 1215 }, 1216 expectedOut: []getMatcher{}, 1217 }, 1218 { 1219 condition: "firstparty", 1220 name: "apex_trimmed_private", 1221 roots: []string{"highest.apex.meta_lic"}, 1222 ctx: context{ 1223 conditions: compliance.ImpliesPrivate.AsList(), 1224 stripPrefix: []string{"testdata/firstparty/"}, 1225 }, 1226 expectedOut: []getMatcher{}, 1227 }, 1228 { 1229 condition: "firstparty", 1230 name: "apex_trimmed_share_private", 1231 roots: []string{"highest.apex.meta_lic"}, 1232 ctx: context{ 1233 conditions: compliance.ImpliesShared.Union(compliance.ImpliesPrivate).AsList(), 1234 stripPrefix: []string{"testdata/firstparty/"}, 1235 }, 1236 expectedOut: []getMatcher{}, 1237 }, 1238 { 1239 condition: "firstparty", 1240 name: "apex_trimmed_labelled", 1241 roots: []string{"highest.apex.meta_lic"}, 1242 ctx: context{stripPrefix: []string{"testdata/firstparty/"}, labelConditions: true}, 1243 expectedOut: []getMatcher{ 1244 matchTarget("bin/bin1.meta_lic", "notice"), 1245 matchTarget("lib/liba.so.meta_lic", "notice"), 1246 matchTarget("lib/libc.a.meta_lic", "notice"), 1247 matchTarget("bin/bin2.meta_lic", "notice"), 1248 matchTarget("highest.apex.meta_lic", "notice"), 1249 matchTarget("lib/libb.so.meta_lic", "notice"), 1250 matchResolution( 1251 "bin/bin1.meta_lic", 1252 "bin/bin1.meta_lic", 1253 "notice"), 1254 matchResolution( 1255 "bin/bin1.meta_lic", 1256 "lib/liba.so.meta_lic", 1257 "notice"), 1258 matchResolution( 1259 "bin/bin1.meta_lic", 1260 "lib/libc.a.meta_lic", 1261 "notice"), 1262 matchResolution( 1263 "bin/bin2.meta_lic", 1264 "bin/bin2.meta_lic", 1265 "notice"), 1266 matchResolution( 1267 "highest.apex.meta_lic", 1268 "bin/bin1.meta_lic", 1269 "notice"), 1270 matchResolution( 1271 "highest.apex.meta_lic", 1272 "bin/bin2.meta_lic", 1273 "notice"), 1274 matchResolution( 1275 "highest.apex.meta_lic", 1276 "highest.apex.meta_lic", 1277 "notice"), 1278 matchResolution( 1279 "highest.apex.meta_lic", 1280 "lib/liba.so.meta_lic", 1281 "notice"), 1282 matchResolution( 1283 "highest.apex.meta_lic", 1284 "lib/libb.so.meta_lic", 1285 "notice"), 1286 matchResolution( 1287 "highest.apex.meta_lic", 1288 "lib/libc.a.meta_lic", 1289 "notice"), 1290 matchResolution( 1291 "lib/liba.so.meta_lic", 1292 "lib/liba.so.meta_lic", 1293 "notice"), 1294 matchResolution( 1295 "lib/libb.so.meta_lic", 1296 "lib/libb.so.meta_lic", 1297 "notice"), 1298 }, 1299 }, 1300 { 1301 condition: "firstparty", 1302 name: "container", 1303 roots: []string{"container.zip.meta_lic"}, 1304 expectedOut: []getMatcher{ 1305 matchTarget("testdata/firstparty/bin/bin1.meta_lic"), 1306 matchTarget("testdata/firstparty/lib/liba.so.meta_lic"), 1307 matchTarget("testdata/firstparty/lib/libc.a.meta_lic"), 1308 matchTarget("testdata/firstparty/bin/bin2.meta_lic"), 1309 matchTarget("testdata/firstparty/container.zip.meta_lic"), 1310 matchTarget("testdata/firstparty/lib/libb.so.meta_lic"), 1311 matchResolution( 1312 "testdata/firstparty/bin/bin1.meta_lic", 1313 "testdata/firstparty/bin/bin1.meta_lic", 1314 "notice"), 1315 matchResolution( 1316 "testdata/firstparty/bin/bin1.meta_lic", 1317 "testdata/firstparty/lib/liba.so.meta_lic", 1318 "notice"), 1319 matchResolution( 1320 "testdata/firstparty/bin/bin1.meta_lic", 1321 "testdata/firstparty/lib/libc.a.meta_lic", 1322 "notice"), 1323 matchResolution( 1324 "testdata/firstparty/bin/bin2.meta_lic", 1325 "testdata/firstparty/bin/bin2.meta_lic", 1326 "notice"), 1327 matchResolution( 1328 "testdata/firstparty/container.zip.meta_lic", 1329 "testdata/firstparty/bin/bin1.meta_lic", 1330 "notice"), 1331 matchResolution( 1332 "testdata/firstparty/container.zip.meta_lic", 1333 "testdata/firstparty/bin/bin2.meta_lic", 1334 "notice"), 1335 matchResolution( 1336 "testdata/firstparty/container.zip.meta_lic", 1337 "testdata/firstparty/container.zip.meta_lic", 1338 "notice"), 1339 matchResolution( 1340 "testdata/firstparty/container.zip.meta_lic", 1341 "testdata/firstparty/lib/liba.so.meta_lic", 1342 "notice"), 1343 matchResolution( 1344 "testdata/firstparty/container.zip.meta_lic", 1345 "testdata/firstparty/lib/libb.so.meta_lic", 1346 "notice"), 1347 matchResolution( 1348 "testdata/firstparty/container.zip.meta_lic", 1349 "testdata/firstparty/lib/libc.a.meta_lic", 1350 "notice"), 1351 matchResolution( 1352 "testdata/firstparty/lib/liba.so.meta_lic", 1353 "testdata/firstparty/lib/liba.so.meta_lic", 1354 "notice"), 1355 matchResolution( 1356 "testdata/firstparty/lib/libb.so.meta_lic", 1357 "testdata/firstparty/lib/libb.so.meta_lic", 1358 "notice"), 1359 }, 1360 }, 1361 { 1362 condition: "firstparty", 1363 name: "application", 1364 roots: []string{"application.meta_lic"}, 1365 expectedOut: []getMatcher{ 1366 matchTarget("testdata/firstparty/application.meta_lic"), 1367 matchTarget("testdata/firstparty/lib/liba.so.meta_lic"), 1368 matchResolution( 1369 "testdata/firstparty/application.meta_lic", 1370 "testdata/firstparty/application.meta_lic", 1371 "notice"), 1372 matchResolution( 1373 "testdata/firstparty/application.meta_lic", 1374 "testdata/firstparty/lib/liba.so.meta_lic", 1375 "notice"), 1376 }, 1377 }, 1378 { 1379 condition: "firstparty", 1380 name: "binary", 1381 roots: []string{"bin/bin1.meta_lic"}, 1382 expectedOut: []getMatcher{ 1383 matchTarget("testdata/firstparty/bin/bin1.meta_lic"), 1384 matchTarget("testdata/firstparty/lib/liba.so.meta_lic"), 1385 matchTarget("testdata/firstparty/lib/libc.a.meta_lic"), 1386 matchResolution( 1387 "testdata/firstparty/bin/bin1.meta_lic", 1388 "testdata/firstparty/bin/bin1.meta_lic", 1389 "notice"), 1390 matchResolution( 1391 "testdata/firstparty/bin/bin1.meta_lic", 1392 "testdata/firstparty/lib/liba.so.meta_lic", 1393 "notice"), 1394 matchResolution( 1395 "testdata/firstparty/bin/bin1.meta_lic", 1396 "testdata/firstparty/lib/libc.a.meta_lic", 1397 "notice"), 1398 }, 1399 }, 1400 { 1401 condition: "firstparty", 1402 name: "library", 1403 roots: []string{"lib/libd.so.meta_lic"}, 1404 expectedOut: []getMatcher{ 1405 matchTarget("testdata/firstparty/lib/libd.so.meta_lic"), 1406 matchResolution( 1407 "testdata/firstparty/lib/libd.so.meta_lic", 1408 "testdata/firstparty/lib/libd.so.meta_lic", 1409 "notice"), 1410 }, 1411 }, 1412 { 1413 condition: "notice", 1414 name: "apex", 1415 roots: []string{"highest.apex.meta_lic"}, 1416 expectedOut: []getMatcher{ 1417 matchTarget("testdata/notice/bin/bin1.meta_lic"), 1418 matchTarget("testdata/notice/lib/liba.so.meta_lic"), 1419 matchTarget("testdata/notice/lib/libc.a.meta_lic"), 1420 matchTarget("testdata/notice/bin/bin2.meta_lic"), 1421 matchTarget("testdata/notice/highest.apex.meta_lic"), 1422 matchTarget("testdata/notice/lib/libb.so.meta_lic"), 1423 matchResolution( 1424 "testdata/notice/bin/bin1.meta_lic", 1425 "testdata/notice/bin/bin1.meta_lic", 1426 "notice"), 1427 matchResolution( 1428 "testdata/notice/bin/bin1.meta_lic", 1429 "testdata/notice/lib/liba.so.meta_lic", 1430 "notice"), 1431 matchResolution( 1432 "testdata/notice/bin/bin1.meta_lic", 1433 "testdata/notice/lib/libc.a.meta_lic", 1434 "notice"), 1435 matchResolution( 1436 "testdata/notice/bin/bin2.meta_lic", 1437 "testdata/notice/bin/bin2.meta_lic", 1438 "notice"), 1439 matchResolution( 1440 "testdata/notice/highest.apex.meta_lic", 1441 "testdata/notice/bin/bin1.meta_lic", 1442 "notice"), 1443 matchResolution( 1444 "testdata/notice/highest.apex.meta_lic", 1445 "testdata/notice/bin/bin2.meta_lic", 1446 "notice"), 1447 matchResolution( 1448 "testdata/notice/highest.apex.meta_lic", 1449 "testdata/notice/highest.apex.meta_lic", 1450 "notice"), 1451 matchResolution( 1452 "testdata/notice/highest.apex.meta_lic", 1453 "testdata/notice/lib/liba.so.meta_lic", 1454 "notice"), 1455 matchResolution( 1456 "testdata/notice/highest.apex.meta_lic", 1457 "testdata/notice/lib/libb.so.meta_lic", 1458 "notice"), 1459 matchResolution( 1460 "testdata/notice/highest.apex.meta_lic", 1461 "testdata/notice/lib/libc.a.meta_lic", 1462 "notice"), 1463 matchResolution( 1464 "testdata/notice/lib/liba.so.meta_lic", 1465 "testdata/notice/lib/liba.so.meta_lic", 1466 "notice"), 1467 matchResolution( 1468 "testdata/notice/lib/libb.so.meta_lic", 1469 "testdata/notice/lib/libb.so.meta_lic", 1470 "notice"), 1471 }, 1472 }, 1473 { 1474 condition: "notice", 1475 name: "apex_trimmed", 1476 roots: []string{"highest.apex.meta_lic"}, 1477 ctx: context{stripPrefix: []string{"testdata/notice/"}}, 1478 expectedOut: []getMatcher{ 1479 matchTarget("bin/bin1.meta_lic"), 1480 matchTarget("lib/liba.so.meta_lic"), 1481 matchTarget("lib/libc.a.meta_lic"), 1482 matchTarget("bin/bin2.meta_lic"), 1483 matchTarget("highest.apex.meta_lic"), 1484 matchTarget("lib/libb.so.meta_lic"), 1485 matchResolution( 1486 "bin/bin1.meta_lic", 1487 "bin/bin1.meta_lic", 1488 "notice"), 1489 matchResolution( 1490 "bin/bin1.meta_lic", 1491 "lib/liba.so.meta_lic", 1492 "notice"), 1493 matchResolution( 1494 "bin/bin1.meta_lic", 1495 "lib/libc.a.meta_lic", 1496 "notice"), 1497 matchResolution( 1498 "bin/bin2.meta_lic", 1499 "bin/bin2.meta_lic", 1500 "notice"), 1501 matchResolution( 1502 "highest.apex.meta_lic", 1503 "bin/bin1.meta_lic", 1504 "notice"), 1505 matchResolution( 1506 "highest.apex.meta_lic", 1507 "bin/bin2.meta_lic", 1508 "notice"), 1509 matchResolution( 1510 "highest.apex.meta_lic", 1511 "highest.apex.meta_lic", 1512 "notice"), 1513 matchResolution( 1514 "highest.apex.meta_lic", 1515 "lib/liba.so.meta_lic", 1516 "notice"), 1517 matchResolution( 1518 "highest.apex.meta_lic", 1519 "lib/libb.so.meta_lic", 1520 "notice"), 1521 matchResolution( 1522 "highest.apex.meta_lic", 1523 "lib/libc.a.meta_lic", 1524 "notice"), 1525 matchResolution( 1526 "lib/liba.so.meta_lic", 1527 "lib/liba.so.meta_lic", 1528 "notice"), 1529 matchResolution( 1530 "lib/libb.so.meta_lic", 1531 "lib/libb.so.meta_lic", 1532 "notice"), 1533 }, 1534 }, 1535 { 1536 condition: "notice", 1537 name: "apex_trimmed_notice", 1538 roots: []string{"highest.apex.meta_lic"}, 1539 ctx: context{ 1540 conditions: []compliance.LicenseCondition{compliance.NoticeCondition}, 1541 stripPrefix: []string{"testdata/notice/"}, 1542 }, 1543 expectedOut: []getMatcher{ 1544 matchTarget("bin/bin1.meta_lic"), 1545 matchTarget("lib/liba.so.meta_lic"), 1546 matchTarget("lib/libc.a.meta_lic"), 1547 matchTarget("bin/bin2.meta_lic"), 1548 matchTarget("highest.apex.meta_lic"), 1549 matchTarget("lib/libb.so.meta_lic"), 1550 matchResolution( 1551 "bin/bin1.meta_lic", 1552 "bin/bin1.meta_lic", 1553 "notice"), 1554 matchResolution( 1555 "bin/bin1.meta_lic", 1556 "lib/liba.so.meta_lic", 1557 "notice"), 1558 matchResolution( 1559 "bin/bin1.meta_lic", 1560 "lib/libc.a.meta_lic", 1561 "notice"), 1562 matchResolution( 1563 "bin/bin2.meta_lic", 1564 "bin/bin2.meta_lic", 1565 "notice"), 1566 matchResolution( 1567 "highest.apex.meta_lic", 1568 "bin/bin1.meta_lic", 1569 "notice"), 1570 matchResolution( 1571 "highest.apex.meta_lic", 1572 "bin/bin2.meta_lic", 1573 "notice"), 1574 matchResolution( 1575 "highest.apex.meta_lic", 1576 "highest.apex.meta_lic", 1577 "notice"), 1578 matchResolution( 1579 "highest.apex.meta_lic", 1580 "lib/liba.so.meta_lic", 1581 "notice"), 1582 matchResolution( 1583 "highest.apex.meta_lic", 1584 "lib/libb.so.meta_lic", 1585 "notice"), 1586 matchResolution( 1587 "highest.apex.meta_lic", 1588 "lib/libc.a.meta_lic", 1589 "notice"), 1590 matchResolution( 1591 "lib/liba.so.meta_lic", 1592 "lib/liba.so.meta_lic", 1593 "notice"), 1594 matchResolution( 1595 "lib/libb.so.meta_lic", 1596 "lib/libb.so.meta_lic", 1597 "notice"), 1598 }, 1599 }, 1600 { 1601 condition: "notice", 1602 name: "apex_trimmed_share", 1603 roots: []string{"highest.apex.meta_lic"}, 1604 ctx: context{ 1605 conditions: compliance.ImpliesShared.AsList(), 1606 stripPrefix: []string{"testdata/notice/"}, 1607 }, 1608 expectedOut: []getMatcher{}, 1609 }, 1610 { 1611 condition: "notice", 1612 name: "apex_trimmed_private", 1613 roots: []string{"highest.apex.meta_lic"}, 1614 ctx: context{ 1615 conditions: compliance.ImpliesPrivate.AsList(), 1616 stripPrefix: []string{"testdata/notice/"}, 1617 }, 1618 expectedOut: []getMatcher{}, 1619 }, 1620 { 1621 condition: "notice", 1622 name: "apex_trimmed_share_private", 1623 roots: []string{"highest.apex.meta_lic"}, 1624 ctx: context{ 1625 conditions: compliance.ImpliesShared.Union(compliance.ImpliesPrivate).AsList(), 1626 stripPrefix: []string{"testdata/notice/"}, 1627 }, 1628 expectedOut: []getMatcher{}, 1629 }, 1630 { 1631 condition: "notice", 1632 name: "apex_trimmed_labelled", 1633 roots: []string{"highest.apex.meta_lic"}, 1634 ctx: context{stripPrefix: []string{"testdata/notice/"}, labelConditions: true}, 1635 expectedOut: []getMatcher{ 1636 matchTarget("bin/bin1.meta_lic", "notice"), 1637 matchTarget("lib/liba.so.meta_lic", "notice"), 1638 matchTarget("lib/libc.a.meta_lic", "notice"), 1639 matchTarget("bin/bin2.meta_lic", "notice"), 1640 matchTarget("highest.apex.meta_lic", "notice"), 1641 matchTarget("lib/libb.so.meta_lic", "notice"), 1642 matchResolution( 1643 "bin/bin1.meta_lic", 1644 "bin/bin1.meta_lic", 1645 "notice"), 1646 matchResolution( 1647 "bin/bin1.meta_lic", 1648 "lib/liba.so.meta_lic", 1649 "notice"), 1650 matchResolution( 1651 "bin/bin1.meta_lic", 1652 "lib/libc.a.meta_lic", 1653 "notice"), 1654 matchResolution( 1655 "bin/bin2.meta_lic", 1656 "bin/bin2.meta_lic", 1657 "notice"), 1658 matchResolution( 1659 "highest.apex.meta_lic", 1660 "bin/bin1.meta_lic", 1661 "notice"), 1662 matchResolution( 1663 "highest.apex.meta_lic", 1664 "bin/bin2.meta_lic", 1665 "notice"), 1666 matchResolution( 1667 "highest.apex.meta_lic", 1668 "highest.apex.meta_lic", 1669 "notice"), 1670 matchResolution( 1671 "highest.apex.meta_lic", 1672 "lib/liba.so.meta_lic", 1673 "notice"), 1674 matchResolution( 1675 "highest.apex.meta_lic", 1676 "lib/libb.so.meta_lic", 1677 "notice"), 1678 matchResolution( 1679 "highest.apex.meta_lic", 1680 "lib/libc.a.meta_lic", 1681 "notice"), 1682 matchResolution( 1683 "lib/liba.so.meta_lic", 1684 "lib/liba.so.meta_lic", 1685 "notice"), 1686 matchResolution( 1687 "lib/libb.so.meta_lic", 1688 "lib/libb.so.meta_lic", 1689 "notice"), 1690 }, 1691 }, 1692 { 1693 condition: "notice", 1694 name: "container", 1695 roots: []string{"container.zip.meta_lic"}, 1696 expectedOut: []getMatcher{ 1697 matchTarget("testdata/notice/bin/bin1.meta_lic"), 1698 matchTarget("testdata/notice/lib/liba.so.meta_lic"), 1699 matchTarget("testdata/notice/lib/libc.a.meta_lic"), 1700 matchTarget("testdata/notice/bin/bin2.meta_lic"), 1701 matchTarget("testdata/notice/container.zip.meta_lic"), 1702 matchTarget("testdata/notice/lib/libb.so.meta_lic"), 1703 matchResolution( 1704 "testdata/notice/bin/bin1.meta_lic", 1705 "testdata/notice/bin/bin1.meta_lic", 1706 "notice"), 1707 matchResolution( 1708 "testdata/notice/bin/bin1.meta_lic", 1709 "testdata/notice/lib/liba.so.meta_lic", 1710 "notice"), 1711 matchResolution( 1712 "testdata/notice/bin/bin1.meta_lic", 1713 "testdata/notice/lib/libc.a.meta_lic", 1714 "notice"), 1715 matchResolution( 1716 "testdata/notice/bin/bin2.meta_lic", 1717 "testdata/notice/bin/bin2.meta_lic", 1718 "notice"), 1719 matchResolution( 1720 "testdata/notice/container.zip.meta_lic", 1721 "testdata/notice/bin/bin1.meta_lic", 1722 "notice"), 1723 matchResolution( 1724 "testdata/notice/container.zip.meta_lic", 1725 "testdata/notice/bin/bin2.meta_lic", 1726 "notice"), 1727 matchResolution( 1728 "testdata/notice/container.zip.meta_lic", 1729 "testdata/notice/container.zip.meta_lic", 1730 "notice"), 1731 matchResolution( 1732 "testdata/notice/container.zip.meta_lic", 1733 "testdata/notice/lib/liba.so.meta_lic", 1734 "notice"), 1735 matchResolution( 1736 "testdata/notice/container.zip.meta_lic", 1737 "testdata/notice/lib/libb.so.meta_lic", 1738 "notice"), 1739 matchResolution( 1740 "testdata/notice/container.zip.meta_lic", 1741 "testdata/notice/lib/libc.a.meta_lic", 1742 "notice"), 1743 matchResolution( 1744 "testdata/notice/lib/liba.so.meta_lic", 1745 "testdata/notice/lib/liba.so.meta_lic", 1746 "notice"), 1747 matchResolution( 1748 "testdata/notice/lib/libb.so.meta_lic", 1749 "testdata/notice/lib/libb.so.meta_lic", 1750 "notice"), 1751 }, 1752 }, 1753 { 1754 condition: "notice", 1755 name: "application", 1756 roots: []string{"application.meta_lic"}, 1757 expectedOut: []getMatcher{ 1758 matchTarget("testdata/notice/application.meta_lic"), 1759 matchTarget("testdata/notice/lib/liba.so.meta_lic"), 1760 matchResolution( 1761 "testdata/notice/application.meta_lic", 1762 "testdata/notice/application.meta_lic", 1763 "notice"), 1764 matchResolution( 1765 "testdata/notice/application.meta_lic", 1766 "testdata/notice/lib/liba.so.meta_lic", 1767 "notice"), 1768 }, 1769 }, 1770 { 1771 condition: "notice", 1772 name: "binary", 1773 roots: []string{"bin/bin1.meta_lic"}, 1774 expectedOut: []getMatcher{ 1775 matchTarget("testdata/notice/bin/bin1.meta_lic"), 1776 matchTarget("testdata/notice/lib/liba.so.meta_lic"), 1777 matchTarget("testdata/notice/lib/libc.a.meta_lic"), 1778 matchResolution( 1779 "testdata/notice/bin/bin1.meta_lic", 1780 "testdata/notice/bin/bin1.meta_lic", 1781 "notice"), 1782 matchResolution( 1783 "testdata/notice/bin/bin1.meta_lic", 1784 "testdata/notice/lib/liba.so.meta_lic", 1785 "notice"), 1786 matchResolution( 1787 "testdata/notice/bin/bin1.meta_lic", 1788 "testdata/notice/lib/libc.a.meta_lic", 1789 "notice"), 1790 }, 1791 }, 1792 { 1793 condition: "notice", 1794 name: "library", 1795 roots: []string{"lib/libd.so.meta_lic"}, 1796 expectedOut: []getMatcher{ 1797 matchTarget("testdata/notice/lib/libd.so.meta_lic"), 1798 matchResolution( 1799 "testdata/notice/lib/libd.so.meta_lic", 1800 "testdata/notice/lib/libd.so.meta_lic", 1801 "notice"), 1802 }, 1803 }, 1804 { 1805 condition: "reciprocal", 1806 name: "apex", 1807 roots: []string{"highest.apex.meta_lic"}, 1808 expectedOut: []getMatcher{ 1809 matchTarget("testdata/reciprocal/bin/bin1.meta_lic"), 1810 matchTarget("testdata/reciprocal/lib/liba.so.meta_lic"), 1811 matchTarget("testdata/reciprocal/lib/libc.a.meta_lic"), 1812 matchTarget("testdata/reciprocal/bin/bin2.meta_lic"), 1813 matchTarget("testdata/reciprocal/highest.apex.meta_lic"), 1814 matchTarget("testdata/reciprocal/lib/libb.so.meta_lic"), 1815 matchResolution( 1816 "testdata/reciprocal/bin/bin1.meta_lic", 1817 "testdata/reciprocal/bin/bin1.meta_lic", 1818 "notice"), 1819 matchResolution( 1820 "testdata/reciprocal/bin/bin1.meta_lic", 1821 "testdata/reciprocal/lib/liba.so.meta_lic", 1822 "reciprocal"), 1823 matchResolution( 1824 "testdata/reciprocal/bin/bin1.meta_lic", 1825 "testdata/reciprocal/lib/libc.a.meta_lic", 1826 "reciprocal"), 1827 matchResolution( 1828 "testdata/reciprocal/bin/bin2.meta_lic", 1829 "testdata/reciprocal/bin/bin2.meta_lic", 1830 "notice"), 1831 matchResolution( 1832 "testdata/reciprocal/highest.apex.meta_lic", 1833 "testdata/reciprocal/bin/bin1.meta_lic", 1834 "notice"), 1835 matchResolution( 1836 "testdata/reciprocal/highest.apex.meta_lic", 1837 "testdata/reciprocal/bin/bin2.meta_lic", 1838 "notice"), 1839 matchResolution( 1840 "testdata/reciprocal/highest.apex.meta_lic", 1841 "testdata/reciprocal/highest.apex.meta_lic", 1842 "notice"), 1843 matchResolution( 1844 "testdata/reciprocal/highest.apex.meta_lic", 1845 "testdata/reciprocal/lib/liba.so.meta_lic", 1846 "reciprocal"), 1847 matchResolution( 1848 "testdata/reciprocal/highest.apex.meta_lic", 1849 "testdata/reciprocal/lib/libb.so.meta_lic", 1850 "notice"), 1851 matchResolution( 1852 "testdata/reciprocal/highest.apex.meta_lic", 1853 "testdata/reciprocal/lib/libc.a.meta_lic", 1854 "reciprocal"), 1855 matchResolution( 1856 "testdata/reciprocal/lib/liba.so.meta_lic", 1857 "testdata/reciprocal/lib/liba.so.meta_lic", 1858 "reciprocal"), 1859 matchResolution( 1860 "testdata/reciprocal/lib/libb.so.meta_lic", 1861 "testdata/reciprocal/lib/libb.so.meta_lic", 1862 "notice"), 1863 }, 1864 }, 1865 { 1866 condition: "reciprocal", 1867 name: "apex_trimmed", 1868 roots: []string{"highest.apex.meta_lic"}, 1869 ctx: context{stripPrefix: []string{"testdata/reciprocal/"}}, 1870 expectedOut: []getMatcher{ 1871 matchTarget("bin/bin1.meta_lic"), 1872 matchTarget("lib/liba.so.meta_lic"), 1873 matchTarget("lib/libc.a.meta_lic"), 1874 matchTarget("bin/bin2.meta_lic"), 1875 matchTarget("highest.apex.meta_lic"), 1876 matchTarget("lib/libb.so.meta_lic"), 1877 matchResolution( 1878 "bin/bin1.meta_lic", 1879 "bin/bin1.meta_lic", 1880 "notice"), 1881 matchResolution( 1882 "bin/bin1.meta_lic", 1883 "lib/liba.so.meta_lic", 1884 "reciprocal"), 1885 matchResolution( 1886 "bin/bin1.meta_lic", 1887 "lib/libc.a.meta_lic", 1888 "reciprocal"), 1889 matchResolution( 1890 "bin/bin2.meta_lic", 1891 "bin/bin2.meta_lic", 1892 "notice"), 1893 matchResolution( 1894 "highest.apex.meta_lic", 1895 "bin/bin1.meta_lic", 1896 "notice"), 1897 matchResolution( 1898 "highest.apex.meta_lic", 1899 "bin/bin2.meta_lic", 1900 "notice"), 1901 matchResolution( 1902 "highest.apex.meta_lic", 1903 "highest.apex.meta_lic", 1904 "notice"), 1905 matchResolution( 1906 "highest.apex.meta_lic", 1907 "lib/liba.so.meta_lic", 1908 "reciprocal"), 1909 matchResolution( 1910 "highest.apex.meta_lic", 1911 "lib/libb.so.meta_lic", 1912 "notice"), 1913 matchResolution( 1914 "highest.apex.meta_lic", 1915 "lib/libc.a.meta_lic", 1916 "reciprocal"), 1917 matchResolution( 1918 "lib/liba.so.meta_lic", 1919 "lib/liba.so.meta_lic", 1920 "reciprocal"), 1921 matchResolution( 1922 "lib/libb.so.meta_lic", 1923 "lib/libb.so.meta_lic", 1924 "notice"), 1925 }, 1926 }, 1927 { 1928 condition: "reciprocal", 1929 name: "apex_trimmed_notice", 1930 roots: []string{"highest.apex.meta_lic"}, 1931 ctx: context{ 1932 conditions: []compliance.LicenseCondition{compliance.NoticeCondition}, 1933 stripPrefix: []string{"testdata/reciprocal/"}, 1934 }, 1935 expectedOut: []getMatcher{ 1936 matchTarget("bin/bin1.meta_lic"), 1937 matchTarget("bin/bin2.meta_lic"), 1938 matchTarget("highest.apex.meta_lic"), 1939 matchTarget("lib/libb.so.meta_lic"), 1940 matchResolution( 1941 "bin/bin1.meta_lic", 1942 "bin/bin1.meta_lic", 1943 "notice"), 1944 matchResolution( 1945 "bin/bin2.meta_lic", 1946 "bin/bin2.meta_lic", 1947 "notice"), 1948 matchResolution( 1949 "highest.apex.meta_lic", 1950 "bin/bin1.meta_lic", 1951 "notice"), 1952 matchResolution( 1953 "highest.apex.meta_lic", 1954 "bin/bin2.meta_lic", 1955 "notice"), 1956 matchResolution( 1957 "highest.apex.meta_lic", 1958 "highest.apex.meta_lic", 1959 "notice"), 1960 matchResolution( 1961 "highest.apex.meta_lic", 1962 "lib/libb.so.meta_lic", 1963 "notice"), 1964 matchResolution( 1965 "lib/libb.so.meta_lic", 1966 "lib/libb.so.meta_lic", 1967 "notice"), 1968 }, 1969 }, 1970 { 1971 condition: "reciprocal", 1972 name: "apex_trimmed_share", 1973 roots: []string{"highest.apex.meta_lic"}, 1974 ctx: context{ 1975 conditions: compliance.ImpliesShared.AsList(), 1976 stripPrefix: []string{"testdata/reciprocal/"}, 1977 }, 1978 expectedOut: []getMatcher{ 1979 matchTarget("bin/bin1.meta_lic"), 1980 matchTarget("lib/liba.so.meta_lic"), 1981 matchTarget("lib/libc.a.meta_lic"), 1982 matchTarget("highest.apex.meta_lic"), 1983 matchResolution( 1984 "bin/bin1.meta_lic", 1985 "lib/liba.so.meta_lic", 1986 "reciprocal"), 1987 matchResolution( 1988 "bin/bin1.meta_lic", 1989 "lib/libc.a.meta_lic", 1990 "reciprocal"), 1991 matchResolution( 1992 "highest.apex.meta_lic", 1993 "lib/liba.so.meta_lic", 1994 "reciprocal"), 1995 matchResolution( 1996 "highest.apex.meta_lic", 1997 "lib/libc.a.meta_lic", 1998 "reciprocal"), 1999 matchResolution( 2000 "lib/liba.so.meta_lic", 2001 "lib/liba.so.meta_lic", 2002 "reciprocal"), 2003 }, 2004 }, 2005 { 2006 condition: "reciprocal", 2007 name: "apex_trimmed_private", 2008 roots: []string{"highest.apex.meta_lic"}, 2009 ctx: context{ 2010 conditions: compliance.ImpliesPrivate.AsList(), 2011 stripPrefix: []string{"testdata/reciprocal/"}, 2012 }, 2013 expectedOut: []getMatcher{}, 2014 }, 2015 { 2016 condition: "reciprocal", 2017 name: "apex_trimmed_share_private", 2018 roots: []string{"highest.apex.meta_lic"}, 2019 ctx: context{ 2020 conditions: compliance.ImpliesShared.Union(compliance.ImpliesPrivate).AsList(), 2021 stripPrefix: []string{"testdata/reciprocal/"}, 2022 }, 2023 expectedOut: []getMatcher{ 2024 matchTarget("bin/bin1.meta_lic"), 2025 matchTarget("lib/liba.so.meta_lic"), 2026 matchTarget("lib/libc.a.meta_lic"), 2027 matchTarget("highest.apex.meta_lic"), 2028 matchResolution( 2029 "bin/bin1.meta_lic", 2030 "lib/liba.so.meta_lic", 2031 "reciprocal"), 2032 matchResolution( 2033 "bin/bin1.meta_lic", 2034 "lib/libc.a.meta_lic", 2035 "reciprocal"), 2036 matchResolution( 2037 "highest.apex.meta_lic", 2038 "lib/liba.so.meta_lic", 2039 "reciprocal"), 2040 matchResolution( 2041 "highest.apex.meta_lic", 2042 "lib/libc.a.meta_lic", 2043 "reciprocal"), 2044 matchResolution( 2045 "lib/liba.so.meta_lic", 2046 "lib/liba.so.meta_lic", 2047 "reciprocal"), 2048 }, 2049 }, 2050 { 2051 condition: "reciprocal", 2052 name: "apex_trimmed_labelled", 2053 roots: []string{"highest.apex.meta_lic"}, 2054 ctx: context{stripPrefix: []string{"testdata/reciprocal/"}, labelConditions: true}, 2055 expectedOut: []getMatcher{ 2056 matchTarget("bin/bin1.meta_lic", "notice"), 2057 matchTarget("lib/liba.so.meta_lic", "reciprocal"), 2058 matchTarget("lib/libc.a.meta_lic", "reciprocal"), 2059 matchTarget("bin/bin2.meta_lic", "notice"), 2060 matchTarget("highest.apex.meta_lic", "notice"), 2061 matchTarget("lib/libb.so.meta_lic", "notice"), 2062 matchResolution( 2063 "bin/bin1.meta_lic", 2064 "bin/bin1.meta_lic", 2065 "notice"), 2066 matchResolution( 2067 "bin/bin1.meta_lic", 2068 "lib/liba.so.meta_lic", 2069 "reciprocal"), 2070 matchResolution( 2071 "bin/bin1.meta_lic", 2072 "lib/libc.a.meta_lic", 2073 "reciprocal"), 2074 matchResolution( 2075 "bin/bin2.meta_lic", 2076 "bin/bin2.meta_lic", 2077 "notice"), 2078 matchResolution( 2079 "highest.apex.meta_lic", 2080 "bin/bin1.meta_lic", 2081 "notice"), 2082 matchResolution( 2083 "highest.apex.meta_lic", 2084 "bin/bin2.meta_lic", 2085 "notice"), 2086 matchResolution( 2087 "highest.apex.meta_lic", 2088 "highest.apex.meta_lic", 2089 "notice"), 2090 matchResolution( 2091 "highest.apex.meta_lic", 2092 "lib/liba.so.meta_lic", 2093 "reciprocal"), 2094 matchResolution( 2095 "highest.apex.meta_lic", 2096 "lib/libb.so.meta_lic", 2097 "notice"), 2098 matchResolution( 2099 "highest.apex.meta_lic", 2100 "lib/libc.a.meta_lic", 2101 "reciprocal"), 2102 matchResolution( 2103 "lib/liba.so.meta_lic", 2104 "lib/liba.so.meta_lic", 2105 "reciprocal"), 2106 matchResolution( 2107 "lib/libb.so.meta_lic", 2108 "lib/libb.so.meta_lic", 2109 "notice"), 2110 }, 2111 }, 2112 { 2113 condition: "reciprocal", 2114 name: "container", 2115 roots: []string{"container.zip.meta_lic"}, 2116 expectedOut: []getMatcher{ 2117 matchTarget("testdata/reciprocal/bin/bin1.meta_lic"), 2118 matchTarget("testdata/reciprocal/lib/liba.so.meta_lic"), 2119 matchTarget("testdata/reciprocal/lib/libc.a.meta_lic"), 2120 matchTarget("testdata/reciprocal/bin/bin2.meta_lic"), 2121 matchTarget("testdata/reciprocal/container.zip.meta_lic"), 2122 matchTarget("testdata/reciprocal/lib/libb.so.meta_lic"), 2123 matchResolution( 2124 "testdata/reciprocal/bin/bin1.meta_lic", 2125 "testdata/reciprocal/bin/bin1.meta_lic", 2126 "notice"), 2127 matchResolution( 2128 "testdata/reciprocal/bin/bin1.meta_lic", 2129 "testdata/reciprocal/lib/liba.so.meta_lic", 2130 "reciprocal"), 2131 matchResolution( 2132 "testdata/reciprocal/bin/bin1.meta_lic", 2133 "testdata/reciprocal/lib/libc.a.meta_lic", 2134 "reciprocal"), 2135 matchResolution( 2136 "testdata/reciprocal/bin/bin2.meta_lic", 2137 "testdata/reciprocal/bin/bin2.meta_lic", 2138 "notice"), 2139 matchResolution( 2140 "testdata/reciprocal/container.zip.meta_lic", 2141 "testdata/reciprocal/bin/bin1.meta_lic", 2142 "notice"), 2143 matchResolution( 2144 "testdata/reciprocal/container.zip.meta_lic", 2145 "testdata/reciprocal/bin/bin2.meta_lic", 2146 "notice"), 2147 matchResolution( 2148 "testdata/reciprocal/container.zip.meta_lic", 2149 "testdata/reciprocal/container.zip.meta_lic", 2150 "notice"), 2151 matchResolution( 2152 "testdata/reciprocal/container.zip.meta_lic", 2153 "testdata/reciprocal/lib/liba.so.meta_lic", 2154 "reciprocal"), 2155 matchResolution( 2156 "testdata/reciprocal/container.zip.meta_lic", 2157 "testdata/reciprocal/lib/libb.so.meta_lic", 2158 "notice"), 2159 matchResolution( 2160 "testdata/reciprocal/container.zip.meta_lic", 2161 "testdata/reciprocal/lib/libc.a.meta_lic", 2162 "reciprocal"), 2163 matchResolution( 2164 "testdata/reciprocal/lib/liba.so.meta_lic", 2165 "testdata/reciprocal/lib/liba.so.meta_lic", 2166 "reciprocal"), 2167 matchResolution( 2168 "testdata/reciprocal/lib/libb.so.meta_lic", 2169 "testdata/reciprocal/lib/libb.so.meta_lic", 2170 "notice"), 2171 }, 2172 }, 2173 { 2174 condition: "reciprocal", 2175 name: "application", 2176 roots: []string{"application.meta_lic"}, 2177 expectedOut: []getMatcher{ 2178 matchTarget("testdata/reciprocal/application.meta_lic"), 2179 matchTarget("testdata/reciprocal/lib/liba.so.meta_lic"), 2180 matchResolution( 2181 "testdata/reciprocal/application.meta_lic", 2182 "testdata/reciprocal/application.meta_lic", 2183 "notice"), 2184 matchResolution( 2185 "testdata/reciprocal/application.meta_lic", 2186 "testdata/reciprocal/lib/liba.so.meta_lic", 2187 "reciprocal"), 2188 }, 2189 }, 2190 { 2191 condition: "reciprocal", 2192 name: "binary", 2193 roots: []string{"bin/bin1.meta_lic"}, 2194 expectedOut: []getMatcher{ 2195 matchTarget("testdata/reciprocal/bin/bin1.meta_lic"), 2196 matchTarget("testdata/reciprocal/lib/liba.so.meta_lic"), 2197 matchTarget("testdata/reciprocal/lib/libc.a.meta_lic"), 2198 matchResolution( 2199 "testdata/reciprocal/bin/bin1.meta_lic", 2200 "testdata/reciprocal/bin/bin1.meta_lic", 2201 "notice"), 2202 matchResolution( 2203 "testdata/reciprocal/bin/bin1.meta_lic", 2204 "testdata/reciprocal/lib/liba.so.meta_lic", 2205 "reciprocal"), 2206 matchResolution( 2207 "testdata/reciprocal/bin/bin1.meta_lic", 2208 "testdata/reciprocal/lib/libc.a.meta_lic", 2209 "reciprocal"), 2210 }, 2211 }, 2212 { 2213 condition: "reciprocal", 2214 name: "library", 2215 roots: []string{"lib/libd.so.meta_lic"}, 2216 expectedOut: []getMatcher{ 2217 matchTarget("testdata/reciprocal/lib/libd.so.meta_lic"), 2218 matchResolution( 2219 "testdata/reciprocal/lib/libd.so.meta_lic", 2220 "testdata/reciprocal/lib/libd.so.meta_lic", 2221 "notice"), 2222 }, 2223 }, 2224 { 2225 condition: "restricted", 2226 name: "apex", 2227 roots: []string{"highest.apex.meta_lic"}, 2228 expectedOut: []getMatcher{ 2229 matchTarget("testdata/restricted/bin/bin1.meta_lic"), 2230 matchTarget("testdata/restricted/lib/liba.so.meta_lic"), 2231 matchTarget("testdata/restricted/lib/libc.a.meta_lic"), 2232 matchTarget("testdata/restricted/bin/bin2.meta_lic"), 2233 matchTarget("testdata/restricted/lib/libb.so.meta_lic"), 2234 matchTarget("testdata/restricted/highest.apex.meta_lic"), 2235 matchResolution( 2236 "testdata/restricted/bin/bin1.meta_lic", 2237 "testdata/restricted/bin/bin1.meta_lic", 2238 "restricted_if_statically_linked", 2239 "notice"), 2240 matchResolution( 2241 "testdata/restricted/bin/bin1.meta_lic", 2242 "testdata/restricted/lib/liba.so.meta_lic", 2243 "restricted_if_statically_linked"), 2244 matchResolution( 2245 "testdata/restricted/bin/bin1.meta_lic", 2246 "testdata/restricted/lib/libc.a.meta_lic", 2247 "reciprocal", 2248 "restricted_if_statically_linked"), 2249 matchResolution( 2250 "testdata/restricted/bin/bin2.meta_lic", 2251 "testdata/restricted/bin/bin2.meta_lic", 2252 "restricted", 2253 "notice"), 2254 matchResolution( 2255 "testdata/restricted/bin/bin2.meta_lic", 2256 "testdata/restricted/lib/libb.so.meta_lic", 2257 "restricted"), 2258 matchResolution( 2259 "testdata/restricted/highest.apex.meta_lic", 2260 "testdata/restricted/bin/bin1.meta_lic", 2261 "restricted_if_statically_linked", 2262 "notice"), 2263 matchResolution( 2264 "testdata/restricted/highest.apex.meta_lic", 2265 "testdata/restricted/bin/bin2.meta_lic", 2266 "restricted", 2267 "notice"), 2268 matchResolution( 2269 "testdata/restricted/highest.apex.meta_lic", 2270 "testdata/restricted/highest.apex.meta_lic", 2271 "restricted", 2272 "restricted_if_statically_linked", 2273 "notice"), 2274 matchResolution( 2275 "testdata/restricted/highest.apex.meta_lic", 2276 "testdata/restricted/lib/liba.so.meta_lic", 2277 "restricted_if_statically_linked"), 2278 matchResolution( 2279 "testdata/restricted/highest.apex.meta_lic", 2280 "testdata/restricted/lib/libb.so.meta_lic", 2281 "restricted"), 2282 matchResolution( 2283 "testdata/restricted/highest.apex.meta_lic", 2284 "testdata/restricted/lib/libc.a.meta_lic", 2285 "reciprocal", 2286 "restricted_if_statically_linked"), 2287 matchResolution( 2288 "testdata/restricted/lib/liba.so.meta_lic", 2289 "testdata/restricted/lib/liba.so.meta_lic", 2290 "restricted_if_statically_linked"), 2291 matchResolution( 2292 "testdata/restricted/lib/libb.so.meta_lic", 2293 "testdata/restricted/lib/libb.so.meta_lic", 2294 "restricted"), 2295 }, 2296 }, 2297 { 2298 condition: "restricted", 2299 name: "apex_trimmed", 2300 roots: []string{"highest.apex.meta_lic"}, 2301 ctx: context{stripPrefix: []string{"testdata/restricted/"}}, 2302 expectedOut: []getMatcher{ 2303 matchTarget("bin/bin1.meta_lic"), 2304 matchTarget("lib/liba.so.meta_lic"), 2305 matchTarget("lib/libc.a.meta_lic"), 2306 matchTarget("bin/bin2.meta_lic"), 2307 matchTarget("lib/libb.so.meta_lic"), 2308 matchTarget("highest.apex.meta_lic"), 2309 matchResolution( 2310 "bin/bin1.meta_lic", 2311 "bin/bin1.meta_lic", 2312 "restricted_if_statically_linked", 2313 "notice"), 2314 matchResolution( 2315 "bin/bin1.meta_lic", 2316 "lib/liba.so.meta_lic", 2317 "restricted_if_statically_linked"), 2318 matchResolution( 2319 "bin/bin1.meta_lic", 2320 "lib/libc.a.meta_lic", 2321 "reciprocal", 2322 "restricted_if_statically_linked"), 2323 matchResolution( 2324 "bin/bin2.meta_lic", 2325 "bin/bin2.meta_lic", 2326 "restricted", 2327 "notice"), 2328 matchResolution( 2329 "bin/bin2.meta_lic", 2330 "lib/libb.so.meta_lic", 2331 "restricted"), 2332 matchResolution( 2333 "highest.apex.meta_lic", 2334 "bin/bin1.meta_lic", 2335 "restricted_if_statically_linked", 2336 "notice"), 2337 matchResolution( 2338 "highest.apex.meta_lic", 2339 "bin/bin2.meta_lic", 2340 "restricted", 2341 "notice"), 2342 matchResolution( 2343 "highest.apex.meta_lic", 2344 "highest.apex.meta_lic", 2345 "restricted", 2346 "restricted_if_statically_linked", 2347 "notice"), 2348 matchResolution( 2349 "highest.apex.meta_lic", 2350 "lib/liba.so.meta_lic", 2351 "restricted_if_statically_linked"), 2352 matchResolution( 2353 "highest.apex.meta_lic", 2354 "lib/libb.so.meta_lic", 2355 "restricted"), 2356 matchResolution( 2357 "highest.apex.meta_lic", 2358 "lib/libc.a.meta_lic", 2359 "reciprocal", 2360 "restricted_if_statically_linked"), 2361 matchResolution( 2362 "lib/liba.so.meta_lic", 2363 "lib/liba.so.meta_lic", 2364 "restricted_if_statically_linked"), 2365 matchResolution( 2366 "lib/libb.so.meta_lic", 2367 "lib/libb.so.meta_lic", 2368 "restricted"), 2369 }, 2370 }, 2371 { 2372 condition: "restricted", 2373 name: "apex_trimmed_notice", 2374 roots: []string{"highest.apex.meta_lic"}, 2375 ctx: context{ 2376 conditions: []compliance.LicenseCondition{compliance.NoticeCondition}, 2377 stripPrefix: []string{"testdata/restricted/"}, 2378 }, 2379 expectedOut: []getMatcher{ 2380 matchTarget("bin/bin1.meta_lic"), 2381 matchTarget("bin/bin2.meta_lic"), 2382 matchTarget("highest.apex.meta_lic"), 2383 matchResolution( 2384 "bin/bin1.meta_lic", 2385 "bin/bin1.meta_lic", 2386 "notice"), 2387 matchResolution( 2388 "bin/bin2.meta_lic", 2389 "bin/bin2.meta_lic", 2390 "notice"), 2391 matchResolution( 2392 "highest.apex.meta_lic", 2393 "bin/bin1.meta_lic", 2394 "notice"), 2395 matchResolution( 2396 "highest.apex.meta_lic", 2397 "bin/bin2.meta_lic", 2398 "notice"), 2399 matchResolution( 2400 "highest.apex.meta_lic", 2401 "highest.apex.meta_lic", 2402 "notice"), 2403 }, 2404 }, 2405 { 2406 condition: "restricted", 2407 name: "apex_trimmed_share", 2408 roots: []string{"highest.apex.meta_lic"}, 2409 ctx: context{ 2410 conditions: compliance.ImpliesShared.AsList(), 2411 stripPrefix: []string{"testdata/restricted/"}, 2412 }, 2413 expectedOut: []getMatcher{ 2414 matchTarget("bin/bin1.meta_lic"), 2415 matchTarget("lib/liba.so.meta_lic"), 2416 matchTarget("lib/libc.a.meta_lic"), 2417 matchTarget("bin/bin2.meta_lic"), 2418 matchTarget("lib/libb.so.meta_lic"), 2419 matchTarget("highest.apex.meta_lic"), 2420 matchResolution( 2421 "bin/bin1.meta_lic", 2422 "bin/bin1.meta_lic", 2423 "restricted_if_statically_linked"), 2424 matchResolution( 2425 "bin/bin1.meta_lic", 2426 "lib/liba.so.meta_lic", 2427 "restricted_if_statically_linked"), 2428 matchResolution( 2429 "bin/bin1.meta_lic", 2430 "lib/libc.a.meta_lic", 2431 "reciprocal", 2432 "restricted_if_statically_linked"), 2433 matchResolution( 2434 "bin/bin2.meta_lic", 2435 "bin/bin2.meta_lic", 2436 "restricted"), 2437 matchResolution( 2438 "bin/bin2.meta_lic", 2439 "lib/libb.so.meta_lic", 2440 "restricted"), 2441 matchResolution( 2442 "highest.apex.meta_lic", 2443 "bin/bin1.meta_lic", 2444 "restricted_if_statically_linked"), 2445 matchResolution( 2446 "highest.apex.meta_lic", 2447 "bin/bin2.meta_lic", 2448 "restricted"), 2449 matchResolution( 2450 "highest.apex.meta_lic", 2451 "highest.apex.meta_lic", 2452 "restricted", 2453 "restricted_if_statically_linked"), 2454 matchResolution( 2455 "highest.apex.meta_lic", 2456 "lib/liba.so.meta_lic", 2457 "restricted_if_statically_linked"), 2458 matchResolution( 2459 "highest.apex.meta_lic", 2460 "lib/libb.so.meta_lic", 2461 "restricted"), 2462 matchResolution( 2463 "highest.apex.meta_lic", 2464 "lib/libc.a.meta_lic", 2465 "reciprocal", 2466 "restricted_if_statically_linked"), 2467 matchResolution( 2468 "lib/liba.so.meta_lic", 2469 "lib/liba.so.meta_lic", 2470 "restricted_if_statically_linked"), 2471 matchResolution( 2472 "lib/libb.so.meta_lic", 2473 "lib/libb.so.meta_lic", 2474 "restricted"), 2475 }, 2476 }, 2477 { 2478 condition: "restricted", 2479 name: "apex_trimmed_private", 2480 roots: []string{"highest.apex.meta_lic"}, 2481 ctx: context{ 2482 conditions: compliance.ImpliesPrivate.AsList(), 2483 stripPrefix: []string{"testdata/restricted/"}, 2484 }, 2485 expectedOut: []getMatcher{}, 2486 }, 2487 { 2488 condition: "restricted", 2489 name: "apex_trimmed_share_private", 2490 roots: []string{"highest.apex.meta_lic"}, 2491 ctx: context{ 2492 conditions: compliance.ImpliesShared.Union(compliance.ImpliesPrivate).AsList(), 2493 stripPrefix: []string{"testdata/restricted/"}, 2494 }, 2495 expectedOut: []getMatcher{ 2496 matchTarget("bin/bin1.meta_lic"), 2497 matchTarget("lib/liba.so.meta_lic"), 2498 matchTarget("lib/libc.a.meta_lic"), 2499 matchTarget("bin/bin2.meta_lic"), 2500 matchTarget("lib/libb.so.meta_lic"), 2501 matchTarget("highest.apex.meta_lic"), 2502 matchResolution( 2503 "bin/bin1.meta_lic", 2504 "bin/bin1.meta_lic", 2505 "restricted_if_statically_linked"), 2506 matchResolution( 2507 "bin/bin1.meta_lic", 2508 "lib/liba.so.meta_lic", 2509 "restricted_if_statically_linked"), 2510 matchResolution( 2511 "bin/bin1.meta_lic", 2512 "lib/libc.a.meta_lic", 2513 "reciprocal", 2514 "restricted_if_statically_linked"), 2515 matchResolution( 2516 "bin/bin2.meta_lic", 2517 "bin/bin2.meta_lic", 2518 "restricted"), 2519 matchResolution( 2520 "bin/bin2.meta_lic", 2521 "lib/libb.so.meta_lic", 2522 "restricted"), 2523 matchResolution( 2524 "highest.apex.meta_lic", 2525 "bin/bin1.meta_lic", 2526 "restricted_if_statically_linked"), 2527 matchResolution( 2528 "highest.apex.meta_lic", 2529 "bin/bin2.meta_lic", 2530 "restricted"), 2531 matchResolution( 2532 "highest.apex.meta_lic", 2533 "highest.apex.meta_lic", 2534 "restricted", 2535 "restricted_if_statically_linked"), 2536 matchResolution( 2537 "highest.apex.meta_lic", 2538 "lib/liba.so.meta_lic", 2539 "restricted_if_statically_linked"), 2540 matchResolution( 2541 "highest.apex.meta_lic", 2542 "lib/libb.so.meta_lic", 2543 "restricted"), 2544 matchResolution( 2545 "highest.apex.meta_lic", 2546 "lib/libc.a.meta_lic", 2547 "reciprocal", 2548 "restricted_if_statically_linked"), 2549 matchResolution( 2550 "lib/liba.so.meta_lic", 2551 "lib/liba.so.meta_lic", 2552 "restricted_if_statically_linked"), 2553 matchResolution( 2554 "lib/libb.so.meta_lic", 2555 "lib/libb.so.meta_lic", 2556 "restricted"), 2557 }, 2558 }, 2559 { 2560 condition: "restricted", 2561 name: "apex_trimmed_labelled", 2562 roots: []string{"highest.apex.meta_lic"}, 2563 ctx: context{stripPrefix: []string{"testdata/restricted/"}, labelConditions: true}, 2564 expectedOut: []getMatcher{ 2565 matchTarget("bin/bin1.meta_lic", "notice"), 2566 matchTarget("lib/liba.so.meta_lic", "restricted_if_statically_linked"), 2567 matchTarget("lib/libc.a.meta_lic", "reciprocal"), 2568 matchTarget("bin/bin2.meta_lic", "notice"), 2569 matchTarget("lib/libb.so.meta_lic", "restricted"), 2570 matchTarget("highest.apex.meta_lic", "notice"), 2571 matchResolution( 2572 "bin/bin1.meta_lic", 2573 "bin/bin1.meta_lic", 2574 "restricted_if_statically_linked", 2575 "notice"), 2576 matchResolution( 2577 "bin/bin1.meta_lic", 2578 "lib/liba.so.meta_lic", 2579 "restricted_if_statically_linked"), 2580 matchResolution( 2581 "bin/bin1.meta_lic", 2582 "lib/libc.a.meta_lic", 2583 "reciprocal", 2584 "restricted_if_statically_linked"), 2585 matchResolution( 2586 "bin/bin2.meta_lic", 2587 "bin/bin2.meta_lic", 2588 "restricted", 2589 "notice"), 2590 matchResolution( 2591 "bin/bin2.meta_lic", 2592 "lib/libb.so.meta_lic", 2593 "restricted"), 2594 matchResolution( 2595 "highest.apex.meta_lic", 2596 "bin/bin1.meta_lic", 2597 "restricted_if_statically_linked", 2598 "notice"), 2599 matchResolution( 2600 "highest.apex.meta_lic", 2601 "bin/bin2.meta_lic", 2602 "restricted", 2603 "notice"), 2604 matchResolution( 2605 "highest.apex.meta_lic", 2606 "highest.apex.meta_lic", 2607 "restricted", 2608 "restricted_if_statically_linked", 2609 "notice"), 2610 matchResolution( 2611 "highest.apex.meta_lic", 2612 "lib/liba.so.meta_lic", 2613 "restricted_if_statically_linked"), 2614 matchResolution( 2615 "highest.apex.meta_lic", 2616 "lib/libb.so.meta_lic", 2617 "restricted"), 2618 matchResolution( 2619 "highest.apex.meta_lic", 2620 "lib/libc.a.meta_lic", 2621 "reciprocal", 2622 "restricted_if_statically_linked"), 2623 matchResolution( 2624 "lib/liba.so.meta_lic", 2625 "lib/liba.so.meta_lic", 2626 "restricted_if_statically_linked"), 2627 matchResolution( 2628 "lib/libb.so.meta_lic", 2629 "lib/libb.so.meta_lic", 2630 "restricted"), 2631 }, 2632 }, 2633 { 2634 condition: "restricted", 2635 name: "container", 2636 roots: []string{"container.zip.meta_lic"}, 2637 expectedOut: []getMatcher{ 2638 matchTarget("testdata/restricted/bin/bin1.meta_lic"), 2639 matchTarget("testdata/restricted/lib/liba.so.meta_lic"), 2640 matchTarget("testdata/restricted/lib/libc.a.meta_lic"), 2641 matchTarget("testdata/restricted/bin/bin2.meta_lic"), 2642 matchTarget("testdata/restricted/lib/libb.so.meta_lic"), 2643 matchTarget("testdata/restricted/container.zip.meta_lic"), 2644 matchResolution( 2645 "testdata/restricted/bin/bin1.meta_lic", 2646 "testdata/restricted/bin/bin1.meta_lic", 2647 "restricted_if_statically_linked", 2648 "notice"), 2649 matchResolution( 2650 "testdata/restricted/bin/bin1.meta_lic", 2651 "testdata/restricted/lib/liba.so.meta_lic", 2652 "restricted_if_statically_linked"), 2653 matchResolution( 2654 "testdata/restricted/bin/bin1.meta_lic", 2655 "testdata/restricted/lib/libc.a.meta_lic", 2656 "reciprocal", 2657 "restricted_if_statically_linked"), 2658 matchResolution( 2659 "testdata/restricted/bin/bin2.meta_lic", 2660 "testdata/restricted/bin/bin2.meta_lic", 2661 "restricted", 2662 "notice"), 2663 matchResolution( 2664 "testdata/restricted/bin/bin2.meta_lic", 2665 "testdata/restricted/lib/libb.so.meta_lic", 2666 "restricted"), 2667 matchResolution( 2668 "testdata/restricted/container.zip.meta_lic", 2669 "testdata/restricted/bin/bin1.meta_lic", 2670 "restricted_if_statically_linked", 2671 "notice"), 2672 matchResolution( 2673 "testdata/restricted/container.zip.meta_lic", 2674 "testdata/restricted/bin/bin2.meta_lic", 2675 "restricted", 2676 "notice"), 2677 matchResolution( 2678 "testdata/restricted/container.zip.meta_lic", 2679 "testdata/restricted/container.zip.meta_lic", 2680 "restricted", 2681 "restricted_if_statically_linked", 2682 "notice"), 2683 matchResolution( 2684 "testdata/restricted/container.zip.meta_lic", 2685 "testdata/restricted/lib/liba.so.meta_lic", 2686 "restricted_if_statically_linked"), 2687 matchResolution( 2688 "testdata/restricted/container.zip.meta_lic", 2689 "testdata/restricted/lib/libb.so.meta_lic", 2690 "restricted"), 2691 matchResolution( 2692 "testdata/restricted/container.zip.meta_lic", 2693 "testdata/restricted/lib/libc.a.meta_lic", 2694 "reciprocal", 2695 "restricted_if_statically_linked"), 2696 matchResolution( 2697 "testdata/restricted/lib/liba.so.meta_lic", 2698 "testdata/restricted/lib/liba.so.meta_lic", 2699 "restricted_if_statically_linked"), 2700 matchResolution( 2701 "testdata/restricted/lib/libb.so.meta_lic", 2702 "testdata/restricted/lib/libb.so.meta_lic", 2703 "restricted"), 2704 }, 2705 }, 2706 { 2707 condition: "restricted", 2708 name: "application", 2709 roots: []string{"application.meta_lic"}, 2710 expectedOut: []getMatcher{ 2711 matchTarget("testdata/restricted/application.meta_lic"), 2712 matchTarget("testdata/restricted/lib/liba.so.meta_lic"), 2713 matchResolution( 2714 "testdata/restricted/application.meta_lic", 2715 "testdata/restricted/application.meta_lic", 2716 "restricted", 2717 "restricted_if_statically_linked", 2718 "notice"), 2719 matchResolution( 2720 "testdata/restricted/application.meta_lic", 2721 "testdata/restricted/lib/liba.so.meta_lic", 2722 "restricted_if_statically_linked", 2723 "restricted"), 2724 }, 2725 }, 2726 { 2727 condition: "restricted", 2728 name: "binary", 2729 roots: []string{"bin/bin1.meta_lic"}, 2730 expectedOut: []getMatcher{ 2731 matchTarget("testdata/restricted/bin/bin1.meta_lic"), 2732 matchTarget("testdata/restricted/lib/liba.so.meta_lic"), 2733 matchTarget("testdata/restricted/lib/libc.a.meta_lic"), 2734 matchResolution( 2735 "testdata/restricted/bin/bin1.meta_lic", 2736 "testdata/restricted/bin/bin1.meta_lic", 2737 "restricted_if_statically_linked", 2738 "notice"), 2739 matchResolution( 2740 "testdata/restricted/bin/bin1.meta_lic", 2741 "testdata/restricted/lib/liba.so.meta_lic", 2742 "restricted_if_statically_linked"), 2743 matchResolution( 2744 "testdata/restricted/bin/bin1.meta_lic", 2745 "testdata/restricted/lib/libc.a.meta_lic", 2746 "restricted_if_statically_linked", 2747 "reciprocal"), 2748 }, 2749 }, 2750 { 2751 condition: "restricted", 2752 name: "library", 2753 roots: []string{"lib/libd.so.meta_lic"}, 2754 expectedOut: []getMatcher{ 2755 matchTarget("testdata/restricted/lib/libd.so.meta_lic"), 2756 matchResolution( 2757 "testdata/restricted/lib/libd.so.meta_lic", 2758 "testdata/restricted/lib/libd.so.meta_lic", 2759 "notice"), 2760 }, 2761 }, 2762 { 2763 condition: "proprietary", 2764 name: "apex", 2765 roots: []string{"highest.apex.meta_lic"}, 2766 expectedOut: []getMatcher{ 2767 matchTarget("testdata/proprietary/bin/bin1.meta_lic"), 2768 matchTarget("testdata/proprietary/lib/liba.so.meta_lic"), 2769 matchTarget("testdata/proprietary/lib/libc.a.meta_lic"), 2770 matchTarget("testdata/proprietary/bin/bin2.meta_lic"), 2771 matchTarget("testdata/proprietary/lib/libb.so.meta_lic"), 2772 matchTarget("testdata/proprietary/highest.apex.meta_lic"), 2773 matchResolution( 2774 "testdata/proprietary/bin/bin1.meta_lic", 2775 "testdata/proprietary/bin/bin1.meta_lic", 2776 "notice"), 2777 matchResolution( 2778 "testdata/proprietary/bin/bin1.meta_lic", 2779 "testdata/proprietary/lib/liba.so.meta_lic", 2780 "by_exception_only", 2781 "proprietary"), 2782 matchResolution( 2783 "testdata/proprietary/bin/bin1.meta_lic", 2784 "testdata/proprietary/lib/libc.a.meta_lic", 2785 "by_exception_only", 2786 "proprietary"), 2787 matchResolution( 2788 "testdata/proprietary/bin/bin2.meta_lic", 2789 "testdata/proprietary/bin/bin2.meta_lic", 2790 "restricted", 2791 "by_exception_only", 2792 "proprietary"), 2793 matchResolution( 2794 "testdata/proprietary/bin/bin2.meta_lic", 2795 "testdata/proprietary/lib/libb.so.meta_lic", 2796 "restricted"), 2797 matchResolution( 2798 "testdata/proprietary/highest.apex.meta_lic", 2799 "testdata/proprietary/bin/bin1.meta_lic", 2800 "notice"), 2801 matchResolution( 2802 "testdata/proprietary/highest.apex.meta_lic", 2803 "testdata/proprietary/bin/bin2.meta_lic", 2804 "restricted", 2805 "by_exception_only", 2806 "proprietary"), 2807 matchResolution( 2808 "testdata/proprietary/highest.apex.meta_lic", 2809 "testdata/proprietary/highest.apex.meta_lic", 2810 "restricted", 2811 "notice"), 2812 matchResolution( 2813 "testdata/proprietary/highest.apex.meta_lic", 2814 "testdata/proprietary/lib/liba.so.meta_lic", 2815 "by_exception_only", 2816 "proprietary"), 2817 matchResolution( 2818 "testdata/proprietary/highest.apex.meta_lic", 2819 "testdata/proprietary/lib/libb.so.meta_lic", 2820 "restricted"), 2821 matchResolution( 2822 "testdata/proprietary/highest.apex.meta_lic", 2823 "testdata/proprietary/lib/libc.a.meta_lic", 2824 "by_exception_only", 2825 "proprietary"), 2826 matchResolution( 2827 "testdata/proprietary/lib/liba.so.meta_lic", 2828 "testdata/proprietary/lib/liba.so.meta_lic", 2829 "by_exception_only", 2830 "proprietary"), 2831 matchResolution( 2832 "testdata/proprietary/lib/libb.so.meta_lic", 2833 "testdata/proprietary/lib/libb.so.meta_lic", 2834 "restricted"), 2835 }, 2836 }, 2837 { 2838 condition: "proprietary", 2839 name: "apex_trimmed", 2840 roots: []string{"highest.apex.meta_lic"}, 2841 ctx: context{stripPrefix: []string{"testdata/proprietary/"}}, 2842 expectedOut: []getMatcher{ 2843 matchTarget("bin/bin1.meta_lic"), 2844 matchTarget("lib/liba.so.meta_lic"), 2845 matchTarget("lib/libc.a.meta_lic"), 2846 matchTarget("bin/bin2.meta_lic"), 2847 matchTarget("lib/libb.so.meta_lic"), 2848 matchTarget("highest.apex.meta_lic"), 2849 matchResolution( 2850 "bin/bin1.meta_lic", 2851 "bin/bin1.meta_lic", 2852 "notice"), 2853 matchResolution( 2854 "bin/bin1.meta_lic", 2855 "lib/liba.so.meta_lic", 2856 "by_exception_only", 2857 "proprietary"), 2858 matchResolution( 2859 "bin/bin1.meta_lic", 2860 "lib/libc.a.meta_lic", 2861 "by_exception_only", 2862 "proprietary"), 2863 matchResolution( 2864 "bin/bin2.meta_lic", 2865 "bin/bin2.meta_lic", 2866 "by_exception_only", 2867 "restricted", 2868 "proprietary"), 2869 matchResolution( 2870 "bin/bin2.meta_lic", 2871 "lib/libb.so.meta_lic", 2872 "restricted"), 2873 matchResolution( 2874 "highest.apex.meta_lic", 2875 "bin/bin1.meta_lic", 2876 "notice"), 2877 matchResolution( 2878 "highest.apex.meta_lic", 2879 "bin/bin2.meta_lic", 2880 "restricted", 2881 "by_exception_only", 2882 "proprietary"), 2883 matchResolution( 2884 "highest.apex.meta_lic", 2885 "highest.apex.meta_lic", 2886 "restricted", 2887 "notice"), 2888 matchResolution( 2889 "highest.apex.meta_lic", 2890 "lib/liba.so.meta_lic", 2891 "by_exception_only", 2892 "proprietary"), 2893 matchResolution( 2894 "highest.apex.meta_lic", 2895 "lib/libb.so.meta_lic", 2896 "restricted"), 2897 matchResolution( 2898 "highest.apex.meta_lic", 2899 "lib/libc.a.meta_lic", 2900 "by_exception_only", 2901 "proprietary"), 2902 matchResolution( 2903 "lib/liba.so.meta_lic", 2904 "lib/liba.so.meta_lic", 2905 "by_exception_only", 2906 "proprietary"), 2907 matchResolution( 2908 "lib/libb.so.meta_lic", 2909 "lib/libb.so.meta_lic", 2910 "restricted"), 2911 }, 2912 }, 2913 { 2914 condition: "proprietary", 2915 name: "apex_trimmed_notice", 2916 roots: []string{"highest.apex.meta_lic"}, 2917 ctx: context{ 2918 conditions: []compliance.LicenseCondition{compliance.NoticeCondition}, 2919 stripPrefix: []string{"testdata/proprietary/"}, 2920 }, 2921 expectedOut: []getMatcher{ 2922 matchTarget("bin/bin1.meta_lic"), 2923 matchTarget("highest.apex.meta_lic"), 2924 matchResolution( 2925 "bin/bin1.meta_lic", 2926 "bin/bin1.meta_lic", 2927 "notice"), 2928 matchResolution( 2929 "highest.apex.meta_lic", 2930 "bin/bin1.meta_lic", 2931 "notice"), 2932 matchResolution( 2933 "highest.apex.meta_lic", 2934 "highest.apex.meta_lic", 2935 "notice"), 2936 }, 2937 }, 2938 { 2939 condition: "proprietary", 2940 name: "apex_trimmed_share", 2941 roots: []string{"highest.apex.meta_lic"}, 2942 ctx: context{ 2943 conditions: compliance.ImpliesShared.AsList(), 2944 stripPrefix: []string{"testdata/proprietary/"}, 2945 }, 2946 expectedOut: []getMatcher{ 2947 matchTarget("bin/bin2.meta_lic"), 2948 matchTarget("lib/libb.so.meta_lic"), 2949 matchTarget("highest.apex.meta_lic"), 2950 matchResolution( 2951 "bin/bin2.meta_lic", 2952 "bin/bin2.meta_lic", 2953 "restricted"), 2954 matchResolution( 2955 "bin/bin2.meta_lic", 2956 "lib/libb.so.meta_lic", 2957 "restricted"), 2958 matchResolution( 2959 "highest.apex.meta_lic", 2960 "bin/bin2.meta_lic", 2961 "restricted"), 2962 matchResolution( 2963 "highest.apex.meta_lic", 2964 "highest.apex.meta_lic", 2965 "restricted"), 2966 matchResolution( 2967 "highest.apex.meta_lic", 2968 "lib/libb.so.meta_lic", 2969 "restricted"), 2970 matchResolution( 2971 "lib/libb.so.meta_lic", 2972 "lib/libb.so.meta_lic", 2973 "restricted"), 2974 }, 2975 }, 2976 { 2977 condition: "proprietary", 2978 name: "apex_trimmed_private", 2979 roots: []string{"highest.apex.meta_lic"}, 2980 ctx: context{ 2981 conditions: compliance.ImpliesPrivate.AsList(), 2982 stripPrefix: []string{"testdata/proprietary/"}, 2983 }, 2984 expectedOut: []getMatcher{ 2985 matchTarget("bin/bin1.meta_lic"), 2986 matchTarget("lib/liba.so.meta_lic"), 2987 matchTarget("lib/libc.a.meta_lic"), 2988 matchTarget("bin/bin2.meta_lic"), 2989 matchTarget("highest.apex.meta_lic"), 2990 matchResolution( 2991 "bin/bin1.meta_lic", 2992 "lib/liba.so.meta_lic", 2993 "proprietary"), 2994 matchResolution( 2995 "bin/bin1.meta_lic", 2996 "lib/libc.a.meta_lic", 2997 "proprietary"), 2998 matchResolution( 2999 "bin/bin2.meta_lic", 3000 "bin/bin2.meta_lic", 3001 "proprietary"), 3002 matchResolution( 3003 "highest.apex.meta_lic", 3004 "bin/bin2.meta_lic", 3005 "proprietary"), 3006 matchResolution( 3007 "highest.apex.meta_lic", 3008 "lib/liba.so.meta_lic", 3009 "proprietary"), 3010 matchResolution( 3011 "highest.apex.meta_lic", 3012 "lib/libc.a.meta_lic", 3013 "proprietary"), 3014 matchResolution( 3015 "lib/liba.so.meta_lic", 3016 "lib/liba.so.meta_lic", 3017 "proprietary"), 3018 }, 3019 }, 3020 { 3021 condition: "proprietary", 3022 name: "apex_trimmed_share_private", 3023 roots: []string{"highest.apex.meta_lic"}, 3024 ctx: context{ 3025 conditions: compliance.ImpliesShared.Union(compliance.ImpliesPrivate).AsList(), 3026 stripPrefix: []string{"testdata/proprietary/"}, 3027 }, 3028 expectedOut: []getMatcher{ 3029 matchTarget("bin/bin1.meta_lic"), 3030 matchTarget("lib/liba.so.meta_lic"), 3031 matchTarget("lib/libc.a.meta_lic"), 3032 matchTarget("bin/bin2.meta_lic"), 3033 matchTarget("lib/libb.so.meta_lic"), 3034 matchTarget("highest.apex.meta_lic"), 3035 matchResolution( 3036 "bin/bin1.meta_lic", 3037 "lib/liba.so.meta_lic", 3038 "proprietary"), 3039 matchResolution( 3040 "bin/bin1.meta_lic", 3041 "lib/libc.a.meta_lic", 3042 "proprietary"), 3043 matchResolution( 3044 "bin/bin2.meta_lic", 3045 "bin/bin2.meta_lic", 3046 "restricted", 3047 "proprietary"), 3048 matchResolution( 3049 "bin/bin2.meta_lic", 3050 "lib/libb.so.meta_lic", 3051 "restricted"), 3052 matchResolution( 3053 "highest.apex.meta_lic", 3054 "bin/bin2.meta_lic", 3055 "restricted", 3056 "proprietary"), 3057 matchResolution( 3058 "highest.apex.meta_lic", 3059 "highest.apex.meta_lic", 3060 "restricted"), 3061 matchResolution( 3062 "highest.apex.meta_lic", 3063 "lib/liba.so.meta_lic", 3064 "proprietary"), 3065 matchResolution( 3066 "highest.apex.meta_lic", 3067 "lib/libb.so.meta_lic", 3068 "restricted"), 3069 matchResolution( 3070 "highest.apex.meta_lic", 3071 "lib/libc.a.meta_lic", 3072 "proprietary"), 3073 matchResolution( 3074 "lib/liba.so.meta_lic", 3075 "lib/liba.so.meta_lic", 3076 "proprietary"), 3077 matchResolution( 3078 "lib/libb.so.meta_lic", 3079 "lib/libb.so.meta_lic", 3080 "restricted"), 3081 }, 3082 }, 3083 { 3084 condition: "proprietary", 3085 name: "apex_trimmed_labelled", 3086 roots: []string{"highest.apex.meta_lic"}, 3087 ctx: context{stripPrefix: []string{"testdata/proprietary/"}, labelConditions: true}, 3088 expectedOut: []getMatcher{ 3089 matchTarget("bin/bin1.meta_lic", "notice"), 3090 matchTarget("lib/liba.so.meta_lic", "by_exception_only", "proprietary"), 3091 matchTarget("lib/libc.a.meta_lic", "by_exception_only", "proprietary"), 3092 matchTarget("bin/bin2.meta_lic", "by_exception_only", "proprietary"), 3093 matchTarget("lib/libb.so.meta_lic", "restricted"), 3094 matchTarget("highest.apex.meta_lic", "notice"), 3095 matchResolution( 3096 "bin/bin1.meta_lic", 3097 "bin/bin1.meta_lic", 3098 "notice"), 3099 matchResolution( 3100 "bin/bin1.meta_lic", 3101 "lib/liba.so.meta_lic", 3102 "by_exception_only", 3103 "proprietary"), 3104 matchResolution( 3105 "bin/bin1.meta_lic", 3106 "lib/libc.a.meta_lic", 3107 "by_exception_only", 3108 "proprietary"), 3109 matchResolution( 3110 "bin/bin2.meta_lic", 3111 "bin/bin2.meta_lic", 3112 "restricted", 3113 "by_exception_only", 3114 "proprietary"), 3115 matchResolution( 3116 "bin/bin2.meta_lic", 3117 "lib/libb.so.meta_lic", 3118 "restricted"), 3119 matchResolution( 3120 "highest.apex.meta_lic", 3121 "bin/bin1.meta_lic", 3122 "notice"), 3123 matchResolution( 3124 "highest.apex.meta_lic", 3125 "bin/bin2.meta_lic", 3126 "restricted", 3127 "by_exception_only", 3128 "proprietary"), 3129 matchResolution( 3130 "highest.apex.meta_lic", 3131 "highest.apex.meta_lic", 3132 "restricted", 3133 "notice"), 3134 matchResolution( 3135 "highest.apex.meta_lic", 3136 "lib/liba.so.meta_lic", 3137 "by_exception_only", 3138 "proprietary"), 3139 matchResolution( 3140 "highest.apex.meta_lic", 3141 "lib/libb.so.meta_lic", 3142 "restricted"), 3143 matchResolution( 3144 "highest.apex.meta_lic", 3145 "lib/libc.a.meta_lic", 3146 "by_exception_only", 3147 "proprietary"), 3148 matchResolution( 3149 "lib/liba.so.meta_lic", 3150 "lib/liba.so.meta_lic", 3151 "by_exception_only", 3152 "proprietary"), 3153 matchResolution( 3154 "lib/libb.so.meta_lic", 3155 "lib/libb.so.meta_lic", 3156 "restricted"), 3157 }, 3158 }, 3159 { 3160 condition: "proprietary", 3161 name: "container", 3162 roots: []string{"container.zip.meta_lic"}, 3163 expectedOut: []getMatcher{ 3164 matchTarget("testdata/proprietary/bin/bin1.meta_lic"), 3165 matchTarget("testdata/proprietary/lib/liba.so.meta_lic"), 3166 matchTarget("testdata/proprietary/lib/libc.a.meta_lic"), 3167 matchTarget("testdata/proprietary/bin/bin2.meta_lic"), 3168 matchTarget("testdata/proprietary/lib/libb.so.meta_lic"), 3169 matchTarget("testdata/proprietary/container.zip.meta_lic"), 3170 matchResolution( 3171 "testdata/proprietary/bin/bin1.meta_lic", 3172 "testdata/proprietary/bin/bin1.meta_lic", 3173 "notice"), 3174 matchResolution( 3175 "testdata/proprietary/bin/bin1.meta_lic", 3176 "testdata/proprietary/lib/liba.so.meta_lic", 3177 "by_exception_only", 3178 "proprietary"), 3179 matchResolution( 3180 "testdata/proprietary/bin/bin1.meta_lic", 3181 "testdata/proprietary/lib/libc.a.meta_lic", 3182 "by_exception_only", 3183 "proprietary"), 3184 matchResolution( 3185 "testdata/proprietary/bin/bin2.meta_lic", 3186 "testdata/proprietary/bin/bin2.meta_lic", 3187 "restricted", 3188 "by_exception_only", 3189 "proprietary"), 3190 matchResolution( 3191 "testdata/proprietary/bin/bin2.meta_lic", 3192 "testdata/proprietary/lib/libb.so.meta_lic", 3193 "restricted"), 3194 matchResolution( 3195 "testdata/proprietary/container.zip.meta_lic", 3196 "testdata/proprietary/bin/bin1.meta_lic", 3197 "notice"), 3198 matchResolution( 3199 "testdata/proprietary/container.zip.meta_lic", 3200 "testdata/proprietary/bin/bin2.meta_lic", 3201 "restricted", 3202 "by_exception_only", 3203 "proprietary"), 3204 matchResolution( 3205 "testdata/proprietary/container.zip.meta_lic", 3206 "testdata/proprietary/container.zip.meta_lic", 3207 "restricted", 3208 "notice"), 3209 matchResolution( 3210 "testdata/proprietary/container.zip.meta_lic", 3211 "testdata/proprietary/lib/liba.so.meta_lic", 3212 "by_exception_only", 3213 "proprietary"), 3214 matchResolution( 3215 "testdata/proprietary/container.zip.meta_lic", 3216 "testdata/proprietary/lib/libb.so.meta_lic", 3217 "restricted"), 3218 matchResolution( 3219 "testdata/proprietary/container.zip.meta_lic", 3220 "testdata/proprietary/lib/libc.a.meta_lic", 3221 "by_exception_only", 3222 "proprietary"), 3223 matchResolution( 3224 "testdata/proprietary/lib/liba.so.meta_lic", 3225 "testdata/proprietary/lib/liba.so.meta_lic", 3226 "by_exception_only", 3227 "proprietary"), 3228 matchResolution( 3229 "testdata/proprietary/lib/libb.so.meta_lic", 3230 "testdata/proprietary/lib/libb.so.meta_lic", 3231 "restricted"), 3232 }, 3233 }, 3234 { 3235 condition: "proprietary", 3236 name: "application", 3237 roots: []string{"application.meta_lic"}, 3238 expectedOut: []getMatcher{ 3239 matchTarget("testdata/proprietary/application.meta_lic"), 3240 matchTarget("testdata/proprietary/lib/liba.so.meta_lic"), 3241 matchResolution( 3242 "testdata/proprietary/application.meta_lic", 3243 "testdata/proprietary/application.meta_lic", 3244 "notice", 3245 "restricted"), 3246 matchResolution( 3247 "testdata/proprietary/application.meta_lic", 3248 "testdata/proprietary/lib/liba.so.meta_lic", 3249 "restricted", 3250 "by_exception_only", 3251 "proprietary"), 3252 }, 3253 }, 3254 { 3255 condition: "proprietary", 3256 name: "binary", 3257 roots: []string{"bin/bin1.meta_lic"}, 3258 expectedOut: []getMatcher{ 3259 matchTarget("testdata/proprietary/bin/bin1.meta_lic"), 3260 matchTarget("testdata/proprietary/lib/liba.so.meta_lic"), 3261 matchTarget("testdata/proprietary/lib/libc.a.meta_lic"), 3262 matchResolution( 3263 "testdata/proprietary/bin/bin1.meta_lic", 3264 "testdata/proprietary/bin/bin1.meta_lic", 3265 "notice"), 3266 matchResolution( 3267 "testdata/proprietary/bin/bin1.meta_lic", 3268 "testdata/proprietary/lib/liba.so.meta_lic", 3269 "by_exception_only", 3270 "proprietary"), 3271 matchResolution( 3272 "testdata/proprietary/bin/bin1.meta_lic", 3273 "testdata/proprietary/lib/libc.a.meta_lic", 3274 "by_exception_only", 3275 "proprietary"), 3276 }, 3277 }, 3278 { 3279 condition: "proprietary", 3280 name: "library", 3281 roots: []string{"lib/libd.so.meta_lic"}, 3282 expectedOut: []getMatcher{ 3283 matchTarget("testdata/proprietary/lib/libd.so.meta_lic"), 3284 matchResolution( 3285 "testdata/proprietary/lib/libd.so.meta_lic", 3286 "testdata/proprietary/lib/libd.so.meta_lic", 3287 "notice"), 3288 }, 3289 }, 3290 } 3291 for _, tt := range tests { 3292 t.Run(tt.condition+" "+tt.name, func(t *testing.T) { 3293 ctx := &testContext{0, make(map[string]string)} 3294 3295 stdout := &bytes.Buffer{} 3296 stderr := &bytes.Buffer{} 3297 3298 rootFiles := make([]string, 0, len(tt.roots)) 3299 for _, r := range tt.roots { 3300 rootFiles = append(rootFiles, "testdata/"+tt.condition+"/"+r) 3301 } 3302 tt.ctx.graphViz = true 3303 lg, err := dumpResolutions(&tt.ctx, stdout, stderr, compliance.GetFS(tt.outDir), rootFiles...) 3304 if err != nil { 3305 t.Fatalf("dumpresolutions: error = %v, stderr = %v", err, stderr) 3306 return 3307 } 3308 if stderr.Len() > 0 { 3309 t.Errorf("dumpresolutions: gotStderr = %v, want none", stderr) 3310 } 3311 3312 expectedOut := &bytes.Buffer{} 3313 for _, eo := range tt.expectedOut { 3314 m := eo(ctx) 3315 expectedOut.WriteString(m.matchString(ctx, lg)) 3316 expectedOut.WriteString("\n") 3317 } 3318 3319 outList := strings.Split(stdout.String(), "\n") 3320 outLine := 0 3321 if outList[outLine] != "strict digraph {" { 3322 t.Errorf("dumpresolutions: got 1st line %v, want strict digraph {", outList[outLine]) 3323 } 3324 outLine++ 3325 if strings.HasPrefix(strings.TrimLeft(outList[outLine], " \t"), "rankdir") { 3326 outLine++ 3327 } 3328 endOut := len(outList) 3329 for endOut > 0 && strings.TrimLeft(outList[endOut-1], " \t") == "" { 3330 endOut-- 3331 } 3332 if outList[endOut-1] != "}" { 3333 t.Errorf("dumpresolutions: got last line %v, want }", outList[endOut-1]) 3334 } 3335 endOut-- 3336 if strings.HasPrefix(strings.TrimLeft(outList[endOut-1], " \t"), "{rank=same") { 3337 endOut-- 3338 } 3339 expectedList := strings.Split(expectedOut.String(), "\n") 3340 for len(expectedList) > 0 && expectedList[len(expectedList)-1] == "" { 3341 expectedList = expectedList[0 : len(expectedList)-1] 3342 } 3343 matchLine := 0 3344 3345 for outLine < endOut && matchLine < len(expectedList) && strings.TrimLeft(outList[outLine], " \t") == expectedList[matchLine] { 3346 outLine++ 3347 matchLine++ 3348 } 3349 if outLine < endOut || matchLine < len(expectedList) { 3350 if outLine >= endOut { 3351 t.Errorf("dumpresolutions: missing lines at end of graph, want %d lines %v", len(expectedList)-matchLine, strings.Join(expectedList[matchLine:], "\n")) 3352 } else if matchLine >= len(expectedList) { 3353 t.Errorf("dumpresolutions: unexpected lines at end of graph starting line %d, got %v, want nothing", outLine+1, strings.Join(outList[outLine:], "\n")) 3354 } else { 3355 t.Errorf("dumpresolutions: at line %d, got %v, want %v", outLine+1, strings.Join(outList[outLine:], "\n"), strings.Join(expectedList[matchLine:], "\n")) 3356 } 3357 } 3358 }) 3359 } 3360} 3361