Add a test to verify backoff on complation failure.
Bug: 272245228
Test: atest odsign_e2e_tests_full:OdrefreshHostTest
Change-Id: I98cadc99f06cfb991ec753445b56f10a7fd2c252
diff --git a/test/odsign/test-src/com/android/tests/odsign/DeviceState.java b/test/odsign/test-src/com/android/tests/odsign/DeviceState.java
index c6ca53c..9295831 100644
--- a/test/odsign/test-src/com/android/tests/odsign/DeviceState.java
+++ b/test/odsign/test-src/com/android/tests/odsign/DeviceState.java
@@ -158,6 +158,10 @@
pushAndBindMount(localFile, "/system/framework/services.jar");
}
+ public void makeDex2oatFail() throws Exception {
+ setProperty("dalvik.vm.boot-dex2oat-threads", "-1");
+ }
+
/** Sets a system property. */
public void setProperty(String key, String value) throws Exception {
if (!mMutatedProperties.containsKey(key)) {
diff --git a/test/odsign/test-src/com/android/tests/odsign/OdrefreshHostTest.java b/test/odsign/test-src/com/android/tests/odsign/OdrefreshHostTest.java
index 83424ce..993d7f0 100644
--- a/test/odsign/test-src/com/android/tests/odsign/OdrefreshHostTest.java
+++ b/test/odsign/test-src/com/android/tests/odsign/OdrefreshHostTest.java
@@ -349,6 +349,38 @@
mTestUtils.assertModifiedAfter(mTestUtils.getZygotesExpectedArtifacts(), timeMs);
}
+ @Test
+ public void verifyCompilationFailureBackoff() throws Exception {
+ mDeviceState.makeDex2oatFail();
+ mDeviceState.simulateArtApexUpgrade();
+
+ // Run odrefresh. It should encounter dex2oat failures.
+ long timeMs = mTestUtils.getCurrentTimeMs();
+ mTestUtils.runOdrefresh();
+
+ // Artifacts don't exist because the compilation failed.
+ mTestUtils.assertModifiedAfter(Set.of(OdsignTestUtils.CACHE_INFO_FILE), timeMs);
+ mTestUtils.assertFilesNotExist(mTestUtils.getZygotesExpectedArtifacts());
+ mTestUtils.assertFilesNotExist(mTestUtils.getSystemServerExpectedArtifacts());
+
+ // Run odrefresh again.
+ timeMs = mTestUtils.getCurrentTimeMs();
+ mTestUtils.runOdrefresh();
+
+ // It should not retry.
+ mTestUtils.assertNotModifiedAfter(Set.of(OdsignTestUtils.CACHE_INFO_FILE), timeMs);
+
+ // Simulate that the backoff time has passed.
+ mTestUtils.removeCompilationLogToAvoidBackoff();
+
+ // Run odrefresh again.
+ timeMs = mTestUtils.getCurrentTimeMs();
+ mTestUtils.runOdrefresh();
+
+ // Now it should retry.
+ mTestUtils.assertModifiedAfter(Set.of(OdsignTestUtils.CACHE_INFO_FILE), timeMs);
+ }
+
private Set<String> simulateMissingArtifacts() throws Exception {
Set<String> missingArtifacts = new HashSet<>();
String sample = mTestUtils.getSystemServerExpectedArtifacts().iterator().next();