Skip to content
Snippets Groups Projects
ErrorHandler.cpp 5.11 KiB
Newer Older
  • Learn to ignore specific revisions
  • kongr45gpen's avatar
    kongr45gpen committed
    #include <catch2/catch.hpp>
    #include <ErrorHandler.hpp>
    #include "Services/ServiceTests.hpp"
    
    #include "Services/RequestVerificationService.hpp"
    
    kongr45gpen's avatar
    kongr45gpen committed
    
    TEST_CASE("Error: Failed Acceptance", "[errors]") {
    	Message failedMessage(38, 32, Message::TC, 47);
    	ErrorHandler::reportError(failedMessage, ErrorHandler::MessageTooShort);
    
    	REQUIRE(ServiceTests::hasOneMessage());
    
    	CHECK(ServiceTests::thrownError(ErrorHandler::MessageTooShort));
    
    kongr45gpen's avatar
    kongr45gpen committed
    	Message report = ServiceTests::get(0);
    
    	// Check that a TM[1,2] message was returned
    
    	CHECK(report.serviceType == RequestVerificationService::ServiceType);
    	CHECK(report.messageType == RequestVerificationService::MessageType::FailedAcceptanceReport);
    
    kongr45gpen's avatar
    kongr45gpen committed
    	CHECK(report.packetType == Message::TM);
    	REQUIRE(report.dataSize == 6);
    
    
    kchristin22's avatar
    kchristin22 committed
    	CHECK(report.readBits(3) == CCSDSPacketVersion);
    
    kongr45gpen's avatar
    kongr45gpen committed
    	CHECK(report.readBits(1) == static_cast<uint16_t>(Message::TC));
    
    kongr45gpen's avatar
    kongr45gpen committed
    	CHECK(report.readBits(11) == 47);
    
    kchristin22's avatar
    kchristin22 committed
    	CHECK(report.readBits(2) == ECSSSequenceFlags);
    
    kongr45gpen's avatar
    kongr45gpen committed
    	CHECK(report.readBits(14) == failedMessage.packetSequenceCount);
    
    	CHECK(report.readEnum16() == ErrorHandler::MessageTooShort);
    
    thodkatz's avatar
    thodkatz committed
    TEST_CASE("Error: Failed Execution Start", "[errors]") {
    	Message failedMessage(38, 32, Message::TC, 56);
    
    thodkatz's avatar
    thodkatz committed
    	ErrorHandler::reportError(failedMessage, ErrorHandler::UnknownExecutionStartError);
    
    thodkatz's avatar
    thodkatz committed
    
    	REQUIRE(ServiceTests::hasOneMessage());
    
    	CHECK(ServiceTests::thrownError(ErrorHandler::UnknownExecutionStartError));
    
    thodkatz's avatar
    thodkatz committed
    	Message report = ServiceTests::get(0);
    
    	// Check that a TM[1,3] message was returned
    
    	CHECK(report.serviceType == RequestVerificationService::ServiceType);
    	CHECK(report.messageType == RequestVerificationService::MessageType::FailedStartOfExecution);
    
    thodkatz's avatar
    thodkatz committed
    	CHECK(report.packetType == Message::TM);
    	REQUIRE(report.dataSize == 6);
    
    
    kchristin22's avatar
    kchristin22 committed
    	CHECK(report.readBits(3) == CCSDSPacketVersion);
    
    thodkatz's avatar
    thodkatz committed
    	CHECK(report.readBits(1) == static_cast<uint16_t>(Message::TC));
    
    thodkatz's avatar
    thodkatz committed
    	CHECK(report.readBits(11) == 56);
    
    kchristin22's avatar
    kchristin22 committed
    	CHECK(report.readBits(2) == ECSSSequenceFlags);
    
    thodkatz's avatar
    thodkatz committed
    	CHECK(report.readBits(14) == failedMessage.packetSequenceCount);
    
    thodkatz's avatar
    thodkatz committed
    	CHECK(report.readEnum16() == ErrorHandler::UnknownExecutionStartError);
    
    thodkatz's avatar
    thodkatz committed
    }
    
    TEST_CASE("Error: Failed Execution Progress", "[errors]") {
    	Message failedMessage(38, 32, Message::TC, 56);
    
    	ErrorHandler::reportProgressError(failedMessage, ErrorHandler::UnknownExecutionProgressError, 0);
    
    thodkatz's avatar
    thodkatz committed
    
    	REQUIRE(ServiceTests::hasOneMessage());
    
    	CHECK(ServiceTests::thrownError(ErrorHandler::UnknownExecutionProgressError));
    
    thodkatz's avatar
    thodkatz committed
    	Message report = ServiceTests::get(0);
    
    	// Check that a TM[1,6] message was returned
    
    	CHECK(report.serviceType == RequestVerificationService::ServiceType);
    	CHECK(report.messageType == RequestVerificationService::MessageType::FailedProgressOfExecution);
    
    thodkatz's avatar
    thodkatz committed
    	CHECK(report.packetType == Message::TM);
    
    thodkatz's avatar
    thodkatz committed
    	REQUIRE(report.dataSize == 7);
    
    kchristin22's avatar
    kchristin22 committed
    	CHECK(report.readBits(3) == CCSDSPacketVersion);
    
    thodkatz's avatar
    thodkatz committed
    	CHECK(report.readBits(1) == static_cast<uint16_t>(Message::TC));
    
    thodkatz's avatar
    thodkatz committed
    	CHECK(report.readBits(11) == 56);
    
    kchristin22's avatar
    kchristin22 committed
    	CHECK(report.readBits(2) == ECSSSequenceFlags);
    
    thodkatz's avatar
    thodkatz committed
    	CHECK(report.readBits(14) == failedMessage.packetSequenceCount);
    
    thodkatz's avatar
    thodkatz committed
    	CHECK(report.readEnum16() == ErrorHandler::UnknownExecutionProgressError);
    
    thodkatz's avatar
    thodkatz committed
    	CHECK(report.readByte() == 0); // stepID
    
    kongr45gpen's avatar
    kongr45gpen committed
    TEST_CASE("Error: Failed Execution Completion", "[errors]") {
    	Message failedMessage(38, 32, Message::TC, 56);
    
    thodkatz's avatar
    thodkatz committed
    	ErrorHandler::reportError(failedMessage, ErrorHandler::UnknownExecutionCompletionError);
    
    kongr45gpen's avatar
    kongr45gpen committed
    
    	REQUIRE(ServiceTests::hasOneMessage());
    
    	CHECK(ServiceTests::thrownError(ErrorHandler::UnknownExecutionCompletionError));
    
    kongr45gpen's avatar
    kongr45gpen committed
    	Message report = ServiceTests::get(0);
    
    	// Check that a TM[1,8] message was returned
    
    	CHECK(report.serviceType == RequestVerificationService::ServiceType);
    	CHECK(report.messageType == RequestVerificationService::MessageType::FailedCompletionOfExecution);
    
    kongr45gpen's avatar
    kongr45gpen committed
    	CHECK(report.packetType == Message::TM);
    	REQUIRE(report.dataSize == 6);
    
    
    kchristin22's avatar
    kchristin22 committed
    	CHECK(report.readBits(3) == CCSDSPacketVersion);
    
    kongr45gpen's avatar
    kongr45gpen committed
    	CHECK(report.readBits(1) == static_cast<uint16_t>(Message::TC));
    
    kongr45gpen's avatar
    kongr45gpen committed
    	CHECK(report.readBits(11) == 56);
    
    kchristin22's avatar
    kchristin22 committed
    	CHECK(report.readBits(2) == ECSSSequenceFlags);
    
    kongr45gpen's avatar
    kongr45gpen committed
    	CHECK(report.readBits(14) == failedMessage.packetSequenceCount);
    
    thodkatz's avatar
    thodkatz committed
    	CHECK(report.readEnum16() == ErrorHandler::UnknownExecutionCompletionError);
    
    kongr45gpen's avatar
    kongr45gpen committed
    }
    
    TEST_CASE("Error: Failed Routing", "[errors]") {
    	Message failedMessage(38, 32, Message::TC, 71);
    	ErrorHandler::reportError(failedMessage, ErrorHandler::UnknownRoutingError);
    
    	REQUIRE(ServiceTests::hasOneMessage());
    
    	CHECK(ServiceTests::thrownError(ErrorHandler::UnknownRoutingError));
    
    kongr45gpen's avatar
    kongr45gpen committed
    	Message report = ServiceTests::get(0);
    
    	// Check that a TM[1,8] message was returned
    
    	CHECK(report.serviceType == RequestVerificationService::ServiceType);
    	CHECK(report.messageType == RequestVerificationService::MessageType::FailedRoutingReport);
    
    kongr45gpen's avatar
    kongr45gpen committed
    	CHECK(report.packetType == Message::TM);
    	REQUIRE(report.dataSize == 6);
    
    
    kchristin22's avatar
    kchristin22 committed
    	CHECK(report.readBits(3) == CCSDSPacketVersion);
    
    kongr45gpen's avatar
    kongr45gpen committed
    	CHECK(report.readBits(1) == static_cast<uint16_t>(Message::TC));
    
    kongr45gpen's avatar
    kongr45gpen committed
    	CHECK(report.readBits(11) == 71);
    
    kchristin22's avatar
    kchristin22 committed
    	CHECK(report.readBits(2) == ECSSSequenceFlags);
    
    kongr45gpen's avatar
    kongr45gpen committed
    	CHECK(report.readBits(14) == failedMessage.packetSequenceCount);
    
    	CHECK(report.readEnum16() == ErrorHandler::UnknownRoutingError);