From a548d8311ce9c72562327bc92cd02b7ee2f38f2c Mon Sep 17 00:00:00 2001 From: Pavel Kirienko Date: Wed, 13 May 2015 16:39:22 +0300 Subject: [PATCH] Testing framework: added emulateSingleFrameBroadcastTransfer() --- libuavcan/test/protocol/helpers.hpp | 28 +++++++++++++++++++ .../test/protocol/node_status_monitor.cpp | 24 +--------------- 2 files changed, 29 insertions(+), 23 deletions(-) diff --git a/libuavcan/test/protocol/helpers.hpp b/libuavcan/test/protocol/helpers.hpp index df8085566e..171fb66871 100644 --- a/libuavcan/test/protocol/helpers.hpp +++ b/libuavcan/test/protocol/helpers.hpp @@ -103,3 +103,31 @@ struct BackgroundSpinner : uavcan::TimerBase spinning_node.spin(uavcan::MonotonicDuration::fromMSec(1)); } }; + +template +static inline void emulateSingleFrameBroadcastTransfer(CanDriverMock& can, uavcan::NodeID node_id, + const MessageType& message, uavcan::TransferID tid) +{ + uavcan::StaticTransferBuffer<100> buffer; + uavcan::BitStream bitstream(buffer); + uavcan::ScalarCodec codec(bitstream); + + // Manual message publication + ASSERT_LT(0, MessageType::encode(message, codec)); + ASSERT_GE(8, buffer.getMaxWritePos()); + + // DataTypeID data_type_id, TransferType transfer_type, NodeID src_node_id, NodeID dst_node_id, + // uint_fast8_t frame_index, TransferID transfer_id, bool last_frame + uavcan::Frame frame(MessageType::DefaultDataTypeID, uavcan::TransferTypeMessageBroadcast, + node_id, uavcan::NodeID::Broadcast, 0, tid, true); + + ASSERT_EQ(buffer.getMaxWritePos(), frame.setPayload(buffer.getRawPtr(), buffer.getMaxWritePos())); + + uavcan::CanFrame can_frame; + ASSERT_TRUE(frame.compile(can_frame)); + + for (uint8_t i = 0; i < can.getNumIfaces(); i++) + { + can.ifaces.at(i).pushRx(can_frame); + } +} diff --git a/libuavcan/test/protocol/node_status_monitor.cpp b/libuavcan/test/protocol/node_status_monitor.cpp index bfb97b0053..4f47b33252 100644 --- a/libuavcan/test/protocol/node_status_monitor.cpp +++ b/libuavcan/test/protocol/node_status_monitor.cpp @@ -10,32 +10,10 @@ static void publishNodeStatus(CanDriverMock& can, uavcan::NodeID node_id, uavcan::uint8_t status_code, uavcan::uint32_t uptime_sec, uavcan::TransferID tid) { - uavcan::StaticTransferBuffer<100> buffer; - uavcan::BitStream bitstream(buffer); - uavcan::ScalarCodec codec(bitstream); - uavcan::protocol::NodeStatus msg; msg.status_code = status_code; msg.uptime_sec = uptime_sec; - - // Manual message publication - ASSERT_LT(0, uavcan::protocol::NodeStatus::encode(msg, codec)); - ASSERT_GE(8, buffer.getMaxWritePos()); - - // DataTypeID data_type_id, TransferType transfer_type, NodeID src_node_id, NodeID dst_node_id, - // uint_fast8_t frame_index, TransferID transfer_id, bool last_frame - uavcan::Frame frame(uavcan::protocol::NodeStatus::DefaultDataTypeID, uavcan::TransferTypeMessageBroadcast, - node_id, uavcan::NodeID::Broadcast, 0, tid, true); - - ASSERT_EQ(buffer.getMaxWritePos(), frame.setPayload(buffer.getRawPtr(), buffer.getMaxWritePos())); - - uavcan::CanFrame can_frame; - ASSERT_TRUE(frame.compile(can_frame)); - - for (uint8_t i = 0; i < can.getNumIfaces(); i++) - { - can.ifaces.at(i).pushRx(can_frame); - } + emulateSingleFrameBroadcastTransfer(can, node_id, msg, tid); }