tests: Updated gtest/logging.cc to print log rather than fail.
authorBobby R. Bruce <bbruce@ucdavis.edu>
Fri, 3 Jan 2020 21:01:13 +0000 (13:01 -0800)
committerBobby R. Bruce <bbruce@ucdavis.edu>
Thu, 9 Jan 2020 22:02:43 +0000 (22:02 +0000)
Previously the `GTestExitLogger.log` function utilized GTest's
`ADD_FAILURE_AT` macro. This meant, whenever `GTestExitLogger.log` were
called, the calling test would be fail. This is problematic when
trying to test code we expect to fail (i.e., when testing the error
handling code is working correctly). Therefore, the `log` function now
writes to stderr.

The `GTestExitLogger` class is used by the `panic` and `fatal` loggers
when running GTests. Instead of callnig `exit(1)` they throw a GTest
exception, which can be captured in a test using
`EXPECT_ANY_THROW(expection_thrower())`. Catching and verifying error
logs can be done via:

```
testing::internal::CaptureStderr();
/*
 * "exception_thrower()" is a method we'd expect to call `fatal` or
 * `panic`, and therefore exit the simulation with a non-zero exit
 * code. When running via GTest, an exception is thrown instead.
 */
EXPECT_ANY_THROW(exception_thrower());
EXPECT_EQ("<error message>", testing::internal::GetCapturedStderr()));
```

Change-Id: I84a5f86bc573668d3dd5b40f626b43108dddb8e9
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/23983
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
Maintainer: Jason Lowe-Power <jason@lowepower.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/base/gtest/logging.cc

index 92d260298b8894e9fba083a8406748f7ca0b00df..d9cb9eb9577ad949189329ea9a5c3d8b7543f55d 100644 (file)
@@ -61,7 +61,7 @@ class GTestExitLogger : public Logger
     void
     log(const Loc &loc, std::string s) override
     {
-        ADD_FAILURE_AT(loc.file, loc.line) << s;
+        std::cerr << loc.file << ":" << loc.line << ": " << s;
     }
     // Throw an exception to escape down to the gtest framework.
     void exit() override { throw GTestException(); }