gitlab-ci/deqp: generate xml results for fails/flakes
authorRob Clark <robdclark@chromium.org>
Sun, 17 Nov 2019 19:57:26 +0000 (11:57 -0800)
committerRob Clark <robdclark@chromium.org>
Fri, 22 Nov 2019 21:48:29 +0000 (13:48 -0800)
Extract .qpa for the individual unexpected results and flakes, and
translate to xml, preserved with the artifacts.  This allows easy
browsing of the test logs for fails/flakes, for easier debugging.

The # of logs to preserve is capped at 50 to avoid saving 100s of
megabytes of logs in case someone pushes a change that breaks
everything.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Acked-by: Eric Engestrom <eric.engestrom@intel.com>
.gitlab-ci/deqp-runner.sh

index b651570cf1cb7f2b793bbe766a13887e3c611bbe..044ff5981ad6eb3fe551c43ec89a11d039d210ed 100755 (executable)
@@ -99,6 +99,43 @@ report_flakes() {
 
 }
 
+extract_xml_result() {
+    testcase=$1
+    shift 1
+    qpas=$*
+    start="#beginTestCaseResult $testcase"
+    for qpa in $qpas; do
+        while IFS= read -r line; do
+            if [ "$line" = "$start" ]; then
+                dst="$testcase.qpa"
+                echo "#beginSession" > $dst
+                echo $line >> $dst
+                while IFS= read -r line; do
+                    if [ "$line" = "#endTestCaseResult" ]; then
+                        echo $line >> $dst
+                        echo "#endSession" >> $dst
+                        /deqp/executor/testlog-to-xml $dst "$RESULTS/$testcase.xml"
+                        # copy the stylesheets here so they only end up in artifacts
+                        # if we have one or more result xml in artifacts
+                        cp /deqp/testlog.{css,xsl} "$RESULTS/"
+                        return 0
+                    fi
+                    echo $line >> $dst
+                done
+                return 1
+            fi
+        done < $qpa
+    done
+}
+
+extract_xml_results() {
+    qpas=$*
+    while IFS= read -r testcase; do
+        testcase=${testcase%,*}
+        extract_xml_result $testcase $qpas
+    done
+}
+
 # wrapper to supress +x to avoid spamming the log
 quiet() {
     set +x
@@ -120,6 +157,9 @@ if [ $DEQP_EXITCODE -ne 0 ]; then
         $RESULTS/cts-runner-unexpected-results.txt
     head -n 50 $RESULTS/cts-runner-unexpected-results.txt
 
+    # Save the logs for up to the first 50 unexpected results:
+    head -n 50 $RESULTS/cts-runner-unexpected-results.txt | quiet extract_xml_results /tmp/*.qpa
+
     count=`cat $RESULTS/cts-runner-unexpected-results.txt | wc -l`
 
     # Re-run fails to detect flakes.  But use a small threshold, if