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)
commitb97111fc2333672741cf578ee15c45ba3924b5cb
treed8909c6e716aaab2dcde7626626b61cbda0e08e8
parent02a1f8b28dda896e5400b8667008ad716ada3a52
tests: Updated gtest/logging.cc to print log rather than fail.

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