Add a common TestEventListener for the error queue.

Replicate the logic in the AllTests targets to dump the error queue on
failure. GTest seems to print to stdout, so we do here too.

BUG=129

Change-Id: I623b695fb9a474945834c3653728f54e5b122187
Reviewed-on: https://boringssl-review.googlesource.com/13623
Reviewed-by: David Benjamin <davidben@google.com>
Commit-Queue: David Benjamin <davidben@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
diff --git a/crypto/test/gtest_main.cc b/crypto/test/gtest_main.cc
index 50147bc..50970af 100644
--- a/crypto/test/gtest_main.cc
+++ b/crypto/test/gtest_main.cc
@@ -14,10 +14,35 @@
 
 #include <gtest/gtest.h>
 
+#include <stdio.h>
+
+#include <openssl/err.h>
 #include <openssl/crypto.h>
 
+namespace {
+
+class ErrorTestEventListener : public testing::EmptyTestEventListener {
+ public:
+  ErrorTestEventListener() {}
+  ~ErrorTestEventListener() override {}
+
+  void OnTestEnd(const testing::TestInfo &test_info) override {
+    // If the test failed, print any errors left in the error queue.
+    if (test_info.result()->Failed()) {
+      ERR_print_errors_fp(stdout);
+    }
+
+    // Clean up the error queue for the next run.
+    ERR_clear_error();
+  }
+};
+
+}  // namespace
+
 int main(int argc, char **argv) {
   CRYPTO_library_init();
   testing::InitGoogleTest(&argc, argv);
+  testing::UnitTest::GetInstance()->listeners().Append(
+      new ErrorTestEventListener);
   return RUN_ALL_TESTS();
 }