Update the session object with the error msg from ApexSessionInfo
Now that apexd returns an error message with details about why APEX activation has failed, we can append it to session object's error message. Bug: 178192690 Test: atest StagedInstallInternalTest#testApexActivationFailureIsCapturedInSession Change-Id: Id2d1df7f86ca85b044cfa15990eae548a176882b
This commit is contained in:
@@ -52,6 +52,7 @@ java_test_host {
|
||||
data: [
|
||||
":com.android.apex.apkrollback.test_v1",
|
||||
":com.android.apex.cts.shim.v2_prebuilt",
|
||||
":StagedInstallTestApexV2_WrongSha",
|
||||
":TestAppAv1",
|
||||
],
|
||||
test_suites: ["general-tests"],
|
||||
|
||||
@@ -179,6 +179,26 @@ public class StagedInstallInternalTest {
|
||||
assertThat(info.isStagedSessionFailed()).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testApexActivationFailureIsCapturedInSession_Commit() throws Exception {
|
||||
int sessionId = Install.single(TestApp.Apex1).setStaged().commit();
|
||||
assertSessionReady(sessionId);
|
||||
storeSessionId(sessionId);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testApexActivationFailureIsCapturedInSession_Verify() throws Exception {
|
||||
int sessionId = retrieveLastSessionId();
|
||||
assertSessionFailedWithMessage(sessionId, "has unexpected SHA512 hash");
|
||||
}
|
||||
|
||||
private static void assertSessionFailedWithMessage(int sessionId, String msg) {
|
||||
assertSessionState(sessionId, (session) -> {
|
||||
assertThat(session.isStagedSessionFailed()).isTrue();
|
||||
assertThat(session.getStagedSessionErrorMessage()).contains(msg);
|
||||
});
|
||||
}
|
||||
|
||||
private static void assertSessionReady(int sessionId) {
|
||||
assertSessionState(sessionId,
|
||||
(session) -> assertThat(session.isStagedSessionReady()).isTrue());
|
||||
|
||||
@@ -56,6 +56,7 @@ public class StagedInstallInternalTest extends BaseHostJUnit4Test {
|
||||
@Rule
|
||||
public AbandonSessionsRule mHostTestRule = new AbandonSessionsRule(this);
|
||||
private static final String SHIM_V2 = "com.android.apex.cts.shim.v2.apex";
|
||||
private static final String APEX_WRONG_SHA = "com.android.apex.cts.shim.v2_wrong_sha.apex";
|
||||
private static final String APK_A = "TestAppAv1.apk";
|
||||
private static final String APK_IN_APEX_TESTAPEX_NAME = "com.android.apex.apkrollback.test";
|
||||
|
||||
@@ -322,6 +323,27 @@ public class StagedInstallInternalTest extends BaseHostJUnit4Test {
|
||||
runPhase("testFailStagedSessionIfStagingDirectoryDeleted_Verify");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testApexActivationFailureIsCapturedInSession() throws Exception {
|
||||
// We initiate staging a normal apex update which passes pre-reboot verification.
|
||||
// Then we replace the valid apex waiting in /data/app-staging with something
|
||||
// that cannot be activated and reboot. The apex should fail to activate, which
|
||||
// is what we want for this test.
|
||||
runPhase("testApexActivationFailureIsCapturedInSession_Commit");
|
||||
final String sessionId = getDevice().executeShellCommand(
|
||||
"pm get-stagedsessions --only-ready --only-parent --only-sessionid").trim();
|
||||
assertThat(sessionId).isNotEmpty();
|
||||
// Now replace the valid staged apex with something invalid
|
||||
getDevice().enableAdbRoot();
|
||||
getDevice().executeShellCommand("rm /data/app-staging/session_" + sessionId + "/*");
|
||||
final File invalidApexFile = mHostUtils.getTestFile(APEX_WRONG_SHA);
|
||||
getDevice().pushFile(invalidApexFile,
|
||||
"/data/app-staging/session_" + sessionId + "/base.apex");
|
||||
getDevice().reboot();
|
||||
|
||||
runPhase("testApexActivationFailureIsCapturedInSession_Verify");
|
||||
}
|
||||
|
||||
private List<String> getStagingDirectories() throws DeviceNotAvailableException {
|
||||
String baseDir = "/data/app-staging";
|
||||
try {
|
||||
|
||||
Reference in New Issue
Block a user