summaryrefslogtreecommitdiff
path: root/apex/bp2build_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'apex/bp2build_test.go')
-rw-r--r--apex/bp2build_test.go545
1 files changed, 0 insertions, 545 deletions
diff --git a/apex/bp2build_test.go b/apex/bp2build_test.go
deleted file mode 100644
index 6bab67dbe..000000000
--- a/apex/bp2build_test.go
+++ /dev/null
@@ -1,545 +0,0 @@
-// Copyright 2022 Google Inc. All rights reserved.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-package apex
-
-import (
- "android/soong/android"
- "android/soong/android/allowlists"
- "android/soong/bazel/cquery"
- "fmt"
- "path/filepath"
- "strings"
- "testing"
-)
-
-func TestApexImageInMixedBuilds(t *testing.T) {
- bp := `
-apex_key{
- name: "foo_key",
-}
-
-apex {
- name: "foo",
- key: "foo_key",
- updatable: true,
- min_sdk_version: "31",
- file_contexts: ":myapex-file_contexts",
- bazel_module: { label: "//:foo" },
-}`
-
- outputBaseDir := "out/bazel"
- result := android.GroupFixturePreparers(
- prepareForApexTest,
- android.FixtureModifyConfig(func(config android.Config) {
- config.BazelContext = android.MockBazelContext{
- OutputBaseDir: outputBaseDir,
- LabelToApexInfo: map[string]cquery.ApexInfo{
- "//:foo": cquery.ApexInfo{
- // ApexInfo Starlark provider.
- SignedOutput: "signed_out.apex",
- SignedCompressedOutput: "signed_out.capex",
- UnsignedOutput: "unsigned_out.apex",
- BundleKeyInfo: []string{"public_key", "private_key"},
- ContainerKeyInfo: []string{"container_cert", "container_private"},
- SymbolsUsedByApex: "foo_using.txt",
- JavaSymbolsUsedByApex: "foo_using.xml",
- BundleFile: "apex_bundle.zip",
- InstalledFiles: "installed-files.txt",
- RequiresLibs: []string{"//path/c:c", "//path/d:d"},
-
- // unused
- PackageName: "pkg_name",
- ProvidesLibs: []string{"a", "b"},
-
- // ApexMkInfo Starlark provider
- PayloadFilesInfo: []map[string]string{
- {
- "built_file": "bazel-out/adbd",
- "install_dir": "bin",
- "class": "nativeExecutable",
- "make_module_name": "adbd",
- "basename": "adbd",
- "package": "foo",
- },
- },
- MakeModulesToInstall: []string{"c"}, // d deliberately omitted
- },
- },
- }
- }),
- ).RunTestWithBp(t, bp)
-
- m := result.ModuleForTests("foo", "android_common_foo").Module()
- ab, ok := m.(*apexBundle)
-
- if !ok {
- t.Fatalf("Expected module to be an apexBundle, was not")
- }
-
- // TODO: refactor to android.AssertStringEquals
- if w, g := "out/bazel/execroot/__main__/public_key", ab.publicKeyFile.String(); w != g {
- t.Errorf("Expected public key %q, got %q", w, g)
- }
-
- if w, g := "out/bazel/execroot/__main__/private_key", ab.privateKeyFile.String(); w != g {
- t.Errorf("Expected private key %q, got %q", w, g)
- }
-
- if w, g := "out/bazel/execroot/__main__/container_cert", ab.containerCertificateFile.String(); w != g {
- t.Errorf("Expected public container key %q, got %q", w, g)
- }
-
- if w, g := "out/bazel/execroot/__main__/container_private", ab.containerPrivateKeyFile.String(); w != g {
- t.Errorf("Expected private container key %q, got %q", w, g)
- }
-
- if w, g := "out/bazel/execroot/__main__/signed_out.apex", ab.outputFile.String(); w != g {
- t.Errorf("Expected output file %q, got %q", w, g)
- }
-
- if w, g := "out/bazel/execroot/__main__/foo_using.txt", ab.nativeApisUsedByModuleFile.String(); w != g {
- t.Errorf("Expected output file %q, got %q", w, g)
- }
-
- if w, g := "out/bazel/execroot/__main__/foo_using.xml", ab.javaApisUsedByModuleFile.String(); w != g {
- t.Errorf("Expected output file %q, got %q", w, g)
- }
-
- if w, g := "out/bazel/execroot/__main__/installed-files.txt", ab.installedFilesFile.String(); w != g {
- t.Errorf("Expected installed-files.txt %q, got %q", w, g)
- }
-
- mkData := android.AndroidMkDataForTest(t, result.TestContext, m)
- var builder strings.Builder
- mkData.Custom(&builder, "foo", "BAZEL_TARGET_", "", mkData)
-
- data := builder.String()
- if w := "ALL_MODULES.$(my_register_name).BUNDLE := out/bazel/execroot/__main__/apex_bundle.zip"; !strings.Contains(data, w) {
- t.Errorf("Expected %q in androidmk data, but did not find %q", w, data)
- }
- if w := "$(call dist-for-goals,checkbuild,out/bazel/execroot/__main__/installed-files.txt:foo-installed-files.txt)"; !strings.Contains(data, w) {
- t.Errorf("Expected %q in androidmk data, but did not find %q", w, data)
- }
-
- // make modules to be installed to system
- if len(ab.makeModulesToInstall) != 1 && ab.makeModulesToInstall[0] != "c" {
- t.Errorf("Expected makeModulesToInstall slice to only contain 'c', got %q", ab.makeModulesToInstall)
- }
- if w := "LOCAL_REQUIRED_MODULES := adbd.foo c"; !strings.Contains(data, w) {
- t.Errorf("Expected %q in androidmk data, but did not find it in %q", w, data)
- }
-}
-
-func TestApexImageCreatesFilesInfoForMake(t *testing.T) {
- bp := `
-apex_key{
- name: "foo_key",
-}
-
-apex {
- name: "foo",
- key: "foo_key",
- updatable: true,
- min_sdk_version: "31",
- file_contexts: ":myapex-file_contexts",
- bazel_module: { label: "//:foo" },
-}`
-
- outputBaseDir := "out/bazel"
- result := android.GroupFixturePreparers(
- prepareForApexTest,
- android.FixtureModifyConfig(func(config android.Config) {
- config.BazelContext = android.MockBazelContext{
- OutputBaseDir: outputBaseDir,
- LabelToApexInfo: map[string]cquery.ApexInfo{
- "//:foo": {
- // ApexInfo Starlark provider. Necessary for the test.
- SignedOutput: "signed_out.apex",
- BundleKeyInfo: []string{"public_key", "private_key"},
- ContainerKeyInfo: []string{"container_cert", "container_private"},
-
- // ApexMkInfo Starlark provider
- PayloadFilesInfo: []map[string]string{
- {
- "arch": "arm64",
- "basename": "libcrypto.so",
- "built_file": "bazel-out/64/libcrypto.so",
- "class": "nativeSharedLib",
- "install_dir": "lib64",
- "make_module_name": "libcrypto",
- "package": "foo/bar",
- "unstripped_built_file": "bazel-out/64/unstripped_libcrypto.so",
- },
- {
- "arch": "arm",
- "basename": "libcrypto.so",
- "built_file": "bazel-out/32/libcrypto.so",
- "class": "nativeSharedLib",
- "install_dir": "lib",
- "make_module_name": "libcrypto",
- "package": "foo/bar",
- },
- {
- "arch": "arm64",
- "basename": "adbd",
- "built_file": "bazel-out/adbd",
- "class": "nativeExecutable",
- "install_dir": "bin",
- "make_module_name": "adbd",
- "package": "foo",
- },
- },
- },
- },
- }
- }),
- ).RunTestWithBp(t, bp)
-
- m := result.ModuleForTests("foo", "android_common_foo").Module()
- ab, ok := m.(*apexBundle)
-
- if !ok {
- t.Fatalf("Expected module to be an apexBundle, was not")
- }
-
- expectedFilesInfo := []apexFile{
- {
- androidMkModuleName: "libcrypto",
- builtFile: android.PathForTesting("out/bazel/execroot/__main__/bazel-out/64/libcrypto.so"),
- class: nativeSharedLib,
- customStem: "libcrypto.so",
- installDir: "lib64",
- moduleDir: "foo/bar",
- arch: "arm64",
- unstrippedBuiltFile: android.PathForTesting("out/bazel/execroot/__main__/bazel-out/64/unstripped_libcrypto.so"),
- },
- {
- androidMkModuleName: "libcrypto",
- builtFile: android.PathForTesting("out/bazel/execroot/__main__/bazel-out/32/libcrypto.so"),
- class: nativeSharedLib,
- customStem: "libcrypto.so",
- installDir: "lib",
- moduleDir: "foo/bar",
- arch: "arm",
- },
- {
- androidMkModuleName: "adbd",
- builtFile: android.PathForTesting("out/bazel/execroot/__main__/bazel-out/adbd"),
- class: nativeExecutable,
- customStem: "adbd",
- installDir: "bin",
- moduleDir: "foo",
- arch: "arm64",
- },
- }
-
- if len(ab.filesInfo) != len(expectedFilesInfo) {
- t.Errorf("Expected %d entries in ab.filesInfo, but got %d", len(ab.filesInfo), len(expectedFilesInfo))
- }
-
- for idx, f := range ab.filesInfo {
- expected := expectedFilesInfo[idx]
- android.AssertSame(t, "different class", expected.class, f.class)
- android.AssertStringEquals(t, "different built file", expected.builtFile.String(), f.builtFile.String())
- android.AssertStringEquals(t, "different custom stem", expected.customStem, f.customStem)
- android.AssertStringEquals(t, "different install dir", expected.installDir, f.installDir)
- android.AssertStringEquals(t, "different make module name", expected.androidMkModuleName, f.androidMkModuleName)
- android.AssertStringEquals(t, "different moduleDir", expected.moduleDir, f.moduleDir)
- android.AssertStringEquals(t, "different arch", expected.arch, f.arch)
- if expected.unstrippedBuiltFile != nil {
- if f.unstrippedBuiltFile == nil {
- t.Errorf("expected an unstripped built file path.")
- }
- android.AssertStringEquals(t, "different unstripped built file", expected.unstrippedBuiltFile.String(), f.unstrippedBuiltFile.String())
- }
- }
-}
-
-func TestCompressedApexImageInMixedBuilds(t *testing.T) {
- bp := `
-apex_key{
- name: "foo_key",
-}
-apex {
- name: "foo",
- key: "foo_key",
- updatable: true,
- min_sdk_version: "31",
- file_contexts: ":myapex-file_contexts",
- bazel_module: { label: "//:foo" },
- test_only_force_compression: true, // force compression
-}`
-
- outputBaseDir := "out/bazel"
- result := android.GroupFixturePreparers(
- prepareForApexTest,
- android.FixtureModifyConfig(func(config android.Config) {
- config.BazelContext = android.MockBazelContext{
- OutputBaseDir: outputBaseDir,
- LabelToApexInfo: map[string]cquery.ApexInfo{
- "//:foo": cquery.ApexInfo{
- SignedOutput: "signed_out.apex",
- SignedCompressedOutput: "signed_out.capex",
- BundleKeyInfo: []string{"public_key", "private_key"},
- ContainerKeyInfo: []string{"container_cert", "container_private"},
- },
- },
- }
- }),
- ).RunTestWithBp(t, bp)
-
- m := result.ModuleForTests("foo", "android_common_foo").Module()
- ab, ok := m.(*apexBundle)
- if !ok {
- t.Fatalf("Expected module to be an apexBundle, was not")
- }
-
- if w, g := "out/bazel/execroot/__main__/signed_out.capex", ab.outputFile.String(); w != g {
- t.Errorf("Expected output file to be compressed apex %q, got %q", w, g)
- }
-
- mkData := android.AndroidMkDataForTest(t, result.TestContext, m)
- var builder strings.Builder
- mkData.Custom(&builder, "foo", "BAZEL_TARGET_", "", mkData)
-
- data := builder.String()
-
- expectedAndroidMk := []string{
- "LOCAL_PREBUILT_MODULE_FILE := out/bazel/execroot/__main__/signed_out.capex",
-
- // Check that the source install file is the capex. The dest is not important.
- "LOCAL_SOONG_INSTALL_PAIRS := out/bazel/execroot/__main__/signed_out.capex:",
- }
- for _, androidMk := range expectedAndroidMk {
- if !strings.Contains(data, androidMk) {
- t.Errorf("Expected %q in androidmk data, but did not find %q", androidMk, data)
- }
- }
-}
-
-func TestOverrideApexImageInMixedBuilds(t *testing.T) {
- originalBp := `
-apex_key{
- name: "foo_key",
-}
-apex_key{
- name: "override_foo_key",
-}
-apex {
- name: "foo",
- key: "foo_key",
- updatable: true,
- min_sdk_version: "31",
- package_name: "pkg_name",
- file_contexts: ":myapex-file_contexts",
- %s
-}`
- overrideBp := `
-override_apex {
- name: "override_foo",
- key: "override_foo_key",
- package_name: "override_pkg_name",
- base: "foo",
- %s
-}
-`
-
- originalApexBpDir := "original"
- originalApexName := "foo"
- overrideApexBpDir := "override"
- overrideApexName := "override_foo"
-
- defaultApexLabel := fmt.Sprintf("//%s:%s", originalApexBpDir, originalApexName)
- defaultOverrideApexLabel := fmt.Sprintf("//%s:%s", overrideApexBpDir, overrideApexName)
-
- testCases := []struct {
- desc string
- bazelModuleProp string
- apexLabel string
- overrideBazelModuleProp string
- overrideApexLabel string
- bp2buildConfiguration android.Bp2BuildConversionAllowlist
- }{
- {
- desc: "both explicit labels",
- bazelModuleProp: `bazel_module: { label: "//:foo" },`,
- apexLabel: "//:foo",
- overrideBazelModuleProp: `bazel_module: { label: "//:override_foo" },`,
- overrideApexLabel: "//:override_foo",
- bp2buildConfiguration: android.NewBp2BuildAllowlist(),
- },
- {
- desc: "both explicitly allowed",
- bazelModuleProp: `bazel_module: { bp2build_available: true },`,
- apexLabel: defaultApexLabel,
- overrideBazelModuleProp: `bazel_module: { bp2build_available: true },`,
- overrideApexLabel: defaultOverrideApexLabel,
- bp2buildConfiguration: android.NewBp2BuildAllowlist(),
- },
- {
- desc: "original allowed by dir, override allowed by name",
- apexLabel: defaultApexLabel,
- overrideApexLabel: defaultOverrideApexLabel,
- bp2buildConfiguration: android.NewBp2BuildAllowlist().SetDefaultConfig(
- map[string]allowlists.BazelConversionConfigEntry{
- originalApexBpDir: allowlists.Bp2BuildDefaultTrue,
- }).SetModuleAlwaysConvertList([]string{
- overrideApexName,
- }),
- },
- {
- desc: "both allowed by name",
- apexLabel: defaultApexLabel,
- overrideApexLabel: defaultOverrideApexLabel,
- bp2buildConfiguration: android.NewBp2BuildAllowlist().SetModuleAlwaysConvertList([]string{
- originalApexName,
- overrideApexName,
- }),
- },
- {
- desc: "override allowed by name",
- apexLabel: defaultApexLabel,
- overrideApexLabel: defaultOverrideApexLabel,
- bp2buildConfiguration: android.NewBp2BuildAllowlist().SetModuleAlwaysConvertList([]string{
- overrideApexName,
- }),
- },
- {
- desc: "override allowed by dir",
- apexLabel: defaultApexLabel,
- overrideApexLabel: defaultOverrideApexLabel,
- bp2buildConfiguration: android.NewBp2BuildAllowlist().SetDefaultConfig(
- map[string]allowlists.BazelConversionConfigEntry{
- overrideApexBpDir: allowlists.Bp2BuildDefaultTrue,
- }).SetModuleAlwaysConvertList([]string{}),
- },
- }
-
- for _, tc := range testCases {
- t.Run(tc.desc, func(t *testing.T) {
- outputBaseDir := "out/bazel"
- result := android.GroupFixturePreparers(
- prepareForApexTest,
- android.FixtureAddTextFile(filepath.Join(originalApexBpDir, "Android.bp"), fmt.Sprintf(originalBp, tc.bazelModuleProp)),
- android.FixtureAddTextFile(filepath.Join(overrideApexBpDir, "Android.bp"), fmt.Sprintf(overrideBp, tc.overrideBazelModuleProp)),
- android.FixtureModifyContext(func(ctx *android.TestContext) {
- ctx.RegisterBp2BuildConfig(tc.bp2buildConfiguration)
- }),
- android.FixtureModifyConfig(func(config android.Config) {
- config.BazelContext = android.MockBazelContext{
- OutputBaseDir: outputBaseDir,
- LabelToApexInfo: map[string]cquery.ApexInfo{
- tc.apexLabel: cquery.ApexInfo{
- // ApexInfo Starlark provider
- SignedOutput: "signed_out.apex",
- UnsignedOutput: "unsigned_out.apex",
- BundleKeyInfo: []string{"public_key", "private_key"},
- ContainerKeyInfo: []string{"container_cert", "container_private"},
- SymbolsUsedByApex: "foo_using.txt",
- JavaSymbolsUsedByApex: "foo_using.xml",
- BundleFile: "apex_bundle.zip",
- InstalledFiles: "installed-files.txt",
- RequiresLibs: []string{"//path/c:c", "//path/d:d"},
-
- // unused
- PackageName: "pkg_name",
- ProvidesLibs: []string{"a", "b"},
-
- // ApexMkInfo Starlark provider
- MakeModulesToInstall: []string{"c"}, // d deliberately omitted
- },
- tc.overrideApexLabel: cquery.ApexInfo{
- // ApexInfo Starlark provider
- SignedOutput: "override_signed_out.apex",
- UnsignedOutput: "override_unsigned_out.apex",
- BundleKeyInfo: []string{"override_public_key", "override_private_key"},
- ContainerKeyInfo: []string{"override_container_cert", "override_container_private"},
- SymbolsUsedByApex: "override_foo_using.txt",
- JavaSymbolsUsedByApex: "override_foo_using.xml",
- BundleFile: "override_apex_bundle.zip",
- InstalledFiles: "override_installed-files.txt",
- RequiresLibs: []string{"//path/c:c", "//path/d:d"},
-
- // unused
- PackageName: "override_pkg_name",
- ProvidesLibs: []string{"a", "b"},
-
- // ApexMkInfo Starlark provider
- MakeModulesToInstall: []string{"c"}, // d deliberately omitted
- },
- },
- }
- }),
- ).RunTest(t)
-
- m := result.ModuleForTests("foo", "android_common_override_foo_foo").Module()
- ab, ok := m.(*apexBundle)
- if !ok {
- t.Fatalf("Expected module to be an apexBundle, was not")
- }
-
- if w, g := "out/bazel/execroot/__main__/override_public_key", ab.publicKeyFile.String(); w != g {
- t.Errorf("Expected public key %q, got %q", w, g)
- }
-
- if w, g := "out/bazel/execroot/__main__/override_private_key", ab.privateKeyFile.String(); w != g {
- t.Errorf("Expected private key %q, got %q", w, g)
- }
-
- if w, g := "out/bazel/execroot/__main__/override_container_cert", ab.containerCertificateFile; g != nil && w != g.String() {
- t.Errorf("Expected public container key %q, got %q", w, g)
- }
-
- if w, g := "out/bazel/execroot/__main__/override_container_private", ab.containerPrivateKeyFile; g != nil && w != g.String() {
- t.Errorf("Expected private container key %q, got %q", w, g)
- }
-
- if w, g := "out/bazel/execroot/__main__/override_signed_out.apex", ab.outputFile.String(); w != g {
- t.Errorf("Expected output file %q, got %q", w, g)
- }
-
- if w, g := "out/bazel/execroot/__main__/override_foo_using.txt", ab.nativeApisUsedByModuleFile.String(); w != g {
- t.Errorf("Expected output file %q, got %q", w, g)
- }
-
- if w, g := "out/bazel/execroot/__main__/override_foo_using.xml", ab.javaApisUsedByModuleFile.String(); w != g {
- t.Errorf("Expected output file %q, got %q", w, g)
- }
-
- if w, g := "out/bazel/execroot/__main__/override_installed-files.txt", ab.installedFilesFile.String(); w != g {
- t.Errorf("Expected installed-files.txt %q, got %q", w, g)
- }
-
- mkData := android.AndroidMkDataForTest(t, result.TestContext, m)
- var builder strings.Builder
- mkData.Custom(&builder, "override_foo", "BAZEL_TARGET_", "", mkData)
-
- data := builder.String()
- if w := "ALL_MODULES.$(my_register_name).BUNDLE := out/bazel/execroot/__main__/override_apex_bundle.zip"; !strings.Contains(data, w) {
- t.Errorf("Expected %q in androidmk data, but did not find %q", w, data)
- }
- if w := "$(call dist-for-goals,checkbuild,out/bazel/execroot/__main__/override_installed-files.txt:override_foo-installed-files.txt)"; !strings.Contains(data, w) {
- t.Errorf("Expected %q in androidmk data, but did not find %q", w, data)
- }
-
- // make modules to be installed to system
- if len(ab.makeModulesToInstall) != 1 || ab.makeModulesToInstall[0] != "c" {
- t.Errorf("Expected makeModulestoInstall slice to only contain 'c', got %q", ab.makeModulesToInstall)
- }
- if w := "LOCAL_REQUIRED_MODULES := c"; !strings.Contains(data, w) {
- t.Errorf("Expected %q in androidmk data, but did not find it in %q", w, data)
- }
- })
- }
-}