1// Copyright (C) 2021 The Android Open Source Project 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 apex 16 17import ( 18 "android/soong/dexpreopt" 19 "testing" 20 21 "android/soong/android" 22 "android/soong/java" 23) 24 25var prepareForTestWithSystemserverclasspathFragment = android.GroupFixturePreparers( 26 java.PrepareForTestWithDexpreopt, 27 PrepareForTestWithApexBuildComponents, 28) 29 30func TestSystemserverclasspathFragmentContents(t *testing.T) { 31 result := android.GroupFixturePreparers( 32 prepareForTestWithSystemserverclasspathFragment, 33 prepareForTestWithMyapex, 34 dexpreopt.FixtureSetApexSystemServerJars("myapex:foo"), 35 ).RunTestWithBp(t, ` 36 apex { 37 name: "myapex", 38 key: "myapex.key", 39 systemserverclasspath_fragments: [ 40 "mysystemserverclasspathfragment", 41 ], 42 updatable: false, 43 } 44 45 apex_key { 46 name: "myapex.key", 47 public_key: "testkey.avbpubkey", 48 private_key: "testkey.pem", 49 } 50 51 java_library { 52 name: "foo", 53 srcs: ["b.java"], 54 installable: true, 55 apex_available: [ 56 "myapex", 57 ], 58 } 59 60 systemserverclasspath_fragment { 61 name: "mysystemserverclasspathfragment", 62 contents: [ 63 "foo", 64 ], 65 apex_available: [ 66 "myapex", 67 ], 68 } 69 `) 70 71 ensureExactContents(t, result.TestContext, "myapex", "android_common_myapex_image", []string{ 72 "etc/classpaths/systemserverclasspath.pb", 73 "javalib/foo.jar", 74 }) 75 76 java.CheckModuleDependencies(t, result.TestContext, "myapex", "android_common_myapex_image", []string{ 77 `myapex.key`, 78 `mysystemserverclasspathfragment`, 79 }) 80} 81 82func TestSystemserverclasspathFragmentNoGeneratedProto(t *testing.T) { 83 result := android.GroupFixturePreparers( 84 prepareForTestWithSystemserverclasspathFragment, 85 prepareForTestWithMyapex, 86 dexpreopt.FixtureSetApexSystemServerJars("myapex:foo"), 87 ).RunTestWithBp(t, ` 88 apex { 89 name: "myapex", 90 key: "myapex.key", 91 systemserverclasspath_fragments: [ 92 "mysystemserverclasspathfragment", 93 ], 94 updatable: false, 95 } 96 97 apex_key { 98 name: "myapex.key", 99 public_key: "testkey.avbpubkey", 100 private_key: "testkey.pem", 101 } 102 103 java_library { 104 name: "foo", 105 srcs: ["b.java"], 106 installable: true, 107 apex_available: [ 108 "myapex", 109 ], 110 } 111 112 systemserverclasspath_fragment { 113 name: "mysystemserverclasspathfragment", 114 generate_classpaths_proto: false, 115 contents: [ 116 "foo", 117 ], 118 apex_available: [ 119 "myapex", 120 ], 121 } 122 `) 123 124 ensureExactContents(t, result.TestContext, "myapex", "android_common_myapex_image", []string{ 125 "javalib/foo.jar", 126 }) 127 128 java.CheckModuleDependencies(t, result.TestContext, "myapex", "android_common_myapex_image", []string{ 129 `myapex.key`, 130 `mysystemserverclasspathfragment`, 131 }) 132} 133 134func TestSystemServerClasspathFragmentWithContentNotInMake(t *testing.T) { 135 android.GroupFixturePreparers( 136 prepareForTestWithSystemserverclasspathFragment, 137 prepareForTestWithMyapex, 138 dexpreopt.FixtureSetApexSystemServerJars("myapex:foo"), 139 ). 140 ExtendWithErrorHandler(android.FixtureExpectsAtLeastOneErrorMatchingPattern( 141 `in contents must also be declared in PRODUCT_APEX_SYSTEM_SERVER_JARS`)). 142 RunTestWithBp(t, ` 143 apex { 144 name: "myapex", 145 key: "myapex.key", 146 systemserverclasspath_fragments: [ 147 "mysystemserverclasspathfragment", 148 ], 149 updatable: false, 150 } 151 152 apex_key { 153 name: "myapex.key", 154 public_key: "testkey.avbpubkey", 155 private_key: "testkey.pem", 156 } 157 158 java_library { 159 name: "foo", 160 srcs: ["b.java"], 161 installable: true, 162 apex_available: ["myapex"], 163 } 164 165 java_library { 166 name: "bar", 167 srcs: ["b.java"], 168 installable: true, 169 apex_available: ["myapex"], 170 } 171 172 systemserverclasspath_fragment { 173 name: "mysystemserverclasspathfragment", 174 contents: [ 175 "foo", 176 "bar", 177 ], 178 apex_available: [ 179 "myapex", 180 ], 181 } 182 `) 183} 184 185func TestPrebuiltSystemserverclasspathFragmentContents(t *testing.T) { 186 result := android.GroupFixturePreparers( 187 prepareForTestWithSystemserverclasspathFragment, 188 prepareForTestWithMyapex, 189 dexpreopt.FixtureSetApexSystemServerJars("myapex:foo"), 190 ).RunTestWithBp(t, ` 191 prebuilt_apex { 192 name: "myapex", 193 arch: { 194 arm64: { 195 src: "myapex-arm64.apex", 196 }, 197 arm: { 198 src: "myapex-arm.apex", 199 }, 200 }, 201 exported_systemserverclasspath_fragments: ["mysystemserverclasspathfragment"], 202 } 203 204 java_import { 205 name: "foo", 206 jars: ["foo.jar"], 207 apex_available: [ 208 "myapex", 209 ], 210 } 211 212 prebuilt_systemserverclasspath_fragment { 213 name: "mysystemserverclasspathfragment", 214 prefer: true, 215 contents: [ 216 "foo", 217 ], 218 apex_available: [ 219 "myapex", 220 ], 221 } 222 `) 223 224 java.CheckModuleDependencies(t, result.TestContext, "myapex", "android_common_myapex", []string{ 225 `myapex.apex.selector`, 226 `prebuilt_mysystemserverclasspathfragment`, 227 }) 228 229 java.CheckModuleDependencies(t, result.TestContext, "mysystemserverclasspathfragment", "android_common_myapex", []string{ 230 `myapex.deapexer`, 231 `prebuilt_foo`, 232 }) 233} 234 235func TestSystemserverclasspathFragmentStandaloneContents(t *testing.T) { 236 result := android.GroupFixturePreparers( 237 prepareForTestWithSystemserverclasspathFragment, 238 prepareForTestWithMyapex, 239 dexpreopt.FixtureSetApexStandaloneSystemServerJars("myapex:foo"), 240 ).RunTestWithBp(t, ` 241 apex { 242 name: "myapex", 243 key: "myapex.key", 244 systemserverclasspath_fragments: [ 245 "mysystemserverclasspathfragment", 246 ], 247 updatable: false, 248 } 249 250 apex_key { 251 name: "myapex.key", 252 public_key: "testkey.avbpubkey", 253 private_key: "testkey.pem", 254 } 255 256 java_library { 257 name: "foo", 258 srcs: ["b.java"], 259 installable: true, 260 apex_available: [ 261 "myapex", 262 ], 263 } 264 265 systemserverclasspath_fragment { 266 name: "mysystemserverclasspathfragment", 267 standalone_contents: [ 268 "foo", 269 ], 270 apex_available: [ 271 "myapex", 272 ], 273 } 274 `) 275 276 ensureExactContents(t, result.TestContext, "myapex", "android_common_myapex_image", []string{ 277 "etc/classpaths/systemserverclasspath.pb", 278 "javalib/foo.jar", 279 }) 280} 281 282func TestPrebuiltStandaloneSystemserverclasspathFragmentContents(t *testing.T) { 283 result := android.GroupFixturePreparers( 284 prepareForTestWithSystemserverclasspathFragment, 285 prepareForTestWithMyapex, 286 dexpreopt.FixtureSetApexStandaloneSystemServerJars("myapex:foo"), 287 ).RunTestWithBp(t, ` 288 prebuilt_apex { 289 name: "myapex", 290 arch: { 291 arm64: { 292 src: "myapex-arm64.apex", 293 }, 294 arm: { 295 src: "myapex-arm.apex", 296 }, 297 }, 298 exported_systemserverclasspath_fragments: ["mysystemserverclasspathfragment"], 299 } 300 301 java_import { 302 name: "foo", 303 jars: ["foo.jar"], 304 apex_available: [ 305 "myapex", 306 ], 307 } 308 309 prebuilt_systemserverclasspath_fragment { 310 name: "mysystemserverclasspathfragment", 311 prefer: true, 312 standalone_contents: [ 313 "foo", 314 ], 315 apex_available: [ 316 "myapex", 317 ], 318 } 319 `) 320 321 java.CheckModuleDependencies(t, result.TestContext, "mysystemserverclasspathfragment", "android_common_myapex", []string{ 322 `myapex.deapexer`, 323 `prebuilt_foo`, 324 }) 325} 326