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