test: split up long-running tests
gtests runs testcases sequentially as part of a test suite which is
causing long test runs. Split up the tests into separate files to
optimize test run duration.
Test suite definition is done via `suite.hpp`/`suite.cpp`.
There is a tradeoff here since the test folder structure now does not
directly mirror the source folder structure anymore. The folder name
is chosen to clarify which implementation file is being tested.
Timeouts inside testcases are not touched, it is assumed these were
chosen correctly.
In case of fdio_timed there is dependency on a folder, which is made
unique via `getpid()` call to avoid races.
Command: `time ninja -C build test`
Before: (as of current master branch, commit
`c6fee5a94bbb4b4fbb6212942f0f2cfa3049c255`)
```
real 0m18.581s
user 0m9.977s
sys 0m5.494s
```
After:
```
real 0m6.430s
user 0m10.021s
sys 0m5.501s
```
Change-Id: I2ba096cb8f9d8ffcc146448d22b7e75a1c25d103
Signed-off-by: Alexander Hansen <alexander.hansen@9elements.com>
diff --git a/test/timer/suite.hpp b/test/timer/suite.hpp
new file mode 100644
index 0000000..868c5e5
--- /dev/null
+++ b/test/timer/suite.hpp
@@ -0,0 +1,80 @@
+#pragma once
+
+#include <sdbusplus/timer.hpp>
+
+#include <gtest/gtest.h>
+
+using sdbusplus::Timer;
+
+class TimerTest : public ::testing::Test
+{
+ public:
+ // systemd event handler
+ sd_event* events = nullptr;
+
+ // Need this so that events can be initialized.
+ int rc;
+
+ // Source of event
+ sd_event_source* eventSource = nullptr;
+
+ // Add a Timer Object
+ Timer timer;
+
+ // Gets called as part of each TEST_F construction
+ TimerTest() : rc(sd_event_default(&events)), timer(events)
+ {
+ // Check for successful creation of
+ // event handler and timer object.
+ EXPECT_GE(rc, 0);
+ }
+
+ // Gets called as part of each TEST_F destruction
+ ~TimerTest() override
+ {
+ events = sd_event_unref(events);
+ }
+};
+
+class TimerTestCallBack : public ::testing::Test
+{
+ public:
+ // systemd event handler
+ sd_event* events;
+
+ // Need this so that events can be initialized.
+ int rc;
+
+ // Source of event
+ sd_event_source* eventSource = nullptr;
+
+ // Add a Timer Object
+ std::unique_ptr<Timer> timer = nullptr;
+
+ // Indicates optional call back fun was called
+ bool callBackDone = false;
+
+ void callBack()
+ {
+ callBackDone = true;
+ }
+
+ // Gets called as part of each TEST_F construction
+ TimerTestCallBack() : rc(sd_event_default(&events))
+
+ {
+ // Check for successful creation of
+ // event handler and timer object.
+ EXPECT_GE(rc, 0);
+
+ std::function<void()> func(
+ std::bind(&TimerTestCallBack::callBack, this));
+ timer = std::make_unique<Timer>(events, func);
+ }
+
+ // Gets called as part of each TEST_F destruction
+ ~TimerTestCallBack() override
+ {
+ events = sd_event_unref(events);
+ }
+};