diff --git a/Os/Queue.cpp b/Os/Queue.cpp index 77a8ea3b9aa..b0ae416c5ca 100644 --- a/Os/Queue.cpp +++ b/Os/Queue.cpp @@ -146,4 +146,11 @@ Os::Mutex& Queue::getStaticMutex() { return s_mutex; } +#if FW_QUEUE_REGISTRATION +void Queue::setRegistry(QueueRegistry* registry) { + ScopeLock lock(Queue::getStaticMutex()); + Queue::s_queueRegistry = registry; +} +#endif + } // namespace Os diff --git a/Os/test/ut/queue/CommonTests.cpp b/Os/test/ut/queue/CommonTests.cpp index 5906d9572cf..603a79a1005 100644 --- a/Os/test/ut/queue/CommonTests.cpp +++ b/Os/test/ut/queue/CommonTests.cpp @@ -19,6 +19,12 @@ U64 Tester::QueueMessage::order_counter = 0; PriorityCompare const Tester::QueueMessageComparer::HELPER = PriorityCompare(); +Tester::Tester() { +#if FW_QUEUE_REGISTRATION + Os::Queue::setRegistry(this); +#endif +} + Os::QueueInterface::Status Tester::shadow_create(FwSizeType depth, FwSizeType messageSize) { Os::QueueInterface::Status status = Os::QueueInterface::ALREADY_CREATED; if (not this->shadow.created) { @@ -110,6 +116,10 @@ void Tester::shadow_receive_unblock() { this->shadow.receive_block.priority = nullptr; } +void Tester::registerQueue(Os::Queue* q) { + this->m_all_queues.push_back(q); +} + } // namespace Queue } // namespace Test } // namespace Os @@ -229,6 +239,9 @@ TEST(BasicRules, Create) { create_rule.action(tester); // Repetitive create create_rule.action(tester); +#if FW_QUEUE_REGISTRATION + EXPECT_GT(tester.m_all_queues.size(), 0) << "No queues were registered."; +#endif } TEST(BasicRules, Send) { diff --git a/Os/test/ut/queue/RulesHeaders.hpp b/Os/test/ut/queue/RulesHeaders.hpp index 353a9cac2b7..162f7e53207 100644 --- a/Os/test/ut/queue/RulesHeaders.hpp +++ b/Os/test/ut/queue/RulesHeaders.hpp @@ -23,10 +23,10 @@ namespace Queue { constexpr FwSizeType DEPTH_BOUND = 100000; -struct Tester { +struct Tester : public Os::QueueRegistry { public: //! Constructor - Tester() = default; + Tester(); virtual ~Tester() { queue.teardown(); }; struct QueueMessage { @@ -72,6 +72,7 @@ struct Tester { }; QueueState shadow; Os::Queue queue; + std::vector m_all_queues; //! Shadow is created bool is_shadow_created() const { @@ -119,6 +120,10 @@ struct Tester { //! Complete a previous blocking queue receive void shadow_receive_unblock(); + + //! Register a queue with the registry + void registerQueue(Os::Queue* q) override; + public: #include "QueueRules.hpp" };