Merge "[RESTRICT AUTOMERGE] STS retry issue: Clean up fingerprint handling to avoid checksum invalidation. Basically, we need the original device fingerprint when ensuring we have an eligible device fingerprint and the masked fingerprint when checksumming results." into oc-dev
am: c20752cebb

Change-Id: I7b5314dfb58f6e4b9ab5c9866d28e4a58845328f
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 149ba7f..a5ea4bd 100644
--- a/common/util/src/com/android/compatibility/common/util/ResultHandler.java
+++ b/common/util/src/com/android/compatibility/common/util/ResultHandler.java
@@ -193,9 +193,14 @@
             invocation.addInvocationInfo(BUILD_PRODUCT, parser.getAttributeValue(NS,
                     BUILD_PRODUCT));
 
+            // The build fingerprint needs to reflect the true fingerprint of the device under test,
+            // ignoring potential overrides made by test suites (namely STS) for APFE build
+            // association.
+            String reportFingerprint = parser.getAttributeValue(NS, BUILD_FINGERPRINT);
             String unalteredFingerprint = parser.getAttributeValue(NS, BUILD_FINGERPRINT_UNALTERED);
-            invocation.setBuildFingerprint(Strings.isNullOrEmpty(unalteredFingerprint) ?
-                    parser.getAttributeValue(NS, BUILD_FINGERPRINT) : unalteredFingerprint);
+            Boolean fingerprintWasAltered = !Strings.isNullOrEmpty(unalteredFingerprint);
+            invocation.setBuildFingerprint(fingerprintWasAltered ? unalteredFingerprint :
+                reportFingerprint );
 
             // TODO(stuartscott): may want to reload these incase the retry was done with
             // --skip-device-info flag
@@ -257,9 +262,10 @@
                             }
                         }
                         parser.require(XmlPullParser.END_TAG, NS, TEST_TAG);
-                        Boolean checksumMismatch = invocationUseChecksum
-                            && !checksumReporter.containsTestResult(
-                                test, module, invocation.getBuildFingerprint());
+                        // If the fingerprint was altered, then checksum against the fingerprint
+                        // originally reported
+                        Boolean checksumMismatch = invocationUseChecksum &&
+                             !checksumReporter.containsTestResult(test, module, reportFingerprint);
                         if (checksumMismatch) {
                             test.removeResult();
                         }
@@ -267,9 +273,10 @@
                     parser.require(XmlPullParser.END_TAG, NS, CASE_TAG);
                 }
                 parser.require(XmlPullParser.END_TAG, NS, MODULE_TAG);
-                Boolean checksumMismatch = invocationUseChecksum
-                    && !checksumReporter.containsModuleResult(
-                            module, invocation.getBuildFingerprint());
+                // If the fingerprint was altered, then checksum against the fingerprint
+                // originally reported
+                Boolean checksumMismatch = invocationUseChecksum &&
+                     !checksumReporter.containsModuleResult(module, reportFingerprint);
                 if (checksumMismatch) {
                     module.initializeDone(false);
                 }