diff --git a/test/Services/TimeBasedSchedulingService.cpp b/test/Services/TimeBasedSchedulingService.cpp index 7d669fc3076ad3574332879bc2ad5e65591bb29d..bfa878325c513b2a28dd5f1c840cd5d414a7c7ba 100644 --- a/test/Services/TimeBasedSchedulingService.cpp +++ b/test/Services/TimeBasedSchedulingService.cpp @@ -120,183 +120,244 @@ TEST_CASE("TC[11,4] Activity Insertion", "[service][st11]") { REQUIRE(scheduledActivities.at(1)->request == testMessage3); REQUIRE(scheduledActivities.at(2)->request == testMessage2); REQUIRE(scheduledActivities.at(3)->request == testMessage4); -} -TEST_CASE("TC[11,15] Time shift all scheduled activities (Positive shift)", "[service][st11]") { - TimeBasedSchedulingService timeService; - auto scheduledActivities = activityInsertion(timeService); - const int32_t timeShift = 6789; + SECTION("Error throw test") { + Message receivedMessage(11, 4, Message::TC, 1); + receivedMessage.appendUint16(1); // Total number of requests - Message receivedMessage(11, 15, Message::TC, 1); - receivedMessage.appendSint32(timeShift); + receivedMessage.appendUint32(currentTime - 15564350); + timeService.insertActivities(receivedMessage); - CHECK(scheduledActivities.size() == 4); - timeService.timeShiftAllActivities(receivedMessage); - - REQUIRE(scheduledActivities.at(0)->requestReleaseTime == currentTime + 1556435 + timeShift); - REQUIRE(scheduledActivities.at(1)->requestReleaseTime == currentTime + 1726435 + timeShift); - REQUIRE(scheduledActivities.at(2)->requestReleaseTime == currentTime + 1957232 + timeShift); - REQUIRE(scheduledActivities.at(3)->requestReleaseTime == currentTime + 17248435 + timeShift); + REQUIRE(ServiceTests::thrownError(ErrorHandler::InstructionExecutionStartError)); + } } -TEST_CASE("TC[11,15] Time shift all scheduled activities (Negative shift)", "[service][st11]") { +TEST_CASE("TC[11,15] Time shift all scheduled activities", "[service][st11]") { TimeBasedSchedulingService timeService; + Message receivedMessage(11, 15, Message::TC, 1); + auto scheduledActivities = activityInsertion(timeService); const int32_t timeShift = 6789; - Message receivedMessage(11, 15, Message::TC, 1); - receivedMessage.appendSint32(-timeShift); - - CHECK(scheduledActivities.size() == 4); - timeService.timeShiftAllActivities(receivedMessage); + SECTION("Positive Shift") { + receivedMessage.appendSint32(-timeShift); - REQUIRE(scheduledActivities.at(0)->requestReleaseTime == currentTime + 1556435 - timeShift); - REQUIRE(scheduledActivities.at(1)->requestReleaseTime == currentTime + 1726435 - timeShift); - REQUIRE(scheduledActivities.at(2)->requestReleaseTime == currentTime + 1957232 - timeShift); - REQUIRE(scheduledActivities.at(3)->requestReleaseTime == currentTime + 17248435 - timeShift); + CHECK(scheduledActivities.size() == 4); + timeService.timeShiftAllActivities(receivedMessage); -} + REQUIRE(scheduledActivities.at(0)->requestReleaseTime == currentTime + 1556435 - timeShift); + REQUIRE(scheduledActivities.at(1)->requestReleaseTime == currentTime + 1726435 - timeShift); + REQUIRE(scheduledActivities.at(2)->requestReleaseTime == currentTime + 1957232 - timeShift); + REQUIRE( + scheduledActivities.at(3)->requestReleaseTime == currentTime + 17248435 - timeShift); + } -TEST_CASE("TC[11,7] Time shift activities by ID (Positive Shift)", "[service][st11]") { - TimeBasedSchedulingService timeService; - auto scheduledActivities = activityInsertion(timeService); - const int32_t timeShift = 67890000; // Relative time-shift value + SECTION("Negative Shift") { + receivedMessage.appendSint32(timeShift); - // Verify that everything is in place - CHECK(scheduledActivities.size() == 4); - scheduledActivities.at(2)->requestID.applicationID = 4; // Append a dummy application ID + CHECK(scheduledActivities.size() == 4); + timeService.timeShiftAllActivities(receivedMessage); - Message receivedMessage(11, 7, Message::TC, 1); - receivedMessage.appendSint32(timeShift); // Time-shift value - receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity - receivedMessage.appendUint8(0); // Source ID is not implemented - receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID - receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count + REQUIRE(scheduledActivities.at(0)->requestReleaseTime == currentTime + 1556435 + timeShift); + REQUIRE(scheduledActivities.at(1)->requestReleaseTime == currentTime + 1726435 + timeShift); + REQUIRE(scheduledActivities.at(2)->requestReleaseTime == currentTime + 1957232 + timeShift); + REQUIRE( + scheduledActivities.at(3)->requestReleaseTime == currentTime + 17248435 + timeShift); + } + SECTION("Error throwing") { + receivedMessage.appendSint32(-6789000); // Provide a huge time shift to cause an error - timeService.timeShiftActivitiesByID(receivedMessage); - scheduledActivities = unit_test::Tester::scheduledActivities(timeService); + CHECK(scheduledActivities.size() == 4); + timeService.timeShiftAllActivities(receivedMessage); - // Make sure the new value is inserted sorted - REQUIRE(scheduledActivities.at(3)->requestReleaseTime == currentTime + 1957232 + timeShift); - REQUIRE(scheduledActivities.at(3)->request == testMessage2); + REQUIRE(ServiceTests::thrownError(ErrorHandler::SubServiceExecutionStartError)); + } } -TEST_CASE("TC[11,7] Time shift activities by ID (Negative Shift)", "[service][st11]") { +TEST_CASE("TC[11,7] Time shift activities by ID", "[service][st11]") { TimeBasedSchedulingService timeService; - auto scheduledActivities = activityInsertion(timeService); - const int32_t timeShift = 250000; // Relative time-shift value + Message receivedMessage(11, 7, Message::TC, 1); - // Verify that everything is in place - CHECK(scheduledActivities.size() == 4); + auto scheduledActivities = activityInsertion(timeService); scheduledActivities.at(2)->requestID.applicationID = 4; // Append a dummy application ID + CHECK(scheduledActivities.size() == 4); - Message receivedMessage(11, 7, Message::TC, 1); - receivedMessage.appendSint32(-timeShift); // Time-shift value - receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity - receivedMessage.appendUint8(0); // Source ID is not implemented - receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID - receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count + const int32_t timeShift = 67890000; // Relative time-shift value + SECTION("Positive Shift") { + receivedMessage.appendSint32(timeShift); // Time-shift value + receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity + receivedMessage.appendUint8(0); // Source ID is not implemented + receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID + receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count - timeService.timeShiftActivitiesByID(receivedMessage); - scheduledActivities = unit_test::Tester::scheduledActivities(timeService); + timeService.timeShiftActivitiesByID(receivedMessage); + scheduledActivities = unit_test::Tester::scheduledActivities(timeService); - // Output should be sorted - REQUIRE(scheduledActivities.at(1)->requestReleaseTime == currentTime + 1957232 - timeShift); - REQUIRE(scheduledActivities.at(1)->request == testMessage2); -} + // Make sure the new value is inserted sorted + REQUIRE(scheduledActivities.at(3)->requestReleaseTime == currentTime + 1957232 + timeShift); + REQUIRE(scheduledActivities.at(3)->request == testMessage2); + } + SECTION("Negative Shift") { + receivedMessage.appendSint32(-250000); // Time-shift value + receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity + receivedMessage.appendUint8(0); // Source ID is not implemented + receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID + receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count -TEST_CASE("TC[11,9] Detail report scheduled activities by ID", "[service][st11]") { - TimeBasedSchedulingService timeService; - auto scheduledActivities = activityInsertion(timeService); + timeService.timeShiftActivitiesByID(receivedMessage); + scheduledActivities = unit_test::Tester::scheduledActivities(timeService); - // Verify that everything is in place - CHECK(scheduledActivities.size() == 4); - scheduledActivities.at(0)->requestID.applicationID = 8; // Append a dummy application ID - scheduledActivities.at(2)->requestID.applicationID = 4; // Append a dummy application ID + // Output should be sorted + REQUIRE(scheduledActivities.at(1)->requestReleaseTime == currentTime + 1957232 - 250000); + REQUIRE(scheduledActivities.at(1)->request == testMessage2); + } - Message receivedMessage(11, 9, Message::TC, 1); - receivedMessage.appendUint16(2); // Two instructions in the request - receivedMessage.appendUint8(0); // Source ID is not implemented - receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID - receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count + SECTION("Error throw on wrong request ID") { + receivedMessage.appendSint32(-250000); // Time-shift value + receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity + receivedMessage.appendUint8(0); // Dummy source ID + receivedMessage.appendUint16(80); // Dummy application ID to throw an error + receivedMessage.appendUint16(0); // Dummy sequence count - receivedMessage.appendUint8(0); // Source ID is not implemented - receivedMessage.appendUint16(testMessage1.applicationId); // todo: Remove the dummy app ID - receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count + timeService.timeShiftActivitiesByID(receivedMessage); + REQUIRE(ServiceTests::thrownError(ErrorHandler::InstructionExecutionStartError)); + } - timeService.detailReportActivitiesByID(receivedMessage); - REQUIRE(ServiceTests::hasOneMessage()); + SECTION("Error throw on wrong time offset") { + receivedMessage.appendSint32(-6789000); // Time-shift value + receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity + receivedMessage.appendUint8(0); // Source ID is not implemented + receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID + receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count - Message response = ServiceTests::get(0); - CHECK(response.serviceType == 11); - CHECK(response.messageType == 10); + timeService.timeShiftActivitiesByID(receivedMessage); + REQUIRE(ServiceTests::thrownError(ErrorHandler::InstructionExecutionStartError)); + } +} - uint16_t iterationCount = response.readUint16(); - for (uint16_t i = 0; i < iterationCount; i++) { - uint32_t receivedReleaseTime = response.readUint32(); +TEST_CASE("TC[11,9] Detail report scheduled activities by ID", "[service][st11]") { + TimeBasedSchedulingService timeService; + Message receivedMessage(11, 9, Message::TC, 1); - Message receivedTCPacket; - uint8_t receivedDataStr[ECSS_TC_REQUEST_STRING_SIZE]; - response.readString(receivedDataStr, ECSS_TC_REQUEST_STRING_SIZE); - receivedTCPacket = msgParser.parseRequestTC(receivedDataStr); + auto scheduledActivities = activityInsertion(timeService); - if (i == 0) { - REQUIRE(receivedReleaseTime == scheduledActivities.at(0)->requestReleaseTime); - REQUIRE(receivedTCPacket == scheduledActivities.at(0)->request); - } else { - REQUIRE(receivedReleaseTime == scheduledActivities.at(2)->requestReleaseTime); - REQUIRE(receivedTCPacket == scheduledActivities.at(2)->request); + SECTION("Detailed activity report") { + // Verify that everything is in place + CHECK(scheduledActivities.size() == 4); + scheduledActivities.at(0)->requestID.applicationID = 8; // Append a dummy application ID + scheduledActivities.at(2)->requestID.applicationID = 4; // Append a dummy application ID + + receivedMessage.appendUint16(2); // Two instructions in the request + receivedMessage.appendUint8(0); // Source ID is not implemented + receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID + receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count + + receivedMessage.appendUint8(0); // Source ID is not implemented + receivedMessage.appendUint16(testMessage1.applicationId); // todo: Remove the dummy app ID + receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count + + timeService.detailReportActivitiesByID(receivedMessage); + REQUIRE(ServiceTests::hasOneMessage()); + + Message response = ServiceTests::get(0); + CHECK(response.serviceType == 11); + CHECK(response.messageType == 10); + + uint16_t iterationCount = response.readUint16(); + CHECK(iterationCount == 2); + for (uint16_t i = 0; i < iterationCount; i++) { + uint32_t receivedReleaseTime = response.readUint32(); + + Message receivedTCPacket; + uint8_t receivedDataStr[ECSS_TC_REQUEST_STRING_SIZE]; + response.readString(receivedDataStr, ECSS_TC_REQUEST_STRING_SIZE); + receivedTCPacket = msgParser.parseRequestTC(receivedDataStr); + + if (i == 0) { + REQUIRE(receivedReleaseTime == scheduledActivities.at(0)->requestReleaseTime); + REQUIRE(receivedTCPacket == scheduledActivities.at(0)->request); + } else { + REQUIRE(receivedReleaseTime == scheduledActivities.at(2)->requestReleaseTime); + REQUIRE(receivedTCPacket == scheduledActivities.at(2)->request); + } } } + + SECTION("Error throw on wrong request ID") { + receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity + receivedMessage.appendUint8(0); // Dummy source ID + receivedMessage.appendUint16(80); // Dummy application ID to throw an error + receivedMessage.appendUint16(0); // Dummy sequence count + + timeService.detailReportActivitiesByID(receivedMessage); + REQUIRE(ServiceTests::thrownError(ErrorHandler::InstructionExecutionStartError)); + } } TEST_CASE("TC[11,12] Summary report scheduled activities by ID", "[service][st11]") { TimeBasedSchedulingService timeService; - auto scheduledActivities = activityInsertion(timeService); - - // Verify that everything is in place - CHECK(scheduledActivities.size() == 4); - scheduledActivities.at(0)->requestID.applicationID = 8; // Append a dummy application ID - scheduledActivities.at(2)->requestID.applicationID = 4; // Append a dummy application ID - Message receivedMessage(11, 12, Message::TC, 1); - receivedMessage.appendUint16(2); // Two instructions in the request - receivedMessage.appendUint8(0); // Source ID is not implemented - receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID - receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count - receivedMessage.appendUint8(0); // Source ID is not implemented - receivedMessage.appendUint16(testMessage1.applicationId); // todo: Remove the dummy app ID - receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count + auto scheduledActivities = activityInsertion(timeService); - timeService.summaryReportActivitiesByID(receivedMessage); - REQUIRE(ServiceTests::hasOneMessage()); + SECTION("Summary report") { + // Verify that everything is in place + CHECK(scheduledActivities.size() == 4); + scheduledActivities.at(0)->requestID.applicationID = 8; // Append a dummy application ID + scheduledActivities.at(2)->requestID.applicationID = 4; // Append a dummy application ID + + receivedMessage.appendUint16(2); // Two instructions in the request + receivedMessage.appendUint8(0); // Source ID is not implemented + receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID + receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count + + receivedMessage.appendUint8(0); // Source ID is not implemented + receivedMessage.appendUint16(testMessage1.applicationId); // todo: Remove the dummy app ID + receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count + + timeService.summaryReportActivitiesByID(receivedMessage); + REQUIRE(ServiceTests::hasOneMessage()); + + Message response = ServiceTests::get(0); + CHECK(response.serviceType == 11); + CHECK(response.messageType == 13); + + uint16_t iterationCount = response.readUint16(); + for (uint16_t i = 0; i < iterationCount; i++) { + uint32_t receivedReleaseTime = response.readUint32(); + uint8_t receivedSourceID = response.readUint8(); + uint16_t receivedApplicationID = response.readUint16(); + uint16_t receivedSequenceCount = response.readUint16(); + + if (i == 0) { + REQUIRE(receivedReleaseTime == scheduledActivities.at(0)->requestReleaseTime); + REQUIRE(receivedSourceID == scheduledActivities.at(0)->requestID.sourceID); + REQUIRE( + receivedApplicationID == scheduledActivities.at(0)->requestID.applicationID); + REQUIRE( + receivedSequenceCount == scheduledActivities.at(0)->requestID.sequenceCount); + } else { + REQUIRE(receivedReleaseTime == scheduledActivities.at(2)->requestReleaseTime); + REQUIRE(receivedSourceID == scheduledActivities.at(2)->requestID.sourceID); + REQUIRE( + receivedApplicationID == scheduledActivities.at(2)->requestID.applicationID); + REQUIRE( + receivedSequenceCount == scheduledActivities.at(2)->requestID.sequenceCount); + } + } + } - Message response = ServiceTests::get(0); - CHECK(response.serviceType == 11); - CHECK(response.messageType == 13); + SECTION("Error throw on wrong request ID") { + receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity + receivedMessage.appendUint8(0); // Dummy source ID + receivedMessage.appendUint16(80); // Dummy application ID to throw an error + receivedMessage.appendUint16(0); // Dummy sequence count - uint16_t iterationCount = response.readUint16(); - for (uint16_t i = 0; i < iterationCount; i++) { - uint32_t receivedReleaseTime = response.readUint32(); - uint8_t receivedSourceID = response.readUint8(); - uint16_t receivedApplicationID = response.readUint16(); - uint16_t receivedSequenceCount = response.readUint16(); - - if (i == 0) { - REQUIRE(receivedReleaseTime == scheduledActivities.at(0)->requestReleaseTime); - REQUIRE(receivedSourceID == scheduledActivities.at(0)->requestID.sourceID); - REQUIRE(receivedApplicationID == scheduledActivities.at(0)->requestID.applicationID); - REQUIRE(receivedSequenceCount == scheduledActivities.at(0)->requestID.sequenceCount); - } else { - REQUIRE(receivedReleaseTime == scheduledActivities.at(2)->requestReleaseTime); - REQUIRE(receivedSourceID == scheduledActivities.at(2)->requestID.sourceID); - REQUIRE(receivedApplicationID == scheduledActivities.at(2)->requestID.applicationID); - REQUIRE(receivedSequenceCount == scheduledActivities.at(2)->requestID.sequenceCount); - } + timeService.summaryReportActivitiesByID(receivedMessage); + REQUIRE(ServiceTests::thrownError(ErrorHandler::InstructionExecutionStartError)); } } @@ -330,25 +391,38 @@ TEST_CASE("TC[11,16] Detail report all scheduled activities", "[service][st11]") TEST_CASE("TC[11,5] Activity deletion by ID", "[service][st11]") { TimeBasedSchedulingService timeService; + Message receivedMessage(11, 5, Message::TC, 1); + auto scheduledActivities = activityInsertion(timeService); - // Verify that everything is in place - CHECK(scheduledActivities.size() == 4); - scheduledActivities.at(2)->requestID.applicationID = 4; // Append a dummy application ID + SECTION("Activity deletion") { + // Verify that everything is in place + CHECK(scheduledActivities.size() == 4); + scheduledActivities.at(2)->requestID.applicationID = 4; // Append a dummy application ID - Message receivedMessage(11, 5, Message::TC, 1); - receivedMessage.appendUint16(1); // Just one instruction to delete an activity - receivedMessage.appendUint8(0); // Source ID is not implemented - receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID - receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count + receivedMessage.appendUint16(1); // Just one instruction to delete an activity + receivedMessage.appendUint8(0); // Source ID is not implemented + receivedMessage.appendUint16(testMessage2.applicationId); // todo: Remove the dummy app ID + receivedMessage.appendUint16(0); // todo: Remove the dummy sequence count - CHECK(scheduledActivities.size() == 4); - timeService.deleteActivitiesByID(receivedMessage); - scheduledActivities = unit_test::Tester::scheduledActivities(timeService); // Get the new list + CHECK(scheduledActivities.size() == 4); + timeService.deleteActivitiesByID(receivedMessage); + scheduledActivities = unit_test::Tester::scheduledActivities(timeService); + + REQUIRE(scheduledActivities.size() == 3); + REQUIRE(scheduledActivities.at(2)->requestReleaseTime == currentTime + 17248435); + REQUIRE(scheduledActivities.at(2)->request == testMessage4); + } - REQUIRE(scheduledActivities.size() == 3); - REQUIRE(scheduledActivities.at(2)->requestReleaseTime == currentTime + 17248435); - REQUIRE(scheduledActivities.at(2)->request == testMessage4); + SECTION("Error throw on wrong request ID") { + receivedMessage.appendUint16(1); // Just one instruction to time-shift an activity + receivedMessage.appendUint8(0); // Dummy source ID + receivedMessage.appendUint16(80); // Dummy application ID to throw an error + receivedMessage.appendUint16(0); // Dummy sequence count + + timeService.deleteActivitiesByID(receivedMessage); + REQUIRE(ServiceTests::thrownError(ErrorHandler::InstructionExecutionStartError)); + } } TEST_CASE("TC[11,3] Reset schedule", "[service][st11]") {