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

61 lines
2.0 KiB
C++

/**
* @file tests/can_net_node_uid.cpp
* @brief CAN Net node UID
* @date Dec 14, 2016
* @author jjacobs
* @copyright 2016 Dual Inventive Technology Centre B.V.
*/
#include "fixtures/CANTest.hpp"
/**
* Test DI_CAN_NET_CANID_MSG_NODE_UID macro
*/
TEST_F(DI_CAN, CANID_MSG_NODE_UID) {
struct di_can_msg *msg;
msg = di_can_msg_alloc_with_canid(&_ctx, DI_CAN_NET_CANID_MSG_NODE_UID(REPLY));
ASSERT_NE(nullptr, msg);
ASSERT_EQ(DI_CAN_MSGTYPE_NET, DI_CAN_GET_MSGTYPE(msg->canid));
ASSERT_EQ(DI_CAN_TRANSFERTYPE_REPLY, DI_CAN_GET_TRANSFERTYPE(msg->canid));
ASSERT_EQ(DI_CAN_NET_DTYPE_NODE_UID, DI_CAN_GET_DATATYPE(msg->canid));
di_can_msg_free(&msg);
}
/**
* Test di_can_net_send_node_uid
*/
TEST_F(DI_CAN, net_reply_node_uid) {
static const char validDeviceUID[DI_DEVICE_UID_LEN] = "deadbeefcafebabedeadbeefcafebabe";
struct di_can_msg *req;
req = di_can_msg_alloc_with_canid(&_ctx, DI_CAN_NET_CANID_MSG_NODE_UID(REQUEST));
ASSERT_NE(nullptr, req);
req->src_id = 0x13371337;
// Request is necessary and may not be NULL
ASSERT_EQ(DNE_PARAM, di_can_net_send_node_uid(&_ctx, validDeviceUID, NULL));
// To short
ASSERT_EQ(DNE_PARAM, di_can_net_send_node_uid(&_ctx, "cafebeefdeadbeefdeadbeefdeadbee", req));
// To long
ASSERT_EQ(DNE_PARAM, di_can_net_send_node_uid(&_ctx, "c01abeefdeadbeefdeadbeefdeadbeeff", req));
// Valid send
ASSERT_EQ(DNOK, di_can_net_send_node_uid(&_ctx, validDeviceUID, req));
// Receive send and validate
struct di_can_msg *rep = di_can_recv(&_ctx, DI_CAN_MSGTYPE_ANY);
ASSERT_NE(nullptr, rep);
ASSERT_EQ(DI_CAN_TRANSFERTYPE_REPLY, DI_CAN_GET_TRANSFERTYPE(rep->canid));
ASSERT_EQ(DI_CAN_NET_DTYPE_NODE_UID, DI_CAN_GET_DATATYPE(rep->canid));
ASSERT_EQ(_ctx.nodeid, rep->src_id);
ASSERT_EQ(0x13371337, rep->dst_id);
ASSERT_EQ(DI_CAN_PTYPE_STRING, rep->ptype);
ASSERT_EQ(DI_DEVICE_UID_LEN, rep->size);
ASSERT_STREQ(validDeviceUID, (const char *)rep->msg);
di_can_msg_free(&req);
di_can_msg_free(&rep);
}