1*333d2b36SAndroid Build Coastguard Worker// Copyright 2022 Google Inc. All rights reserved. 2*333d2b36SAndroid Build Coastguard Worker// 3*333d2b36SAndroid Build Coastguard Worker// Licensed under the Apache License, Version 2.0 (the "License"); 4*333d2b36SAndroid Build Coastguard Worker// you may not use this file except in compliance with the License. 5*333d2b36SAndroid Build Coastguard Worker// You may obtain a copy of the License at 6*333d2b36SAndroid Build Coastguard Worker// 7*333d2b36SAndroid Build Coastguard Worker// http://www.apache.org/licenses/LICENSE-2.0 8*333d2b36SAndroid Build Coastguard Worker// 9*333d2b36SAndroid Build Coastguard Worker// Unless required by applicable law or agreed to in writing, software 10*333d2b36SAndroid Build Coastguard Worker// distributed under the License is distributed on an "AS IS" BASIS, 11*333d2b36SAndroid Build Coastguard Worker// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*333d2b36SAndroid Build Coastguard Worker// See the License for the specific language governing permissions and 13*333d2b36SAndroid Build Coastguard Worker// limitations under the License. 14*333d2b36SAndroid Build Coastguard Worker 15*333d2b36SAndroid Build Coastguard Workerpackage java 16*333d2b36SAndroid Build Coastguard Worker 17*333d2b36SAndroid Build Coastguard Workerimport ( 18*333d2b36SAndroid Build Coastguard Worker "runtime" 19*333d2b36SAndroid Build Coastguard Worker "testing" 20*333d2b36SAndroid Build Coastguard Worker 21*333d2b36SAndroid Build Coastguard Worker "android/soong/android" 22*333d2b36SAndroid Build Coastguard Worker "android/soong/etc" 23*333d2b36SAndroid Build Coastguard Worker) 24*333d2b36SAndroid Build Coastguard Worker 25*333d2b36SAndroid Build Coastguard Workervar prepareRavenwoodRuntime = android.GroupFixturePreparers( 26*333d2b36SAndroid Build Coastguard Worker android.FixtureRegisterWithContext(func(ctx android.RegistrationContext) { 27*333d2b36SAndroid Build Coastguard Worker RegisterRavenwoodBuildComponents(ctx) 28*333d2b36SAndroid Build Coastguard Worker }), 29*333d2b36SAndroid Build Coastguard Worker android.FixtureAddTextFile("ravenwood/Android.bp", ` 30*333d2b36SAndroid Build Coastguard Worker cc_library_shared { 31*333d2b36SAndroid Build Coastguard Worker name: "ravenwood-runtime-jni1", 32*333d2b36SAndroid Build Coastguard Worker host_supported: true, 33*333d2b36SAndroid Build Coastguard Worker srcs: ["jni.cpp"], 34*333d2b36SAndroid Build Coastguard Worker } 35*333d2b36SAndroid Build Coastguard Worker cc_library_shared { 36*333d2b36SAndroid Build Coastguard Worker name: "ravenwood-runtime-jni2", 37*333d2b36SAndroid Build Coastguard Worker host_supported: true, 38*333d2b36SAndroid Build Coastguard Worker srcs: ["jni.cpp"], 39*333d2b36SAndroid Build Coastguard Worker stem: "libred", 40*333d2b36SAndroid Build Coastguard Worker shared_libs: [ 41*333d2b36SAndroid Build Coastguard Worker "ravenwood-runtime-jni3", 42*333d2b36SAndroid Build Coastguard Worker ], 43*333d2b36SAndroid Build Coastguard Worker } 44*333d2b36SAndroid Build Coastguard Worker cc_library_shared { 45*333d2b36SAndroid Build Coastguard Worker name: "ravenwood-runtime-jni3", 46*333d2b36SAndroid Build Coastguard Worker host_supported: true, 47*333d2b36SAndroid Build Coastguard Worker srcs: ["jni.cpp"], 48*333d2b36SAndroid Build Coastguard Worker } 49*333d2b36SAndroid Build Coastguard Worker java_library_static { 50*333d2b36SAndroid Build Coastguard Worker name: "framework-minus-apex.ravenwood", 51*333d2b36SAndroid Build Coastguard Worker srcs: ["Framework.java"], 52*333d2b36SAndroid Build Coastguard Worker } 53*333d2b36SAndroid Build Coastguard Worker java_library_static { 54*333d2b36SAndroid Build Coastguard Worker name: "framework-services.ravenwood", 55*333d2b36SAndroid Build Coastguard Worker srcs: ["Services.java"], 56*333d2b36SAndroid Build Coastguard Worker } 57*333d2b36SAndroid Build Coastguard Worker java_library_static { 58*333d2b36SAndroid Build Coastguard Worker name: "framework-rules.ravenwood", 59*333d2b36SAndroid Build Coastguard Worker srcs: ["Rules.java"], 60*333d2b36SAndroid Build Coastguard Worker } 61*333d2b36SAndroid Build Coastguard Worker android_app { 62*333d2b36SAndroid Build Coastguard Worker name: "app1", 63*333d2b36SAndroid Build Coastguard Worker sdk_version: "current", 64*333d2b36SAndroid Build Coastguard Worker } 65*333d2b36SAndroid Build Coastguard Worker android_app { 66*333d2b36SAndroid Build Coastguard Worker name: "app2", 67*333d2b36SAndroid Build Coastguard Worker sdk_version: "current", 68*333d2b36SAndroid Build Coastguard Worker } 69*333d2b36SAndroid Build Coastguard Worker android_app { 70*333d2b36SAndroid Build Coastguard Worker name: "app3", 71*333d2b36SAndroid Build Coastguard Worker sdk_version: "current", 72*333d2b36SAndroid Build Coastguard Worker } 73*333d2b36SAndroid Build Coastguard Worker prebuilt_font { 74*333d2b36SAndroid Build Coastguard Worker name: "Font.ttf", 75*333d2b36SAndroid Build Coastguard Worker src: "Font.ttf", 76*333d2b36SAndroid Build Coastguard Worker } 77*333d2b36SAndroid Build Coastguard Worker android_ravenwood_libgroup { 78*333d2b36SAndroid Build Coastguard Worker name: "ravenwood-runtime", 79*333d2b36SAndroid Build Coastguard Worker libs: [ 80*333d2b36SAndroid Build Coastguard Worker "framework-minus-apex.ravenwood", 81*333d2b36SAndroid Build Coastguard Worker "framework-services.ravenwood", 82*333d2b36SAndroid Build Coastguard Worker ], 83*333d2b36SAndroid Build Coastguard Worker jni_libs: [ 84*333d2b36SAndroid Build Coastguard Worker "ravenwood-runtime-jni1", 85*333d2b36SAndroid Build Coastguard Worker "ravenwood-runtime-jni2", 86*333d2b36SAndroid Build Coastguard Worker ], 87*333d2b36SAndroid Build Coastguard Worker data: [ 88*333d2b36SAndroid Build Coastguard Worker ":app1", 89*333d2b36SAndroid Build Coastguard Worker ], 90*333d2b36SAndroid Build Coastguard Worker fonts: [ 91*333d2b36SAndroid Build Coastguard Worker ":Font.ttf" 92*333d2b36SAndroid Build Coastguard Worker ], 93*333d2b36SAndroid Build Coastguard Worker } 94*333d2b36SAndroid Build Coastguard Worker android_ravenwood_libgroup { 95*333d2b36SAndroid Build Coastguard Worker name: "ravenwood-utils", 96*333d2b36SAndroid Build Coastguard Worker libs: [ 97*333d2b36SAndroid Build Coastguard Worker "framework-rules.ravenwood", 98*333d2b36SAndroid Build Coastguard Worker ], 99*333d2b36SAndroid Build Coastguard Worker } 100*333d2b36SAndroid Build Coastguard Worker `), 101*333d2b36SAndroid Build Coastguard Worker) 102*333d2b36SAndroid Build Coastguard Worker 103*333d2b36SAndroid Build Coastguard Workervar installPathPrefix = "out/soong/host/linux-x86/testcases" 104*333d2b36SAndroid Build Coastguard Worker 105*333d2b36SAndroid Build Coastguard Workerfunc TestRavenwoodRuntime(t *testing.T) { 106*333d2b36SAndroid Build Coastguard Worker if runtime.GOOS != "linux" { 107*333d2b36SAndroid Build Coastguard Worker t.Skip("requires linux") 108*333d2b36SAndroid Build Coastguard Worker } 109*333d2b36SAndroid Build Coastguard Worker 110*333d2b36SAndroid Build Coastguard Worker ctx := android.GroupFixturePreparers( 111*333d2b36SAndroid Build Coastguard Worker PrepareForIntegrationTestWithJava, 112*333d2b36SAndroid Build Coastguard Worker etc.PrepareForTestWithPrebuiltEtc, 113*333d2b36SAndroid Build Coastguard Worker prepareRavenwoodRuntime, 114*333d2b36SAndroid Build Coastguard Worker ).RunTest(t) 115*333d2b36SAndroid Build Coastguard Worker 116*333d2b36SAndroid Build Coastguard Worker // Verify that our runtime depends on underlying libs 117*333d2b36SAndroid Build Coastguard Worker CheckModuleHasDependency(t, ctx.TestContext, "ravenwood-runtime", "android_common", "framework-minus-apex.ravenwood") 118*333d2b36SAndroid Build Coastguard Worker CheckModuleHasDependency(t, ctx.TestContext, "ravenwood-runtime", "android_common", "framework-services.ravenwood") 119*333d2b36SAndroid Build Coastguard Worker CheckModuleHasDependency(t, ctx.TestContext, "ravenwood-runtime", "android_common", "ravenwood-runtime-jni") 120*333d2b36SAndroid Build Coastguard Worker CheckModuleHasDependency(t, ctx.TestContext, "ravenwood-utils", "android_common", "framework-rules.ravenwood") 121*333d2b36SAndroid Build Coastguard Worker 122*333d2b36SAndroid Build Coastguard Worker // Verify that we've emitted artifacts in expected location 123*333d2b36SAndroid Build Coastguard Worker runtime := ctx.ModuleForTests("ravenwood-runtime", "android_common") 124*333d2b36SAndroid Build Coastguard Worker runtime.Output(installPathPrefix + "/ravenwood-runtime/framework-minus-apex.ravenwood.jar") 125*333d2b36SAndroid Build Coastguard Worker runtime.Output(installPathPrefix + "/ravenwood-runtime/framework-services.ravenwood.jar") 126*333d2b36SAndroid Build Coastguard Worker runtime.Output(installPathPrefix + "/ravenwood-runtime/lib64/ravenwood-runtime-jni1.so") 127*333d2b36SAndroid Build Coastguard Worker runtime.Output(installPathPrefix + "/ravenwood-runtime/lib64/libred.so") 128*333d2b36SAndroid Build Coastguard Worker runtime.Output(installPathPrefix + "/ravenwood-runtime/lib64/ravenwood-runtime-jni3.so") 129*333d2b36SAndroid Build Coastguard Worker runtime.Output(installPathPrefix + "/ravenwood-runtime/ravenwood-data/app1.apk") 130*333d2b36SAndroid Build Coastguard Worker runtime.Output(installPathPrefix + "/ravenwood-runtime/fonts/Font.ttf") 131*333d2b36SAndroid Build Coastguard Worker utils := ctx.ModuleForTests("ravenwood-utils", "android_common") 132*333d2b36SAndroid Build Coastguard Worker utils.Output(installPathPrefix + "/ravenwood-utils/framework-rules.ravenwood.jar") 133*333d2b36SAndroid Build Coastguard Worker} 134*333d2b36SAndroid Build Coastguard Worker 135*333d2b36SAndroid Build Coastguard Workerfunc TestRavenwoodTest(t *testing.T) { 136*333d2b36SAndroid Build Coastguard Worker if runtime.GOOS != "linux" { 137*333d2b36SAndroid Build Coastguard Worker t.Skip("requires linux") 138*333d2b36SAndroid Build Coastguard Worker } 139*333d2b36SAndroid Build Coastguard Worker 140*333d2b36SAndroid Build Coastguard Worker ctx := android.GroupFixturePreparers( 141*333d2b36SAndroid Build Coastguard Worker PrepareForIntegrationTestWithJava, 142*333d2b36SAndroid Build Coastguard Worker etc.PrepareForTestWithPrebuiltEtc, 143*333d2b36SAndroid Build Coastguard Worker prepareRavenwoodRuntime, 144*333d2b36SAndroid Build Coastguard Worker ).RunTestWithBp(t, ` 145*333d2b36SAndroid Build Coastguard Worker cc_library_shared { 146*333d2b36SAndroid Build Coastguard Worker name: "jni-lib1", 147*333d2b36SAndroid Build Coastguard Worker host_supported: true, 148*333d2b36SAndroid Build Coastguard Worker srcs: ["jni.cpp"], 149*333d2b36SAndroid Build Coastguard Worker } 150*333d2b36SAndroid Build Coastguard Worker cc_library_shared { 151*333d2b36SAndroid Build Coastguard Worker name: "jni-lib2", 152*333d2b36SAndroid Build Coastguard Worker host_supported: true, 153*333d2b36SAndroid Build Coastguard Worker srcs: ["jni.cpp"], 154*333d2b36SAndroid Build Coastguard Worker stem: "libblue", 155*333d2b36SAndroid Build Coastguard Worker shared_libs: [ 156*333d2b36SAndroid Build Coastguard Worker "jni-lib3", 157*333d2b36SAndroid Build Coastguard Worker ], 158*333d2b36SAndroid Build Coastguard Worker } 159*333d2b36SAndroid Build Coastguard Worker cc_library_shared { 160*333d2b36SAndroid Build Coastguard Worker name: "jni-lib3", 161*333d2b36SAndroid Build Coastguard Worker host_supported: true, 162*333d2b36SAndroid Build Coastguard Worker srcs: ["jni.cpp"], 163*333d2b36SAndroid Build Coastguard Worker stem: "libpink", 164*333d2b36SAndroid Build Coastguard Worker } 165*333d2b36SAndroid Build Coastguard Worker java_defaults { 166*333d2b36SAndroid Build Coastguard Worker name: "ravenwood-test-defaults", 167*333d2b36SAndroid Build Coastguard Worker jni_libs: ["jni-lib2"], 168*333d2b36SAndroid Build Coastguard Worker } 169*333d2b36SAndroid Build Coastguard Worker android_ravenwood_test { 170*333d2b36SAndroid Build Coastguard Worker name: "ravenwood-test", 171*333d2b36SAndroid Build Coastguard Worker srcs: ["Test.java"], 172*333d2b36SAndroid Build Coastguard Worker defaults: ["ravenwood-test-defaults"], 173*333d2b36SAndroid Build Coastguard Worker jni_libs: [ 174*333d2b36SAndroid Build Coastguard Worker "jni-lib1", 175*333d2b36SAndroid Build Coastguard Worker "ravenwood-runtime-jni2", 176*333d2b36SAndroid Build Coastguard Worker ], 177*333d2b36SAndroid Build Coastguard Worker resource_apk: "app2", 178*333d2b36SAndroid Build Coastguard Worker inst_resource_apk: "app3", 179*333d2b36SAndroid Build Coastguard Worker sdk_version: "test_current", 180*333d2b36SAndroid Build Coastguard Worker target_sdk_version: "34", 181*333d2b36SAndroid Build Coastguard Worker package_name: "a.b.c", 182*333d2b36SAndroid Build Coastguard Worker inst_package_name: "x.y.z", 183*333d2b36SAndroid Build Coastguard Worker } 184*333d2b36SAndroid Build Coastguard Worker android_ravenwood_test { 185*333d2b36SAndroid Build Coastguard Worker name: "ravenwood-test-empty", 186*333d2b36SAndroid Build Coastguard Worker } 187*333d2b36SAndroid Build Coastguard Worker `) 188*333d2b36SAndroid Build Coastguard Worker 189*333d2b36SAndroid Build Coastguard Worker // Verify that our test depends on underlying libs 190*333d2b36SAndroid Build Coastguard Worker CheckModuleHasDependency(t, ctx.TestContext, "ravenwood-test", "android_common", "ravenwood-buildtime") 191*333d2b36SAndroid Build Coastguard Worker CheckModuleHasDependency(t, ctx.TestContext, "ravenwood-test", "android_common", "ravenwood-utils") 192*333d2b36SAndroid Build Coastguard Worker CheckModuleHasDependency(t, ctx.TestContext, "ravenwood-test", "android_common", "jni-lib") 193*333d2b36SAndroid Build Coastguard Worker 194*333d2b36SAndroid Build Coastguard Worker module := ctx.ModuleForTests("ravenwood-test", "android_common") 195*333d2b36SAndroid Build Coastguard Worker classpath := module.Rule("javac").Args["classpath"] 196*333d2b36SAndroid Build Coastguard Worker 197*333d2b36SAndroid Build Coastguard Worker // Verify that we're linking against test_current 198*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "classpath", classpath, "android_test_stubs_current.jar") 199*333d2b36SAndroid Build Coastguard Worker // Verify that we're linking against utils 200*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesContain(t, "classpath", classpath, "framework-rules.ravenwood.jar") 201*333d2b36SAndroid Build Coastguard Worker // Verify that we're *NOT* linking against runtime 202*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesNotContain(t, "classpath", classpath, "framework-minus-apex.ravenwood.jar") 203*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesNotContain(t, "classpath", classpath, "framework-services.ravenwood.jar") 204*333d2b36SAndroid Build Coastguard Worker 205*333d2b36SAndroid Build Coastguard Worker // Verify that we've emitted test artifacts in expected location 206*333d2b36SAndroid Build Coastguard Worker outputJar := module.Output(installPathPrefix + "/ravenwood-test/ravenwood-test.jar") 207*333d2b36SAndroid Build Coastguard Worker module.Output(installPathPrefix + "/ravenwood-test/ravenwood-test.config") 208*333d2b36SAndroid Build Coastguard Worker module.Output(installPathPrefix + "/ravenwood-test/ravenwood.properties") 209*333d2b36SAndroid Build Coastguard Worker module.Output(installPathPrefix + "/ravenwood-test/lib64/jni-lib1.so") 210*333d2b36SAndroid Build Coastguard Worker module.Output(installPathPrefix + "/ravenwood-test/lib64/libblue.so") 211*333d2b36SAndroid Build Coastguard Worker module.Output(installPathPrefix + "/ravenwood-test/lib64/libpink.so") 212*333d2b36SAndroid Build Coastguard Worker module.Output(installPathPrefix + "/ravenwood-test/ravenwood-res-apks/ravenwood-res.apk") 213*333d2b36SAndroid Build Coastguard Worker module.Output(installPathPrefix + "/ravenwood-test/ravenwood-res-apks/ravenwood-inst-res.apk") 214*333d2b36SAndroid Build Coastguard Worker 215*333d2b36SAndroid Build Coastguard Worker module = ctx.ModuleForTests("ravenwood-test-empty", "android_common") 216*333d2b36SAndroid Build Coastguard Worker module.Output(installPathPrefix + "/ravenwood-test-empty/ravenwood.properties") 217*333d2b36SAndroid Build Coastguard Worker 218*333d2b36SAndroid Build Coastguard Worker // ravenwood-runtime*.so are included in the runtime, so it shouldn't be emitted. 219*333d2b36SAndroid Build Coastguard Worker for _, o := range module.AllOutputs() { 220*333d2b36SAndroid Build Coastguard Worker android.AssertStringDoesNotContain(t, "runtime libs shouldn't be included", o, "/ravenwood-test/lib64/ravenwood-runtime") 221*333d2b36SAndroid Build Coastguard Worker } 222*333d2b36SAndroid Build Coastguard Worker 223*333d2b36SAndroid Build Coastguard Worker // Verify that we're going to install underlying libs 224*333d2b36SAndroid Build Coastguard Worker orderOnly := outputJar.OrderOnly.Strings() 225*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContains(t, "orderOnly", orderOnly, installPathPrefix+"/ravenwood-runtime/framework-minus-apex.ravenwood.jar") 226*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContains(t, "orderOnly", orderOnly, installPathPrefix+"/ravenwood-runtime/framework-services.ravenwood.jar") 227*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContains(t, "orderOnly", orderOnly, installPathPrefix+"/ravenwood-runtime/lib64/ravenwood-runtime-jni1.so") 228*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContains(t, "orderOnly", orderOnly, installPathPrefix+"/ravenwood-runtime/lib64/libred.so") 229*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContains(t, "orderOnly", orderOnly, installPathPrefix+"/ravenwood-runtime/lib64/ravenwood-runtime-jni3.so") 230*333d2b36SAndroid Build Coastguard Worker android.AssertStringListContains(t, "orderOnly", orderOnly, installPathPrefix+"/ravenwood-utils/framework-rules.ravenwood.jar") 231*333d2b36SAndroid Build Coastguard Worker} 232