1*9e94795aSAndroid Build Coastguard Worker// Copyright 2021 Google LLC 2*9e94795aSAndroid Build Coastguard Worker// 3*9e94795aSAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*9e94795aSAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*9e94795aSAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*9e94795aSAndroid Build Coastguard Worker// 7*9e94795aSAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*9e94795aSAndroid Build Coastguard Worker// 9*9e94795aSAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*9e94795aSAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*9e94795aSAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*9e94795aSAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*9e94795aSAndroid Build Coastguard Worker// limitations under the License. 14*9e94795aSAndroid Build Coastguard Worker 15*9e94795aSAndroid Build Coastguard Workerpackage compliance 16*9e94795aSAndroid Build Coastguard Worker 17*9e94795aSAndroid Build Coastguard Workerimport ( 18*9e94795aSAndroid Build Coastguard Worker "bytes" 19*9e94795aSAndroid Build Coastguard Worker "sort" 20*9e94795aSAndroid Build Coastguard Worker "testing" 21*9e94795aSAndroid Build Coastguard Worker) 22*9e94795aSAndroid Build Coastguard Worker 23*9e94795aSAndroid Build Coastguard Workerfunc TestResolveBottomUpConditions(t *testing.T) { 24*9e94795aSAndroid Build Coastguard Worker tests := []struct { 25*9e94795aSAndroid Build Coastguard Worker name string 26*9e94795aSAndroid Build Coastguard Worker roots []string 27*9e94795aSAndroid Build Coastguard Worker edges []annotated 28*9e94795aSAndroid Build Coastguard Worker expectedActions []tcond 29*9e94795aSAndroid Build Coastguard Worker }{ 30*9e94795aSAndroid Build Coastguard Worker { 31*9e94795aSAndroid Build Coastguard Worker name: "firstparty", 32*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 33*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 34*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"static"}}, 35*9e94795aSAndroid Build Coastguard Worker }, 36*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 37*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 38*9e94795aSAndroid Build Coastguard Worker {"apacheLib.meta_lic", "notice"}, 39*9e94795aSAndroid Build Coastguard Worker }, 40*9e94795aSAndroid Build Coastguard Worker }, 41*9e94795aSAndroid Build Coastguard Worker { 42*9e94795aSAndroid Build Coastguard Worker name: "firstpartytool", 43*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 44*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 45*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"toolchain"}}, 46*9e94795aSAndroid Build Coastguard Worker }, 47*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 48*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 49*9e94795aSAndroid Build Coastguard Worker {"apacheLib.meta_lic", "notice"}, 50*9e94795aSAndroid Build Coastguard Worker }, 51*9e94795aSAndroid Build Coastguard Worker }, 52*9e94795aSAndroid Build Coastguard Worker { 53*9e94795aSAndroid Build Coastguard Worker name: "firstpartydeep", 54*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 55*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 56*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 57*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"static"}}, 58*9e94795aSAndroid Build Coastguard Worker }, 59*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 60*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice"}, 61*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 62*9e94795aSAndroid Build Coastguard Worker {"apacheLib.meta_lic", "notice"}, 63*9e94795aSAndroid Build Coastguard Worker }, 64*9e94795aSAndroid Build Coastguard Worker }, 65*9e94795aSAndroid Build Coastguard Worker { 66*9e94795aSAndroid Build Coastguard Worker name: "firstpartywide", 67*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 68*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 69*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 70*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheLib.meta_lic", []string{"static"}}, 71*9e94795aSAndroid Build Coastguard Worker }, 72*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 73*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice"}, 74*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 75*9e94795aSAndroid Build Coastguard Worker {"apacheLib.meta_lic", "notice"}, 76*9e94795aSAndroid Build Coastguard Worker }, 77*9e94795aSAndroid Build Coastguard Worker }, 78*9e94795aSAndroid Build Coastguard Worker { 79*9e94795aSAndroid Build Coastguard Worker name: "firstpartydynamic", 80*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 81*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 82*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}}, 83*9e94795aSAndroid Build Coastguard Worker }, 84*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 85*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 86*9e94795aSAndroid Build Coastguard Worker {"apacheLib.meta_lic", "notice"}, 87*9e94795aSAndroid Build Coastguard Worker }, 88*9e94795aSAndroid Build Coastguard Worker }, 89*9e94795aSAndroid Build Coastguard Worker { 90*9e94795aSAndroid Build Coastguard Worker name: "firstpartydynamicdeep", 91*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 92*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 93*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 94*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}}, 95*9e94795aSAndroid Build Coastguard Worker }, 96*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 97*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice"}, 98*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 99*9e94795aSAndroid Build Coastguard Worker {"apacheLib.meta_lic", "notice"}, 100*9e94795aSAndroid Build Coastguard Worker }, 101*9e94795aSAndroid Build Coastguard Worker }, 102*9e94795aSAndroid Build Coastguard Worker { 103*9e94795aSAndroid Build Coastguard Worker name: "firstpartydynamicwide", 104*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 105*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 106*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 107*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}}, 108*9e94795aSAndroid Build Coastguard Worker }, 109*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 110*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice"}, 111*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 112*9e94795aSAndroid Build Coastguard Worker {"apacheLib.meta_lic", "notice"}, 113*9e94795aSAndroid Build Coastguard Worker }, 114*9e94795aSAndroid Build Coastguard Worker }, 115*9e94795aSAndroid Build Coastguard Worker { 116*9e94795aSAndroid Build Coastguard Worker name: "restricted", 117*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 118*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 119*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}}, 120*9e94795aSAndroid Build Coastguard Worker }, 121*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 122*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice|restricted"}, 123*9e94795aSAndroid Build Coastguard Worker {"gplLib.meta_lic", "restricted"}, 124*9e94795aSAndroid Build Coastguard Worker }, 125*9e94795aSAndroid Build Coastguard Worker }, 126*9e94795aSAndroid Build Coastguard Worker { 127*9e94795aSAndroid Build Coastguard Worker name: "restrictedtool", 128*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 129*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 130*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"toolchain"}}, 131*9e94795aSAndroid Build Coastguard Worker }, 132*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 133*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 134*9e94795aSAndroid Build Coastguard Worker {"gplLib.meta_lic", "restricted"}, 135*9e94795aSAndroid Build Coastguard Worker }, 136*9e94795aSAndroid Build Coastguard Worker }, 137*9e94795aSAndroid Build Coastguard Worker { 138*9e94795aSAndroid Build Coastguard Worker name: "restricteddeep", 139*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 140*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 141*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 142*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}}, 143*9e94795aSAndroid Build Coastguard Worker }, 144*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 145*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice|restricted"}, 146*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice|restricted"}, 147*9e94795aSAndroid Build Coastguard Worker {"gplLib.meta_lic", "restricted"}, 148*9e94795aSAndroid Build Coastguard Worker }, 149*9e94795aSAndroid Build Coastguard Worker }, 150*9e94795aSAndroid Build Coastguard Worker { 151*9e94795aSAndroid Build Coastguard Worker name: "restrictedwide", 152*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 153*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 154*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 155*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"static"}}, 156*9e94795aSAndroid Build Coastguard Worker }, 157*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 158*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice|restricted"}, 159*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 160*9e94795aSAndroid Build Coastguard Worker {"gplLib.meta_lic", "restricted"}, 161*9e94795aSAndroid Build Coastguard Worker }, 162*9e94795aSAndroid Build Coastguard Worker }, 163*9e94795aSAndroid Build Coastguard Worker { 164*9e94795aSAndroid Build Coastguard Worker name: "restricteddynamic", 165*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 166*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 167*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"dynamic"}}, 168*9e94795aSAndroid Build Coastguard Worker }, 169*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 170*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice|restricted"}, 171*9e94795aSAndroid Build Coastguard Worker {"gplLib.meta_lic", "restricted"}, 172*9e94795aSAndroid Build Coastguard Worker }, 173*9e94795aSAndroid Build Coastguard Worker }, 174*9e94795aSAndroid Build Coastguard Worker { 175*9e94795aSAndroid Build Coastguard Worker name: "restricteddynamicdeep", 176*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 177*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 178*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 179*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"dynamic"}}, 180*9e94795aSAndroid Build Coastguard Worker }, 181*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 182*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice|restricted"}, 183*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice|restricted"}, 184*9e94795aSAndroid Build Coastguard Worker {"gplLib.meta_lic", "restricted"}, 185*9e94795aSAndroid Build Coastguard Worker }, 186*9e94795aSAndroid Build Coastguard Worker }, 187*9e94795aSAndroid Build Coastguard Worker { 188*9e94795aSAndroid Build Coastguard Worker name: "restricteddynamicwide", 189*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 190*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 191*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 192*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"dynamic"}}, 193*9e94795aSAndroid Build Coastguard Worker }, 194*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 195*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice|restricted"}, 196*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 197*9e94795aSAndroid Build Coastguard Worker {"gplLib.meta_lic", "restricted"}, 198*9e94795aSAndroid Build Coastguard Worker }, 199*9e94795aSAndroid Build Coastguard Worker }, 200*9e94795aSAndroid Build Coastguard Worker { 201*9e94795aSAndroid Build Coastguard Worker name: "weakrestricted", 202*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 203*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 204*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"static"}}, 205*9e94795aSAndroid Build Coastguard Worker }, 206*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 207*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice|restricted_if_statically_linked"}, 208*9e94795aSAndroid Build Coastguard Worker {"lgplLib.meta_lic", "restricted_if_statically_linked"}, 209*9e94795aSAndroid Build Coastguard Worker }, 210*9e94795aSAndroid Build Coastguard Worker }, 211*9e94795aSAndroid Build Coastguard Worker { 212*9e94795aSAndroid Build Coastguard Worker name: "weakrestrictedtool", 213*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 214*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 215*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"toolchain"}}, 216*9e94795aSAndroid Build Coastguard Worker }, 217*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 218*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 219*9e94795aSAndroid Build Coastguard Worker {"lgplLib.meta_lic", "restricted_if_statically_linked"}, 220*9e94795aSAndroid Build Coastguard Worker }, 221*9e94795aSAndroid Build Coastguard Worker }, 222*9e94795aSAndroid Build Coastguard Worker { 223*9e94795aSAndroid Build Coastguard Worker name: "weakrestricteddeep", 224*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 225*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 226*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 227*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"static"}}, 228*9e94795aSAndroid Build Coastguard Worker }, 229*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 230*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice|restricted_if_statically_linked"}, 231*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice|restricted_if_statically_linked"}, 232*9e94795aSAndroid Build Coastguard Worker {"lgplLib.meta_lic", "restricted_if_statically_linked"}, 233*9e94795aSAndroid Build Coastguard Worker }, 234*9e94795aSAndroid Build Coastguard Worker }, 235*9e94795aSAndroid Build Coastguard Worker { 236*9e94795aSAndroid Build Coastguard Worker name: "weakrestrictedwide", 237*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 238*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 239*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 240*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"static"}}, 241*9e94795aSAndroid Build Coastguard Worker }, 242*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 243*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice|restricted_if_statically_linked"}, 244*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 245*9e94795aSAndroid Build Coastguard Worker {"lgplLib.meta_lic", "restricted_if_statically_linked"}, 246*9e94795aSAndroid Build Coastguard Worker }, 247*9e94795aSAndroid Build Coastguard Worker }, 248*9e94795aSAndroid Build Coastguard Worker { 249*9e94795aSAndroid Build Coastguard Worker name: "weakrestricteddynamic", 250*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 251*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 252*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}}, 253*9e94795aSAndroid Build Coastguard Worker }, 254*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 255*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 256*9e94795aSAndroid Build Coastguard Worker {"lgplLib.meta_lic", "restricted_if_statically_linked"}, 257*9e94795aSAndroid Build Coastguard Worker }, 258*9e94795aSAndroid Build Coastguard Worker }, 259*9e94795aSAndroid Build Coastguard Worker { 260*9e94795aSAndroid Build Coastguard Worker name: "weakrestricteddynamicdeep", 261*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 262*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 263*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 264*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}}, 265*9e94795aSAndroid Build Coastguard Worker }, 266*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 267*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice"}, 268*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 269*9e94795aSAndroid Build Coastguard Worker {"lgplLib.meta_lic", "restricted_if_statically_linked"}, 270*9e94795aSAndroid Build Coastguard Worker }, 271*9e94795aSAndroid Build Coastguard Worker }, 272*9e94795aSAndroid Build Coastguard Worker { 273*9e94795aSAndroid Build Coastguard Worker name: "weakrestricteddynamicwide", 274*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 275*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 276*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 277*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}}, 278*9e94795aSAndroid Build Coastguard Worker }, 279*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 280*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice"}, 281*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 282*9e94795aSAndroid Build Coastguard Worker {"lgplLib.meta_lic", "restricted_if_statically_linked"}, 283*9e94795aSAndroid Build Coastguard Worker }, 284*9e94795aSAndroid Build Coastguard Worker }, 285*9e94795aSAndroid Build Coastguard Worker { 286*9e94795aSAndroid Build Coastguard Worker name: "classpath", 287*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 288*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 289*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"static"}}, 290*9e94795aSAndroid Build Coastguard Worker }, 291*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 292*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 293*9e94795aSAndroid Build Coastguard Worker {"gplWithClasspathException.meta_lic", "permissive"}, 294*9e94795aSAndroid Build Coastguard Worker }, 295*9e94795aSAndroid Build Coastguard Worker }, 296*9e94795aSAndroid Build Coastguard Worker { 297*9e94795aSAndroid Build Coastguard Worker name: "classpathdependent", 298*9e94795aSAndroid Build Coastguard Worker roots: []string{"dependentModule.meta_lic"}, 299*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 300*9e94795aSAndroid Build Coastguard Worker {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"static"}}, 301*9e94795aSAndroid Build Coastguard Worker }, 302*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 303*9e94795aSAndroid Build Coastguard Worker {"dependentModule.meta_lic", "notice"}, 304*9e94795aSAndroid Build Coastguard Worker {"gplWithClasspathException.meta_lic", "permissive"}, 305*9e94795aSAndroid Build Coastguard Worker }, 306*9e94795aSAndroid Build Coastguard Worker }, 307*9e94795aSAndroid Build Coastguard Worker { 308*9e94795aSAndroid Build Coastguard Worker name: "classpathdynamic", 309*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 310*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 311*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}}, 312*9e94795aSAndroid Build Coastguard Worker }, 313*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 314*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 315*9e94795aSAndroid Build Coastguard Worker {"gplWithClasspathException.meta_lic", "permissive"}, 316*9e94795aSAndroid Build Coastguard Worker }, 317*9e94795aSAndroid Build Coastguard Worker }, 318*9e94795aSAndroid Build Coastguard Worker { 319*9e94795aSAndroid Build Coastguard Worker name: "classpathdependentdynamic", 320*9e94795aSAndroid Build Coastguard Worker roots: []string{"dependentModule.meta_lic"}, 321*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 322*9e94795aSAndroid Build Coastguard Worker {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}}, 323*9e94795aSAndroid Build Coastguard Worker }, 324*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 325*9e94795aSAndroid Build Coastguard Worker {"dependentModule.meta_lic", "notice"}, 326*9e94795aSAndroid Build Coastguard Worker {"gplWithClasspathException.meta_lic", "permissive"}, 327*9e94795aSAndroid Build Coastguard Worker }, 328*9e94795aSAndroid Build Coastguard Worker }, 329*9e94795aSAndroid Build Coastguard Worker } 330*9e94795aSAndroid Build Coastguard Worker for _, tt := range tests { 331*9e94795aSAndroid Build Coastguard Worker t.Run(tt.name, func(t *testing.T) { 332*9e94795aSAndroid Build Coastguard Worker stderr := &bytes.Buffer{} 333*9e94795aSAndroid Build Coastguard Worker lg, err := toGraph(stderr, tt.roots, tt.edges) 334*9e94795aSAndroid Build Coastguard Worker if err != nil { 335*9e94795aSAndroid Build Coastguard Worker t.Errorf("unexpected test data error: got %s, want no error", err) 336*9e94795aSAndroid Build Coastguard Worker return 337*9e94795aSAndroid Build Coastguard Worker } 338*9e94795aSAndroid Build Coastguard Worker 339*9e94795aSAndroid Build Coastguard Worker logGraph(lg, t) 340*9e94795aSAndroid Build Coastguard Worker 341*9e94795aSAndroid Build Coastguard Worker ResolveBottomUpConditions(lg) 342*9e94795aSAndroid Build Coastguard Worker actual := asActionList(lg) 343*9e94795aSAndroid Build Coastguard Worker sort.Sort(actual) 344*9e94795aSAndroid Build Coastguard Worker t.Logf("actual: %s", actual.String()) 345*9e94795aSAndroid Build Coastguard Worker 346*9e94795aSAndroid Build Coastguard Worker expected := toActionList(lg, tt.expectedActions) 347*9e94795aSAndroid Build Coastguard Worker sort.Sort(expected) 348*9e94795aSAndroid Build Coastguard Worker t.Logf("expected: %s", expected.String()) 349*9e94795aSAndroid Build Coastguard Worker 350*9e94795aSAndroid Build Coastguard Worker if len(actual) != len(expected) { 351*9e94795aSAndroid Build Coastguard Worker t.Errorf("unexpected number of actions: got %d, want %d", len(actual), len(expected)) 352*9e94795aSAndroid Build Coastguard Worker return 353*9e94795aSAndroid Build Coastguard Worker } 354*9e94795aSAndroid Build Coastguard Worker for i := 0; i < len(actual); i++ { 355*9e94795aSAndroid Build Coastguard Worker if actual[i] != expected[i] { 356*9e94795aSAndroid Build Coastguard Worker t.Errorf("unexpected action at index %d: got %s, want %s", i, actual[i].String(), expected[i].String()) 357*9e94795aSAndroid Build Coastguard Worker } 358*9e94795aSAndroid Build Coastguard Worker } 359*9e94795aSAndroid Build Coastguard Worker }) 360*9e94795aSAndroid Build Coastguard Worker } 361*9e94795aSAndroid Build Coastguard Worker} 362*9e94795aSAndroid Build Coastguard Worker 363*9e94795aSAndroid Build Coastguard Workerfunc TestResolveTopDownConditions(t *testing.T) { 364*9e94795aSAndroid Build Coastguard Worker tests := []struct { 365*9e94795aSAndroid Build Coastguard Worker name string 366*9e94795aSAndroid Build Coastguard Worker roots []string 367*9e94795aSAndroid Build Coastguard Worker edges []annotated 368*9e94795aSAndroid Build Coastguard Worker expectedActions []tcond 369*9e94795aSAndroid Build Coastguard Worker }{ 370*9e94795aSAndroid Build Coastguard Worker { 371*9e94795aSAndroid Build Coastguard Worker name: "firstparty", 372*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 373*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 374*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"static"}}, 375*9e94795aSAndroid Build Coastguard Worker }, 376*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 377*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 378*9e94795aSAndroid Build Coastguard Worker {"apacheLib.meta_lic", "notice"}, 379*9e94795aSAndroid Build Coastguard Worker }, 380*9e94795aSAndroid Build Coastguard Worker }, 381*9e94795aSAndroid Build Coastguard Worker { 382*9e94795aSAndroid Build Coastguard Worker name: "firstpartydynamic", 383*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 384*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 385*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "apacheLib.meta_lic", []string{"dynamic"}}, 386*9e94795aSAndroid Build Coastguard Worker }, 387*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 388*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 389*9e94795aSAndroid Build Coastguard Worker {"apacheLib.meta_lic", "notice"}, 390*9e94795aSAndroid Build Coastguard Worker }, 391*9e94795aSAndroid Build Coastguard Worker }, 392*9e94795aSAndroid Build Coastguard Worker { 393*9e94795aSAndroid Build Coastguard Worker name: "restricted", 394*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 395*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 396*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}}, 397*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}}, 398*9e94795aSAndroid Build Coastguard Worker }, 399*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 400*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice|restricted"}, 401*9e94795aSAndroid Build Coastguard Worker {"mitLib.meta_lic", "notice|restricted"}, 402*9e94795aSAndroid Build Coastguard Worker {"gplLib.meta_lic", "restricted"}, 403*9e94795aSAndroid Build Coastguard Worker }, 404*9e94795aSAndroid Build Coastguard Worker }, 405*9e94795aSAndroid Build Coastguard Worker { 406*9e94795aSAndroid Build Coastguard Worker name: "restrictedtool", 407*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 408*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 409*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "gplBin.meta_lic", []string{"toolchain"}}, 410*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}}, 411*9e94795aSAndroid Build Coastguard Worker }, 412*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 413*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 414*9e94795aSAndroid Build Coastguard Worker {"mitLib.meta_lic", "notice"}, 415*9e94795aSAndroid Build Coastguard Worker {"gplBin.meta_lic", "restricted"}, 416*9e94795aSAndroid Build Coastguard Worker }, 417*9e94795aSAndroid Build Coastguard Worker }, 418*9e94795aSAndroid Build Coastguard Worker { 419*9e94795aSAndroid Build Coastguard Worker name: "restricteddeep", 420*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 421*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 422*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 423*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "mitBin.meta_lic", []string{"static"}}, 424*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"static"}}, 425*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "mplLib.meta_lic", []string{"static"}}, 426*9e94795aSAndroid Build Coastguard Worker {"mitBin.meta_lic", "mitLib.meta_lic", []string{"static"}}, 427*9e94795aSAndroid Build Coastguard Worker }, 428*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 429*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice|restricted"}, 430*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice|restricted"}, 431*9e94795aSAndroid Build Coastguard Worker {"mitBin.meta_lic", "notice"}, 432*9e94795aSAndroid Build Coastguard Worker {"gplLib.meta_lic", "restricted"}, 433*9e94795aSAndroid Build Coastguard Worker {"mplLib.meta_lic", "reciprocal|restricted"}, 434*9e94795aSAndroid Build Coastguard Worker {"mitLib.meta_lic", "notice"}, 435*9e94795aSAndroid Build Coastguard Worker }, 436*9e94795aSAndroid Build Coastguard Worker }, 437*9e94795aSAndroid Build Coastguard Worker { 438*9e94795aSAndroid Build Coastguard Worker name: "restrictedwide", 439*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 440*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 441*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 442*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"static"}}, 443*9e94795aSAndroid Build Coastguard Worker }, 444*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 445*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice|restricted"}, 446*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 447*9e94795aSAndroid Build Coastguard Worker {"gplLib.meta_lic", "restricted"}, 448*9e94795aSAndroid Build Coastguard Worker }, 449*9e94795aSAndroid Build Coastguard Worker }, 450*9e94795aSAndroid Build Coastguard Worker { 451*9e94795aSAndroid Build Coastguard Worker name: "restricteddynamic", 452*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 453*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 454*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"dynamic"}}, 455*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"dynamic"}}, 456*9e94795aSAndroid Build Coastguard Worker }, 457*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 458*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice|restricted"}, 459*9e94795aSAndroid Build Coastguard Worker {"gplLib.meta_lic", "restricted"}, 460*9e94795aSAndroid Build Coastguard Worker {"mitLib.meta_lic", "notice|restricted"}, 461*9e94795aSAndroid Build Coastguard Worker }, 462*9e94795aSAndroid Build Coastguard Worker }, 463*9e94795aSAndroid Build Coastguard Worker { 464*9e94795aSAndroid Build Coastguard Worker name: "restricteddynamicdeep", 465*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 466*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 467*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 468*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "mitBin.meta_lic", []string{"static"}}, 469*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "gplLib.meta_lic", []string{"dynamic"}}, 470*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "mplLib.meta_lic", []string{"dynamic"}}, 471*9e94795aSAndroid Build Coastguard Worker {"mitBin.meta_lic", "mitLib.meta_lic", []string{"dynamic"}}, 472*9e94795aSAndroid Build Coastguard Worker }, 473*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 474*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice|restricted"}, 475*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice|restricted"}, 476*9e94795aSAndroid Build Coastguard Worker {"mitBin.meta_lic", "notice"}, 477*9e94795aSAndroid Build Coastguard Worker {"gplLib.meta_lic", "restricted"}, 478*9e94795aSAndroid Build Coastguard Worker {"mplLib.meta_lic", "reciprocal|restricted"}, 479*9e94795aSAndroid Build Coastguard Worker {"mitLib.meta_lic", "notice"}, 480*9e94795aSAndroid Build Coastguard Worker }, 481*9e94795aSAndroid Build Coastguard Worker }, 482*9e94795aSAndroid Build Coastguard Worker { 483*9e94795aSAndroid Build Coastguard Worker name: "restricteddynamicwide", 484*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 485*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 486*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 487*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "gplLib.meta_lic", []string{"dynamic"}}, 488*9e94795aSAndroid Build Coastguard Worker }, 489*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 490*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice|restricted"}, 491*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 492*9e94795aSAndroid Build Coastguard Worker {"gplLib.meta_lic", "restricted"}, 493*9e94795aSAndroid Build Coastguard Worker }, 494*9e94795aSAndroid Build Coastguard Worker }, 495*9e94795aSAndroid Build Coastguard Worker { 496*9e94795aSAndroid Build Coastguard Worker name: "weakrestricted", 497*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 498*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 499*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"static"}}, 500*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}}, 501*9e94795aSAndroid Build Coastguard Worker }, 502*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 503*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice|restricted_if_statically_linked"}, 504*9e94795aSAndroid Build Coastguard Worker {"lgplLib.meta_lic", "restricted_if_statically_linked"}, 505*9e94795aSAndroid Build Coastguard Worker {"mitLib.meta_lic", "notice|restricted_if_statically_linked"}, 506*9e94795aSAndroid Build Coastguard Worker }, 507*9e94795aSAndroid Build Coastguard Worker }, 508*9e94795aSAndroid Build Coastguard Worker { 509*9e94795aSAndroid Build Coastguard Worker name: "weakrestrictedtool", 510*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 511*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 512*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "lgplBin.meta_lic", []string{"toolchain"}}, 513*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}}, 514*9e94795aSAndroid Build Coastguard Worker }, 515*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 516*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 517*9e94795aSAndroid Build Coastguard Worker {"lgplBin.meta_lic", "restricted_if_statically_linked"}, 518*9e94795aSAndroid Build Coastguard Worker {"mitLib.meta_lic", "notice"}, 519*9e94795aSAndroid Build Coastguard Worker }, 520*9e94795aSAndroid Build Coastguard Worker }, 521*9e94795aSAndroid Build Coastguard Worker { 522*9e94795aSAndroid Build Coastguard Worker name: "weakrestricteddeep", 523*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 524*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 525*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 526*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"static"}}, 527*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}}, 528*9e94795aSAndroid Build Coastguard Worker }, 529*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 530*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice|restricted_if_statically_linked"}, 531*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice|restricted_if_statically_linked"}, 532*9e94795aSAndroid Build Coastguard Worker {"lgplLib.meta_lic", "restricted_if_statically_linked"}, 533*9e94795aSAndroid Build Coastguard Worker {"mitLib.meta_lic", "notice|restricted_if_statically_linked"}, 534*9e94795aSAndroid Build Coastguard Worker }, 535*9e94795aSAndroid Build Coastguard Worker }, 536*9e94795aSAndroid Build Coastguard Worker { 537*9e94795aSAndroid Build Coastguard Worker name: "weakrestrictedwide", 538*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 539*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 540*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 541*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"static"}}, 542*9e94795aSAndroid Build Coastguard Worker }, 543*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 544*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice|restricted_if_statically_linked"}, 545*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 546*9e94795aSAndroid Build Coastguard Worker {"lgplLib.meta_lic", "restricted_if_statically_linked"}, 547*9e94795aSAndroid Build Coastguard Worker }, 548*9e94795aSAndroid Build Coastguard Worker }, 549*9e94795aSAndroid Build Coastguard Worker { 550*9e94795aSAndroid Build Coastguard Worker name: "weakrestricteddynamic", 551*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 552*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 553*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}}, 554*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}}, 555*9e94795aSAndroid Build Coastguard Worker }, 556*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 557*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 558*9e94795aSAndroid Build Coastguard Worker {"lgplLib.meta_lic", "restricted_if_statically_linked"}, 559*9e94795aSAndroid Build Coastguard Worker {"mitLib.meta_lic", "notice"}, 560*9e94795aSAndroid Build Coastguard Worker }, 561*9e94795aSAndroid Build Coastguard Worker }, 562*9e94795aSAndroid Build Coastguard Worker { 563*9e94795aSAndroid Build Coastguard Worker name: "weakrestricteddynamicdeep", 564*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 565*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 566*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 567*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}}, 568*9e94795aSAndroid Build Coastguard Worker }, 569*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 570*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice"}, 571*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 572*9e94795aSAndroid Build Coastguard Worker {"lgplLib.meta_lic", "restricted_if_statically_linked"}, 573*9e94795aSAndroid Build Coastguard Worker }, 574*9e94795aSAndroid Build Coastguard Worker }, 575*9e94795aSAndroid Build Coastguard Worker { 576*9e94795aSAndroid Build Coastguard Worker name: "weakrestricteddynamicwide", 577*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheContainer.meta_lic"}, 578*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 579*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "apacheBin.meta_lic", []string{"static"}}, 580*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "lgplLib.meta_lic", []string{"dynamic"}}, 581*9e94795aSAndroid Build Coastguard Worker }, 582*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 583*9e94795aSAndroid Build Coastguard Worker {"apacheContainer.meta_lic", "notice"}, 584*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 585*9e94795aSAndroid Build Coastguard Worker {"lgplLib.meta_lic", "restricted_if_statically_linked"}, 586*9e94795aSAndroid Build Coastguard Worker }, 587*9e94795aSAndroid Build Coastguard Worker }, 588*9e94795aSAndroid Build Coastguard Worker { 589*9e94795aSAndroid Build Coastguard Worker name: "classpath", 590*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 591*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 592*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"static"}}, 593*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}}, 594*9e94795aSAndroid Build Coastguard Worker }, 595*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 596*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 597*9e94795aSAndroid Build Coastguard Worker {"gplWithClasspathException.meta_lic", "permissive"}, 598*9e94795aSAndroid Build Coastguard Worker {"mitLib.meta_lic", "notice"}, 599*9e94795aSAndroid Build Coastguard Worker }, 600*9e94795aSAndroid Build Coastguard Worker }, 601*9e94795aSAndroid Build Coastguard Worker { 602*9e94795aSAndroid Build Coastguard Worker name: "classpathdependent", 603*9e94795aSAndroid Build Coastguard Worker roots: []string{"dependentModule.meta_lic"}, 604*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 605*9e94795aSAndroid Build Coastguard Worker {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"static"}}, 606*9e94795aSAndroid Build Coastguard Worker {"dependentModule.meta_lic", "mitLib.meta_lic", []string{"static"}}, 607*9e94795aSAndroid Build Coastguard Worker }, 608*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 609*9e94795aSAndroid Build Coastguard Worker {"dependentModule.meta_lic", "notice"}, 610*9e94795aSAndroid Build Coastguard Worker {"gplWithClasspathException.meta_lic", "permissive"}, 611*9e94795aSAndroid Build Coastguard Worker {"mitLib.meta_lic", "notice"}, 612*9e94795aSAndroid Build Coastguard Worker }, 613*9e94795aSAndroid Build Coastguard Worker }, 614*9e94795aSAndroid Build Coastguard Worker { 615*9e94795aSAndroid Build Coastguard Worker name: "classpathdynamic", 616*9e94795aSAndroid Build Coastguard Worker roots: []string{"apacheBin.meta_lic"}, 617*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 618*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}}, 619*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "mitLib.meta_lic", []string{"static"}}, 620*9e94795aSAndroid Build Coastguard Worker }, 621*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 622*9e94795aSAndroid Build Coastguard Worker {"apacheBin.meta_lic", "notice"}, 623*9e94795aSAndroid Build Coastguard Worker {"gplWithClasspathException.meta_lic", "permissive"}, 624*9e94795aSAndroid Build Coastguard Worker {"mitLib.meta_lic", "notice"}, 625*9e94795aSAndroid Build Coastguard Worker }, 626*9e94795aSAndroid Build Coastguard Worker }, 627*9e94795aSAndroid Build Coastguard Worker { 628*9e94795aSAndroid Build Coastguard Worker name: "classpathdependentdynamic", 629*9e94795aSAndroid Build Coastguard Worker roots: []string{"dependentModule.meta_lic"}, 630*9e94795aSAndroid Build Coastguard Worker edges: []annotated{ 631*9e94795aSAndroid Build Coastguard Worker {"dependentModule.meta_lic", "gplWithClasspathException.meta_lic", []string{"dynamic"}}, 632*9e94795aSAndroid Build Coastguard Worker {"dependentModule.meta_lic", "mitLib.meta_lic", []string{"static"}}, 633*9e94795aSAndroid Build Coastguard Worker }, 634*9e94795aSAndroid Build Coastguard Worker expectedActions: []tcond{ 635*9e94795aSAndroid Build Coastguard Worker {"dependentModule.meta_lic", "notice"}, 636*9e94795aSAndroid Build Coastguard Worker {"gplWithClasspathException.meta_lic", "permissive"}, 637*9e94795aSAndroid Build Coastguard Worker {"mitLib.meta_lic", "notice"}, 638*9e94795aSAndroid Build Coastguard Worker }, 639*9e94795aSAndroid Build Coastguard Worker }, 640*9e94795aSAndroid Build Coastguard Worker } 641*9e94795aSAndroid Build Coastguard Worker for _, tt := range tests { 642*9e94795aSAndroid Build Coastguard Worker t.Run(tt.name, func(t *testing.T) { 643*9e94795aSAndroid Build Coastguard Worker stderr := &bytes.Buffer{} 644*9e94795aSAndroid Build Coastguard Worker lg, err := toGraph(stderr, tt.roots, tt.edges) 645*9e94795aSAndroid Build Coastguard Worker if err != nil { 646*9e94795aSAndroid Build Coastguard Worker t.Errorf("unexpected test data error: got %s, want no error", err) 647*9e94795aSAndroid Build Coastguard Worker return 648*9e94795aSAndroid Build Coastguard Worker } 649*9e94795aSAndroid Build Coastguard Worker 650*9e94795aSAndroid Build Coastguard Worker logGraph(lg, t) 651*9e94795aSAndroid Build Coastguard Worker 652*9e94795aSAndroid Build Coastguard Worker ResolveTopDownConditions(lg) 653*9e94795aSAndroid Build Coastguard Worker actual := asActionList(lg) 654*9e94795aSAndroid Build Coastguard Worker sort.Sort(actual) 655*9e94795aSAndroid Build Coastguard Worker t.Logf("actual: %s", actual.String()) 656*9e94795aSAndroid Build Coastguard Worker 657*9e94795aSAndroid Build Coastguard Worker expected := toActionList(lg, tt.expectedActions) 658*9e94795aSAndroid Build Coastguard Worker sort.Sort(expected) 659*9e94795aSAndroid Build Coastguard Worker t.Logf("expected: %s", expected.String()) 660*9e94795aSAndroid Build Coastguard Worker 661*9e94795aSAndroid Build Coastguard Worker if len(actual) != len(expected) { 662*9e94795aSAndroid Build Coastguard Worker t.Errorf("unexpected number of actions: got %d, want %d", len(actual), len(expected)) 663*9e94795aSAndroid Build Coastguard Worker return 664*9e94795aSAndroid Build Coastguard Worker } 665*9e94795aSAndroid Build Coastguard Worker for i := 0; i < len(actual); i++ { 666*9e94795aSAndroid Build Coastguard Worker if actual[i] != expected[i] { 667*9e94795aSAndroid Build Coastguard Worker t.Errorf("unexpected action at index %d: got %s, want %s", i, actual[i].String(), expected[i].String()) 668*9e94795aSAndroid Build Coastguard Worker } 669*9e94795aSAndroid Build Coastguard Worker } 670*9e94795aSAndroid Build Coastguard Worker }) 671*9e94795aSAndroid Build Coastguard Worker } 672*9e94795aSAndroid Build Coastguard Worker} 673