blob: 1ac405d7d88bd668b2260eaa2a07b52aa99fb9d1 [file] [log] [blame]
Jiakai Zhanga8d86602021-09-26 09:02:17 +00001// 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 sdk
16
17import (
18 "testing"
19
20 "android/soong/android"
21 "android/soong/dexpreopt"
22 "android/soong/java"
23)
24
Paul Duffin4e7d1c42022-05-13 13:12:19 +000025func testSnapshotWithSystemServerClasspathFragment(t *testing.T, sdk string, targetBuildRelease string, expectedSdkSnapshot string) {
Jiakai Zhanga8d86602021-09-26 09:02:17 +000026 result := android.GroupFixturePreparers(
27 prepareForSdkTestWithJava,
28 java.PrepareForTestWithJavaDefaultModules,
29 java.PrepareForTestWithJavaSdkLibraryFiles,
30 java.FixtureWithLastReleaseApis("mysdklibrary"),
31 dexpreopt.FixtureSetApexSystemServerJars("myapex:mylib", "myapex:mysdklibrary"),
Paul Duffinf861df72022-07-01 15:56:06 +000032 android.FixtureModifyEnv(func(env map[string]string) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +000033 if targetBuildRelease != "latest" {
34 env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = targetBuildRelease
35 }
Paul Duffinf861df72022-07-01 15:56:06 +000036 }),
Jiakai Zhanga8d86602021-09-26 09:02:17 +000037 prepareForSdkTestWithApex,
38
Paul Duffin4e7d1c42022-05-13 13:12:19 +000039 android.FixtureWithRootAndroidBp(sdk+`
Jiakai Zhanga8d86602021-09-26 09:02:17 +000040 apex {
41 name: "myapex",
42 key: "myapex.key",
43 min_sdk_version: "2",
44 systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
45 }
46
47 systemserverclasspath_fragment {
48 name: "mysystemserverclasspathfragment",
49 apex_available: ["myapex"],
50 contents: [
51 "mylib",
52 "mysdklibrary",
53 ],
54 }
55
56 java_library {
57 name: "mylib",
58 apex_available: ["myapex"],
59 srcs: ["Test.java"],
60 system_modules: "none",
61 sdk_version: "none",
62 min_sdk_version: "2",
63 compile_dex: true,
64 permitted_packages: ["mylib"],
65 }
66
67 java_sdk_library {
68 name: "mysdklibrary",
69 apex_available: ["myapex"],
70 srcs: ["Test.java"],
71 shared_library: false,
72 public: {enabled: true},
73 min_sdk_version: "2",
74 }
75 `),
76 ).RunTest(t)
77
78 CheckSnapshot(t, result, "mysdk", "",
Paul Duffinf861df72022-07-01 15:56:06 +000079 checkAndroidBpContents(expectedSdkSnapshot),
80 )
81}
82
83func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +000084
85 commonSdk := `
86sdk {
87 name: "mysdk",
88 systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
89 java_sdk_libs: [
90 // This is not strictly needed as it should be automatically added to the sdk_snapshot as
91 // a java_sdk_libs module because it is used in the mysystemserverclasspathfragment's
92 // contents property. However, it is specified here to ensure that duplicates are
93 // correctly deduped.
94 "mysdklibrary",
95 ],
96}
97 `
98
99 expectedLatestSnapshot := `
100// This is auto-generated. DO NOT EDIT.
101
102java_sdk_library_import {
103 name: "mysdklibrary",
104 prefer: false,
105 visibility: ["//visibility:public"],
106 apex_available: ["myapex"],
107 shared_library: false,
108 public: {
109 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
110 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
111 current_api: "sdk_library/public/mysdklibrary.txt",
112 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
113 sdk_version: "current",
114 },
115}
116
117java_import {
118 name: "mylib",
119 prefer: false,
120 visibility: ["//visibility:public"],
121 apex_available: ["myapex"],
122 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
123 permitted_packages: ["mylib"],
124}
125
126prebuilt_systemserverclasspath_fragment {
127 name: "mysystemserverclasspathfragment",
128 prefer: false,
129 visibility: ["//visibility:public"],
130 apex_available: ["myapex"],
131 contents: [
132 "mylib",
133 "mysdklibrary",
134 ],
135}
136`
137
Paul Duffinf861df72022-07-01 15:56:06 +0000138 t.Run("target-s", func(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000139 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "S", `
Paul Duffinf861df72022-07-01 15:56:06 +0000140// This is auto-generated. DO NOT EDIT.
141
142java_sdk_library_import {
143 name: "mysdklibrary",
144 prefer: false,
145 visibility: ["//visibility:public"],
146 apex_available: ["myapex"],
147 shared_library: false,
148 public: {
149 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
150 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
151 current_api: "sdk_library/public/mysdklibrary.txt",
152 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
153 sdk_version: "current",
154 },
155}
156`)
157 })
158
159 t.Run("target-t", func(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000160 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "Tiramisu", `
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000161// This is auto-generated. DO NOT EDIT.
162
163java_sdk_library_import {
164 name: "mysdklibrary",
165 prefer: false,
166 visibility: ["//visibility:public"],
167 apex_available: ["myapex"],
168 shared_library: false,
169 public: {
170 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
171 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
172 current_api: "sdk_library/public/mysdklibrary.txt",
173 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
174 sdk_version: "current",
175 },
176}
177
178java_import {
179 name: "mylib",
180 prefer: false,
181 visibility: ["//visibility:public"],
182 apex_available: ["myapex"],
183 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
184 permitted_packages: ["mylib"],
185}
186
187prebuilt_systemserverclasspath_fragment {
188 name: "mysystemserverclasspathfragment",
189 prefer: false,
190 visibility: ["//visibility:public"],
191 apex_available: ["myapex"],
192 contents: [
193 "mylib",
194 "mysdklibrary",
195 ],
196}
Paul Duffinf861df72022-07-01 15:56:06 +0000197`)
198 })
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000199
200 t.Run("added-directly", func(t *testing.T) {
201 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, `latest`, expectedLatestSnapshot)
202 })
203
204 t.Run("added-via-apex", func(t *testing.T) {
205 testSnapshotWithSystemServerClasspathFragment(t, `
206 sdk {
207 name: "mysdk",
208 apexes: ["myapex"],
209 }
210 `, `latest`, expectedLatestSnapshot)
211 })
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000212}