i use google test and google mock.
There is a mock object on which i expect a method call OnConnectionError()
which notifies the absl::Notification object done
3 times.
absl::Notification done;
EXPECT_CALL(*client, OnConnectionError(::testing::_)).Times(3)
.WillRepeatedly(Notify(&done));
bool result = client->ConnectToServer("localhost", 5000, 2);
done.WaitForNotificationWithTimeout(absl::Duration(absl::Seconds(30)));
The method client->ConnectToServer
has a loop which results in the repetitive call of OnConnectionError
, which is fully fine and the desired behaviour.
On Windows the unit test passes fine. When jenkins runs it on ubuntu, it aborts the whole test run (not only failing one test!!) with the following output.
[notification.cc : 32] RAW: Notify() method called more than once for Notification object 0x7ffffde87320
Is it not allowed to call the Notification object multiple times? Why does the test success on Windows and aborts on ubuntu?
many thanks for your support!
I found the answer by my self: I reviewed the relevant source of google abseil. In notification.cc i found the relevant error message. The respective source part is surrounded by a
I edited the CMakeLists file in order to rebuild it in Release mode by adding the line
set(CMAKE_BUILD_TYPE Release)
, so the NDEBUG flag is defined on compile time.As a consequence not directly connected to this issue, i refactored the code under test in a way, to avoid the loop, which notifies the absl::Notification object multiple times, since this issue showed me that there is a demand for improving the code.