Dispatcher spin timeout test

This commit is contained in:
Pavel Kirienko 2014-02-18 16:48:21 +04:00
parent f186888b04
commit 2f9c0087ef
2 changed files with 31 additions and 4 deletions

View File

@ -11,15 +11,17 @@
class SystemClockMock : public uavcan::ISystemClock
{
public:
uint64_t monotonic;
uint64_t utc;
mutable uint64_t monotonic;
mutable uint64_t utc;
int64_t monotonic_auto_advance;
SystemClockMock(uint64_t initial = 0)
: monotonic(initial)
, utc(initial)
, monotonic_auto_advance(0)
{ }
void advance(uint64_t usec)
void advance(uint64_t usec) const
{
monotonic += usec;
utc += usec;
@ -28,7 +30,9 @@ public:
uint64_t getMonotonicMicroseconds() const
{
assert(this);
return monotonic;
const uint64_t res = monotonic;
advance(monotonic_auto_advance);
return res;
}
uint64_t getUtcMicroseconds() const

View File

@ -221,3 +221,26 @@ TEST(Dispatcher, Transmission)
ASSERT_TRUE(driver.ifaces.at(0).tx.empty());
ASSERT_TRUE(driver.ifaces.at(1).tx.empty());
}
TEST(Dispatcher, Spin)
{
uavcan::PoolManager<1> poolmgr;
SystemClockMock clockmock(100);
CanDriverMock driver(2, clockmock);
uavcan::OutgoingTransferRegistry<8> out_trans_reg(&poolmgr);
uavcan::Dispatcher dispatcher(&driver, &poolmgr, &clockmock, &out_trans_reg, SELF_NODE_ID);
clockmock.monotonic_auto_advance = 100;
ASSERT_EQ(100, clockmock.monotonic);
ASSERT_EQ(0, dispatcher.spin(1000));
ASSERT_LE(1000, clockmock.monotonic);
ASSERT_EQ(0, dispatcher.spin(0));
ASSERT_LE(1000, clockmock.monotonic);
ASSERT_EQ(0, dispatcher.spin(1100));
ASSERT_LE(1100, clockmock.monotonic);
}