src.dualinventive.com/dinet/libdi-php/libdi/tests/can_msg_rt.cpp

49 lines
1.4 KiB
C++

/**
* 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));
}