From cef2deb769456e113fa9c6758b67a646ad4666be Mon Sep 17 00:00:00 2001
From: Dimitrios Stoupis <dimitris.apple@gmail.com>
Date: Wed, 21 Nov 2018 11:46:20 +0000
Subject: [PATCH] Add test cases for the memory management service

---
 CMakeLists.txt                   |  2 +-
 src/main.cpp                     |  5 +-
 test/Services/MemMangService.cpp | 92 ++++++++++++++++++++++++++++++++
 3 files changed, 95 insertions(+), 4 deletions(-)
 create mode 100644 test/Services/MemMangService.cpp

diff --git a/CMakeLists.txt b/CMakeLists.txt
index da82b969..f667453e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -18,6 +18,6 @@ add_executable(ecss_services src/main.cpp src/Message.cpp src/Service.cpp src/Se
 
 IF(EXISTS "${PROJECT_SOURCE_DIR}/lib/Catch2/CMakeLists.txt")
 add_subdirectory(lib/Catch2)
-add_executable(tests src/Message.cpp src/Services/TestService.cpp test/tests.cpp test/Message.cpp test/TestPlatform.cpp test/Services/TestService.cpp)
+add_executable(tests src/Message.cpp src/Services/TestService.cpp src/Services/MemMangService.cpp test/tests.cpp test/Message.cpp test/TestPlatform.cpp test/Services/TestService.cpp test/Services/MemMangService.cpp)
 target_link_libraries(tests Catch2::Catch2)
 ENDIF()
diff --git a/src/main.cpp b/src/main.cpp
index ff81c0a6..108bd545 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -35,6 +35,7 @@ int main() {
 	*pStr = 'T';
 	*(pStr + 1) = 'G';
 	*(pStr + 2) = '\0';
+
 	MemoryManagementService memMangService;
 	Message rcvPack = Message(6, 5, Message::TC, 1);
 	rcvPack.appendEnum8(MemoryManagementService::MemoryID::RAM); // Memory ID
@@ -47,10 +48,10 @@ int main() {
 
 	rcvPack.appendUint64(reinterpret_cast<uint64_t >(yetAnotherStr));
 	rcvPack.appendUint16(sizeof(yetAnotherStr)/ sizeof(yetAnotherStr[0]));
-
 	memMangService.rawDataMemorySubservice.dumpRawData(rcvPack);
 
 	rcvPack = Message(6, 2, Message::TC, 1);
+
 	uint8_t data[2] = {'h', 'R'};
 	rcvPack.appendEnum8(MemoryManagementService::MemoryID::RAM); // Memory ID
 	rcvPack.appendUint16(2); // Iteration count
@@ -62,7 +63,5 @@ int main() {
 	rcvPack.appendOctetString(1, data);
 	memMangService.rawDataMemorySubservice.loadRawData(rcvPack);
 
-	std::cout << pStr << std::endl;
-
 	return 0;
 }
diff --git a/test/Services/MemMangService.cpp b/test/Services/MemMangService.cpp
new file mode 100644
index 00000000..8d7f63f4
--- /dev/null
+++ b/test/Services/MemMangService.cpp
@@ -0,0 +1,92 @@
+#include <catch2/catch.hpp>
+#include <Services/MemMangService.hpp>
+#include <Message.hpp>
+#include "ServiceTests.hpp"
+
+TEST_CASE("TM[6,2]", "[service][st06]") {
+	// Required test variables
+	char *pStr = static_cast<char *>(malloc(4));
+	*pStr = 'T';
+	*(pStr + 1) = 'G';
+	*(pStr + 2) = '\0';
+	uint8_t data[2] = {'h', 'R'};
+
+	MemoryManagementService memMangService;
+
+	Message receivedPacket = Message(6, 2, Message::TC, 1);
+	receivedPacket.appendEnum8(MemoryManagementService::MemoryID::RAM); // Memory ID
+	receivedPacket.appendUint16(2); // Iteration count
+	receivedPacket.appendUint64(reinterpret_cast<uint64_t >(pStr)); // Start address
+	receivedPacket.appendUint16(2); // Data length to append
+	receivedPacket.appendOctetString(2, data);
+	receivedPacket.appendUint64(reinterpret_cast<uint64_t >(pStr + 2)); // Start address
+	receivedPacket.appendUint16(1);
+	receivedPacket.appendOctetString(1, data);
+	memMangService.rawDataMemorySubservice.loadRawData(receivedPacket);
+
+	CHECK(pStr[0] == 'h');
+	CHECK(pStr[1] == 'R');
+	CHECK(pStr[2] == 'h');
+}
+
+TEST_CASE("TM[6,5]", "[service][st06]") {
+	uint8_t testString_1[6] = "FStrT";
+	uint8_t testString_2[8] = "SecStrT";
+	uint8_t testString_3[2] = {5, 8};
+
+	uint8_t checkString[8] = "\0";
+	uint16_t readSize = 0;
+
+	MemoryManagementService memMangService;
+	Message receivedPacket = Message(6, 5, Message::TC, 1);
+	receivedPacket.appendEnum8(MemoryManagementService::MemoryID::RAM); // Memory ID
+	receivedPacket.appendUint16(3); // Iteration count (Equal to 3 test strings)
+	receivedPacket.appendUint64(reinterpret_cast<uint64_t >(testString_1)); // Start address
+	receivedPacket.appendUint16(sizeof(testString_1)/ sizeof(testString_1[0])); // Data read length
+
+	receivedPacket.appendUint64(reinterpret_cast<uint64_t >(testString_2));
+	receivedPacket.appendUint16(sizeof(testString_2)/ sizeof(testString_2[0]));
+
+	receivedPacket.appendUint64(reinterpret_cast<uint64_t >(testString_3));
+	receivedPacket.appendUint16(sizeof(testString_3)/ sizeof(testString_3[0]));
+	memMangService.rawDataMemorySubservice.dumpRawData(receivedPacket);
+	REQUIRE(ServiceTests::hasOneMessage());
+
+	Message response = ServiceTests::get(0);
+	CHECK(response.serviceType == 6);
+	CHECK(response.messageType == 6);
+	REQUIRE(response.dataSize == 49);
+
+	CHECK(response.readEnum8() == MemoryManagementService::MemoryID::RAM);
+	CHECK(response.readUint16() == 3);
+	CHECK(response.readUint64() == reinterpret_cast<uint64_t >(testString_1));
+	readSize = sizeof(testString_1)/ sizeof(testString_1[0]);
+	CHECK(response.readUint16() == readSize);
+	response.readOctetString(checkString, readSize);
+	CHECK(checkString[0] == 'F');
+	CHECK(checkString[1] == 'S');
+	CHECK(checkString[2] == 't');
+	CHECK(checkString[3] == 'r');
+	CHECK(checkString[4] == 'T');
+	CHECK(checkString[5] == '\0');
+
+	CHECK(response.readUint64() == reinterpret_cast<uint64_t >(testString_2));
+	readSize = sizeof(testString_2)/ sizeof(testString_2[0]);
+	CHECK(response.readUint16() == readSize);
+	response.readOctetString(checkString, readSize);
+	CHECK(checkString[0] == 'S');
+	CHECK(checkString[1] == 'e');
+	CHECK(checkString[2] == 'c');
+	CHECK(checkString[3] == 'S');
+	CHECK(checkString[4] == 't');
+	CHECK(checkString[5] == 'r');
+	CHECK(checkString[6] == 'T');
+	CHECK(checkString[7] == '\0');
+
+	CHECK(response.readUint64() == reinterpret_cast<uint64_t >(testString_3));
+	readSize = sizeof(testString_3)/ sizeof(testString_3[0]);
+	CHECK(response.readUint16() == readSize);
+	response.readOctetString(checkString, readSize);
+	CHECK(checkString[0] == 5);
+	CHECK(checkString[1] == 8);
+}
-- 
GitLab