IVGCVSW-3904 Add more unit tests for send thread with BufferManager

 * Add timeout parameter to wait for readable data
 * Write all readable data to the profiling connection when ready to read
 * Set ready to read when buffer exhaust
 * Ensure that readable data get written to profiling connection
   before the send thread is stopped
 * Add MockWriteProfilingConnection to be able to test WritePacket
 * Refactor BufferManager and the unit tests

Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com>
Change-Id: I80ae01bd8d0119a3a3a957069ae8ac521c005a12
diff --git a/src/profiling/test/BufferTests.cpp b/src/profiling/test/BufferTests.cpp
index a2f3c30..7a06843 100644
--- a/src/profiling/test/BufferTests.cpp
+++ b/src/profiling/test/BufferTests.cpp
@@ -130,7 +130,9 @@
     unsigned int reservedSize = 0;
 
     // Cannot reserve buffer bigger than maximum buffer size
-    BOOST_CHECK_THROW(bufferManager.Reserve(1024, reservedSize), armnn::InvalidArgumentException);
+    auto reservedBuffer = bufferManager.Reserve(1024, reservedSize);
+    BOOST_TEST(reservedSize == 0);
+    BOOST_TEST(!reservedBuffer.get());
 }
 
 BOOST_AUTO_TEST_CASE(BufferExhaustionTest)
@@ -144,7 +146,9 @@
     BOOST_TEST(packetBuffer.get());
 
     // Cannot reserve buffer when buffer is not available
-    BOOST_CHECK_THROW(bufferManager.Reserve(512, reservedSize), BufferExhaustion);
+    auto reservedBuffer = bufferManager.Reserve(512, reservedSize);
+    BOOST_TEST(reservedSize == 0);
+    BOOST_TEST(!reservedBuffer.get());
 }
 
 BOOST_AUTO_TEST_CASE(BufferReserveMultipleTest)
@@ -173,7 +177,9 @@
 
     // Cannot reserve when buffer is not available
     unsigned int reservedSize3 = 0;
-    BOOST_CHECK_THROW(bufferManager.Reserve(512, reservedSize3), BufferExhaustion);
+    auto reservedBuffer = bufferManager.Reserve(512, reservedSize3);
+    BOOST_TEST(reservedSize3 == 0);
+    BOOST_TEST(!reservedBuffer.get());
 }
 
 BOOST_AUTO_TEST_CASE(BufferReleaseTest)
@@ -195,7 +201,9 @@
 
     // Cannot reserve when buffer is not available
     unsigned int reservedSize2 = 0;
-    BOOST_CHECK_THROW(bufferManager.Reserve(512, reservedSize2), BufferExhaustion);
+    auto reservedBuffer = bufferManager.Reserve(512, reservedSize2);
+    BOOST_TEST(reservedSize2 == 0);
+    BOOST_TEST(!reservedBuffer.get());
 
     bufferManager.Release(packetBuffer0);
 
@@ -222,7 +230,9 @@
     BOOST_TEST(packetBuffer1.get());
 
     unsigned int reservedSize2 = 0;
-    BOOST_CHECK_THROW(bufferManager.Reserve(512, reservedSize2), BufferExhaustion);
+    auto reservedBuffer = bufferManager.Reserve(512, reservedSize2);
+    BOOST_TEST(reservedSize2 == 0);
+    BOOST_TEST(!reservedBuffer.get());
 
     bufferManager.Commit(packetBuffer0, 256);
 
@@ -232,7 +242,10 @@
     BOOST_TEST(packetBuffer2->GetSize() == 256);
 
     // Buffer not set back to available list after commit
-    BOOST_CHECK_THROW(bufferManager.Reserve(512, reservedSize2), BufferExhaustion);
+    unsigned int reservedSize = 0;
+    reservedBuffer = bufferManager.Reserve(512, reservedSize);
+    BOOST_TEST(reservedSize == 0);
+    BOOST_TEST(!reservedBuffer.get());
 }
 
 BOOST_AUTO_TEST_CASE(BufferMarkReadTest)
@@ -252,7 +265,9 @@
 
     // Cannot reserve when buffer is not available
     unsigned int reservedSize2 = 0;
-    BOOST_CHECK_THROW(bufferManager.Reserve(512, reservedSize2), BufferExhaustion);
+    auto reservedBuffer = bufferManager.Reserve(512, reservedSize2);
+    BOOST_TEST(reservedSize2 == 0);
+    BOOST_TEST(!reservedBuffer.get());
 
     bufferManager.Commit(packetBuffer0, 256);
 
@@ -262,7 +277,9 @@
     BOOST_TEST(packetBuffer2->GetSize() == 256);
 
     // Buffer not set back to available list after commit
-    BOOST_CHECK_THROW(bufferManager.Reserve(512, reservedSize2), BufferExhaustion);
+    reservedBuffer = bufferManager.Reserve(512, reservedSize2);
+    BOOST_TEST(reservedSize2 == 0);
+    BOOST_TEST(!reservedBuffer.get());
 
     bufferManager.MarkRead(packetBuffer2);