diff --git a/crypto/test/gtest_main.cc b/crypto/test/gtest_main.cc
index ea1135c..4071040 100644
--- a/crypto/test/gtest_main.cc
+++ b/crypto/test/gtest_main.cc
@@ -14,58 +14,11 @@
 
 #include <gtest/gtest.h>
 
-#include <stdio.h>
+#include "gtest_main.h"
 
-#include <openssl/err.h>
-#include <openssl/crypto.h>
-
-#if defined(OPENSSL_WINDOWS)
-OPENSSL_MSVC_PRAGMA(warning(push, 3))
-#include <winsock2.h>
-OPENSSL_MSVC_PRAGMA(warning(pop))
-#endif
-
-
-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();
-
-#if defined(OPENSSL_WINDOWS)
-  // Initialize Winsock.
-  WORD wsa_version = MAKEWORD(2, 2);
-  WSADATA wsa_data;
-  int wsa_err = WSAStartup(wsa_version, &wsa_data);
-  if (wsa_err != 0) {
-    fprintf(stderr, "WSAStartup failed: %d\n", wsa_err);
-    return 1;
-  }
-  if (wsa_data.wVersion != wsa_version) {
-    fprintf(stderr, "Didn't get expected version: %x\n", wsa_data.wVersion);
-    return 1;
-  }
-#endif
-
   testing::InitGoogleTest(&argc, argv);
-  testing::UnitTest::GetInstance()->listeners().Append(
-      new ErrorTestEventListener);
+  bssl::SetupGoogleTest();
   return RUN_ALL_TESTS();
 }
