49 lines
1.4 KiB
C++
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));
|
|
}
|