diff --git a/src/Services/RealTimeForwardingControlService.cpp b/src/Services/RealTimeForwardingControlService.cpp index 56b47946fed19d0a108cce4de0164711d357af6a..03bb89d151309f3cb9a0362be7eaaebd967b827c 100644 --- a/src/Services/RealTimeForwardingControlService.cpp +++ b/src/Services/RealTimeForwardingControlService.cpp @@ -98,10 +98,11 @@ void RealTimeForwardingControlService::addReportTypesToAppProcessConfiguration(M continue; } - // if (numOfServices == 0) { - // // todo: add all report types of the application process to the configuration. - // continue; - // } + if (numOfServices == 0) { + // todo: add all report types of the application process to the configuration. + applicationProcessConfiguration.definitions[applicationID].clear(); + continue; + } for (uint8_t j = 0; j < numOfServices; j++) { // todo: check if service type is valid. diff --git a/test/Services/RealTimeForwardingControl.cpp b/test/Services/RealTimeForwardingControl.cpp index 54bf4b94111f332c59b5f59644c73ce19474bc86..fb92846a7d65f9530f0956dadfc79dfdc55e51aa 100644 --- a/test/Services/RealTimeForwardingControl.cpp +++ b/test/Services/RealTimeForwardingControl.cpp @@ -128,6 +128,48 @@ void allReportsOfServiceCombined(Message& request) { } } +void allReportTypesOfApp(Message& request) { + uint8_t numOfApplications = 1; + uint8_t numOfServicesPerApp = 0; + + request.appendUint8(numOfApplications); + + for (auto appID : applications) { + request.appendUint8(appID); + request.appendUint8(numOfServicesPerApp); + } +} + +void allReportsOfAppCombined(Message& request) { + uint8_t numOfApplications = 3; + uint8_t numOfMessagesPerService = 2; + + uint8_t applications2[] = {1, 2, 3}; + request.appendUint8(numOfApplications); + + for (uint8_t i = 0; i < numOfApplications; i++) { + request.appendUint8(applications2[i]); + uint8_t numOfServicesPerApp = (i == 0 or i == 1) ? 0 : 2; + uint8_t* servicesToPick = (i == 0) ? redundantServices : services; + request.appendUint8(numOfServicesPerApp); + + if (i >= 2) { + for (uint8_t j = 0; j < numOfServicesPerApp; j++) { + uint8_t serviceType = servicesToPick[j]; + request.appendUint8(serviceType); + uint8_t numOfMessages = (i == 0 or i == 1) ? 0 : numOfMessagesPerService; + request.appendUint8(numOfMessages); + + uint8_t* messages = (j == 0) ? messages1 : messages2; + + for (uint8_t k = 0; k < numOfMessagesPerService; k++) { + request.appendUint8(messages[k]); + } + } + } + } +} + void resetAppProcessConfiguration() { realTimeForwarding.applicationProcessConfiguration.definitions.clear(); REQUIRE(realTimeForwarding.applicationProcessConfiguration.definitions.empty()); @@ -397,7 +439,7 @@ TEST_CASE("Add report types to the Application Process Configuration") { Services.reset(); } - SECTION("Addition of all report types, combined invalid requests") { + SECTION("Addition of all report types of a service type, combined with invalid requests") { Message request(RealTimeForwardingControlService::ServiceType, RealTimeForwardingControlService::MessageType::AddReportTypesToAppProcessConfiguration, Message::TC, 1); @@ -412,10 +454,12 @@ TEST_CASE("Add report types to the Application Process Configuration") { CHECK(ServiceTests::count() == 3); CHECK(ServiceTests::countThrownErrors(ErrorHandler::ExecutionStartErrorType::NotControlledApplication) == 1); CHECK(ServiceTests::countThrownErrors(ErrorHandler::ExecutionStartErrorType::MaxServiceTypesReached) == 2); + auto& applicationProcesses = realTimeForwarding.applicationProcessConfiguration.definitions; REQUIRE(applicationProcesses.size() == 2); REQUIRE(applicationProcesses[applicationID1].size() == 15); REQUIRE(applicationProcesses[applicationID2].size() == 2); + for (auto& serviceType: applicationProcesses[applicationID1]) { REQUIRE(serviceType.second.empty()); } @@ -427,4 +471,46 @@ TEST_CASE("Add report types to the Application Process Configuration") { ServiceTests::reset(); Services.reset(); } + + SECTION("Valid addition of all report types of an application process") { + Message request(RealTimeForwardingControlService::ServiceType, + RealTimeForwardingControlService::MessageType::AddReportTypesToAppProcessConfiguration, + Message::TC, 1); + uint8_t applicationID1 = 1; + realTimeForwarding.controlledApplications.push_back(applicationID1); + allReportTypesOfApp(request); + + MessageParser::execute(request); + + CHECK(ServiceTests::count() == 0); + auto& applicationProcesses = realTimeForwarding.applicationProcessConfiguration.definitions; + REQUIRE(applicationProcesses[applicationID1].empty()); + + resetAppProcessConfiguration(); + ServiceTests::reset(); + Services.reset(); + } + + SECTION("Addition of all report types of an application process, combined with invalid request") { + Message request(RealTimeForwardingControlService::ServiceType, + RealTimeForwardingControlService::MessageType::AddReportTypesToAppProcessConfiguration, + Message::TC, 1); + uint8_t applicationID1 = 1; + uint8_t applicationID2 = 2; + realTimeForwarding.controlledApplications.push_back(applicationID1); + realTimeForwarding.controlledApplications.push_back(applicationID2); + allReportsOfAppCombined(request); + + MessageParser::execute(request); + + CHECK(ServiceTests::count() == 1); + CHECK(ServiceTests::countThrownErrors(ErrorHandler::ExecutionStartErrorType::NotControlledApplication) == 1); + auto& applicationProcesses = realTimeForwarding.applicationProcessConfiguration.definitions; + REQUIRE(applicationProcesses[applicationID1].empty()); + REQUIRE(applicationProcesses[applicationID2].empty()); + + resetAppProcessConfiguration(); + ServiceTests::reset(); + Services.reset(); + } }