From 819667ffa1737b4d0fdb61e53d9c91f9da020b85 Mon Sep 17 00:00:00 2001 From: hiluluk <thodkatz@gmail.com> Date: Sun, 7 Apr 2019 18:00:47 +0300 Subject: [PATCH] Move the definition of the execute() from Service.cpp to MessageParser.hpp --- inc/MessageParser.hpp | 10 ++++ inc/Service.hpp | 16 +++--- src/MessageParser.cpp | 31 ++++++++++++ src/Service.cpp | 32 ------------ src/Services/EventActionService.cpp | 2 +- src/main.cpp | 2 +- test/Services/EventActionService.cpp | 52 ++++++++++---------- test/Services/EventReportService.cpp | 10 ++-- test/Services/FunctionManagementService.cpp | 4 +- test/Services/MemoryManagementService.cpp | 6 +-- test/Services/ParameterService.cpp | 10 ++-- test/Services/TestService.cpp | 4 +- test/Services/TimeBasedSchedulingService.cpp | 12 ++--- test/Services/TimeManagementService.cpp | 1 + 14 files changed, 99 insertions(+), 93 deletions(-) diff --git a/inc/MessageParser.hpp b/inc/MessageParser.hpp index 1c2da64c..b6f40d3d 100644 --- a/inc/MessageParser.hpp +++ b/inc/MessageParser.hpp @@ -12,6 +12,16 @@ class MessageParser { public: + /** + * This function takes as input TC packets and and calls the proper services' functions that have been + * implemented to handle TC packets. + * + * @param Message Contains the necessary parameters to call the suitable subservice + * @todo Implement the execute() in the upcoming services or generally in the upcoming + * activities + */ + static void execute(Message &message); + /** * Parse a message that contains the CCSDS and ECSS packet headers, as well as the data * diff --git a/inc/Service.hpp b/inc/Service.hpp index 66e82557..7fc71104 100644 --- a/inc/Service.hpp +++ b/inc/Service.hpp @@ -46,6 +46,12 @@ protected: */ void storeMessage(Message &message); + /** + * This function declared only to remind us that every service must have a function like + * this, but this particular function does actually nothing. + */ + void execute(Message& message); + /** * Default protected constructor for this Service */ @@ -80,16 +86,6 @@ public: * Default move assignment operator */ Service &operator=(Service &&service) noexcept = default; - - /** - * This function takes as input TC packets and and calls the proper services' functions that have been - * implemented to handle TC packets. - * - * @param Message Contains the necessary parameters to call the suitable subservice - * @todo Implement the execute() in the upcoming services or generally in the upcoming - * activities - */ - static void execute(Message &message); }; diff --git a/src/MessageParser.cpp b/src/MessageParser.cpp index 0d37aca6..7f173c06 100644 --- a/src/MessageParser.cpp +++ b/src/MessageParser.cpp @@ -6,6 +6,37 @@ #include "Services/TestService.hpp" #include "Services/RequestVerificationService.hpp" +void MessageParser::execute(Message& message) { + switch (message.serviceType) { + case 5: + Services.eventReport.execute(message); // ST[05] + break; + case 6: + Services.memoryManagement.rawDataMemorySubservice.execute(message); // ST[06] + break; + case 8: + Services.functionManagement.execute(message); // ST[08] + break; + case 9: + Services.timeManagement.execute(message); // ST[09] + break; + case 11: + Services.timeBasedScheduling.execute(message); // ST[11] + break; + case 17: + Services.testService.execute(message); // ST[17] + break; + case 19: + Services.eventAction.execute(message); // ST[19] + break; + case 20: + Services.parameterManagement.execute(message); // ST[20] + break; + default: + ErrorHandler::reportInternalError(ErrorHandler::OtherMessageType); + } +} + Message MessageParser::parse(uint8_t *data, uint32_t length) { ASSERT_INTERNAL(length >= 6, ErrorHandler::UnacceptablePacket); diff --git a/src/Service.cpp b/src/Service.cpp index ab0d0139..66fdd045 100644 --- a/src/Service.cpp +++ b/src/Service.cpp @@ -1,33 +1 @@ #include "Service.hpp" -#include "ServicePool.hpp" - -void Service::execute(Message& message) { - switch (message.serviceType) { - case 5: - Services.eventReport.execute(message); // ST[05] - break; - case 6: - Services.memoryManagement.rawDataMemorySubservice.execute(message); // ST[06] - break; - case 8: - Services.functionManagement.execute(message); // ST[08] - break; - case 9: - Services.timeManagement.execute(message); // ST[09] - break; - case 11: - Services.timeBasedScheduling.execute(message); // ST[11] - break; - case 17: - Services.testService.execute(message); // ST[17] - break; - case 19: - Services.eventAction.execute(message); // ST[19] - break; - case 20: - Services.parameterManagement.execute(message); // ST[20] - break; - default: - ErrorHandler::reportInternalError(ErrorHandler::OtherMessageType); - } -} diff --git a/src/Services/EventActionService.cpp b/src/Services/EventActionService.cpp index 95ed674f..450003a2 100644 --- a/src/Services/EventActionService.cpp +++ b/src/Services/EventActionService.cpp @@ -185,7 +185,7 @@ void EventActionService::executeAction(uint16_t eventID) { MessageParser messageParser; Message message = messageParser.parseRequestTC( definition.request); - Service::execute(message); + MessageParser::execute(message); } } } diff --git a/src/main.cpp b/src/main.cpp index 3125c421..50a1540d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -161,7 +161,7 @@ int main() { eventReportData); Message trivialMessage = Message(); - Service::execute(trivialMessage); + MessageParser::execute(trivialMessage); // ErrorHandler test std::cout << std::flush; diff --git a/test/Services/EventActionService.cpp b/test/Services/EventActionService.cpp index 3941e548..3e0ec21f 100644 --- a/test/Services/EventActionService.cpp +++ b/test/Services/EventActionService.cpp @@ -19,7 +19,7 @@ TEST_CASE("Add event-action definitions TC[19,1]", "[service][st19]") { String<64> data = "123"; message.appendString(data); - Service::execute(message); + MessageParser::execute(message); CHECK(eventActionService.eventActionDefinitionArray[0].empty == 0); CHECK(eventActionService.eventActionDefinitionArray[0].applicationId == 0); CHECK(eventActionService.eventActionDefinitionArray[0].eventDefinitionID == 2); @@ -35,7 +35,7 @@ TEST_CASE("Add event-action definitions TC[19,1]", "[service][st19]") { data = "456"; message2.appendString(data); - Service::execute(message2); + MessageParser::execute(message2); CHECK(eventActionService.eventActionDefinitionArray[1].empty == 0); CHECK(eventActionService.eventActionDefinitionArray[1].applicationId == 1); CHECK(eventActionService.eventActionDefinitionArray[1].eventDefinitionID == 3); @@ -52,31 +52,31 @@ TEST_CASE("Delete event-action definitions TC[19,2]", "[service][st19]") { message0.appendEnum16(0); String<64> data = "0"; message0.appendString(data); - Service::execute(message0); + MessageParser::execute(message0); Message message1(19, 1, Message::TC, 0); message1.appendEnum16(1); message1.appendEnum16(1); data = "1"; message1.appendString(data); - Service::execute(message1); + MessageParser::execute(message1); Message message2(19, 1, Message::TC, 0); message2.appendEnum16(1); message2.appendEnum16(2); data = "2"; message2.appendString(data); - Service::execute(message2); + MessageParser::execute(message2); Message message3(19, 1, Message::TC, 0); message3.appendEnum16(1); message3.appendEnum16(3); data = "3"; message3.appendString(data); - Service::execute(message3); + MessageParser::execute(message3); Message message4(19, 1, Message::TC, 0); message4.appendEnum16(1); message4.appendEnum16(4); data = "4"; message4.appendString(data); - Service::execute(message4); + MessageParser::execute(message4); Message message(19, 2, Message::TC, 0); message.appendUint16(2); @@ -84,7 +84,7 @@ TEST_CASE("Delete event-action definitions TC[19,2]", "[service][st19]") { message.appendEnum16(4); message.appendEnum16(1); message.appendEnum16(2); - Service::execute(message); + MessageParser::execute(message); CHECK(eventActionService.eventActionDefinitionArray[0].empty == 0); CHECK(eventActionService.eventActionDefinitionArray[0].applicationId == 1); @@ -124,31 +124,31 @@ TEST_CASE("Delete all event-action definitions TC[19,3]", "[service][st19]") { message0.appendEnum16(0); String<64> data = "0"; message0.appendString(data); - Service::execute(message0); + MessageParser::execute(message0); Message message1(19, 1, Message::TC, 0); message1.appendEnum16(1); message1.appendEnum16(1); data = "1"; message1.appendString(data); - Service::execute(message1); + MessageParser::execute(message1); Message message2(19, 1, Message::TC, 0); message2.appendEnum16(1); message2.appendEnum16(2); data = "2"; message2.appendString(data); - Service::execute(message2); + MessageParser::execute(message2); Message message3(19, 1, Message::TC, 0); message3.appendEnum16(1); message3.appendEnum16(3); data = "3"; message3.appendString(data); - Service::execute(message3); + MessageParser::execute(message3); Message message4(19, 1, Message::TC, 0); message4.appendEnum16(1); message4.appendEnum16(4); data = "4"; message4.appendString(data); - Service::execute(message4); + MessageParser::execute(message4); Message message(19, 3, Message::TC, 0); eventActionService.deleteAllEventActionDefinitions(message); @@ -167,20 +167,20 @@ TEST_CASE("Enable event-action definitions TC[19,4]", "[service][st19]") { message0.appendEnum16(0); String<64> data = "0"; message0.appendString(data); - Service::execute(message0); + MessageParser::execute(message0); Message message1(19, 1, Message::TC, 0); message1.appendEnum16(1); message1.appendEnum16(1); data = "00"; message1.appendString(data); - Service::execute(message1); + MessageParser::execute(message1); Message message2(19, 4, Message::TC, 0); message2.appendUint16(2); message2.appendEnum16(1); message2.appendEnum16(0); message2.appendEnum16(1); message2.appendEnum16(1); - Service::execute(message2); + MessageParser::execute(message2); CHECK(eventActionService.eventActionDefinitionArray[0].enabled == 1); CHECK(eventActionService.eventActionDefinitionArray[1].enabled == 1); @@ -192,25 +192,25 @@ TEST_CASE("Disable event-action definitions TC[19,5]", "[service][st19]") { message0.appendEnum16(0); String<64> data = "0"; message0.appendString(data); - Service::execute(message0); + MessageParser::execute(message0); Message message1(19, 1, Message::TC, 0); message1.appendEnum16(1); message1.appendEnum16(0); data = "00"; message1.appendString(data); - Service::execute(message1); + MessageParser::execute(message1); Message message2(19, 5, Message::TC, 0); message2.appendUint16(1); message2.appendEnum16(1); message2.appendEnum16(0); - Service::execute(message2); + MessageParser::execute(message2); CHECK(eventActionService.eventActionDefinitionArray[0].enabled == 0); CHECK(eventActionService.eventActionDefinitionArray[1].enabled == 0); } TEST_CASE("Request event-action definition status TC[19,6]", "[service][st19]") { Message message(19, 6, Message::TC, 0); - Service::execute(message); + MessageParser::execute(message); REQUIRE(ServiceTests::hasOneMessage()); Message report = ServiceTests::get(0); @@ -223,18 +223,18 @@ TEST_CASE("Event-action status report TM[19,7]", "[service][st19]") { message0.appendEnum16(0); String<64> data = "0"; message0.appendString(data); - Service::execute(message0); + MessageParser::execute(message0); Message message1(19, 1, Message::TC, 0); message1.appendEnum16(1); message1.appendEnum16(2); data = "2"; message1.appendString(data); - Service::execute(message1); + MessageParser::execute(message1); Message message2(19, 5, Message::TC, 0); message2.appendUint16(1); message2.appendEnum16(1); message2.appendEnum16(0); - Service::execute(message2); + MessageParser::execute(message2); eventActionService.eventActionStatusReport(); REQUIRE(ServiceTests::hasOneMessage()); @@ -248,15 +248,15 @@ TEST_CASE("Event-action status report TM[19,7]", "[service][st19]") { CHECK(report.readUint8() == 1); } -TEST_CASE("Enable event-action function TC[19,8]", "[service][st19]") { +TEST_CASE("Enable event-action function TC[19,8]", "[MessageParser][st19]") { Message message(19, 8, Message::TC, 0); - Service::execute(message); + MessageParser::execute(message); CHECK(eventActionService.getEventActionFunctionStatus() == true); } TEST_CASE("Disable event-action function TC[19,9]", "[service][st19]") { Message message(19, 9, Message::TC, 0); - Service::execute(message); + MessageParser::execute(message); CHECK(eventActionService.getEventActionFunctionStatus() == false); } diff --git a/test/Services/EventReportService.cpp b/test/Services/EventReportService.cpp index 2e3cfee0..d2892cd9 100644 --- a/test/Services/EventReportService.cpp +++ b/test/Services/EventReportService.cpp @@ -90,7 +90,7 @@ TEST_CASE("Enable Report Generation TC[5,5]", "[service][st05]") { message.appendUint16(2); message.appendEnum16(eventID[0]); message.appendEnum16(eventID[1]); - Service::execute(message); + MessageParser::execute(message); CHECK(eventReportService.getStateOfEvents()[2] == 1); CHECK(eventReportService.getStateOfEvents()[4] == 1); } @@ -102,7 +102,7 @@ TEST_CASE("Disable Report Generation TC[5,6]", "[service][st05]") { message.appendUint16(2); message.appendEnum16(eventID[0]); message.appendEnum16(eventID[1]); - Service::execute(message); + MessageParser::execute(message); CHECK(eventReportService.getStateOfEvents()[0] == 0); CHECK(eventReportService.getStateOfEvents()[5] == 0); @@ -114,7 +114,7 @@ TEST_CASE("Disable Report Generation TC[5,6]", "[service][st05]") { TEST_CASE("Request list of disabled events TC[5,7]", "[service][st05]") { Message message(5, 7, Message::TC, 1); - Service::execute(message); + MessageParser::execute(message); REQUIRE(ServiceTests::hasOneMessage()); Message report = ServiceTests::get(0); @@ -130,7 +130,7 @@ TEST_CASE("List of Disabled Events Report TM[5,8]", "[service][st05]") { message.appendEnum16(eventID[0]); message.appendEnum16(eventID[1]); // Disable 3rd and 6th - Service::execute(message); + MessageParser::execute(message); eventReportService.listOfDisabledEventsReport(); REQUIRE(ServiceTests::hasOneMessage()); @@ -151,7 +151,7 @@ TEST_CASE("List of observables 6.5.6", "[service][st05]") { Message message(5, 6, Message::TC, 1); message.appendUint16(1); message.appendEnum16(eventID[0]); - Service::execute(message); + MessageParser::execute(message); const String<64> eventReportData = "HelloWorld"; diff --git a/test/Services/FunctionManagementService.cpp b/test/Services/FunctionManagementService.cpp index 1b8ca1c9..235e1198 100644 --- a/test/Services/FunctionManagementService.cpp +++ b/test/Services/FunctionManagementService.cpp @@ -17,7 +17,7 @@ TEST_CASE("ST[08] - Call Tests") { fms.include(String<FUNC_NAME_LENGTH>("test"), &test); Message msg(8, 1, Message::TC, 1); msg.appendString(String<FUNC_NAME_LENGTH>("t3st")); - Service::execute(msg); + MessageParser::execute(msg); CHECK(ServiceTests::get(0).messageType == 4); CHECK(ServiceTests::get(0).serviceType == 1); } @@ -29,7 +29,7 @@ TEST_CASE("ST[08] - Call Tests") { msg.appendString(String<FUNC_NAME_LENGTH>("test")); msg.appendString(String<65> ("eqrhjweghjhwqgthjkrghthjkdsfhgsdfhjsdjsfdhgkjdfsghfjdgkdfsgdfgsgd")); - Service::execute(msg); + MessageParser::execute(msg); CHECK(ServiceTests::get(0).messageType == 4); CHECK(ServiceTests::get(0).serviceType == 1); } diff --git a/test/Services/MemoryManagementService.cpp b/test/Services/MemoryManagementService.cpp index 9176a55d..4861c6a7 100644 --- a/test/Services/MemoryManagementService.cpp +++ b/test/Services/MemoryManagementService.cpp @@ -23,7 +23,7 @@ TEST_CASE("TC[6,2]", "[service][st06]") { receivedPacket.appendUint64(reinterpret_cast<uint64_t >(pStr + 2)); // Start address receivedPacket.appendOctetString(String<1>(data)); // Append CRC receivedPacket.appendBits(16, CRCHelper::calculateCRC(data, 1)); - Service::execute(receivedPacket); + MessageParser::execute(receivedPacket); CHECK(pStr[0] == 'h'); CHECK(pStr[1] == 'R'); @@ -50,7 +50,7 @@ TEST_CASE("TC[6,5]", "[service][st06]") { receivedPacket.appendUint64(reinterpret_cast<uint64_t >(testString_3)); receivedPacket.appendUint16(sizeof(testString_3) / sizeof(testString_3[0])); - Service::execute(receivedPacket); + MessageParser::execute(receivedPacket); REQUIRE(ServiceTests::hasOneMessage()); Message response = ServiceTests::get(0); @@ -109,7 +109,7 @@ TEST_CASE("TC[6,9]", "[service][st06]") { receivedPacket.appendUint64(reinterpret_cast<uint64_t >(testString_2)); receivedPacket.appendUint16(sizeof(testString_2) / sizeof(testString_2[0])); - Service::execute(receivedPacket); + MessageParser::execute(receivedPacket); REQUIRE(ServiceTests::hasOneMessage()); Message response = ServiceTests::get(0); diff --git a/test/Services/ParameterService.cpp b/test/Services/ParameterService.cpp index 8f971c04..5ea20d52 100644 --- a/test/Services/ParameterService.cpp +++ b/test/Services/ParameterService.cpp @@ -14,7 +14,7 @@ TEST_CASE("Parameter Report Subservice") { request.appendUint16(34672); // faulty ID in this context request.appendUint16(1); // valid - Service::execute(request); + MessageParser::execute(request); report = ServiceTests::get(0); request.resetRead(); @@ -33,7 +33,7 @@ TEST_CASE("Parameter Report Subservice") { SECTION("Wrong Message Type Handling Test") { Message falseRequest(15, 3, Message::TM, 1); // a totally wrong message - Service::execute(falseRequest); + MessageParser::execute(falseRequest); Message errorNotif = ServiceTests::get(0); CHECK(errorNotif.messageType == 4); // check for proper failed start of // execution notification @@ -68,19 +68,19 @@ TEST_CASE("Parameter Setting Subservice") { // Since every reporting and setting is called with the same (sometimes faulty) parameters, // and there are errors generated (as should be) it is important to catch and check for // them in order to preserve the integrity of the test. - Service::execute(reportRequest); + MessageParser::execute(reportRequest); Message errorNotif1 = ServiceTests::get(0); CHECK(errorNotif1.messageType == 4); CHECK(errorNotif1.serviceType == 1); Message before = ServiceTests::get(1); - Service::execute(setRequest); + MessageParser::execute(setRequest); Message errorNotif2 = ServiceTests::get(2); CHECK(errorNotif2.messageType == 4); CHECK(errorNotif2.serviceType == 1); - Service::execute(reportRequest); + MessageParser::execute(reportRequest); Message errorNotif3 = ServiceTests::get(3); CHECK(errorNotif3.messageType == 4); CHECK(errorNotif3.serviceType == 1); diff --git a/test/Services/TestService.cpp b/test/Services/TestService.cpp index 6e5126da..b2a3ce68 100644 --- a/test/Services/TestService.cpp +++ b/test/Services/TestService.cpp @@ -7,7 +7,7 @@ TestService & testService = Services.testService; TEST_CASE("TM[17,1]", "[service][st17]") { Message receivedPacket = Message(17, 1, Message::TC, 1); - Service::execute(receivedPacket); + MessageParser::execute(receivedPacket); REQUIRE(ServiceTests::hasOneMessage()); Message response = ServiceTests::get(0); @@ -19,7 +19,7 @@ TEST_CASE("TM[17,1]", "[service][st17]") { TEST_CASE("TM[17,3]", "[service][st17]") { Message receivedPacket = Message(17, 3, Message::TC, 1); receivedPacket.appendEnum16(40); - Service::execute(receivedPacket); + MessageParser::execute(receivedPacket); REQUIRE(ServiceTests::hasOneMessage()); Message response = ServiceTests::get(0); diff --git a/test/Services/TimeBasedSchedulingService.cpp b/test/Services/TimeBasedSchedulingService.cpp index 11ae0e87..e6f5ec56 100644 --- a/test/Services/TimeBasedSchedulingService.cpp +++ b/test/Services/TimeBasedSchedulingService.cpp @@ -97,7 +97,7 @@ TEST_CASE("TC[11,1] Enable Schedule Execution", "[service][st11]") { Services.reset(); Message receivedMessage(11, 1, Message::TC, 1); - Service::execute(receivedMessage);//timeService.enableScheduleExecution(receivedMessage); + MessageParser::execute(receivedMessage);//timeService.enableScheduleExecution(receivedMessage); CHECK(unit_test::Tester::executionFunctionStatus(timeBasedService)); } @@ -105,7 +105,7 @@ TEST_CASE("TC[11,2] Disable Schedule Execution", "[service][st11]") { Services.reset(); Message receivedMessage(11, 2, Message::TC, 1); - Service::execute(receivedMessage);//timeService.disableScheduleExecution(receivedMessage); + MessageParser::execute(receivedMessage);//timeService.disableScheduleExecution(receivedMessage); CHECK(not unit_test::Tester::executionFunctionStatus(timeBasedService)); } @@ -128,7 +128,7 @@ TEST_CASE("TC[11,4] Activity Insertion", "[service][st11]") { receivedMessage.appendUint16(1); // Total number of requests receivedMessage.appendUint32(currentTime - 15564350); - Service::execute(receivedMessage);//timeService.insertActivities(receivedMessage); + MessageParser::execute(receivedMessage);//timeService.insertActivities(receivedMessage); REQUIRE(ServiceTests::thrownError(ErrorHandler::InstructionExecutionStartError)); } @@ -145,7 +145,7 @@ TEST_CASE("TC[11,15] Time shift all scheduled activities", "[service][st11]") { receivedMessage.appendSint32(-timeShift); CHECK(scheduledActivities.size() == 4); - Service::execute(receivedMessage);//timeService.timeShiftAllActivities(receivedMessage); + MessageParser::execute(receivedMessage);//timeService.timeShiftAllActivities(receivedMessage); REQUIRE(scheduledActivities.at(0)->requestReleaseTime == currentTime + 1556435 - timeShift); REQUIRE(scheduledActivities.at(1)->requestReleaseTime == currentTime + 1726435 - timeShift); @@ -157,7 +157,7 @@ TEST_CASE("TC[11,15] Time shift all scheduled activities", "[service][st11]") { receivedMessage.appendSint32(timeShift); CHECK(scheduledActivities.size() == 4); - Service::execute(receivedMessage);//timeService.timeShiftAllActivities(receivedMessage); + MessageParser::execute(receivedMessage);//timeService.timeShiftAllActivities(receivedMessage); REQUIRE(scheduledActivities.at(0)->requestReleaseTime == currentTime + 1556435 + timeShift); REQUIRE(scheduledActivities.at(1)->requestReleaseTime == currentTime + 1726435 + timeShift); @@ -169,7 +169,7 @@ TEST_CASE("TC[11,15] Time shift all scheduled activities", "[service][st11]") { receivedMessage.appendSint32(-6789000); // Provide a huge time shift to cause an error CHECK(scheduledActivities.size() == 4); - Service::execute(receivedMessage);//timeService.timeShiftAllActivities(receivedMessage); + MessageParser::execute(receivedMessage);//timeService.timeShiftAllActivities(receivedMessage); REQUIRE(ServiceTests::thrownError(ErrorHandler::SubServiceExecutionStartError)); } diff --git a/test/Services/TimeManagementService.cpp b/test/Services/TimeManagementService.cpp index f8d0ba75..7055523b 100644 --- a/test/Services/TimeManagementService.cpp +++ b/test/Services/TimeManagementService.cpp @@ -33,6 +33,7 @@ TEST_CASE("TM[9,3]", "[service][st09]") { message.appendHalfword(static_cast<uint16_t >(timeFormat >> 32)); message.appendWord(static_cast<uint32_t >(timeFormat)); + MessageParser::execute(message); TimeInfo = timeService.cdsTimeRequest(message); CHECK(TimeInfo.year == 2020); CHECK(TimeInfo.month == 4); -- GitLab