Ensure module not_done is aligned

Summary and module report should be aligned by using the
same source of truth.

Test: unit tests
Bug: 129725071
Change-Id: I95dfdee27335666e492e4e5db5072fb4abf9cf91
diff --git a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/result/InvocationFailureHandler.java b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/result/InvocationFailureHandler.java
index dffe3ba..abbf14c 100644
--- a/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/result/InvocationFailureHandler.java
+++ b/common/host-side/tradefed/src/com/android/compatibility/common/tradefed/result/InvocationFailureHandler.java
@@ -60,8 +60,9 @@
             File f = buildHelper.getInvocationFailureFile();
             if (!f.exists()) {
                 f.createNewFile();
-                FileUtil.writeToFile(cause.toString(), f);
             }
+            // Append to previous failures to get them all.
+            FileUtil.writeToFile(cause.toString(), f, true);
         } catch (IOException e) {
             CLog.e("Exception while writing invocation failure file.");
             CLog.e(e);
diff --git a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/result/ResultReporterTest.java b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/result/ResultReporterTest.java
index ca620ae..a179978 100644
--- a/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/result/ResultReporterTest.java
+++ b/common/host-side/tradefed/tests/src/com/android/compatibility/common/tradefed/result/ResultReporterTest.java
@@ -532,8 +532,8 @@
         assertEquals("Expected 1 module", 1, modules.size());
         IModuleResult module = modules.get(0);
 
-        // Ensure module is seens as done but failed
-        assertTrue(module.isDone());
+        // Ensure module is seen as not done and failed
+        assertFalse(module.isDone());
         assertTrue(module.isFailed());
 
         assertEquals("Incorrect ID", ID, module.getId());
diff --git a/common/util/src/com/android/compatibility/common/util/InvocationResult.java b/common/util/src/com/android/compatibility/common/util/InvocationResult.java
index c11c27d..45780a9 100644
--- a/common/util/src/com/android/compatibility/common/util/InvocationResult.java
+++ b/common/util/src/com/android/compatibility/common/util/InvocationResult.java
@@ -37,7 +37,6 @@
     private String mBuildFingerprint;
     private String mTestPlan;
     private String mCommandLineArgs;
-    private int mNotExecuted = 0;
     private RetryChecksumStatus mRetryChecksumStatus = RetryChecksumStatus.NotRetry;
     private File mRetryDirectory = null;
 
diff --git a/common/util/src/com/android/compatibility/common/util/ModuleResult.java b/common/util/src/com/android/compatibility/common/util/ModuleResult.java
index cfc5385..abb22f8 100644
--- a/common/util/src/com/android/compatibility/common/util/ModuleResult.java
+++ b/common/util/src/com/android/compatibility/common/util/ModuleResult.java
@@ -53,6 +53,10 @@
      */
     @Override
     public boolean isDone() {
+        // If module is failed, it cannot be marked done.
+        if (isFailed()) {
+            return false;
+        }
         return mDone && !mInProgress && (mActualTestRuns >= mExpectedTestRuns);
     }
 
diff --git a/common/util/src/com/android/compatibility/common/util/ResultHandler.java b/common/util/src/com/android/compatibility/common/util/ResultHandler.java
index 2873b34..90066a4 100644
--- a/common/util/src/com/android/compatibility/common/util/ResultHandler.java
+++ b/common/util/src/com/android/compatibility/common/util/ResultHandler.java
@@ -403,13 +403,7 @@
             serializer.attribute(NS, NAME_ATTR, module.getName());
             serializer.attribute(NS, ABI_ATTR, module.getAbi());
             serializer.attribute(NS, RUNTIME_ATTR, String.valueOf(module.getRuntime()));
-
-            boolean done = module.isDone();
-            if (module.isFailed()) {
-                done = false;
-            }
-
-            serializer.attribute(NS, DONE_ATTR, Boolean.toString(done));
+            serializer.attribute(NS, DONE_ATTR, Boolean.toString(module.isDone()));
             serializer.attribute(NS, PASS_ATTR,
                     Integer.toString(module.countResults(TestStatus.PASS)));
             for (ICaseResult cr : module.getResults()) {