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