6 #include <gtest/gtest.h> 8 #include "../clock.hpp" 37 : data_type_id(data_type_id)
38 , bufmgr_key(bufmgr_key)
50 dst_nid, transfer_id);
52 frame.setStartOfTransfer((
set & (1 << 2)) != 0);
53 frame.setEndOfTransfer((
set & (1 << 1)) != 0);
55 if ((
set & (1 << 0)) != 0)
60 EXPECT_EQ(data.length(),
61 frame.setPayload(reinterpret_cast<const uint8_t*>(data.c_str()),
unsigned(data.length())));
74 template <
unsigned BufSize>
97 if (content.length() >
sizeof(data))
99 std::cerr <<
"matchBufferContent(): Content is too long" << std::endl;
102 tbb->
read(0, data,
unsigned(content.length()));
103 if (
std::equal(content.begin(), content.end(), data))
107 std::cout <<
"Buffer content mismatch:" 108 <<
"\n\tExpected: " << content
109 <<
"\n\tActually: " <<
reinterpret_cast<const char*
>(data)
115 #define CHECK_NOT_COMPLETE(x) ASSERT_EQ(uavcan::TransferReceiver::ResultNotComplete, (x)) 116 #define CHECK_COMPLETE(x) ASSERT_EQ(uavcan::TransferReceiver::ResultComplete, (x)) 117 #define CHECK_SINGLE_FRAME(x) ASSERT_EQ(uavcan::TransferReceiver::ResultSingleFrame, (x)) 128 std::cout <<
"sizeof(TransferReceiver): " <<
sizeof(TransferReceiver) << std::endl;
133 ASSERT_EQ(TransferReceiver::getDefaultTransferInterval(), rcv.
getInterval());
140 ASSERT_EQ(TransferReceiver::getDefaultTransferInterval(), rcv.
getInterval());
152 ASSERT_EQ(TransferReceiver::getDefaultTransferInterval(), rcv.
getInterval());
172 ASSERT_GE(TransferReceiver::getDefaultTransferInterval(), rcv.
getInterval());
173 ASSERT_LE(TransferReceiver::getMinTransferInterval(), rcv.
getInterval());
188 ASSERT_GT(TransferReceiver::getDefaultTransferInterval(), rcv.
getInterval());
244 ASSERT_LT(TransferReceiver::getDefaultTransferInterval(), rcv.
getInterval());
245 ASSERT_LE(TransferReceiver::getMinTransferInterval(), rcv.
getInterval());
246 ASSERT_GE(TransferReceiver::getMaxTransferInterval(), rcv.
getInterval());
254 context.
receiver.~TransferReceiver();
259 TEST(TransferReceiver, OutOfBufferSpace_32bytes)
297 TEST(TransferReceiver, OutOfOrderFrames)
321 TEST(TransferReceiver, IntervalMeasurement)
329 static const int INTERVAL = 1000;
333 for (
int i = 0; i < 1000; i++)
351 TEST(TransferReceiver, Restart)
399 TEST(TransferReceiver, UtcTransferTimestamping)
450 TEST(TransferReceiver, HeaderParsing)
452 static const std::string SFT_PAYLOAD =
"1234567";
521 for (
unsigned i = 0; i < (
sizeof(ADDRESSED_TRANSFER_TYPES) /
sizeof(ADDRESSED_TRANSFER_TYPES[0])); i++)
527 const uint64_t ts_monotonic = i + 10;
542 for (
unsigned i = 0; i <
int(
sizeof(ADDRESSED_TRANSFER_TYPES) /
sizeof(ADDRESSED_TRANSFER_TYPES[0])); i++)
static bool matchBufferContent(const uavcan::ITransferBuffer *tbb, const std::string &content)
UAVCAN_EXPORT bool equal(InputIt1 first1, InputIt1 last1, InputIt2 first2)
#define CHECK_SINGLE_FRAME(x)
TEST(TransferReceiver, Basic)
static MonotonicTime fromUSec(uint64_t us)
static const NodeID Broadcast
static const uavcan::TransferBufferManagerKey DEFAULT_KEY
#define CHECK_NOT_COMPLETE(x)
uint8_t yieldErrorCount()
bool isTimedOut(MonotonicTime current_ts) const
void toString(char buf[StringBufSize]) const
Prints time in seconds with microsecond resolution.
const uint8_t * getPayloadPtr() const
TransferType getTransferType() const
RxFrameGenerator(uint16_t data_type_id, const uavcan::TransferBufferManagerKey &bufmgr_key=DEFAULT_KEY)
uavcan::TransferBufferManager bufmgr
uavcan::TransferBufferManagerKey bufmgr_key
virtual int read(unsigned offset, uint8_t *data, unsigned len) const =0
uavcan::RxFrame operator()(uint8_t iface_index, const std::string &data, SotEotToggle set, uint8_t transfer_id, uint64_t ts_monotonic, uint64_t ts_utc=0)
iface_index, data, set, transfer_id, ts_monotonic [, ts_utc]
static void fill(T(&a)[Size], R value)
uavcan::MonotonicTime tsMono(uint64_t usec)
UtcTime getLastTransferTimestampUtc() const
uavcan::TransferReceiver receiver
#define CHECK_COMPLETE(x)
uint16_t getLastTransferCrc() const
MonotonicTime getLastTransferTimestampMonotonic() const
ITransferBuffer * access(const TransferBufferManagerKey &key)
MonotonicDuration getInterval() const
ResultCode addFrame(const RxFrame &frame, TransferBufferAccessor &tba)
uavcan::PoolAllocator< uavcan::MemPoolBlockSize *100, uavcan::MemPoolBlockSize > pool