prebuilt_etc_conversion_test.go 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. // Copyright 2021 Google Inc. All rights reserved.
  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 bp2build
  15. import (
  16. "fmt"
  17. "testing"
  18. "android/soong/android"
  19. "android/soong/etc"
  20. )
  21. func runPrebuiltEtcTestCase(t *testing.T, tc Bp2buildTestCase) {
  22. t.Helper()
  23. (&tc).ModuleTypeUnderTest = "prebuilt_etc"
  24. (&tc).ModuleTypeUnderTestFactory = etc.PrebuiltEtcFactory
  25. RunBp2BuildTestCase(t, registerPrebuiltEtcModuleTypes, tc)
  26. }
  27. func registerPrebuiltEtcModuleTypes(ctx android.RegistrationContext) {
  28. }
  29. func TestPrebuiltEtcSimple(t *testing.T) {
  30. runPrebuiltEtcTestCase(t, Bp2buildTestCase{
  31. Description: "prebuilt_etc - simple example",
  32. Filesystem: map[string]string{},
  33. Blueprint: `
  34. prebuilt_etc {
  35. name: "apex_tz_version",
  36. src: "version/tz_version",
  37. filename: "tz_version",
  38. sub_dir: "tz",
  39. installable: false,
  40. }
  41. `,
  42. ExpectedBazelTargets: []string{
  43. MakeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{
  44. "filename": `"tz_version"`,
  45. "installable": `False`,
  46. "src": `"version/tz_version"`,
  47. "dir": `"etc/tz"`,
  48. })}})
  49. }
  50. func TestPrebuiltEtcArchVariant(t *testing.T) {
  51. runPrebuiltEtcTestCase(t, Bp2buildTestCase{
  52. Description: "prebuilt_etc - arch variant",
  53. Filesystem: map[string]string{},
  54. Blueprint: `
  55. prebuilt_etc {
  56. name: "apex_tz_version",
  57. src: "version/tz_version",
  58. filename: "tz_version",
  59. sub_dir: "tz",
  60. installable: false,
  61. arch: {
  62. arm: {
  63. src: "arm",
  64. },
  65. arm64: {
  66. src: "arm64",
  67. },
  68. }
  69. }
  70. `,
  71. ExpectedBazelTargets: []string{
  72. MakeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{
  73. "filename": `"tz_version"`,
  74. "installable": `False`,
  75. "src": `select({
  76. "//build/bazel/platforms/arch:arm": "arm",
  77. "//build/bazel/platforms/arch:arm64": "arm64",
  78. "//conditions:default": "version/tz_version",
  79. })`,
  80. "dir": `"etc/tz"`,
  81. })}})
  82. }
  83. func TestPrebuiltEtcArchAndTargetVariant(t *testing.T) {
  84. runPrebuiltEtcTestCase(t, Bp2buildTestCase{
  85. Description: "prebuilt_etc - arch variant",
  86. Filesystem: map[string]string{},
  87. Blueprint: `
  88. prebuilt_etc {
  89. name: "apex_tz_version",
  90. src: "version/tz_version",
  91. filename: "tz_version",
  92. sub_dir: "tz",
  93. installable: false,
  94. arch: {
  95. arm: {
  96. src: "arm",
  97. },
  98. arm64: {
  99. src: "darwin_or_arm64",
  100. },
  101. },
  102. target: {
  103. darwin: {
  104. src: "darwin_or_arm64",
  105. }
  106. },
  107. }
  108. `,
  109. ExpectedBazelTargets: []string{
  110. MakeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{
  111. "filename": `"tz_version"`,
  112. "installable": `False`,
  113. "src": `select({
  114. "//build/bazel/platforms/os_arch:android_arm": "arm",
  115. "//build/bazel/platforms/os_arch:android_arm64": "darwin_or_arm64",
  116. "//build/bazel/platforms/os_arch:darwin_arm64": "darwin_or_arm64",
  117. "//build/bazel/platforms/os_arch:darwin_x86_64": "darwin_or_arm64",
  118. "//build/bazel/platforms/os_arch:linux_bionic_arm64": "darwin_or_arm64",
  119. "//conditions:default": "version/tz_version",
  120. })`,
  121. "dir": `"etc/tz"`,
  122. })}})
  123. }
  124. func TestPrebuiltEtcProductVariables(t *testing.T) {
  125. runPrebuiltEtcTestCase(t, Bp2buildTestCase{
  126. Description: "prebuilt etc - product variables",
  127. Filesystem: map[string]string{},
  128. Blueprint: `
  129. prebuilt_etc {
  130. name: "apex_tz_version",
  131. src: "version/tz_version",
  132. filename: "tz_version",
  133. product_variables: {
  134. native_coverage: {
  135. src: "src1",
  136. },
  137. },
  138. }
  139. `,
  140. ExpectedBazelTargets: []string{
  141. MakeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{
  142. "filename": `"tz_version"`,
  143. "src": `select({
  144. "//build/bazel/product_variables:native_coverage": "src1",
  145. "//conditions:default": "version/tz_version",
  146. })`,
  147. "dir": `"etc"`,
  148. })}})
  149. }
  150. func runPrebuiltUsrShareTestCase(t *testing.T, tc Bp2buildTestCase) {
  151. t.Helper()
  152. (&tc).ModuleTypeUnderTest = "prebuilt_usr_share"
  153. (&tc).ModuleTypeUnderTestFactory = etc.PrebuiltUserShareFactory
  154. RunBp2BuildTestCase(t, registerPrebuiltEtcModuleTypes, tc)
  155. }
  156. func registerPrebuiltUsrShareModuleTypes(ctx android.RegistrationContext) {
  157. }
  158. func TestPrebuiltUsrShareSimple(t *testing.T) {
  159. runPrebuiltUsrShareTestCase(t, Bp2buildTestCase{
  160. Description: "prebuilt_usr_share - simple example",
  161. Filesystem: map[string]string{},
  162. Blueprint: `
  163. prebuilt_usr_share {
  164. name: "apex_tz_version",
  165. src: "version/tz_version",
  166. filename: "tz_version",
  167. sub_dir: "tz",
  168. installable: false,
  169. }
  170. `,
  171. ExpectedBazelTargets: []string{
  172. MakeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{
  173. "filename": `"tz_version"`,
  174. "installable": `False`,
  175. "src": `"version/tz_version"`,
  176. "dir": `"usr/share/tz"`,
  177. })}})
  178. }
  179. func TestPrebuiltEtcNoSubdir(t *testing.T) {
  180. runPrebuiltEtcTestCase(t, Bp2buildTestCase{
  181. Description: "prebuilt_etc - no subdir",
  182. Filesystem: map[string]string{},
  183. Blueprint: `
  184. prebuilt_etc {
  185. name: "apex_tz_version",
  186. src: "version/tz_version",
  187. filename: "tz_version",
  188. installable: false,
  189. }
  190. `,
  191. ExpectedBazelTargets: []string{
  192. MakeBazelTarget("prebuilt_file", "apex_tz_version", AttrNameToString{
  193. "filename": `"tz_version"`,
  194. "installable": `False`,
  195. "src": `"version/tz_version"`,
  196. "dir": `"etc"`,
  197. })}})
  198. }
  199. func TestFilenameAsProperty(t *testing.T) {
  200. runPrebuiltEtcTestCase(t, Bp2buildTestCase{
  201. Description: "prebuilt_etc - filename is specified as a property ",
  202. Filesystem: map[string]string{},
  203. Blueprint: `
  204. prebuilt_etc {
  205. name: "foo",
  206. src: "fooSrc",
  207. filename: "fooFileName",
  208. }
  209. `,
  210. ExpectedBazelTargets: []string{
  211. MakeBazelTarget("prebuilt_file", "foo", AttrNameToString{
  212. "filename": `"fooFileName"`,
  213. "src": `"fooSrc"`,
  214. "dir": `"etc"`,
  215. })}})
  216. }
  217. func TestFileNameFromSrc(t *testing.T) {
  218. runPrebuiltEtcTestCase(t, Bp2buildTestCase{
  219. Description: "prebuilt_etc - filename_from_src is true ",
  220. Filesystem: map[string]string{},
  221. Blueprint: `
  222. prebuilt_etc {
  223. name: "foo",
  224. filename_from_src: true,
  225. src: "fooSrc",
  226. }
  227. `,
  228. ExpectedBazelTargets: []string{
  229. MakeBazelTarget("prebuilt_file", "foo", AttrNameToString{
  230. "filename": `"fooSrc"`,
  231. "src": `"fooSrc"`,
  232. "dir": `"etc"`,
  233. })}})
  234. }
  235. func TestFileNameFromSrcMultipleSrcs(t *testing.T) {
  236. runPrebuiltEtcTestCase(t, Bp2buildTestCase{
  237. Description: "prebuilt_etc - filename_from_src is true but there are multiple srcs",
  238. Filesystem: map[string]string{},
  239. Blueprint: `
  240. prebuilt_etc {
  241. name: "foo",
  242. filename_from_src: true,
  243. arch: {
  244. arm: {
  245. src: "barSrc",
  246. },
  247. arm64: {
  248. src: "bazSrc",
  249. },
  250. }
  251. }
  252. `,
  253. ExpectedBazelTargets: []string{
  254. MakeBazelTarget("prebuilt_file", "foo", AttrNameToString{
  255. "filename_from_src": `True`,
  256. "dir": `"etc"`,
  257. "src": `select({
  258. "//build/bazel/platforms/arch:arm": "barSrc",
  259. "//build/bazel/platforms/arch:arm64": "bazSrc",
  260. "//conditions:default": None,
  261. })`,
  262. })}})
  263. }
  264. func TestFilenameFromModuleName(t *testing.T) {
  265. runPrebuiltEtcTestCase(t, Bp2buildTestCase{
  266. Description: "prebuilt_etc - neither filename nor filename_from_src are specified ",
  267. Filesystem: map[string]string{},
  268. Blueprint: `
  269. prebuilt_etc {
  270. name: "foo",
  271. }
  272. `,
  273. ExpectedBazelTargets: []string{
  274. MakeBazelTarget("prebuilt_file", "foo", AttrNameToString{
  275. "filename": `"foo"`,
  276. "dir": `"etc"`,
  277. })}})
  278. }
  279. func TestPrebuiltEtcProductVariableArchSrcs(t *testing.T) {
  280. runPrebuiltEtcTestCase(t, Bp2buildTestCase{
  281. Description: "prebuilt etc- SRcs from arch variant product variables",
  282. Filesystem: map[string]string{},
  283. Blueprint: `
  284. prebuilt_etc {
  285. name: "foo",
  286. filename: "fooFilename",
  287. arch: {
  288. arm: {
  289. src: "armSrc",
  290. product_variables: {
  291. native_coverage: {
  292. src: "nativeCoverageArmSrc",
  293. },
  294. },
  295. },
  296. },
  297. }`,
  298. ExpectedBazelTargets: []string{
  299. MakeBazelTarget("prebuilt_file", "foo", AttrNameToString{
  300. "filename": `"fooFilename"`,
  301. "dir": `"etc"`,
  302. "src": `select({
  303. "//build/bazel/platforms/arch:arm": "armSrc",
  304. "//build/bazel/product_variables:native_coverage-arm": "nativeCoverageArmSrc",
  305. "//conditions:default": None,
  306. })`,
  307. })}})
  308. }
  309. func TestPrebuiltEtcProductVariableError(t *testing.T) {
  310. runPrebuiltEtcTestCase(t, Bp2buildTestCase{
  311. Description: "",
  312. Filesystem: map[string]string{},
  313. Blueprint: `
  314. prebuilt_etc {
  315. name: "foo",
  316. filename: "fooFilename",
  317. arch: {
  318. arm: {
  319. src: "armSrc",
  320. },
  321. },
  322. product_variables: {
  323. native_coverage: {
  324. src: "nativeCoverageArmSrc",
  325. },
  326. },
  327. }`,
  328. ExpectedErr: fmt.Errorf("label attribute could not be collapsed"),
  329. })
  330. }