aboutsummaryrefslogtreecommitdiff
path: root/profiling/server/src/basePipeServer/tests/BasePipeServerTests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'profiling/server/src/basePipeServer/tests/BasePipeServerTests.cpp')
-rw-r--r--profiling/server/src/basePipeServer/tests/BasePipeServerTests.cpp99
1 files changed, 99 insertions, 0 deletions
diff --git a/profiling/server/src/basePipeServer/tests/BasePipeServerTests.cpp b/profiling/server/src/basePipeServer/tests/BasePipeServerTests.cpp
new file mode 100644
index 0000000000..c85bbe72d3
--- /dev/null
+++ b/profiling/server/src/basePipeServer/tests/BasePipeServerTests.cpp
@@ -0,0 +1,99 @@
+//
+// Copyright © 2020 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#include "../ConnectionHandler.hpp"
+
+#include <SocketProfilingConnection.hpp>
+#include <Processes.hpp>
+
+#include <boost/test/test_tools.hpp>
+#include <boost/test/unit_test_suite.hpp>
+
+
+BOOST_AUTO_TEST_SUITE(BasePipeServerTests)
+
+using namespace armnn;
+using namespace armnnProfiling;
+
+BOOST_AUTO_TEST_CASE(BasePipeServerTest)
+{
+ // Setup the mock service to bind to the UDS.
+ std::string udsNamespace = "gatord_namespace";
+
+ // Try to initialize a listening socket through the ConnectionHandler
+ BOOST_CHECK_NO_THROW(ConnectionHandler connectionHandler(udsNamespace, true));
+
+ // The socket should close once we leave the scope of BOOST_CHECK_NO_THROW
+ // and socketProfilingConnection should fail to connect
+ BOOST_CHECK_THROW(profiling::SocketProfilingConnection socketProfilingConnection,
+ armnnProfiling::SocketConnectionException);
+
+ // Try to initialize a listening socket through the ConnectionHandler again
+ ConnectionHandler connectionHandler(udsNamespace, true);
+ // socketProfilingConnection should connect now
+ profiling::SocketProfilingConnection socketProfilingConnection;
+ BOOST_TEST(socketProfilingConnection.IsOpen());
+
+ auto basePipeServer = connectionHandler.GetNewBasePipeServer(false);
+ // GetNewBasePipeServer will return null if it fails to create a socket
+ BOOST_TEST(basePipeServer.get());
+
+ profiling::BufferManager bufferManager;
+ profiling::SendCounterPacket sendCounterPacket(bufferManager);
+
+ // Check that we can receive a StreamMetaDataPacket
+ sendCounterPacket.SendStreamMetaDataPacket();
+
+ auto packetBuffer = bufferManager.GetReadableBuffer();
+ const unsigned char* readBuffer = packetBuffer->GetReadableData();
+ unsigned int readBufferSize = packetBuffer->GetSize();
+
+ BOOST_TEST(readBuffer);
+ BOOST_TEST(readBufferSize > 0);
+
+ socketProfilingConnection.WritePacket(readBuffer,readBufferSize);
+ bufferManager.MarkRead(packetBuffer);
+
+ BOOST_TEST(basePipeServer.get()->WaitForStreamMetaData());
+ BOOST_TEST(basePipeServer.get()->GetStreamMetadataPid() == armnnUtils::Processes::GetCurrentId());
+ BOOST_TEST(basePipeServer.get()->GetStreamMetadataMaxDataLen() == MAX_METADATA_PACKET_LENGTH);
+
+ // Now try a simple PeriodicCounterSelectionPacket
+ sendCounterPacket.SendPeriodicCounterSelectionPacket(50, {1,2,3,4,5});
+
+ packetBuffer = bufferManager.GetReadableBuffer();
+ readBuffer = packetBuffer->GetReadableData();
+ readBufferSize = packetBuffer->GetSize();
+
+ BOOST_TEST(readBuffer);
+ BOOST_TEST(readBufferSize > 0);
+
+ socketProfilingConnection.WritePacket(readBuffer,readBufferSize);
+ bufferManager.MarkRead(packetBuffer);
+
+ auto packet1 = basePipeServer.get()->WaitForPacket(500);
+
+ BOOST_TEST(!packet1.IsEmpty());
+ BOOST_TEST(packet1.GetPacketFamily() == 0);
+ BOOST_TEST(packet1.GetPacketId() == 4);
+ BOOST_TEST(packet1.GetLength() == 14);
+
+ // Try and send the packet back to the client
+ basePipeServer.get()->SendPacket(packet1.GetPacketFamily(),
+ packet1.GetPacketId(),
+ packet1.GetData(),
+ packet1.GetLength());
+
+ auto packet2 = socketProfilingConnection.ReadPacket(500);
+
+ BOOST_TEST(!packet2.IsEmpty());
+ BOOST_TEST(packet2.GetPacketFamily() == 0);
+ BOOST_TEST(packet2.GetPacketId() == 4);
+ BOOST_TEST(packet2.GetLength() == 14);
+
+ socketProfilingConnection.Close();
+}
+
+BOOST_AUTO_TEST_SUITE_END() \ No newline at end of file