Enforce updatable=true on apps of updatable apexes

- Update apex_info (a topdown mutator) so that it sets updatable=true on
  apps of updatable apexes
- Write a unit test that tests different combinations of
  updatable/non-updatable apks-in-apexes
- Update an existing unit test that asserts a different error

Test: go test ./java
Test: m nothing (in internal)
Bug: 209409604

Change-Id: Ie8881b857afcec44addf27fc360c5b8abf726bd2
Merged-In: Ie8881b857afcec44addf27fc360c5b8abf726bd2
(cherry picked from commit 42e89508ee)
This commit is contained in:
Spandan Das
2022-05-06 22:12:55 +00:00
parent 456a77e9a0
commit 91250b1ae4
3 changed files with 86 additions and 1 deletions

View File

@@ -2393,6 +2393,7 @@ func TestApexMinSdkVersion_ErrorIfDepIsNewer_Java(t *testing.T) {
key: "myapex.key",
apps: ["AppFoo"],
min_sdk_version: "29",
updatable: false,
}
apex_key {
@@ -9324,6 +9325,69 @@ func TestApexStrictUpdtabilityLintBcpFragmentDeps(t *testing.T) {
}
}
// updatable apexes should propagate updatable=true to its apps
func TestUpdatableApexEnforcesAppUpdatability(t *testing.T) {
bp := `
apex {
name: "myapex",
key: "myapex.key",
updatable: %v,
apps: [
"myapp",
],
min_sdk_version: "30",
}
apex_key {
name: "myapex.key",
}
android_app {
name: "myapp",
updatable: %v,
apex_available: [
"myapex",
],
sdk_version: "current",
min_sdk_version: "30",
}
`
testCases := []struct {
name string
apex_is_updatable_bp bool
app_is_updatable_bp bool
app_is_updatable_expected bool
}{
{
name: "Non-updatable apex respects updatable property of non-updatable app",
apex_is_updatable_bp: false,
app_is_updatable_bp: false,
app_is_updatable_expected: false,
},
{
name: "Non-updatable apex respects updatable property of updatable app",
apex_is_updatable_bp: false,
app_is_updatable_bp: true,
app_is_updatable_expected: true,
},
{
name: "Updatable apex respects updatable property of updatable app",
apex_is_updatable_bp: true,
app_is_updatable_bp: true,
app_is_updatable_expected: true,
},
{
name: "Updatable apex sets updatable=true on non-updatable app",
apex_is_updatable_bp: true,
app_is_updatable_bp: false,
app_is_updatable_expected: true,
},
}
for _, testCase := range testCases {
result := testApex(t, fmt.Sprintf(bp, testCase.apex_is_updatable_bp, testCase.app_is_updatable_bp))
myapp := result.ModuleForTests("myapp", "android_common").Module().(*java.AndroidApp)
android.AssertBoolEquals(t, testCase.name, testCase.app_is_updatable_expected, myapp.Updatable())
}
}
func TestMain(m *testing.M) {
os.Exit(m.Run())
}