systemserverclasspath_fragment_sdk_test.go 8.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319
  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. package sdk
  15. import (
  16. "testing"
  17. "android/soong/android"
  18. "android/soong/dexpreopt"
  19. "android/soong/java"
  20. )
  21. func testSnapshotWithSystemServerClasspathFragment(t *testing.T, sdk string, targetBuildRelease string, expectedSdkSnapshot string) {
  22. result := android.GroupFixturePreparers(
  23. prepareForSdkTestWithJava,
  24. java.PrepareForTestWithJavaDefaultModules,
  25. java.PrepareForTestWithJavaSdkLibraryFiles,
  26. java.FixtureWithLastReleaseApis("mysdklibrary"),
  27. dexpreopt.FixtureSetApexSystemServerJars("myapex:mylib", "myapex:mysdklibrary"),
  28. android.FixtureModifyEnv(func(env map[string]string) {
  29. if targetBuildRelease != "latest" {
  30. env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = targetBuildRelease
  31. }
  32. }),
  33. prepareForSdkTestWithApex,
  34. android.FixtureWithRootAndroidBp(sdk+`
  35. apex {
  36. name: "myapex",
  37. key: "myapex.key",
  38. min_sdk_version: "2",
  39. systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
  40. }
  41. systemserverclasspath_fragment {
  42. name: "mysystemserverclasspathfragment",
  43. apex_available: ["myapex"],
  44. contents: [
  45. "mylib",
  46. "mysdklibrary",
  47. ],
  48. }
  49. java_library {
  50. name: "mylib",
  51. apex_available: ["myapex"],
  52. srcs: ["Test.java"],
  53. system_modules: "none",
  54. sdk_version: "none",
  55. min_sdk_version: "2",
  56. compile_dex: true,
  57. permitted_packages: ["mylib"],
  58. dex_preopt: {
  59. profile: "art-profile",
  60. },
  61. }
  62. java_sdk_library {
  63. name: "mysdklibrary",
  64. apex_available: ["myapex"],
  65. srcs: ["Test.java"],
  66. shared_library: false,
  67. public: {enabled: true},
  68. min_sdk_version: "2",
  69. dex_preopt: {
  70. profile: "art-profile",
  71. },
  72. }
  73. `),
  74. ).RunTest(t)
  75. CheckSnapshot(t, result, "mysdk", "",
  76. checkAndroidBpContents(expectedSdkSnapshot),
  77. )
  78. }
  79. func TestSnapshotWithEmptySystemServerClasspathFragment(t *testing.T) {
  80. commonSdk := `
  81. apex {
  82. name: "myapex",
  83. key: "myapex.key",
  84. min_sdk_version: "Tiramisu",
  85. systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
  86. }
  87. systemserverclasspath_fragment {
  88. name: "mysystemserverclasspathfragment",
  89. apex_available: ["myapex"],
  90. contents: ["mysdklibrary"],
  91. }
  92. java_sdk_library {
  93. name: "mysdklibrary",
  94. apex_available: ["myapex"],
  95. srcs: ["Test.java"],
  96. min_sdk_version: "34", // UpsideDownCake
  97. }
  98. sdk {
  99. name: "mysdk",
  100. apexes: ["myapex"],
  101. }
  102. `
  103. result := android.GroupFixturePreparers(
  104. prepareForSdkTestWithJava,
  105. java.PrepareForTestWithJavaDefaultModules,
  106. java.PrepareForTestWithJavaSdkLibraryFiles,
  107. java.FixtureWithLastReleaseApis("mysdklibrary"),
  108. dexpreopt.FixtureSetApexSystemServerJars("myapex:mysdklibrary"),
  109. android.FixtureModifyEnv(func(env map[string]string) {
  110. // targeting Tiramisu here means that we won't export mysdklibrary
  111. env["SOONG_SDK_SNAPSHOT_TARGET_BUILD_RELEASE"] = "Tiramisu"
  112. }),
  113. android.FixtureModifyProductVariables(func(variables android.FixtureProductVariables) {
  114. variables.Platform_version_active_codenames = []string{"UpsideDownCake"}
  115. }),
  116. prepareForSdkTestWithApex,
  117. android.FixtureWithRootAndroidBp(commonSdk),
  118. ).RunTest(t)
  119. CheckSnapshot(t, result, "mysdk", "", checkAndroidBpContents(`// This is auto-generated. DO NOT EDIT.`))
  120. }
  121. func TestSnapshotWithSystemServerClasspathFragment(t *testing.T) {
  122. commonSdk := `
  123. sdk {
  124. name: "mysdk",
  125. systemserverclasspath_fragments: ["mysystemserverclasspathfragment"],
  126. java_sdk_libs: [
  127. // This is not strictly needed as it should be automatically added to the sdk_snapshot as
  128. // a java_sdk_libs module because it is used in the mysystemserverclasspathfragment's
  129. // contents property. However, it is specified here to ensure that duplicates are
  130. // correctly deduped.
  131. "mysdklibrary",
  132. ],
  133. }
  134. `
  135. expectedLatestSnapshot := `
  136. // This is auto-generated. DO NOT EDIT.
  137. java_sdk_library_import {
  138. name: "mysdklibrary",
  139. prefer: false,
  140. visibility: ["//visibility:public"],
  141. apex_available: ["myapex"],
  142. shared_library: false,
  143. dex_preopt: {
  144. profile_guided: true,
  145. },
  146. public: {
  147. jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
  148. stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
  149. current_api: "sdk_library/public/mysdklibrary.txt",
  150. removed_api: "sdk_library/public/mysdklibrary-removed.txt",
  151. sdk_version: "current",
  152. },
  153. }
  154. java_import {
  155. name: "mylib",
  156. prefer: false,
  157. visibility: ["//visibility:public"],
  158. apex_available: ["myapex"],
  159. jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
  160. min_sdk_version: "2",
  161. permitted_packages: ["mylib"],
  162. dex_preopt: {
  163. profile_guided: true,
  164. },
  165. }
  166. prebuilt_systemserverclasspath_fragment {
  167. name: "mysystemserverclasspathfragment",
  168. prefer: false,
  169. visibility: ["//visibility:public"],
  170. apex_available: ["myapex"],
  171. contents: [
  172. "mylib",
  173. "mysdklibrary",
  174. ],
  175. }
  176. `
  177. t.Run("target-s", func(t *testing.T) {
  178. testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "S", `
  179. // This is auto-generated. DO NOT EDIT.
  180. java_sdk_library_import {
  181. name: "mysdklibrary",
  182. prefer: false,
  183. visibility: ["//visibility:public"],
  184. apex_available: ["myapex"],
  185. shared_library: false,
  186. public: {
  187. jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
  188. stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
  189. current_api: "sdk_library/public/mysdklibrary.txt",
  190. removed_api: "sdk_library/public/mysdklibrary-removed.txt",
  191. sdk_version: "current",
  192. },
  193. }
  194. `)
  195. })
  196. t.Run("target-t", func(t *testing.T) {
  197. testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "Tiramisu", `
  198. // This is auto-generated. DO NOT EDIT.
  199. java_sdk_library_import {
  200. name: "mysdklibrary",
  201. prefer: false,
  202. visibility: ["//visibility:public"],
  203. apex_available: ["myapex"],
  204. shared_library: false,
  205. public: {
  206. jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
  207. stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
  208. current_api: "sdk_library/public/mysdklibrary.txt",
  209. removed_api: "sdk_library/public/mysdklibrary-removed.txt",
  210. sdk_version: "current",
  211. },
  212. }
  213. java_import {
  214. name: "mylib",
  215. prefer: false,
  216. visibility: ["//visibility:public"],
  217. apex_available: ["myapex"],
  218. jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
  219. min_sdk_version: "2",
  220. permitted_packages: ["mylib"],
  221. }
  222. prebuilt_systemserverclasspath_fragment {
  223. name: "mysystemserverclasspathfragment",
  224. prefer: false,
  225. visibility: ["//visibility:public"],
  226. apex_available: ["myapex"],
  227. contents: [
  228. "mylib",
  229. "mysdklibrary",
  230. ],
  231. }
  232. `)
  233. })
  234. t.Run("target-u", func(t *testing.T) {
  235. testSnapshotWithSystemServerClasspathFragment(t, commonSdk, "UpsideDownCake", `
  236. // This is auto-generated. DO NOT EDIT.
  237. java_sdk_library_import {
  238. name: "mysdklibrary",
  239. prefer: false,
  240. visibility: ["//visibility:public"],
  241. apex_available: ["myapex"],
  242. shared_library: false,
  243. dex_preopt: {
  244. profile_guided: true,
  245. },
  246. public: {
  247. jars: ["sdk_library/public/mysdklibrary-stubs.jar"],
  248. stub_srcs: ["sdk_library/public/mysdklibrary_stub_sources"],
  249. current_api: "sdk_library/public/mysdklibrary.txt",
  250. removed_api: "sdk_library/public/mysdklibrary-removed.txt",
  251. sdk_version: "current",
  252. },
  253. }
  254. java_import {
  255. name: "mylib",
  256. prefer: false,
  257. visibility: ["//visibility:public"],
  258. apex_available: ["myapex"],
  259. jars: ["java_systemserver_libs/snapshot/jars/are/invalid/mylib.jar"],
  260. min_sdk_version: "2",
  261. permitted_packages: ["mylib"],
  262. dex_preopt: {
  263. profile_guided: true,
  264. },
  265. }
  266. prebuilt_systemserverclasspath_fragment {
  267. name: "mysystemserverclasspathfragment",
  268. prefer: false,
  269. visibility: ["//visibility:public"],
  270. apex_available: ["myapex"],
  271. contents: [
  272. "mylib",
  273. "mysdklibrary",
  274. ],
  275. }
  276. `)
  277. })
  278. t.Run("added-directly", func(t *testing.T) {
  279. testSnapshotWithSystemServerClasspathFragment(t, commonSdk, `latest`, expectedLatestSnapshot)
  280. })
  281. t.Run("added-via-apex", func(t *testing.T) {
  282. testSnapshotWithSystemServerClasspathFragment(t, `
  283. sdk {
  284. name: "mysdk",
  285. apexes: ["myapex"],
  286. }
  287. `, `latest`, expectedLatestSnapshot)
  288. })
  289. }