mirror of
https://gitee.com/mirrors_PX4/PX4-Autopilot.git
synced 2026-10-19 22:53:34 +08:00
Transfer buffering system detemplatized; compiles but tests are failing
This commit is contained in:
@@ -86,17 +86,17 @@ TEST(Dispatcher, Reception)
|
||||
makeDataType(uavcan::DataTypeKindService, 1)
|
||||
};
|
||||
|
||||
typedef TestListener<512> Subscriber;
|
||||
typedef std::auto_ptr<Subscriber> SubscriberPtr;
|
||||
static const int NUM_SUBSCRIBERS = 6;
|
||||
SubscriberPtr subscribers[NUM_SUBSCRIBERS] =
|
||||
typedef std::auto_ptr<TestListener> TestListenerPtr;
|
||||
static const int MaxBufSize = 512;
|
||||
static const int NumSubscribers = 6;
|
||||
TestListenerPtr subscribers[NumSubscribers] =
|
||||
{
|
||||
SubscriberPtr(new Subscriber(dispatcher.getTransferPerfCounter(), TYPES[0], pool)), // msg
|
||||
SubscriberPtr(new Subscriber(dispatcher.getTransferPerfCounter(), TYPES[0], pool)), // msg // Two similar
|
||||
SubscriberPtr(new Subscriber(dispatcher.getTransferPerfCounter(), TYPES[1], pool)), // msg
|
||||
SubscriberPtr(new Subscriber(dispatcher.getTransferPerfCounter(), TYPES[2], pool)), // srv
|
||||
SubscriberPtr(new Subscriber(dispatcher.getTransferPerfCounter(), TYPES[3], pool)), // srv
|
||||
SubscriberPtr(new Subscriber(dispatcher.getTransferPerfCounter(), TYPES[3], pool)) // srv // Repeat again
|
||||
TestListenerPtr(new TestListener(dispatcher.getTransferPerfCounter(), TYPES[0], MaxBufSize, pool)), // msg
|
||||
TestListenerPtr(new TestListener(dispatcher.getTransferPerfCounter(), TYPES[0], MaxBufSize, pool)), // msg // Two similar
|
||||
TestListenerPtr(new TestListener(dispatcher.getTransferPerfCounter(), TYPES[1], MaxBufSize, pool)), // msg
|
||||
TestListenerPtr(new TestListener(dispatcher.getTransferPerfCounter(), TYPES[2], MaxBufSize, pool)), // srv
|
||||
TestListenerPtr(new TestListener(dispatcher.getTransferPerfCounter(), TYPES[3], MaxBufSize, pool)), // srv
|
||||
TestListenerPtr(new TestListener(dispatcher.getTransferPerfCounter(), TYPES[3], MaxBufSize, pool)) // srv // Repeat again
|
||||
};
|
||||
|
||||
static const std::string DATA[6] =
|
||||
@@ -139,7 +139,7 @@ TEST(Dispatcher, Reception)
|
||||
/*
|
||||
* Registration
|
||||
*/
|
||||
for (int i = 0; i < NUM_SUBSCRIBERS; i++)
|
||||
for (int i = 0; i < NumSubscribers; i++)
|
||||
{
|
||||
ASSERT_FALSE(dispatcher.hasSubscriber(subscribers[i]->getDataTypeDescriptor().getID()));
|
||||
ASSERT_FALSE(dispatcher.hasPublisher(subscribers[i]->getDataTypeDescriptor().getID()));
|
||||
@@ -153,7 +153,7 @@ TEST(Dispatcher, Reception)
|
||||
ASSERT_TRUE(dispatcher.registerServiceResponseListener(subscribers[4].get()));
|
||||
ASSERT_TRUE(dispatcher.registerServiceResponseListener(subscribers[5].get()));
|
||||
|
||||
for (int i = 0; i < NUM_SUBSCRIBERS; i++)
|
||||
for (int i = 0; i < NumSubscribers; i++)
|
||||
{
|
||||
ASSERT_FALSE(dispatcher.hasPublisher(subscribers[i]->getDataTypeDescriptor().getID()));
|
||||
}
|
||||
@@ -177,7 +177,7 @@ TEST(Dispatcher, Reception)
|
||||
ASSERT_EQ(1, dispatcher.getNumServiceRequestListeners());
|
||||
ASSERT_EQ(2, dispatcher.getNumServiceResponseListeners());
|
||||
|
||||
for (int i = 0; i < NUM_SUBSCRIBERS; i++)
|
||||
for (int i = 0; i < NumSubscribers; i++)
|
||||
{
|
||||
ASSERT_TRUE(subscribers[i]->isEmpty());
|
||||
}
|
||||
@@ -214,7 +214,7 @@ TEST(Dispatcher, Reception)
|
||||
|
||||
ASSERT_TRUE(subscribers[5]->matchAndPop(transfers[3]));
|
||||
|
||||
for (int i = 0; i < NUM_SUBSCRIBERS; i++)
|
||||
for (int i = 0; i < NumSubscribers; i++)
|
||||
{
|
||||
ASSERT_TRUE(subscribers[i]->isEmpty());
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ TEST(MultiFrameIncomingTransfer, Basic)
|
||||
using uavcan::MultiFrameIncomingTransfer;
|
||||
|
||||
uavcan::PoolAllocator<uavcan::MemPoolBlockSize * 100, uavcan::MemPoolBlockSize> poolmgr;
|
||||
uavcan::TransferBufferManager<256> bufmgr(poolmgr);
|
||||
uavcan::TransferBufferManager bufmgr(256, poolmgr);
|
||||
|
||||
const RxFrame frame = makeFrame();
|
||||
uavcan::TransferBufferManagerKey bufmgr_key(frame.getSrcNodeID(), frame.getTransferType());
|
||||
|
||||
@@ -83,8 +83,8 @@ static const int TEST_BUFFER_SIZE = 200;
|
||||
|
||||
TEST(StaticTransferBuffer, Basic)
|
||||
{
|
||||
using uavcan::StaticTransferBufferManagerEntry;
|
||||
StaticTransferBufferManagerEntry<TEST_BUFFER_SIZE> buf;
|
||||
using uavcan::StaticTransferBuffer;
|
||||
StaticTransferBuffer<TEST_BUFFER_SIZE> buf;
|
||||
|
||||
uint8_t local_buffer[TEST_BUFFER_SIZE * 2];
|
||||
const uint8_t* const test_data_ptr = reinterpret_cast<const uint8_t*>(TEST_DATA.c_str());
|
||||
@@ -126,15 +126,15 @@ TEST(StaticTransferBuffer, Basic)
|
||||
}
|
||||
|
||||
|
||||
TEST(DynamicTransferBufferManagerEntry, Basic)
|
||||
TEST(TransferBufferManagerEntry, Basic)
|
||||
{
|
||||
using uavcan::DynamicTransferBufferManagerEntry;
|
||||
using uavcan::TransferBufferManagerEntry;
|
||||
|
||||
static const int MAX_SIZE = TEST_BUFFER_SIZE;
|
||||
static const int POOL_BLOCKS = 8;
|
||||
uavcan::PoolAllocator<uavcan::MemPoolBlockSize * POOL_BLOCKS, uavcan::MemPoolBlockSize> pool;
|
||||
|
||||
DynamicTransferBufferManagerEntry buf(pool, MAX_SIZE);
|
||||
TransferBufferManagerEntry buf(pool, MAX_SIZE);
|
||||
|
||||
uint8_t local_buffer[TEST_BUFFER_SIZE * 2];
|
||||
const uint8_t* const test_data_ptr = reinterpret_cast<const uint8_t*>(TEST_DATA.c_str());
|
||||
@@ -186,7 +186,7 @@ TEST(DynamicTransferBufferManagerEntry, Basic)
|
||||
|
||||
// Destroying the object; memory should be released
|
||||
ASSERT_LT(0, pool.getNumUsedBlocks());
|
||||
buf.~DynamicTransferBufferManagerEntry();
|
||||
buf.~TransferBufferManagerEntry();
|
||||
ASSERT_EQ(0, pool.getNumUsedBlocks());
|
||||
}
|
||||
|
||||
@@ -232,8 +232,7 @@ TEST(TransferBufferManager, Basic)
|
||||
static const int POOL_BLOCKS = 100;
|
||||
uavcan::PoolAllocator<uavcan::MemPoolBlockSize * POOL_BLOCKS, uavcan::MemPoolBlockSize> pool;
|
||||
|
||||
typedef TransferBufferManager<MGR_MAX_BUFFER_SIZE> TransferBufferManagerType;
|
||||
std::auto_ptr<TransferBufferManagerType> mgr(new TransferBufferManagerType(pool));
|
||||
std::auto_ptr<TransferBufferManager> mgr(new TransferBufferManager(MGR_MAX_BUFFER_SIZE, pool));
|
||||
|
||||
// Empty
|
||||
ASSERT_FALSE(mgr->access(TransferBufferManagerKey(0, uavcan::TransferTypeMessageBroadcast)));
|
||||
@@ -313,11 +312,3 @@ TEST(TransferBufferManager, Basic)
|
||||
mgr.reset();
|
||||
ASSERT_EQ(0, pool.getNumUsedBlocks());
|
||||
}
|
||||
|
||||
|
||||
TEST(TransferBufferManager, EmptySpecialization)
|
||||
{
|
||||
uavcan::TransferBufferManager<0> mgr;
|
||||
(void)mgr;
|
||||
ASSERT_GE(sizeof(void*), sizeof(mgr));
|
||||
}
|
||||
|
||||
@@ -9,11 +9,11 @@
|
||||
|
||||
class TransferListenerEmulator : public IncomingTransferEmulatorBase
|
||||
{
|
||||
uavcan::TransferListenerBase& target_;
|
||||
uavcan::TransferListener& target_;
|
||||
const uavcan::DataTypeDescriptor data_type_;
|
||||
|
||||
public:
|
||||
TransferListenerEmulator(uavcan::TransferListenerBase& target, const uavcan::DataTypeDescriptor& type,
|
||||
TransferListenerEmulator(uavcan::TransferListener& target, const uavcan::DataTypeDescriptor& type,
|
||||
uavcan::NodeID dst_node_id = 127)
|
||||
: IncomingTransferEmulatorBase(dst_node_id)
|
||||
, target_(target)
|
||||
@@ -38,7 +38,7 @@ TEST(TransferListener, BasicMFT)
|
||||
uavcan::PoolAllocator<uavcan::MemPoolBlockSize * NUM_POOL_BLOCKS, uavcan::MemPoolBlockSize> pool;
|
||||
|
||||
uavcan::TransferPerfCounter perf;
|
||||
TestListener<256> subscriber(perf, type, pool);
|
||||
TestListener subscriber(perf, type, 256, pool);
|
||||
|
||||
/*
|
||||
* Test data
|
||||
@@ -96,7 +96,7 @@ TEST(TransferListener, CrcFailure)
|
||||
static const int NUM_POOL_BLOCKS = 100;
|
||||
uavcan::PoolAllocator<uavcan::MemPoolBlockSize * NUM_POOL_BLOCKS, uavcan::MemPoolBlockSize> poolmgr;
|
||||
uavcan::TransferPerfCounter perf;
|
||||
TestListener<256> subscriber(perf, type, poolmgr); // Static buffer only, 2 entries
|
||||
TestListener subscriber(perf, type, 256, poolmgr); // Static buffer only, 2 entries
|
||||
|
||||
/*
|
||||
* Generating transfers with damaged payload (CRC is not valid)
|
||||
@@ -140,7 +140,7 @@ TEST(TransferListener, BasicSFT)
|
||||
static const int NUM_POOL_BLOCKS = 100;
|
||||
uavcan::PoolAllocator<uavcan::MemPoolBlockSize * NUM_POOL_BLOCKS, uavcan::MemPoolBlockSize> poolmgr;
|
||||
uavcan::TransferPerfCounter perf;
|
||||
TestListener<0> subscriber(perf, type, poolmgr); // Max buf size is 0, i.e. SFT-only
|
||||
TestListener subscriber(perf, type, 0, poolmgr); // Max buf size is 0, i.e. SFT-only
|
||||
|
||||
TransferListenerEmulator emulator(subscriber, type);
|
||||
const Transfer transfers[] =
|
||||
@@ -176,7 +176,7 @@ TEST(TransferListener, Cleanup)
|
||||
static const int NUM_POOL_BLOCKS = 100;
|
||||
uavcan::PoolAllocator<uavcan::MemPoolBlockSize * NUM_POOL_BLOCKS, uavcan::MemPoolBlockSize> poolmgr;
|
||||
uavcan::TransferPerfCounter perf;
|
||||
TestListener<256> subscriber(perf, type, poolmgr); // Static buffer only, 1 entry
|
||||
TestListener subscriber(perf, type, 256, poolmgr);
|
||||
|
||||
/*
|
||||
* Generating transfers
|
||||
@@ -208,7 +208,7 @@ TEST(TransferListener, Cleanup)
|
||||
/*
|
||||
* Cleanup with huge timestamp value will remove all entries
|
||||
*/
|
||||
static_cast<uavcan::TransferListenerBase&>(subscriber).cleanup(tsMono(100000000));
|
||||
static_cast<uavcan::TransferListener&>(subscriber).cleanup(tsMono(100000000));
|
||||
|
||||
/*
|
||||
* Sending the same transfers again - they will be accepted since registres were cleared
|
||||
@@ -232,7 +232,7 @@ TEST(TransferListener, AnonymousTransfers)
|
||||
static const int NUM_POOL_BLOCKS = 100;
|
||||
uavcan::PoolAllocator<uavcan::MemPoolBlockSize * NUM_POOL_BLOCKS, uavcan::MemPoolBlockSize> poolmgr;
|
||||
uavcan::TransferPerfCounter perf;
|
||||
TestListener<0> subscriber(perf, type, poolmgr);
|
||||
TestListener subscriber(perf, type, 0, poolmgr);
|
||||
|
||||
TransferListenerEmulator emulator(subscriber, type);
|
||||
const Transfer transfers[] =
|
||||
@@ -264,5 +264,5 @@ TEST(TransferListener, Sizes)
|
||||
{
|
||||
using namespace uavcan;
|
||||
|
||||
std::cout << "sizeof(TransferListener<64>): " << sizeof(TransferListener<64>) << std::endl;
|
||||
std::cout << "sizeof(TransferListener): " << sizeof(TransferListener) << std::endl;
|
||||
}
|
||||
|
||||
@@ -76,10 +76,10 @@ struct Context
|
||||
{
|
||||
uavcan::PoolAllocator<uavcan::MemPoolBlockSize * 100, uavcan::MemPoolBlockSize> pool;
|
||||
uavcan::TransferReceiver receiver; // Must be default constructible and copyable
|
||||
uavcan::TransferBufferManager<BufSize> bufmgr;
|
||||
uavcan::TransferBufferManager bufmgr;
|
||||
|
||||
Context() :
|
||||
bufmgr(pool)
|
||||
bufmgr(BufSize, pool)
|
||||
{ }
|
||||
|
||||
~Context()
|
||||
@@ -122,7 +122,7 @@ TEST(TransferReceiver, Basic)
|
||||
Context<32> context;
|
||||
RxFrameGenerator gen(789);
|
||||
uavcan::TransferReceiver& rcv = context.receiver;
|
||||
uavcan::ITransferBufferManager& bufmgr = context.bufmgr;
|
||||
uavcan::TransferBufferManager& bufmgr = context.bufmgr;
|
||||
uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY);
|
||||
|
||||
std::cout << "sizeof(TransferReceiver): " << sizeof(TransferReceiver) << std::endl;
|
||||
@@ -261,7 +261,7 @@ TEST(TransferReceiver, OutOfBufferSpace_32bytes)
|
||||
Context<32> context;
|
||||
RxFrameGenerator gen(789);
|
||||
uavcan::TransferReceiver& rcv = context.receiver;
|
||||
uavcan::ITransferBufferManager& bufmgr = context.bufmgr;
|
||||
uavcan::TransferBufferManager& bufmgr = context.bufmgr;
|
||||
uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY);
|
||||
|
||||
/*
|
||||
@@ -299,7 +299,7 @@ TEST(TransferReceiver, OutOfOrderFrames)
|
||||
Context<32> context;
|
||||
RxFrameGenerator gen(789);
|
||||
uavcan::TransferReceiver& rcv = context.receiver;
|
||||
uavcan::ITransferBufferManager& bufmgr = context.bufmgr;
|
||||
uavcan::TransferBufferManager& bufmgr = context.bufmgr;
|
||||
uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY);
|
||||
|
||||
CHECK_NOT_COMPLETE(rcv.addFrame(gen(1, "1234567", SET100, 7, 100000000), bk));
|
||||
@@ -323,7 +323,7 @@ TEST(TransferReceiver, IntervalMeasurement)
|
||||
Context<32> context;
|
||||
RxFrameGenerator gen(789);
|
||||
uavcan::TransferReceiver& rcv = context.receiver;
|
||||
uavcan::ITransferBufferManager& bufmgr = context.bufmgr;
|
||||
uavcan::TransferBufferManager& bufmgr = context.bufmgr;
|
||||
uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY);
|
||||
|
||||
static const int INTERVAL = 1000;
|
||||
@@ -353,7 +353,7 @@ TEST(TransferReceiver, Restart)
|
||||
Context<32> context;
|
||||
RxFrameGenerator gen(789);
|
||||
uavcan::TransferReceiver& rcv = context.receiver;
|
||||
uavcan::ITransferBufferManager& bufmgr = context.bufmgr;
|
||||
uavcan::TransferBufferManager& bufmgr = context.bufmgr;
|
||||
uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY);
|
||||
|
||||
/*
|
||||
@@ -401,7 +401,7 @@ TEST(TransferReceiver, UtcTransferTimestamping)
|
||||
Context<32> context;
|
||||
RxFrameGenerator gen(789);
|
||||
uavcan::TransferReceiver& rcv = context.receiver;
|
||||
uavcan::ITransferBufferManager& bufmgr = context.bufmgr;
|
||||
uavcan::TransferBufferManager& bufmgr = context.bufmgr;
|
||||
uavcan::TransferBufferAccessor bk(context.bufmgr, RxFrameGenerator::DEFAULT_KEY);
|
||||
|
||||
/*
|
||||
@@ -460,7 +460,7 @@ TEST(TransferReceiver, HeaderParsing)
|
||||
Context<32> context;
|
||||
RxFrameGenerator gen(123);
|
||||
uavcan::TransferReceiver& rcv = context.receiver;
|
||||
uavcan::ITransferBufferManager& bufmgr = context.bufmgr;
|
||||
uavcan::TransferBufferManager& bufmgr = context.bufmgr;
|
||||
|
||||
/*
|
||||
* MFT, message broadcasting
|
||||
@@ -507,7 +507,7 @@ TEST(TransferReceiver, HeaderParsing)
|
||||
Context<32> context;
|
||||
RxFrameGenerator gen(123);
|
||||
uavcan::TransferReceiver& rcv = context.receiver;
|
||||
uavcan::ITransferBufferManager& bufmgr = context.bufmgr;
|
||||
uavcan::TransferBufferManager& bufmgr = context.bufmgr;
|
||||
|
||||
static const uavcan::TransferType ADDRESSED_TRANSFER_TYPES[2] =
|
||||
{
|
||||
|
||||
@@ -123,9 +123,9 @@ TEST(TransferSender, Basic)
|
||||
}
|
||||
}
|
||||
|
||||
TestListener<512> sub_msg(dispatcher_rx.getTransferPerfCounter(), TYPES[0], poolmgr);
|
||||
TestListener<512> sub_srv_req(dispatcher_rx.getTransferPerfCounter(), TYPES[1], poolmgr);
|
||||
TestListener<512> sub_srv_resp(dispatcher_rx.getTransferPerfCounter(), TYPES[1], poolmgr);
|
||||
TestListener sub_msg(dispatcher_rx.getTransferPerfCounter(), TYPES[0], 512, poolmgr);
|
||||
TestListener sub_srv_req(dispatcher_rx.getTransferPerfCounter(), TYPES[1], 512, poolmgr);
|
||||
TestListener sub_srv_resp(dispatcher_rx.getTransferPerfCounter(), TYPES[1], 512, poolmgr);
|
||||
|
||||
dispatcher_rx.registerMessageListener(&sub_msg);
|
||||
dispatcher_rx.registerServiceRequestListener(&sub_srv_req);
|
||||
|
||||
@@ -11,7 +11,7 @@ TEST(TransferTestHelpers, Transfer)
|
||||
{
|
||||
uavcan::PoolAllocator<uavcan::MemPoolBlockSize * 8, uavcan::MemPoolBlockSize> pool;
|
||||
|
||||
uavcan::TransferBufferManager<128> mgr(pool);
|
||||
uavcan::TransferBufferManager mgr(128, pool);
|
||||
uavcan::TransferBufferAccessor tba(mgr, uavcan::TransferBufferManagerKey(0, uavcan::TransferTypeMessageBroadcast));
|
||||
|
||||
uavcan::RxFrame frame(uavcan::Frame(123, uavcan::TransferTypeMessageBroadcast, 1, 0, 0),
|
||||
|
||||
@@ -117,17 +117,16 @@ struct Transfer
|
||||
* In reality, uavcan::TransferListener should accept only specific transfer types
|
||||
* which are dispatched/filtered by uavcan::Dispatcher.
|
||||
*/
|
||||
template <unsigned MAX_BUF_SIZE>
|
||||
class TestListener : public uavcan::TransferListener<MAX_BUF_SIZE>
|
||||
class TestListener : public uavcan::TransferListener
|
||||
{
|
||||
typedef uavcan::TransferListener<MAX_BUF_SIZE> Base;
|
||||
typedef uavcan::TransferListener Base;
|
||||
|
||||
std::queue<Transfer> transfers_;
|
||||
|
||||
public:
|
||||
TestListener(uavcan::TransferPerfCounter& perf, const uavcan::DataTypeDescriptor& data_type,
|
||||
uavcan::IPoolAllocator& allocator)
|
||||
: Base(perf, data_type, allocator)
|
||||
uavcan::uint16_t max_buffer_size, uavcan::IPoolAllocator& allocator)
|
||||
: Base(perf, data_type, max_buffer_size, allocator)
|
||||
{ }
|
||||
|
||||
void handleIncomingTransfer(uavcan::IncomingTransfer& transfer)
|
||||
@@ -166,7 +165,7 @@ public:
|
||||
return res;
|
||||
}
|
||||
|
||||
int getNumReceivedTransfers() const { return transfers_.size(); }
|
||||
unsigned getNumReceivedTransfers() const { return static_cast<unsigned>(transfers_.size()); }
|
||||
bool isEmpty() const { return transfers_.empty(); }
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user