diff --git a/libuavcan/include/uavcan/internal/transport/dispatcher.hpp b/libuavcan/include/uavcan/internal/transport/dispatcher.hpp index b9895b4ffd..e398cbd618 100644 --- a/libuavcan/include/uavcan/internal/transport/dispatcher.hpp +++ b/libuavcan/include/uavcan/internal/transport/dispatcher.hpp @@ -43,6 +43,8 @@ class Dispatcher : Noncopyable void remove(TransferListenerBase* listener); void cleanup(uint64_t ts_monotonic); void handleFrame(const RxFrame& frame); + + int getNumEntries() const { return list_.length(); } }; ListenerRegister lmsg_; @@ -85,6 +87,10 @@ public: void unregisterServiceRequestListener(TransferListenerBase* listener); void unregisterServiceResponseListener(TransferListenerBase* listener); + int getNumMessageListeners() const { return lmsg_.getNumEntries(); } + int getNumServiceRequestListeners() const { return lsrv_req_.getNumEntries(); } + int getNumServiceResponseListeners() const { return lsrv_resp_.getNumEntries(); } + IOutgoingTransferRegistry* getOutgoingTransferRegistry() { return outgoing_transfer_reg_; } NodeID getSelfNodeID() const { return self_node_id_; } diff --git a/libuavcan/test/transport/dispatcher.cpp b/libuavcan/test/transport/dispatcher.cpp index 87441bed14..1261b3ac92 100644 --- a/libuavcan/test/transport/dispatcher.cpp +++ b/libuavcan/test/transport/dispatcher.cpp @@ -129,6 +129,11 @@ TEST(Dispatcher, Reception) // Multiple service request listeners are not allowed ASSERT_FALSE(dispatcher.registerServiceRequestListener(subscribers[3].get())); + // Item count validation + ASSERT_EQ(3, dispatcher.getNumMessageListeners()); + ASSERT_EQ(1, dispatcher.getNumServiceRequestListeners()); + ASSERT_EQ(2, dispatcher.getNumServiceResponseListeners()); + for (int i = 0; i < NUM_SUBSCRIBERS; i++) ASSERT_TRUE(subscribers[i]->isEmpty()); @@ -181,6 +186,10 @@ TEST(Dispatcher, Reception) dispatcher.unregisterServiceRequestListener(subscribers[3].get()); dispatcher.unregisterServiceResponseListener(subscribers[4].get()); dispatcher.unregisterServiceResponseListener(subscribers[5].get()); + + ASSERT_EQ(0, dispatcher.getNumMessageListeners()); + ASSERT_EQ(0, dispatcher.getNumServiceRequestListeners()); + ASSERT_EQ(0, dispatcher.getNumServiceResponseListeners()); }