• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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