summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/rollback/Rollback.java2
-rw-r--r--services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java17
-rw-r--r--tests/RollbackTest/Android.bp15
-rw-r--r--tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java44
-rw-r--r--tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java28
5 files changed, 6 insertions, 100 deletions
diff --git a/services/core/java/com/android/server/rollback/Rollback.java b/services/core/java/com/android/server/rollback/Rollback.java
index 5c0dd9a44dc4..7d0072abe1c9 100644
--- a/services/core/java/com/android/server/rollback/Rollback.java
+++ b/services/core/java/com/android/server/rollback/Rollback.java
@@ -360,7 +360,7 @@ class Rollback {
*/
boolean enableForPackageInApex(String packageName, long installedVersion,
int rollbackDataPolicy) {
- // TODO(b/147666157): Extract the new version number of apk-in-apex
+ // TODO(b/142712057): Extract the new version number of apk-in-apex
// The new version for the apk-in-apex is set to 0 for now. If the package is then further
// updated via non-staged install flow, then RollbackManagerServiceImpl#onPackageReplaced()
// will be called and this rollback will be deleted. Other ways of package update have not
diff --git a/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java b/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java
index 6686de95c05c..7a8ddd48611e 100644
--- a/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java
+++ b/services/core/java/com/android/server/rollback/RollbackPackageHealthObserver.java
@@ -213,23 +213,6 @@ public final class RollbackPackageHealthObserver implements PackageHealthObserve
if (packageRollback.getVersionRolledBackFrom().equals(failedPackage)) {
return rollback;
}
- // TODO(b/147666157): Extract version number of apk-in-apex so that we don't have
- // to rely on complicated reasoning as below
-
- // Due to b/147666157, for apk in apex, we do not know the version we are rolling
- // back from. But if a package X is embedded in apex A exclusively (not embedded in
- // any other apex), which is not guaranteed, then it is sufficient to check only
- // package names here, as the version of failedPackage and the PackageRollbackInfo
- // can't be different. If failedPackage has a higher version, then it must have
- // been updated somehow. There are two ways: it was updated by an update of apex A
- // or updated directly as apk. In both cases, this rollback would have gotten
- // expired when onPackageReplaced() was called. Since the rollback exists, it has
- // same version as failedPackage.
- if (packageRollback.isApkInApex()
- && packageRollback.getVersionRolledBackFrom().getPackageName()
- .equals(failedPackage.getPackageName())) {
- return rollback;
- }
}
}
return null;
diff --git a/tests/RollbackTest/Android.bp b/tests/RollbackTest/Android.bp
index 98e7b4e1b430..091edd4dc0d9 100644
--- a/tests/RollbackTest/Android.bp
+++ b/tests/RollbackTest/Android.bp
@@ -19,10 +19,7 @@ android_test {
static_libs: ["androidx.test.rules", "cts-rollback-lib", "cts-install-lib"],
test_suites: ["general-tests"],
test_config: "RollbackTest.xml",
- java_resources: [
- ":com.android.apex.apkrollback.test_v2",
- ":com.android.apex.apkrollback.test_v2Crashing"
- ],
+ java_resources: [":com.android.apex.apkrollback.test_v2"],
}
java_test_host {
@@ -82,14 +79,4 @@ apex {
key: "com.android.apex.apkrollback.test.key",
apps: ["TestAppAv2"],
installable: false,
-}
-
-apex {
- name: "com.android.apex.apkrollback.test_v2Crashing",
- manifest: "testdata/manifest_v2.json",
- androidManifest: "testdata/AndroidManifest.xml",
- file_contexts: ":apex.test-file_contexts",
- key: "com.android.apex.apkrollback.test.key",
- apps: ["TestAppACrashingV2"],
- installable: false,
} \ No newline at end of file
diff --git a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java
index 80491cd98bc9..ce20311170c1 100644
--- a/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java
+++ b/tests/RollbackTest/RollbackTest/src/com/android/tests/rollback/StagedRollbackTest.java
@@ -500,9 +500,8 @@ public class StagedRollbackTest {
APK_IN_APEX_TESTAPEX_NAME, 1, /*isApex*/true, APK_IN_APEX_TESTAPEX_NAME + "_v1.apex");
private static final TestApp TEST_APEX_WITH_APK_V2 = new TestApp("TestApexWithApkV2",
APK_IN_APEX_TESTAPEX_NAME, 2, /*isApex*/true, APK_IN_APEX_TESTAPEX_NAME + "_v2.apex");
- private static final TestApp TEST_APEX_WITH_APK_V2_CRASHING = new TestApp(
- "TestApexWithApkV2Crashing", APK_IN_APEX_TESTAPEX_NAME, 2, /*isApex*/true,
- APK_IN_APEX_TESTAPEX_NAME + "_v2Crashing.apex");
+ private static final TestApp TEST_APP_A_V2_UNKNOWN = new TestApp("Av2Unknown", TestApp.A, 0,
+ /*isApex*/false, "TestAppAv2.apk");
@Test
public void testRollbackApexWithApk_Phase1() throws Exception {
@@ -524,7 +523,7 @@ public class StagedRollbackTest {
assertThat(available).isStaged();
assertThat(available).packagesContainsExactly(
Rollback.from(TEST_APEX_WITH_APK_V2).to(TEST_APEX_WITH_APK_V1),
- Rollback.from(TestApp.A, 0).to(TestApp.A1));
+ Rollback.from(TEST_APP_A_V2_UNKNOWN).to(TestApp.A1));
RollbackUtils.rollback(available.getRollbackId(), TEST_APEX_WITH_APK_V2);
RollbackInfo committed = RollbackUtils.getCommittedRollbackById(available.getRollbackId());
@@ -532,7 +531,7 @@ public class StagedRollbackTest {
assertThat(committed).isStaged();
assertThat(committed).packagesContainsExactly(
Rollback.from(TEST_APEX_WITH_APK_V2).to(TEST_APEX_WITH_APK_V1),
- Rollback.from(TestApp.A, 0).to(TestApp.A1));
+ Rollback.from(TEST_APP_A_V2_UNKNOWN).to(TestApp.A1));
assertThat(committed).causePackagesContainsExactly(TEST_APEX_WITH_APK_V2);
assertThat(committed.getCommittedSessionId()).isNotEqualTo(-1);
@@ -549,41 +548,6 @@ public class StagedRollbackTest {
InstallUtils.processUserData(TestApp.A);
}
- /**
- * Installs an apex with an apk that can crash.
- */
- @Test
- public void testRollbackApexWithApkCrashing_Phase1() throws Exception {
- assertThat(InstallUtils.getInstalledVersion(TestApp.A)).isEqualTo(1);
- int sessionId = Install.single(TEST_APEX_WITH_APK_V2_CRASHING).setStaged()
- .setEnableRollback().commit();
- InstallUtils.waitForSessionReady(sessionId);
- }
-
- /**
- * Verifies rollback has been enabled successfully. Then makes TestApp.A crash.
- */
- @Test
- public void testRollbackApexWithApkCrashing_Phase2() throws Exception {
- assertThat(InstallUtils.getInstalledVersion(APK_IN_APEX_TESTAPEX_NAME)).isEqualTo(2);
- assertThat(InstallUtils.getInstalledVersion(TestApp.A)).isEqualTo(2);
-
- RollbackInfo available = RollbackUtils.getAvailableRollback(APK_IN_APEX_TESTAPEX_NAME);
- assertThat(available).isStaged();
- assertThat(available).packagesContainsExactly(
- Rollback.from(TEST_APEX_WITH_APK_V2).to(TEST_APEX_WITH_APK_V1),
- Rollback.from(TestApp.A, 0).to(TestApp.A1));
-
- // Crash TestApp.A PackageWatchdog#TRIGGER_FAILURE_COUNT times to trigger rollback
- RollbackUtils.sendCrashBroadcast(TestApp.A, 5);
- }
-
- @Test
- public void testRollbackApexWithApkCrashing_Phase3() throws Exception {
- assertThat(InstallUtils.getInstalledVersion(APK_IN_APEX_TESTAPEX_NAME)).isEqualTo(1);
- assertThat(InstallUtils.getInstalledVersion(TestApp.A)).isEqualTo(1);
- }
-
private static void runShellCommand(String cmd) {
ParcelFileDescriptor pfd = InstrumentationRegistry.getInstrumentation().getUiAutomation()
.executeShellCommand(cmd);
diff --git a/tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java b/tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java
index 672cbb084dae..181e29a3081e 100644
--- a/tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java
+++ b/tests/RollbackTest/StagedRollbackTest/src/com/android/tests/rollback/host/StagedRollbackTest.java
@@ -261,34 +261,6 @@ public class StagedRollbackTest extends BaseHostJUnit4Test {
runPhase("testRollbackApexWithApk_Phase3");
}
- /**
- * Tests that RollbackPackageHealthObserver is observing apk-in-apex.
- */
- @Test
- public void testRollbackApexWithApkCrashing() throws Exception {
- getDevice().uninstallPackage("com.android.cts.install.lib.testapp.A");
- CompatibilityBuildHelper buildHelper = new CompatibilityBuildHelper(getBuild());
- final String fileName = APK_IN_APEX_TESTAPEX_NAME + "_v1.apex";
- final File apex = buildHelper.getTestFile(fileName);
- if (!getDevice().isAdbRoot()) {
- getDevice().enableAdbRoot();
- }
- getDevice().remountSystemWritable();
- assertTrue(getDevice().pushFile(apex, "/system/apex/" + fileName));
- getDevice().reboot();
-
- // Install an apex with apk that crashes
- runPhase("testRollbackApexWithApkCrashing_Phase1");
- getDevice().reboot();
- // Verify apex was installed and then crash the apk
- runPhase("testRollbackApexWithApkCrashing_Phase2");
- // Wait for crash to trigger rollback
- assertTrue(getDevice().waitForDeviceNotAvailable(TimeUnit.MINUTES.toMillis(5)));
- getDevice().waitForDeviceAvailable();
- // Verify rollback occurred due to crash of apk-in-apex
- runPhase("testRollbackApexWithApkCrashing_Phase3");
- }
-
private void crashProcess(String processName, int numberOfCrashes) throws Exception {
String pid = "";
String lastPid = "invalid";