6 #include <gtest/gtest.h>
9 #include "../clock.hpp"
13 TEST(Frame, MessageParseCompile)
34 const std::string payload_string =
"hello\xD4";
40 ASSERT_FALSE(
frame.parse(CanFrame(can_id | CanFrame::FlagRTR,
reinterpret_cast<const uint8_t*
>(
""), 0)));
46 EXPECT_EQ(TransferID(20),
frame.getTransferID());
47 EXPECT_TRUE(
frame.isStartOfTransfer());
48 EXPECT_TRUE(
frame.isEndOfTransfer());
49 EXPECT_FALSE(
frame.getToggle());
51 EXPECT_TRUE(
frame.getDstNodeID().isBroadcast());
53 EXPECT_EQ(20000,
frame.getDataTypeID().get());
54 EXPECT_EQ(16,
frame.getPriority().get());
56 EXPECT_EQ(payload_string.length() - 1,
frame.getPayloadLen());
58 payload_string.begin()));
60 std::cout <<
frame.toString() << std::endl;
68 ASSERT_TRUE(
frame.compile(can_frame));
71 EXPECT_EQ(payload_string.length(), can_frame.dlc);
72 std::cout << can_frame.toString() << std::endl;
77 EXPECT_TRUE(
std::equal(can_frame.data, can_frame.data + can_frame.dlc,
78 reinterpret_cast<const uint8_t*
>(&payload_string[0])));
83 ASSERT_FALSE(Frame() ==
frame);
84 ASSERT_TRUE(Frame() !=
frame);
86 ASSERT_TRUE(Frame() ==
frame);
87 ASSERT_FALSE(Frame() !=
frame);
91 TEST(Frame, ServiceParseCompile)
116 const std::string payload_string =
"hello\x6a";
122 ASSERT_FALSE(
frame.parse(CanFrame(can_id | CanFrame::FlagRTR,
reinterpret_cast<const uint8_t*
>(
""), 0)));
128 EXPECT_EQ(TransferID(10),
frame.getTransferID());
129 EXPECT_FALSE(
frame.isStartOfTransfer());
130 EXPECT_TRUE(
frame.isEndOfTransfer());
131 EXPECT_TRUE(
frame.getToggle());
135 EXPECT_EQ(200,
frame.getDataTypeID().get());
136 EXPECT_EQ(31,
frame.getPriority().get());
138 EXPECT_EQ(payload_string.length(),
frame.getPayloadLen() + 1);
140 reinterpret_cast<const uint8_t*
>(&payload_string[0])));
142 std::cout <<
frame.toString() << std::endl;
150 ASSERT_TRUE(
frame.compile(can_frame));
153 EXPECT_EQ(payload_string.length(), can_frame.dlc);
154 EXPECT_TRUE(
std::equal(can_frame.data, can_frame.data + can_frame.dlc,
155 reinterpret_cast<const uint8_t*
>(&payload_string[0])));
160 ASSERT_FALSE(Frame() ==
frame);
161 ASSERT_TRUE(Frame() !=
frame);
163 ASSERT_TRUE(Frame() ==
frame);
164 ASSERT_FALSE(Frame() !=
frame);
168 TEST(Frame, AnonymousParseCompile)
188 const std::string payload_string =
"hello\xd4";
191 payload_crc.
add(
reinterpret_cast<const uint8_t*
>(payload_string.c_str()), unsigned(payload_string.length()));
198 EXPECT_EQ(TransferID(20),
frame.getTransferID());
199 EXPECT_TRUE(
frame.isStartOfTransfer());
200 EXPECT_TRUE(
frame.isEndOfTransfer());
201 EXPECT_FALSE(
frame.getToggle());
202 EXPECT_TRUE(
frame.getSrcNodeID().isBroadcast());
203 EXPECT_TRUE(
frame.getDstNodeID().isBroadcast());
205 EXPECT_EQ(1,
frame.getDataTypeID().get());
206 EXPECT_EQ(0,
frame.getPriority().get());
208 EXPECT_EQ(payload_string.length() - 1,
frame.getPayloadLen());
210 reinterpret_cast<const uint8_t*
>(&payload_string[0])));
212 std::cout <<
frame.toString() << std::endl;
217 const uint32_t DiscriminatorMask = 0x00FFFC00;
218 const uint32_t NoDiscriminatorMask = 0xFF0003FF;
223 ASSERT_TRUE(
frame.compile(can_frame));
227 EXPECT_EQ(payload_string.length(), can_frame.dlc);
228 EXPECT_TRUE(
std::equal(can_frame.data, can_frame.data + can_frame.dlc,
229 reinterpret_cast<const uint8_t*
>(&payload_string[0])));
236 ASSERT_FALSE(Frame() ==
frame);
237 ASSERT_TRUE(Frame() !=
frame);
239 ASSERT_TRUE(Frame() ==
frame);
240 ASSERT_FALSE(Frame() !=
frame);
253 ASSERT_FALSE(
frame.parse(can));
255 for (
unsigned i = 0; i <
sizeof(CanFrame::data); i++)
257 can.data[i] =
uint8_t(i | (i << 4));
279 can.id = CanFrame::FlagEFF |
287 ASSERT_FALSE(
frame.parse(can));
290 ASSERT_TRUE(
frame.parse(can));
291 EXPECT_TRUE(
frame.isStartOfTransfer());
292 EXPECT_TRUE(
frame.isEndOfTransfer());
293 EXPECT_FALSE(
frame.getToggle());
294 ASSERT_EQ(2,
frame.getPriority().get());
295 ASSERT_EQ(NodeID(42),
frame.getSrcNodeID());
296 ASSERT_EQ(NodeID::Broadcast,
frame.getDstNodeID());
297 ASSERT_EQ(456,
frame.getDataTypeID().get());
298 ASSERT_EQ(TransferID(15),
frame.getTransferID());
313 CanRxFrame can_rx_frame;
317 ASSERT_FALSE(rx_frame.parse(can_rx_frame));
321 can_rx_frame.id = CanFrame::FlagEFF |
327 ASSERT_FALSE(rx_frame.parse(can_rx_frame));
329 can_rx_frame.data[0] = 0xc0;
330 can_rx_frame.dlc = 1;
332 ASSERT_TRUE(rx_frame.parse(can_rx_frame));
333 ASSERT_EQ(1, rx_frame.getMonotonicTimestamp().toUSec());
334 ASSERT_EQ(0, rx_frame.getIfaceIndex());
336 can_rx_frame.ts_mono =
tsMono(123);
337 can_rx_frame.iface_index = 2;
340 ASSERT_TRUE(
frame.compile(can_rx_frame));
342 ASSERT_TRUE(rx_frame.parse(can_rx_frame));
343 ASSERT_EQ(123, rx_frame.getMonotonicTimestamp().toUSec());
344 ASSERT_EQ(2, rx_frame.getIfaceIndex());
345 ASSERT_EQ(456, rx_frame.getDataTypeID().get());
357 EXPECT_EQ(
"prio=255 dtid=65535 tt=3 snid=255 dnid=255 sot=0 eot=0 togl=0 tid=0 payload=[] ts_m=0.000000 ts_utc=0.000000 iface=0",
358 rx_frame.toString());
366 for (
unsigned i = 0; i <
sizeof(data); i++)
370 rx_frame.setPayload(data,
sizeof(data));
372 rx_frame.setStartOfTransfer(
true);
373 rx_frame.setEndOfTransfer(
true);
374 rx_frame.flipToggle();
377 EXPECT_EQ(
"prio=31 dtid=65535 tt=2 snid=127 dnid=0 sot=1 eot=1 togl=1 tid=31 payload=[00 01 02 03 04 05 06] "
378 "ts_m=18446744073709.551615 ts_utc=18446744073709.551615 iface=3",
379 rx_frame.toString());
383 EXPECT_EQ(
"prio=255 dtid=65535 tt=3 snid=255 dnid=255 sot=0 eot=0 togl=0 tid=0 payload=[]",
frame.toString());
387 EXPECT_EQ(
"prio=31 dtid=65535 tt=2 snid=127 dnid=0 sot=1 eot=1 togl=1 tid=31 payload=[00 01 02 03 04 05 06]",