Add script to fetch images from pdfium-skia gold server

Useful when a change has disrupted a number of image tests.

Change-Id: Ifb6ef365db417448e3387997f82cd966a9e3d11f
Reviewed-on: https://pdfium-review.googlesource.com/c/pdfium/+/117430
Reviewed-by: Lei Zhang <thestig@chromium.org>
Reviewed-by: Thomas Sepez <tsepez@google.com>
diff --git a/testing/tools/golden_fetch.sh b/testing/tools/golden_fetch.sh
new file mode 100755
index 0000000..1969562
--- /dev/null
+++ b/testing/tools/golden_fetch.sh
@@ -0,0 +1,57 @@
+#!/bin/bash
+#
+# Copyright 2024 The PDFium Authors
+# Use of this source code is governed by a BSD-style license that can be
+# found in the LICENSE file.
+#
+# This ia a script to help update reference images for pixel tests and
+# corpus tests for non-liunx (or non-agg) platforms. It uses results stored
+# in pdfium-gold so one need not generate these locally for the various
+# platforms.
+#
+# Given a "red bot" result, the first step is to identify the failing
+# "stdout" test log for the failing test step on that bot (be it pixel
+# or corpus).
+#
+# The next step is to identify the suffix the platform appends to the
+# expected test results, for example for the win_xfa_skia bot, this
+# is skia_win.
+#
+# The script will then fetch the build log into a file in the current
+# directory named, e.g. skia_win.log. It leaves this file present after
+# execution, so that the results can be manually double-checked if desired.
+#
+# Lastly, the script fetches each of the image files into the current
+# directory (A possible improvement is to try and parse out where they
+# belong). Move them by hand into the target directories.
+#
+set -e
+if [ $# -ne 2 ] ; then
+    echo "Usage: $0 <image_suffix> <log_url>, e.g."
+    echo -n "$0 skia_win "
+    echo -n "https://logs.chromium.org/logs/pdfium/buildbucket/cr-buildbucket/"
+    echo -n "8753735982839766497/+/u/corpus_tests__oneshot_rendering_enabled_/"
+    echo "stdout?format=raw"
+    exit 1
+fi
+
+# Fetch test results
+curl -o ./$1.log $2
+
+# Parse log to identify failing tests.
+TESTS=`grep 'cache[/\\]builder[/\\]' ./$1.log | grep -v Failed | \
+            grep -ho '[A-Za-z0-9_]*[.]pdf' | sed 's/\(.*\)[.]pdf/\1/'`
+for TEST in $TESTS ; do
+    IDX=0
+    while true ; do
+        REV=`grep "^Untriaged.*$TEST.pdf.$IDX" ./$1.log | \
+                   sed 's/^.*digest=\([0-9a-f]*\).*$/\1/'`
+        if [ -z "$REV" ] ; then
+            break
+        fi
+        curl -o ./${TEST}_expected_$1.pdf.$IDX.png \
+             https://pdfium-gold.skia.org/img/images/$REV.png
+        optipng ./${TEST}_expected_$1.pdf.$IDX.png
+        IDX=$(($IDX + 1))
+    done
+done