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