/** * DI-CAN Realtime messages unit tests * @file tests/can_rt.cpp * @copyright 2019 Dual Inventive Technology Centre B.V. */ #include "fixtures/CANTest.hpp" /** * Test RT Extended Metadata Flag */ TEST_F(DI_CAN, EMFLAG_RT) { struct di_can_msg *msg = di_can_msg_alloc(&_ctx); ASSERT_FALSE(di_can_msg_emflag_rt(msg)); di_can_msg_emflag_set_rt(msg, true); ASSERT_TRUE(di_can_msg_emflag_rt(msg)); } /** * Test sending an RT message results in updating the CAN context RT sequence number */ TEST_F(DI_CAN, rt_sendrecv) { static const char *data = "hello rt message!"; struct di_can_msg *rtmsg; // Initialize RT sequence number starts at zero ASSERT_EQ(0U, _ctx.rt_seqnr); _ctx.rt_seqnr = 1337; // Fake the RT sequence number to be 1337 // Sending an RT message without payload is invalid (protocol error) rtmsg = di_can_msg_alloc(&_ctx); ASSERT_NE(nullptr, rtmsg); di_can_msg_emflag_set_rt(rtmsg, true); ASSERT_EQ(DNE_PROTO, di_can_send(&rtmsg)); ASSERT_EQ(1337U, _ctx.rt_seqnr); // Send RT message with payload ASSERT_EQ(DNOK, di_can_msg_write_data_string(rtmsg, data)); ASSERT_EQ(DNOK, di_can_send(&rtmsg)); ASSERT_EQ(nullptr, rtmsg); ASSERT_EQ(1338U, _ctx.rt_seqnr); // Receive the RT message, check the RT Extended Metadata Flag and Sequence number rtmsg = di_can_recv(&_ctx, DI_CAN_MSGTYPE_ANY); ASSERT_NE(nullptr, rtmsg); ASSERT_EQ(DI_CAN_MSG_EMFLAG_RT, rtmsg->emflags); ASSERT_EQ(1337U, di_can_msg_read_emdata(rtmsg)); }