xref: /aosp_15_r20/build/soong/java/ravenwood_test.go (revision 333d2b3687b3a337dbcca9d65000bca186795e39)
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