Parse all CTS result xml failure elements

bug:30222127

Change-Id: Iad37865982c46136a950808951eb16f8c86422d4
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 a6ff30c..82c98da 100644
--- a/common/util/src/com/android/compatibility/common/util/ResultHandler.java
+++ b/common/util/src/com/android/compatibility/common/util/ResultHandler.java
@@ -165,7 +165,7 @@
                             String result = parser.getAttributeValue(NS, RESULT_ATTR);
                             test.setResultStatus(TestStatus.getStatus(result));
                             test.setRetry(true);
-                            if (parser.nextTag() == XmlPullParser.START_TAG) {
+                            while (parser.nextTag() == XmlPullParser.START_TAG) {
                                 if (parser.getName().equals(FAILURE_TAG)) {
                                     test.setMessage(parser.getAttributeValue(NS, MESSAGE_ATTR));
                                     if (parser.nextTag() == XmlPullParser.START_TAG) {
@@ -175,19 +175,17 @@
                                         parser.nextTag();
                                     }
                                     parser.require(XmlPullParser.END_TAG, NS, FAILURE_TAG);
-                                    parser.nextTag();
                                 } else if (parser.getName().equals(BUGREPORT_TAG)) {
                                     test.setBugReport(parser.nextText());
-                                    parser.nextTag();
+                                    parser.require(XmlPullParser.END_TAG, NS, BUGREPORT_TAG);
                                 } else if (parser.getName().equals(LOGCAT_TAG)) {
                                     test.setLog(parser.nextText());
-                                    parser.nextTag();
+                                    parser.require(XmlPullParser.END_TAG, NS, LOGCAT_TAG);
                                 } else if (parser.getName().equals(SCREENSHOT_TAG)) {
                                     test.setScreenshot(parser.nextText());
-                                    parser.nextTag();
+                                    parser.require(XmlPullParser.END_TAG, NS, SCREENSHOT_TAG);
                                 } else {
                                     test.setReportLog(ReportLog.parse(parser));
-                                    parser.nextTag();
                                 }
                             }
                             parser.require(XmlPullParser.END_TAG, NS, TEST_TAG);
diff --git a/common/util/tests/src/com/android/compatibility/common/util/ResultHandlerTest.java b/common/util/tests/src/com/android/compatibility/common/util/ResultHandlerTest.java
index c1ef361..a3b2670 100644
--- a/common/util/tests/src/com/android/compatibility/common/util/ResultHandlerTest.java
+++ b/common/util/tests/src/com/android/compatibility/common/util/ResultHandlerTest.java
@@ -74,6 +74,9 @@
     private static final String MESSAGE = "Something small is not alright";
     private static final String STACK_TRACE = "Something small is not alright\n " +
             "at four.big.insects.Marley.sing(Marley.java:10)";
+    private static final String BUG_REPORT = "https://cnsviewer.corp.google.com/cns/bugreport.txt";
+    private static final String LOGCAT = "https://cnsviewer.corp.google.com/cns/logcat.gz";
+    private static final String SCREENSHOT = "https://cnsviewer.corp.google.com/screenshot.png";
     private static final long START_MS = 1431586801000L;
     private static final long END_MS = 1431673199000L;
     private static final String START_DISPLAY = "Fri Aug 20 15:13:03 PDT 2010";
@@ -118,6 +121,9 @@
             "        <Failure message=\"%s\">\n" +
             "          <StackTrace>%s</StackTrace>\n" +
             "        </Failure>\n" +
+            "        <BugReport>%s</BugReport>\n" +
+            "        <Logcat>%s</Logcat>\n" +
+            "        <Screenshot>%s</Screenshot>\n" +
             "      </Test>\n";
     private static final String XML_TEST_RESULT =
             "      <Test result=\"pass\" name=\"%s\">\n" +
@@ -165,6 +171,9 @@
         moduleBTest3.setResultStatus(TestStatus.FAIL);
         moduleBTest3.setMessage(MESSAGE);
         moduleBTest3.setStackTrace(STACK_TRACE);
+        moduleBTest3.setBugReport(BUG_REPORT);
+        moduleBTest3.setLog(LOGCAT);
+        moduleBTest3.setScreenshot(SCREENSHOT);
         ITestResult moduleBTest4 = moduleBCase.getOrCreateResult(METHOD_4);
         moduleBTest4.setResultStatus(TestStatus.PASS);
         ReportLog report = new ReportLog();
@@ -197,7 +206,8 @@
             String moduleATest = String.format(XML_TEST_PASS, METHOD_1);
             String moduleACases = String.format(XML_CASE, CLASS_A, moduleATest);
             String moduleA = String.format(XML_MODULE, NAME_A, ABI, DEVICE_A, moduleACases);
-            String moduleBTest3 = String.format(XML_TEST_FAIL, METHOD_3, MESSAGE, STACK_TRACE);
+            String moduleBTest3 = String.format(XML_TEST_FAIL, METHOD_3, MESSAGE, STACK_TRACE,
+                    BUG_REPORT, LOGCAT, SCREENSHOT);
             String moduleBTest4 = String.format(XML_TEST_RESULT, METHOD_4,
                     SUMMARY_SOURCE, SUMMARY_MESSAGE, ResultType.HIGHER_BETTER.toReportString(),
                     ResultUnit.SCORE.toReportString(), Double.toString(SUMMARY_VALUE),
@@ -289,9 +299,9 @@
         ITestResult moduleBTest3 = moduleBResults.get(0);
         assertEquals("Incorrect name", METHOD_3, moduleBTest3.getName());
         assertEquals("Incorrect result", TestStatus.FAIL, moduleBTest3.getResultStatus());
-        assertNull("Unexpected bugreport", moduleBTest3.getBugReport());
-        assertNull("Unexpected log", moduleBTest3.getLog());
-        assertNull("Unexpected screenshot", moduleBTest3.getScreenshot());
+        assertEquals("Incorrect bugreport", BUG_REPORT, moduleBTest3.getBugReport());
+        assertEquals("Incorrect log", LOGCAT, moduleBTest3.getLog());
+        assertEquals("Incorrect screenshot", SCREENSHOT, moduleBTest3.getScreenshot());
         assertEquals("Incorrect message", MESSAGE, moduleBTest3.getMessage());
         assertEquals("Incorrect stack trace", STACK_TRACE, moduleBTest3.getStackTrace());
         assertNull("Unexpected report", moduleBTest3.getReportLog());