test: timer: Test that a timer can be restarted before it expires

The Timer API allows restarting a timer before it expires. Add a
corresponding test. The test fails as the Timer class doesn't comply
with its API documentation.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Niklas Söderlund <niklas.soderlund@ragnatech.se>
This commit is contained in:
Laurent Pinchart 2019-10-06 07:23:58 +03:00
parent 9c6794164d
commit dfe1d89441

View file

@ -21,13 +21,14 @@ class ManagedTimer : public Timer
{
public:
ManagedTimer()
: Timer()
: Timer(), count_(0)
{
timeout.connect(this, &ManagedTimer::timeoutHandler);
}
void start(int msec)
{
count_ = 0;
start_ = std::chrono::steady_clock::now();
expiration_ = std::chrono::steady_clock::time_point();
@ -40,12 +41,19 @@ public:
return abs(std::chrono::duration_cast<std::chrono::milliseconds>(duration).count());
}
bool hasFailed()
{
return isRunning() || count_ != 1 || jitter() > 50;
}
private:
void timeoutHandler(Timer *timer)
{
expiration_ = std::chrono::steady_clock::now();
count_++;
}
unsigned int count_;
std::chrono::steady_clock::time_point start_;
std::chrono::steady_clock::time_point expiration_;
};
@ -74,7 +82,7 @@ protected:
dispatcher->processEvents();
if (timer.isRunning() || timer.jitter() > 50) {
if (timer.hasFailed()) {
cout << "Timer expiration test failed" << endl;
return TestFail;
}
@ -87,7 +95,7 @@ protected:
timer.start(4295);
dispatcher->processEvents();
if (timer.isRunning() || timer.jitter() > 50) {
if (timer.hasFailed()) {
cout << "Timer expiration test failed" << endl;
return TestFail;
}
@ -102,11 +110,23 @@ protected:
dispatcher->processEvents();
if (timer.isRunning() || timer.jitter() > 50) {
if (timer.hasFailed()) {
cout << "Timer restart test failed" << endl;
return TestFail;
}
/* Timer restart before expiration. */
timer.start(50);
timer.start(100);
timer.start(150);
dispatcher->processEvents();
if (timer.hasFailed()) {
cout << "Timer restart before expiration test failed" << endl;
return TestFail;
}
/* Two timers. */
timer.start(1000);
timer2.start(300);