blob: 2a17cdc3aaa0db87cdb9dd42b364078aef272582 [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"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000122 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000123 min_sdk_version: "2",
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000124 permitted_packages: ["mylib"],
125}
126
127prebuilt_systemserverclasspath_fragment {
128 name: "mysystemserverclasspathfragment",
129 prefer: false,
130 visibility: ["//visibility:public"],
131 apex_available: ["myapex"],
132 contents: [
133 "mylib",
134 "mysdklibrary",
135 ],
136}
137`
138
Paul Duffinf861df72022-07-01 15:56:06 +0000139 t.Run("target-s", func(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000140 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "S", `
Paul Duffinf861df72022-07-01 15:56:06 +0000141// This is auto-generated. DO NOT EDIT.
142
143java_sdk_library_import {
144 name: "mysdklibrary",
145 prefer: false,
146 visibility: ["//visibility:public"],
147 apex_available: ["myapex"],
148 shared_library: false,
149 public: {
150 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
151 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
152 current_api: "sdk_library/public/mysdklibrary.txt",
153 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
154 sdk_version: "current",
155 },
156}
157`)
158 })
159
160 t.Run("target-t", func(t *testing.T) {
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000161 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "Tiramisu", `
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000162// This is auto-generated. DO NOT EDIT.
163
164java_sdk_library_import {
165 name: "mysdklibrary",
166 prefer: false,
167 visibility: ["//visibility:public"],
168 apex_available: ["myapex"],
169 shared_library: false,
170 public: {
171 jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
172 stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
173 current_api: "sdk_library/public/mysdklibrary.txt",
174 removed_api: "sdk_library/public/mysdklibrary-removed.txt",
175 sdk_version: "current",
176 },
177}
178
179java_import {
180 name: "mylib",
181 prefer: false,
182 visibility: ["//visibility:public"],
183 apex_available: ["myapex"],
Paul Duffin7ed6ff82022-11-21 10:57:30 +0000184 jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
Paul Duffinbb638eb2022-11-26 13:36:38 +0000185 min_sdk_version: "2",
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000186 permitted_packages: ["mylib"],
187}
188
189prebuilt_systemserverclasspath_fragment {
190 name: "mysystemserverclasspathfragment",
191 prefer: false,
192 visibility: ["//visibility:public"],
193 apex_available: ["myapex"],
194 contents: [
195 "mylib",
196 "mysdklibrary",
197 ],
198}
Paul Duffinf861df72022-07-01 15:56:06 +0000199`)
200 })
Paul Duffin4e7d1c42022-05-13 13:12:19 +0000201
202 t.Run("added-directly", func(t *testing.T) {
203 testSnapshotWithSystemServerClasspathFragment(t, commonSdk, `latest`, expectedLatestSnapshot)
204 })
205
206 t.Run("added-via-apex", func(t *testing.T) {
207 testSnapshotWithSystemServerClasspathFragment(t, `
208 sdk {
209 name: "mysdk",
210 apexes: ["myapex"],
211 }
212 `, `latest`, expectedLatestSnapshot)
213 })
Jiakai Zhanga8d86602021-09-26 09:02:17 +0000214}