Add allowed-deps tests

These tests capture
- track updatable apexes
- do not track apex-only modules
- track transitive deps
- track external deps (with mark)

Bug: 274041915
Test: m nothing
Change-Id: I629015f5aa4a1a7627d0ba6d92fd42bb99c96287
This commit is contained in:
Jooyung Han
2023-04-25 16:39:59 +09:00
parent dfd4c8b8a4
commit 4495f84f68
3 changed files with 93 additions and 1 deletions

View File

@@ -23,7 +23,11 @@ import (
)
func init() {
android.RegisterSingletonType("apex_depsinfo_singleton", apexDepsInfoSingletonFactory)
registerApexDepsInfoComponents(android.InitRegistrationContext)
}
func registerApexDepsInfoComponents(ctx android.RegistrationContext) {
ctx.RegisterSingletonType("apex_depsinfo_singleton", apexDepsInfoSingletonFactory)
}
type apexDepsInfoSingleton struct {

View File

@@ -1980,6 +1980,93 @@ func TestApexMinSdkVersion_InVendorApex(t *testing.T) {
android.AssertStringDoesContain(t, "cflags", cflags, "-target aarch64-linux-android29")
}
func TestTrackAllowedDeps(t *testing.T) {
ctx := testApex(t, `
apex {
name: "myapex",
key: "myapex.key",
updatable: true,
native_shared_libs: [
"mylib",
"yourlib",
],
min_sdk_version: "29",
}
apex {
name: "myapex2",
key: "myapex.key",
updatable: false,
native_shared_libs: ["yourlib"],
}
apex_key {
name: "myapex.key",
public_key: "testkey.avbpubkey",
private_key: "testkey.pem",
}
cc_library {
name: "mylib",
srcs: ["mylib.cpp"],
shared_libs: ["libbar"],
min_sdk_version: "29",
apex_available: ["myapex"],
}
cc_library {
name: "libbar",
stubs: { versions: ["29", "30"] },
}
cc_library {
name: "yourlib",
srcs: ["mylib.cpp"],
min_sdk_version: "29",
apex_available: ["myapex", "myapex2", "//apex_available:platform"],
}
`, withFiles(android.MockFS{
"packages/modules/common/build/allowed_deps.txt": nil,
}))
depsinfo := ctx.SingletonForTests("apex_depsinfo_singleton")
inputs := depsinfo.Rule("generateApexDepsInfoFilesRule").BuildParams.Inputs.Strings()
android.AssertStringListContains(t, "updatable myapex should generate depsinfo file", inputs,
"out/soong/.intermediates/myapex/android_common_myapex_image/depsinfo/flatlist.txt")
android.AssertStringListDoesNotContain(t, "non-updatable myapex2 should not generate depsinfo file", inputs,
"out/soong/.intermediates/myapex2/android_common_myapex2_image/depsinfo/flatlist.txt")
myapex := ctx.ModuleForTests("myapex", "android_common_myapex_image")
flatlist := strings.Split(myapex.Output("depsinfo/flatlist.txt").BuildParams.Args["content"], "\\n")
android.AssertStringListContains(t, "deps with stubs should be tracked in depsinfo as external dep",
flatlist, "libbar(minSdkVersion:(no version)) (external)")
android.AssertStringListDoesNotContain(t, "do not track if not available for platform",
flatlist, "mylib:(minSdkVersion:29)")
android.AssertStringListContains(t, "track platform-available lib",
flatlist, "yourlib(minSdkVersion:29)")
}
func TestTrackAllowedDeps_SkipWithoutAllowedDepsTxt(t *testing.T) {
ctx := testApex(t, `
apex {
name: "myapex",
key: "myapex.key",
updatable: true,
min_sdk_version: "29",
}
apex_key {
name: "myapex.key",
public_key: "testkey.avbpubkey",
private_key: "testkey.pem",
}
`)
depsinfo := ctx.SingletonForTests("apex_depsinfo_singleton")
if nil != depsinfo.MaybeRule("generateApexDepsInfoFilesRule").Output {
t.Error("apex_depsinfo_singleton shouldn't run when allowed_deps.txt doesn't exist")
}
}
func TestPlatformUsesLatestStubsFromApexes(t *testing.T) {
ctx := testApex(t, `
apex {

View File

@@ -19,6 +19,7 @@ import "android/soong/android"
var PrepareForTestWithApexBuildComponents = android.GroupFixturePreparers(
android.FixtureRegisterWithContext(registerApexBuildComponents),
android.FixtureRegisterWithContext(registerApexKeyBuildComponents),
android.FixtureRegisterWithContext(registerApexDepsInfoComponents),
// Additional files needed in tests that disallow non-existent source files.
// This includes files that are needed by all, or at least most, instances of an apex module type.
android.MockFS{