parent
6795075697
commit
1dfcecc661
@ -0,0 +1,37 @@
|
|||||||
|
#ifndef TIMER_USER_HPP
|
||||||
|
#define TIMER_USER_HPP
|
||||||
|
|
||||||
|
#include <time.h> // timer_t
|
||||||
|
|
||||||
|
|
||||||
|
class TimerUser
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
virtual void timerExpired() = 0;
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
TimerUser(const clockid_t clockId = CLOCK_MONOTONIC);
|
||||||
|
virtual ~TimerUser();
|
||||||
|
|
||||||
|
bool startTimer(const time_t interval_sec,
|
||||||
|
const long interval_nsec = 0,
|
||||||
|
const time_t initExpr_sec = 0,
|
||||||
|
const long initExpr_nsec = 0);
|
||||||
|
|
||||||
|
bool stopTimer();
|
||||||
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
TimerUser(const TimerUser&);
|
||||||
|
TimerUser& operator=(const TimerUser&);
|
||||||
|
|
||||||
|
timer_t m_timerId;
|
||||||
|
|
||||||
|
}; // class TimerUser
|
||||||
|
|
||||||
|
|
||||||
|
#endif // TIMMER_USER_HPP
|
@ -0,0 +1,42 @@
|
|||||||
|
#include "TimerUser.hpp"
|
||||||
|
|
||||||
|
#include "Logger.hpp"
|
||||||
|
#include "Common.hpp"
|
||||||
|
|
||||||
|
#include "Timer.hpp"
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
|
||||||
|
|
||||||
|
TimerUser::TimerUser(const clockid_t clockId)
|
||||||
|
: m_timerId(Timer::createTimer(this, clockId))
|
||||||
|
{
|
||||||
|
TRACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TimerUser::~TimerUser()
|
||||||
|
{
|
||||||
|
TRACE;
|
||||||
|
|
||||||
|
Timer::deleteTimer(m_timerId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool TimerUser::startTimer(const time_t interval_sec,
|
||||||
|
const long interval_nsec,
|
||||||
|
const time_t initExpr_sec,
|
||||||
|
const long initExpr_nsec)
|
||||||
|
{
|
||||||
|
TRACE;
|
||||||
|
|
||||||
|
return Timer::setTimer(m_timerId, interval_sec, interval_nsec, initExpr_sec, initExpr_nsec);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool TimerUser::stopTimer()
|
||||||
|
{
|
||||||
|
TRACE;
|
||||||
|
|
||||||
|
return Timer::setTimer(m_timerId, 0);
|
||||||
|
}
|
@ -0,0 +1,115 @@
|
|||||||
|
#include <cxxtest/TestSuite.h>
|
||||||
|
|
||||||
|
#include "Fixture.hpp"
|
||||||
|
|
||||||
|
#define protected public
|
||||||
|
|
||||||
|
#include "Timer.hpp"
|
||||||
|
|
||||||
|
|
||||||
|
class TestTimerUser : public CxxTest::TestSuite
|
||||||
|
{
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
class DummyTimerUser : public TimerUser
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
DummyTimerUser()
|
||||||
|
: m_counter(0)
|
||||||
|
{
|
||||||
|
TRACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
~DummyTimerUser()
|
||||||
|
{
|
||||||
|
TRACE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void timerExpired()
|
||||||
|
{
|
||||||
|
TRACE;
|
||||||
|
m_counter++;
|
||||||
|
}
|
||||||
|
|
||||||
|
int m_counter;
|
||||||
|
|
||||||
|
}; // class TimerUser
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
void testBasicTimer( void )
|
||||||
|
{
|
||||||
|
TEST_HEADER;
|
||||||
|
|
||||||
|
DummyTimerUser timerUser;
|
||||||
|
|
||||||
|
timerUser.startTimer(1);
|
||||||
|
sleep(2);
|
||||||
|
|
||||||
|
// one expiration
|
||||||
|
TS_ASSERT_EQUALS( timerUser.m_counter, 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void testStopTimer( void )
|
||||||
|
{
|
||||||
|
TEST_HEADER;
|
||||||
|
|
||||||
|
DummyTimerUser timerUser;
|
||||||
|
|
||||||
|
timerUser.startTimer(10);
|
||||||
|
sleep(1);
|
||||||
|
timerUser.stopTimer();
|
||||||
|
|
||||||
|
// no expiration
|
||||||
|
TS_ASSERT_EQUALS( timerUser.m_counter, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void testPeriodicTimer( void )
|
||||||
|
{
|
||||||
|
TEST_HEADER;
|
||||||
|
|
||||||
|
DummyTimerUser timerUser;
|
||||||
|
|
||||||
|
// after 1 sec, expire periodically at each sec
|
||||||
|
timerUser.startTimer(1, 0, 1, 0);
|
||||||
|
|
||||||
|
sleep(4);
|
||||||
|
timerUser.stopTimer();
|
||||||
|
|
||||||
|
// 3 expiration (+- 1)
|
||||||
|
TS_ASSERT_DELTA( timerUser.m_counter, 3, 1 );
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void test2TimerUsers( void )
|
||||||
|
{
|
||||||
|
TEST_HEADER;
|
||||||
|
|
||||||
|
DummyTimerUser t1;
|
||||||
|
DummyTimerUser t2;
|
||||||
|
|
||||||
|
t1.startTimer(0, 5000);
|
||||||
|
t2.startTimer(0, 6000);
|
||||||
|
sleep(1);
|
||||||
|
|
||||||
|
TS_ASSERT_EQUALS( t1.m_counter, 1 );
|
||||||
|
TS_ASSERT_EQUALS( t2.m_counter, 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
void testStopNotStartedTimer( void )
|
||||||
|
{
|
||||||
|
TEST_HEADER;
|
||||||
|
|
||||||
|
DummyTimerUser timerUser;
|
||||||
|
|
||||||
|
timerUser.stopTimer();
|
||||||
|
|
||||||
|
// timerDestroyed not called
|
||||||
|
TS_ASSERT_EQUALS( timerUser.m_counter, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
};
|
Loading…
Reference in new issue