~aleteoryx/muditaos

06b3a54b1d3494588a0ea2d4c3b1eee2cc024e46 — Bartek Cichocki 5 years ago b16172a
[EGD-3489] Fixed damaged json and length hardfault, added tests
M module-services/service-desktop/parser/MessageHandler.cpp => module-services/service-desktop/parser/MessageHandler.cpp +9 -3
@@ 8,9 8,15 @@ using namespace ParserStateMachine;

xQueueHandle MessageHandler::sendQueue;

MessageHandler::MessageHandler(std::string &message, sys::Service *OwnerService)
    : messageJson(json11::Json::parse(message, JsonErrorMsg)), OwnerServicePtr(OwnerService)
{}
MessageHandler::MessageHandler(std::string &message, sys::Service *OwnerService) : OwnerServicePtr(OwnerService)
{
    try {
        messageJson = json11::Json::parse(message, JsonErrorMsg);
    }
    catch (const std::exception &e) {
        LOG_ERROR("Cannot create MessageHandler! err:%s", e.what());
    }
}

void MessageHandler::processMessage()
{

M module-services/service-desktop/parser/MessageHandler.hpp => module-services/service-desktop/parser/MessageHandler.hpp +4 -0
@@ 22,6 22,10 @@ namespace ParserStateMachine
        {
            return messageJson.is_null();
        };
        bool isValid()
        {
            return JsonErrorMsg.empty();
        }
        std::string &getErrorString()
        {
            return JsonErrorMsg;

M module-services/service-desktop/parser/ParserStateMachine.cpp => module-services/service-desktop/parser/ParserStateMachine.cpp +7 -12
@@ 144,18 144,13 @@ void StateMachine::parsePayload()
    state = State::ReceivedPayload;

    // processing payload
    try {
        auto handler = std::make_unique<MessageHandler>(payload, OwnerServicePtr);
    auto handler = std::make_unique<MessageHandler>(payload, OwnerServicePtr);

        if (handler->isJSONNull()) {
            LOG_DEBUG("JsonErr: %s", handler->getErrorString().c_str());
            state = State::NoMsg;
            return;
        }

        handler->processMessage();
    }
    catch (const std::exception &e) {
        LOG_ERROR("Cannot create MessageHandler! err:%s\n", e.what());
    if (!handler->isValid() || handler->isJSONNull()) {
        LOG_DEBUG("JsonErr: %s", handler->getErrorString().c_str());
        state = State::NoMsg;
        return;
    }

    handler->processMessage();
}

M module-services/service-desktop/tests/unittest.cpp => module-services/service-desktop/tests/unittest.cpp +18 -0
@@ 104,6 104,24 @@ TEST_CASE("Parser Test")
        parser.processMessage(testMessage);
        REQUIRE(parser.getCurrentState() == State::NoMsg);
    }
    SECTION("Parse message with incorrect header length")
    {
        testMessage = R"(#000000072{"endpoint":7, "method":2, "uuid":3, "body":{"threadID":1,"unread":false}})";
        parser.processMessage(testMessage);
        REQUIRE(parser.getCurrentState() == State::NoMsg);
    }
    SECTION("Parse message with damaged json ")
    {
        testMessage = R"(#000000074{"endpoint":7, "method":2, "uuid":3, "bo}}dy":{"threadID":1,"unread":false)";
        parser.processMessage(testMessage);
        REQUIRE(parser.getCurrentState() == State::NoMsg);
    }
    SECTION("Parse message with damaged json and incorrect header length")
    {
        testMessage = R"(#000000072{"endpoint":7, "method":2, "uuid":3, "bo}}dy":{"threadID":1,"unread":false)";
        parser.processMessage(testMessage);
        REQUIRE(parser.getCurrentState() == State::NoMsg);
    }
}

TEST_CASE("DB Helpers test - json decoding")

M source/main.cpp => source/main.cpp +1 -1
@@ 185,7 185,7 @@ int main()
        ret |= sys::SystemManager::CreateService(std::make_shared<ServiceAudio>(), sysmgr.get());

        // Service Desktop disabled on master - pulling read on usb driver
        ret |= sys::SystemManager::CreateService(std::make_shared<ServiceDesktop>(), sysmgr.get());
        // ret |= sys::SystemManager::CreateService(std::make_shared<ServiceDesktop>(), sysmgr.get());

        // vector with launchers to applications
        std::vector<std::unique_ptr<app::ApplicationLauncher>> applications;