Intercept and complete messaging for debugging failure

Test: presubmit
Bug: 269759227
Change-Id: I7e0e654873248eb8801e15a2ccfd24630e95b44f
diff --git a/common_util/com/android/tradefed/result/error/TestErrorIdentifier.java b/common_util/com/android/tradefed/result/error/TestErrorIdentifier.java
index e293cac..6dbeebb 100644
--- a/common_util/com/android/tradefed/result/error/TestErrorIdentifier.java
+++ b/common_util/com/android/tradefed/result/error/TestErrorIdentifier.java
@@ -33,7 +33,8 @@
     UNEXPECTED_MOBLY_CONFIG(530_010, FailureStatus.CUSTOMER_ISSUE),
     UNEXPECTED_MOBLY_BEHAVIOR(530_011, FailureStatus.CUSTOMER_ISSUE),
     HOST_COMMAND_FAILED(530_012, FailureStatus.CUSTOMER_ISSUE),
-    TEST_PHASE_TIMED_OUT(530_013, FailureStatus.TIMED_OUT);
+    TEST_PHASE_TIMED_OUT(530_013, FailureStatus.TIMED_OUT),
+    TEST_FILTER_NEEDS_UPDATE(530_014, FailureStatus.SYSTEM_UNDER_TEST_CRASHED);
 
     private final long code;
     private final @Nonnull FailureStatus status;
diff --git a/src/com/android/tradefed/result/LogcatCrashResultForwarder.java b/src/com/android/tradefed/result/LogcatCrashResultForwarder.java
index 92d76f9..8c7fbcf 100644
--- a/src/com/android/tradefed/result/LogcatCrashResultForwarder.java
+++ b/src/com/android/tradefed/result/LogcatCrashResultForwarder.java
@@ -60,6 +60,9 @@
 
     private static final int MAX_CRASH_SIZE = 250000;
     private static final String MAX_CRASH_SIZE_MESSAGE = "\n<Truncated>";
+    // Message from crash collector that reflect an issue
+    private static final String FILTER_NOT_FOUND =
+            "java.lang.IllegalArgumentException: testfile not found:";
 
     private Long mStartTime = null;
     private Long mLastStartTime = null;
@@ -133,10 +136,19 @@
         } else {
             errorMessage = extractCrashAndAddToMessage(errorMessage, mLastStartTime);
         }
-        error.setErrorMessage(errorMessage.trim());
+
         if (isCrash(errorMessage)) {
             error.setErrorIdentifier(DeviceErrorIdentifier.INSTRUMENTATION_CRASH);
+            // Special failure due to permission issue.
+            if (errorMessage.contains(FILTER_NOT_FOUND)) {
+                CLog.d("Detected a permission error with filters.");
+                // First stop retrying, it won't work
+                error.setRetriable(false);
+                error.setErrorIdentifier(TestErrorIdentifier.TEST_FILTER_NEEDS_UPDATE);
+                errorMessage = "See go/iae-testfile-not-found \n" + errorMessage;
+            }
         }
+        error.setErrorMessage(errorMessage.trim());
         // Add metrics for assessing uncaught IntrumentationTest crash failures.
         InvocationMetricLogger.addInvocationMetrics(InvocationMetricKey.CRASH_FAILURES, 1);
         if (error.getFailureStatus() == null) {