Introduce the FailureDescription structure to describe failures

Describe failures & their context in order to make
debugging simpler.

Test: unit tests
Bug: 147887662
Change-Id: I9bc68183cf09c41fe68363ed4eb4a50da21ba364
diff --git a/proto/test_record.proto b/proto/test_record.proto
index cbbfafc..58e7147 100644
--- a/proto/test_record.proto
+++ b/proto/test_record.proto
@@ -94,4 +94,22 @@
 
   // A stacktrace.
   string trace = 2;
+
+  // A more detailed failure status description.
+  FailureStatus failure_status = 3;
+}
+
+// A Fail TestStatus can be associated with a more granular failure status that helps understanding
+// the context.
+enum FailureStatus {
+  // The test in progress was the reason for the failure.
+  TEST_FAILURE = 0;
+  // A timeout condition on the operation in progress occurred.
+  TIMED_OUT = 1;
+  // The test in progress was cancelled.
+  CANCELLED = 2;
+  // A failure attributed to something not functioning properly.
+  INFRA_FAILURE = 10;
+  // System under test crashed and caused the test to fail.
+  SYSTEM_UNDER_TEST_CRASHED = 20;
 }
\ No newline at end of file