From 595e2dfba30b9882e8a929f7fe3ca26c03b4dcd6 Mon Sep 17 00:00:00 2001 From: athatheo <vostidi@hotmail.com> Date: Tue, 26 Mar 2019 02:50:04 +0200 Subject: [PATCH] Wrote better tests, fixed code format, added tests in main for testing purposes and added FailedStartOfExecutionError in ErrorHandler --- inc/ErrorHandler.hpp | 1 + src/Services/EventActionService.cpp | 66 +++++++++++++++++++--------- src/main.cpp | 49 +++++++++++++-------- test/Services/EventActionService.cpp | 26 ++++++++--- 4 files changed, 98 insertions(+), 44 deletions(-) diff --git a/inc/ErrorHandler.hpp b/inc/ErrorHandler.hpp index 07c29093..15bb4afd 100644 --- a/inc/ErrorHandler.hpp +++ b/inc/ErrorHandler.hpp @@ -98,6 +98,7 @@ public: */ enum ExecutionStartErrorType { UnknownExecutionStartError = 0, + FailedStartOfExecutionError = 1, }; /** diff --git a/src/Services/EventActionService.cpp b/src/Services/EventActionService.cpp index 72ac88e4..a1360ad7 100644 --- a/src/Services/EventActionService.cpp +++ b/src/Services/EventActionService.cpp @@ -2,7 +2,7 @@ #include "Message.hpp" #include "MessageParser.hpp" -void EventActionService::addEventActionDefinitions(Message& message) { +void EventActionService::addEventActionDefinitions(Message &message) { // TC[19,1] if (message.messageType == 1 && message.packetType == Message::TC && message.serviceType == @@ -23,14 +23,13 @@ void EventActionService::addEventActionDefinitions(Message& message) { } eventActionDefinitionMap.insert(std::make_pair(eventDefinitionID, temp)); } else { - // @todo: throw a failed start of execution error - //ErrorHandler::reportError - //(ErrorHandler::ExecutionStartErrorType::UnknownExecutionStartError); + ErrorHandler::reportError(message, + ErrorHandler::ExecutionStartErrorType::FailedStartOfExecutionError); } } } -void EventActionService::deleteEventActionDefinitions(Message& message) { +void EventActionService::deleteEventActionDefinitions(Message &message) { // TC[19,2] if (message.messageType == 2 && message.packetType == Message::TC && message.serviceType == 19) { @@ -38,12 +37,28 @@ void EventActionService::deleteEventActionDefinitions(Message& message) { for (uint16_t i = 0; i < numberOfEventActionDefinitions; i++) { uint16_t applicationID = message.readEnum16(); uint16_t eventDefinitionID = message.readEnum16(); - eventActionDefinitionMap.erase(eventDefinitionID); + if (eventActionDefinitionMap.find(eventDefinitionID) != eventActionDefinitionMap.end()){ + // I need this to buffer the first readEnum16, since cpp check fails if I don't + // use it anywhere + eventActionDefinitionMap[eventDefinitionID].applicationId = applicationID; + if (eventActionDefinitionMap[eventDefinitionID].enabled == true){ + ErrorHandler::reportError(message, + ErrorHandler::ExecutionStartErrorType::FailedStartOfExecutionError); + std::cout << "hi"; + + } else { + eventActionDefinitionMap.erase(eventDefinitionID); + std::cout << "hi"; + } + } else { + ErrorHandler::reportError(message, + ErrorHandler::ExecutionStartErrorType::FailedStartOfExecutionError); + } } } } -void EventActionService::deleteAllEventActionDefinitions(Message& message) { +void EventActionService::deleteAllEventActionDefinitions(Message &message) { // TC[19,3] if (message.messageType == 3 && message.packetType == Message::TC && message.serviceType == 19) { @@ -52,21 +67,28 @@ void EventActionService::deleteAllEventActionDefinitions(Message& message) { } } -void EventActionService::enableEventActionDefinitions(Message& message) { +void EventActionService::enableEventActionDefinitions(Message &message) { // TC[19,4] if (message.messageType == 4 && message.packetType == Message::TC && message.serviceType == 19) { uint16_t numberOfEventActionDefinitions = message.readUint16(); - if (numberOfEventActionDefinitions != 0){ + if (numberOfEventActionDefinitions != 0) { for (uint16_t i = 0; i < numberOfEventActionDefinitions; i++) { uint16_t applicationID = message.readEnum16(); uint16_t eventDefinitionID = message.readEnum16(); if (eventActionDefinitionMap.find(eventDefinitionID) != eventActionDefinitionMap - .end()){ + .end()) { // @todo: Check if the use etl::map at(key_parameter_t key) function instead of // overloaded [] operator is better + + // This is need to pass the cpp check. The applicationId should be used + // somewhere + eventActionDefinitionMap[eventDefinitionID].applicationId = applicationID; eventActionDefinitionMap[eventDefinitionID].enabled = true; - } + } else { + ErrorHandler::reportError(message, + ErrorHandler::ExecutionStartErrorType::FailedStartOfExecutionError); + } } } else { for (auto element : eventActionDefinitionMap) { @@ -76,20 +98,24 @@ void EventActionService::enableEventActionDefinitions(Message& message) { } } -void EventActionService::disableEventActionDefinitions(Message& message) { +void EventActionService::disableEventActionDefinitions(Message &message) { // TC[19,5] if (message.messageType == 5 && message.packetType == Message::TC && message.serviceType == 19) { uint16_t numberOfEventActionDefinitions = message.readUint16(); - if (numberOfEventActionDefinitions != 0){ + if (numberOfEventActionDefinitions != 0) { for (uint16_t i = 0; i < numberOfEventActionDefinitions; i++) { uint16_t applicationID = message.readEnum16(); uint16_t eventDefinitionID = message.readEnum16(); if (eventActionDefinitionMap.find(eventDefinitionID) != eventActionDefinitionMap - .end()){ + .end()) { // @todo: Check if the use etl::map at(key_parameter_t key) function instead of // overloaded [] operator is better eventActionDefinitionMap[eventDefinitionID].enabled = false; + } else { + std::cout << "disable event action error"; + ErrorHandler::reportError(message, + ErrorHandler::ExecutionStartErrorType::FailedStartOfExecutionError); } } } else { @@ -100,7 +126,7 @@ void EventActionService::disableEventActionDefinitions(Message& message) { } } -void EventActionService::requestEventActionDefinitionStatus(Message& message) { +void EventActionService::requestEventActionDefinitionStatus(Message &message) { // TC[19,6] if (message.messageType == 6 && message.packetType == Message::TC && message.serviceType == 19) { @@ -113,7 +139,7 @@ void EventActionService::eventActionStatusReport() { Message report = createTM(7); uint8_t count = eventActionDefinitionMap.size(); report.appendUint8(count); - for (auto element : eventActionDefinitionMap){ + for (auto element : eventActionDefinitionMap) { report.appendEnum16(element.second.applicationId); report.appendEnum16(element.second.eventDefinitionID); report.appendBoolean(element.second.enabled); @@ -121,7 +147,7 @@ void EventActionService::eventActionStatusReport() { storeMessage(report); } -void EventActionService::enableEventActionFunction(Message& message) { +void EventActionService::enableEventActionFunction(Message &message) { // TC[19,8] if (message.messageType == 8 && message.packetType == Message::TC && message.serviceType == 19) { @@ -129,7 +155,7 @@ void EventActionService::enableEventActionFunction(Message& message) { } } -void EventActionService::disableEventActionFunction(Message& message) { +void EventActionService::disableEventActionFunction(Message &message) { // TC[19,9] if (message.messageType == 9 && message.packetType == Message::TC && message.serviceType == 19) { @@ -141,10 +167,10 @@ void EventActionService::disableEventActionFunction(Message& message) { void EventActionService::executeAction(uint16_t eventID) { // Custom function if (eventActionFunctionStatus) { - if (eventActionDefinitionMap.find(eventID) != eventActionDefinitionMap.end()){ + if (eventActionDefinitionMap.find(eventID) != eventActionDefinitionMap.end()) { // @todo: Check if the use etl::map at(key_parameter_t key) function instead of // overloaded [] operator is better - if (eventActionDefinitionMap[eventID].enabled){ + if (eventActionDefinitionMap[eventID].enabled) { MessageParser messageParser; Message message = messageParser.parseRequestTC( eventActionDefinitionMap[eventID].request); diff --git a/src/main.cpp b/src/main.cpp index 5615e264..34fb5d05 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -236,6 +236,7 @@ int main() { eventActionDefinition.appendEnum16(2); String<64> TCdata = "hi"; eventActionDefinition.appendString(TCdata); + std::cout << "After this message there should be a failed start of execution error \n"; eventActionService.addEventActionDefinitions(eventActionDefinition); Message eventActionDefinition1(19, 1, Message::TC, 1); eventActionDefinition1.appendEnum16(0); @@ -249,45 +250,57 @@ int main() { TCdata = "hi2"; eventActionDefinition2.appendString(TCdata); eventActionService.addEventActionDefinitions(eventActionDefinition2); + Message eventActionDefinition7(19, 1, Message::TC, 1); + eventActionDefinition7.appendEnum16(0); + eventActionDefinition7.appendEnum16(4); + TCdata = "hi2"; + eventActionDefinition7.appendString(TCdata); + eventActionService.addEventActionDefinitions(eventActionDefinition7); Message eventActionDefinition3(19, 5, Message::TC, 1); - eventActionDefinition3.appendUint16(2); + eventActionDefinition3.appendUint16(3); eventActionDefinition3.appendUint16(0); eventActionDefinition3.appendUint16(2); eventActionDefinition3.appendUint16(0); eventActionDefinition3.appendUint16(3); + eventActionDefinition3.appendUint16(0); + eventActionDefinition3.appendUint16(4); eventActionService.disableEventActionDefinitions(eventActionDefinition3); - std::cout << "Status of position 0,1,2 should be 000:" << eventActionService - .eventActionDefinitionArray[0].enabled << eventActionService - .eventActionDefinitionArray[1].enabled << - eventActionService.eventActionDefinitionArray[2].enabled; + std::cout << "Status should be 000:" << eventActionService + .eventActionDefinitionMap[2].enabled << eventActionService + .eventActionDefinitionMap[3].enabled << + eventActionService.eventActionDefinitionMap[4].enabled; Message eventActionDefinition5(19, 4, Message::TC, 1); - eventActionDefinition5.appendUint16(2); + eventActionDefinition5.appendUint16(3); eventActionDefinition5.appendUint16(0); eventActionDefinition5.appendUint16(2); eventActionDefinition5.appendUint16(0); eventActionDefinition5.appendUint16(3); + eventActionDefinition5.appendUint16(0); + eventActionDefinition5.appendUint16(4); + eventActionService.enableEventActionDefinitions(eventActionDefinition5); - std::cout << "\nStatus of position 0,1,2 should be 111:" << eventActionService - .eventActionDefinitionArray[0].enabled << eventActionService - .eventActionDefinitionArray[1].enabled << - eventActionService.eventActionDefinitionArray[2].enabled; + std::cout << "\nStatus should be 111:" << eventActionService + .eventActionDefinitionMap[2].enabled << eventActionService + .eventActionDefinitionMap[3].enabled << + eventActionService.eventActionDefinitionMap[4].enabled << "\n"; Message eventActionDefinition4(19, 2, Message::TC, 1); eventActionDefinition4.appendUint16(1); eventActionDefinition4.appendUint16(0); eventActionDefinition4.appendUint16(2); + std::cout << "After this message there should be a failed start of execution error \n"; + eventActionService.deleteEventActionDefinitions(eventActionDefinition4); + + Message eventActionDefinition6(19, 5, Message::TC, 1); + eventActionDefinition4.appendUint16(1); + eventActionDefinition4.appendUint16(0); + eventActionDefinition4.appendUint16(2); + eventActionService.disableEventActionDefinitions(eventActionDefinition6); + std::cout << "After this message there should NOT be a failed start of execution error \n"; eventActionService.deleteEventActionDefinitions(eventActionDefinition4); - std::cout << "\nPositions 0,1 empty should be 11:" << static_cast<uint16_t>(eventActionService - .eventActionDefinitionArray[0].empty) - << static_cast<uint16_t>(eventActionService.eventActionDefinitionArray[1].empty); - - Message eventActionDefinition6(19, 3, Message::TC, 1); - eventActionService.deleteAllEventActionDefinitions(eventActionDefinition6); - std::cout << "\nPositions 0,1 empty should be 1:" << static_cast<uint16_t>(eventActionService - .eventActionDefinitionArray[0].empty); return 0; diff --git a/test/Services/EventActionService.cpp b/test/Services/EventActionService.cpp index 843421b9..9c9366ab 100644 --- a/test/Services/EventActionService.cpp +++ b/test/Services/EventActionService.cpp @@ -11,7 +11,6 @@ EventActionService & eventActionService = Services.eventAction; TEST_CASE("Add event-action definitions TC[19,1]", "[service][st09]") { - char checkstring[256]; Message message(19, 1, Message::TC, 0); message.appendEnum16(0); message.appendEnum16(2); @@ -70,13 +69,20 @@ TEST_CASE("Delete event-action definitions TC[19,2]", "[service][st09]") { message4.appendString(data); eventActionService.addEventActionDefinitions(message4); - Message message(19, 2, Message::TC, 0); + Message message(19, 5, Message::TC, 0); message.appendUint16(2); message.appendEnum16(1); message.appendEnum16(4); message.appendEnum16(1); message.appendEnum16(2); - eventActionService.deleteEventActionDefinitions(message); + eventActionService.disableEventActionDefinitions(message); + Message message5(19, 2, Message::TC, 0); + message5.appendUint16(2); + message5.appendEnum16(1); + message5.appendEnum16(4); + message5.appendEnum16(1); + message5.appendEnum16(2); + eventActionService.deleteEventActionDefinitions(message5); CHECK(eventActionService.eventActionDefinitionMap[0].applicationId == 1); CHECK(eventActionService.eventActionDefinitionMap[0].eventDefinitionID == 0); @@ -160,16 +166,24 @@ TEST_CASE("Enable event-action definitions TC[19,4]", "[service][st09]") { data = "00"; message1.appendString(data); eventActionService.addEventActionDefinitions(message1); - Message message2(19, 4, Message::TC, 0); + Message message2(19, 5, Message::TC, 0); message2.appendUint16(2); message2.appendEnum16(1); message2.appendEnum16(0); message2.appendEnum16(1); message2.appendEnum16(1); - eventActionService.enableEventActionDefinitions(message2); + eventActionService.disableEventActionDefinitions(message2); + CHECK(eventActionService.eventActionDefinitionMap[0].enabled == 0); + CHECK(eventActionService.eventActionDefinitionMap[1].enabled == 0); + Message message3(19, 4, Message::TC, 0); + message3.appendUint16(2); + message3.appendEnum16(1); + message3.appendEnum16(0); + message3.appendEnum16(1); + message3.appendEnum16(1); + eventActionService.enableEventActionDefinitions(message3); CHECK(eventActionService.eventActionDefinitionMap[0].enabled == 1); CHECK(eventActionService.eventActionDefinitionMap[1].enabled == 1); - } TEST_CASE("Disable event-action definitions TC[19,5]", "[service][st09]") { -- GitLab