33// \brief queue rule implementations
44// ======================================================================
55
6+ #include < memory>
67#include " CommonTests.hpp"
78#include " Fw/Types/String.hpp"
89
910struct PickedMessage {
1011 FwSizeType size;
1112 FwQueuePriorityType priority;
12- U8* sent;
13+ std::unique_ptr<U8[]> sent;
1314 U8 received[QUEUE_MESSAGE_SIZE_UPPER_BOUND];
15+
16+ // Constructor
17+ PickedMessage () : size(0 ), priority(0 ), sent(nullptr ) {}
18+
19+ // Get raw pointer for API compatibility
20+ U8* get_sent () const { return sent.get (); }
1421};
1522
1623PickedMessage pick_message (FwSizeType max_size) {
@@ -20,7 +27,7 @@ PickedMessage pick_message(FwSizeType max_size) {
2027 // Force priority to be in a smaller range to produce more same-priority messages
2128 message.priority = STest::Random::lowerUpper (0 , std::numeric_limits<I8>::max ());
2229
23- message.sent = new U8[message.size ];
30+ message.sent . reset ( new U8[message.size ]) ;
2431 for (FwSizeType i = 0 ; i < message.size ; i++) {
2532 message.sent [i] = STest::Random::lowerUpper (0 , std::numeric_limits<U8>::max ());
2633 }
@@ -81,9 +88,8 @@ void Os::Test::Queue::Tester::SendNotFull::action(Os::Test::Queue::Tester& state
8188 // Prevent lock-up
8289 ASSERT_LT (state.queue .getMessagesAvailable (), state.queue .getDepth ());
8390 ASSERT_FALSE (state.is_shadow_full ());
84- QueueInterface::Status status = state.shadow_send (pick.sent , pick.size , pick.priority , blocking);
85- QueueInterface::Status test_status = state.queue .send (pick.sent , pick.size , pick.priority , blocking);
86- delete[] pick.sent ; // Clean-up
91+ QueueInterface::Status status = state.shadow_send (pick.get_sent (), pick.size , pick.priority , blocking);
92+ QueueInterface::Status test_status = state.queue .send (pick.get_sent (), pick.size , pick.priority , blocking);
8793 ASSERT_EQ (status, QueueInterface::Status::OP_OK);
8894 ASSERT_EQ (test_status, status);
8995 if (this ->m_end_check ) {
@@ -106,10 +112,10 @@ bool Os::Test::Queue::Tester::SendFullNoBlock::precondition(const Os::Test::Queu
106112void Os::Test::Queue::Tester::SendFullNoBlock::action (Os::Test::Queue::Tester& state // !< The test state
107113) {
108114 PickedMessage pick = pick_message (state.shadow .messageSize );
109- QueueInterface::Status status = state.shadow_send (pick.sent , pick.size , pick.priority , QueueInterface::NONBLOCKING);
115+ QueueInterface::Status status =
116+ state.shadow_send (pick.get_sent (), pick.size , pick.priority , QueueInterface::NONBLOCKING);
110117 QueueInterface::Status test_status =
111- state.queue .send (pick.sent , pick.size , pick.priority , QueueInterface::NONBLOCKING);
112- delete[] pick.sent ;
118+ state.queue .send (pick.get_sent (), pick.size , pick.priority , QueueInterface::NONBLOCKING);
113119
114120 ASSERT_EQ (status, QueueInterface::Status::FULL);
115121 ASSERT_EQ (test_status, status);
@@ -199,19 +205,17 @@ void Os::Test::Queue::Tester::Overflow::action(Os::Test::Queue::Tester& state /
199205 while (not state.is_shadow_full ()) {
200206 PickedMessage pick = pick_message (state.shadow .messageSize );
201207 QueueInterface::Status status =
202- state.shadow_send (pick.sent , pick.size , pick.priority , QueueInterface::BlockingType::NONBLOCKING);
208+ state.shadow_send (pick.get_sent () , pick.size , pick.priority , QueueInterface::BlockingType::NONBLOCKING);
203209 QueueInterface::Status test_status =
204- state.queue .send (pick.sent , pick.size , pick.priority , QueueInterface::BlockingType::NONBLOCKING);
205- delete[] pick.sent ;
210+ state.queue .send (pick.get_sent (), pick.size , pick.priority , QueueInterface::BlockingType::NONBLOCKING);
206211 ASSERT_EQ (status, QueueInterface::Status::OP_OK);
207212 ASSERT_EQ (status, test_status);
208213 }
209214 PickedMessage pick = pick_message (state.shadow .messageSize );
210215 QueueInterface::Status status =
211- state.shadow_send (pick.sent , pick.size , pick.priority , QueueInterface::BlockingType::NONBLOCKING);
216+ state.shadow_send (pick.get_sent () , pick.size , pick.priority , QueueInterface::BlockingType::NONBLOCKING);
212217 QueueInterface::Status test_status =
213- state.queue .send (pick.sent , pick.size , pick.priority , QueueInterface::BlockingType::NONBLOCKING);
214- delete[] pick.sent ;
218+ state.queue .send (pick.get_sent (), pick.size , pick.priority , QueueInterface::BlockingType::NONBLOCKING);
215219 ASSERT_EQ (status, QueueInterface::Status::FULL);
216220 ASSERT_EQ (status, test_status);
217221 state.shadow_check ();
@@ -280,16 +284,15 @@ void Os::Test::Queue::Tester::SendBlock::action(Os::Test::Queue::Tester& state
280284 PickedMessage pick = pick_message (state.shadow .messageSize );
281285 this ->notify_other (" SendUnblock" );
282286 QueueInterface::Status status =
283- state.shadow_send (pick.sent , pick.size , pick.priority , QueueInterface::BlockingType::BLOCKING);
287+ state.shadow_send (pick.get_sent () , pick.size , pick.priority , QueueInterface::BlockingType::BLOCKING);
284288 getLock ().unlock ();
285289 QueueInterface::Status test_status =
286- state.queue .send (pick.sent , pick.size , pick.priority , QueueInterface::BlockingType::BLOCKING);
290+ state.queue .send (pick.get_sent () , pick.size , pick.priority , QueueInterface::BlockingType::BLOCKING);
287291 getLock ().lock ();
288292 // Condition should be set after block
289293 ASSERT_TRUE (this ->getCondition ());
290294 // Unblock the shadow queue send
291295 state.shadow_send_unblock ();
292- delete[] pick.sent ;
293296
294297 ASSERT_EQ (status, QueueInterface::Status::OP_OK);
295298 ASSERT_EQ (test_status, status);
0 commit comments