5 #include <gtest/gtest.h> 7 #include "../clock.hpp" 26 uint8_t source_node_id,
const std::string& payload)
33 TEST(TransferListener, BasicMFT)
37 static const int NUM_POOL_BLOCKS = 100;
46 static const std::string DATA[] =
48 "Build a man a fire, and he'll be warm for a day. " 49 "Set a man on fire, and he'll be warm for the rest of his life.",
53 "In the beginning there was nothing, which exploded.",
55 "The USSR, which they'd begun to renovate and improve at about the time when Tatarsky decided to " 56 "change his profession, improved so much that it ceased to exist",
61 for (
unsigned i = 0; i <
sizeof(DATA) /
sizeof(DATA[0]); i++)
63 std::cout <<
"Size of test data chunk " << i <<
": " << DATA[i].length() << std::endl;
80 emulator.
send(transfers);
88 ASSERT_TRUE(subscriber.
isEmpty());
92 TEST(TransferListener, CrcFailure)
96 static const int NUM_POOL_BLOCKS = 100;
108 std::vector<uavcan::RxFrame> ser_mft = serializeTransfer(tr_mft);
109 std::vector<uavcan::RxFrame> ser_sft = serializeTransfer(tr_sft);
111 ASSERT_TRUE(ser_mft.size() > 1);
112 ASSERT_TRUE(ser_sft.size() == 1);
114 const_cast<uint8_t*
>(ser_mft[1].getPayloadPtr())[1] =
uint8_t(~ser_mft[1].getPayloadPtr()[1]);
115 const_cast<uint8_t*
>(ser_sft[0].getPayloadPtr())[2] =
uint8_t(~ser_sft[0].getPayloadPtr()[2]);
120 std::vector<std::vector<uavcan::RxFrame> > sers;
121 sers.push_back(ser_mft);
122 sers.push_back(ser_sft);
123 sers.push_back(ser_mft);
124 sers.push_back(ser_sft);
131 ASSERT_TRUE(subscriber.
matchAndPop(tr_sft_damaged));
132 ASSERT_TRUE(subscriber.
isEmpty());
136 TEST(TransferListener, BasicSFT)
140 static const int NUM_POOL_BLOCKS = 100;
158 emulator.
send(transfers);
168 ASSERT_TRUE(subscriber.
isEmpty());
172 TEST(TransferListener, Cleanup)
176 static const int NUM_POOL_BLOCKS = 100;
188 const std::vector<uavcan::RxFrame> ser_mft = serializeTransfer(tr_mft);
189 const std::vector<uavcan::RxFrame> ser_sft = serializeTransfer(tr_sft);
191 ASSERT_TRUE(ser_mft.size() > 1);
192 ASSERT_TRUE(ser_sft.size() == 1);
194 const std::vector<uavcan::RxFrame> ser_mft_begin(ser_mft.begin(), ser_mft.begin() + 1);
199 std::vector<std::vector<uavcan::RxFrame> > sers;
200 sers.push_back(ser_mft_begin);
201 sers.push_back(ser_sft);
206 ASSERT_TRUE(subscriber.
isEmpty());
217 sers.push_back(ser_mft);
218 sers.push_back(ser_sft);
224 ASSERT_TRUE(subscriber.
isEmpty());
228 TEST(TransferListener, AnonymousTransfers)
232 static const int NUM_POOL_BLOCKS = 100;
246 emulator.
send(transfers);
249 ASSERT_TRUE(subscriber.
isEmpty());
254 emulator.
send(transfers);
260 ASSERT_TRUE(subscriber.
isEmpty());
267 std::cout <<
"sizeof(TransferListener): " <<
sizeof(
TransferListener) << std::endl;
TEST(TransferListener, BasicMFT)
bool matchAndPop(const Transfer &reference)
TransferListenerEmulator(uavcan::TransferListener &target, const uavcan::DataTypeDescriptor &type, uavcan::NodeID dst_node_id=127)
uavcan::TransferListener & target_
void send(const std::vector< std::vector< uavcan::RxFrame > > &sers)
Transfer makeTransfer(uavcan::TransferPriority priority, uavcan::TransferType transfer_type, uint8_t source_node_id, const std::string &payload)
void allowAnonymousTransfers()
virtual void handleFrame(const RxFrame &frame)
Transfer makeTransfer(uavcan::TransferPriority priority, uavcan::TransferType transfer_type, uint8_t source_node_id, const std::string &payload, const uavcan::DataTypeDescriptor &type, uavcan::NodeID dst_node_id_override=uavcan::NodeID())
void sendOneFrame(const uavcan::RxFrame &frame)
uavcan::MonotonicTime tsMono(uint64_t usec)
const uavcan::DataTypeDescriptor data_type_