~aleteoryx/muditaos

ref: b00548440b4d37ee2806f0760a949b23b7e14aa8 muditaos/module-services/service-db/test/test-service-db-settings-messages.cpp -rw-r--r-- 4.2 KiB
b0054844 — Lefucjusz [BH-2020] Fix double-free in DecoderMP3 1 year, 5 months ago
                                                                                
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// Copyright (c) 2017-2021, Mudita Sp. z.o.o. All rights reserved.
// For licensing, see https://github.com/mudita/MuditaOS/LICENSE.md

#include <catch2/catch.hpp>    // for Section, SourceLineInfo, SECTION, SectionInfo, StringRef, TEST_CASE
#include <Service/Service.hpp> // for Service
#include <Service/Message.hpp> // for MessagePointer, ResponseMessage, DataMessage
#include <functional>          // for _Bind_helper<>::type, _Placeholder, bind, _1, _2
#include <list>                // for list
#include <memory>              // for make_shared, allocator, shared_ptr
#include <optional>            // for optional
#include <string>              // for string
#include <utility>             // for move

#include <service-db/SettingsMessages.hpp> // for SetVariable, ListProfiles, GetVariable, AddMode, AddProfile, CurrentModeChanged, CurrentProfileChanged, EntryPath, GetCurrentMode, GetCurrentProfile, ListModes, ModeListResponse, ProfileListResponse, RegisterOnVariableChange, UnregisterOnVariableChange, VariableChanged, VariableResponse
#include "system/Common.hpp"               // for ReturnCodes, ReturnCodes::Success, ServicePowerMode

namespace settings
{
    class Service : public sys::Service
    {
      public:
        using sys::Service::Service;

        auto getValue(settings::EntryPath path) -> std::optional<std::string>
        {
            return "";
        }

        std::string setValue(settings::EntryPath path, std::string value)
        {
            // insert into ...
            return value;
        }

        sys::MessagePointer DataReceivedHandler(sys::DataMessage *msg, sys::ResponseMessage *resp)
        {
            return std::make_shared<sys::ResponseMessage>();
        }

        sys::ReturnCodes InitHandler()
        {
            using std::placeholders::_1;
            using std::placeholders::_2;

            connect(settings::Messages::GetVariable(), std::bind(&Service::handleGetVariable, this, _1));
            connect(settings::Messages::SetVariable(), std::bind(&Service::handleSetVariable, this, _1));

            return sys::ReturnCodes::Success;
        }

        sys::ReturnCodes DeinitHandler()
        {
            return sys::ReturnCodes::Success;
        }

        sys::ReturnCodes SwitchPowerModeHandler(const sys::ServicePowerMode mode)
        {
            return sys::ReturnCodes::Success;
        }

        sys::MessagePointer handleGetVariable(sys::Message *req)
        {
            if (auto msg = dynamic_cast<settings::Messages::GetVariable *>(req)) {

                auto path  = msg->getPath();
                auto value = getValue(path);

                return std::make_shared<settings::Messages::VariableResponse>(path, value);
            }
            return std::make_shared<sys::ResponseMessage>();
        };

        sys::MessagePointer handleSetVariable(sys::Message *req)
        {
            if (auto msg = dynamic_cast<settings::Messages::SetVariable *>(req)) {

                auto path      = msg->getPath();
                auto value     = msg->getValue().value_or("");
                auto old_value = setValue(path, msg->getValue().value_or(""));

                auto update_msg = std::make_shared<settings::Messages::VariableChanged>(path, value, old_value);
                bus.sendUnicast(std::move(update_msg), "db-worker");
            }
            return std::make_shared<sys::ResponseMessage>();
        };
    };
} // namespace settings

TEST_CASE("Settings Messages")
{
    SECTION("Init handler")
    {
        settings::Service settings("settings");
        settings.InitHandler();
    }

    SECTION("Send register messages")
    {
        settings::Service settings("settings");
        settings.InitHandler();

        settings.bus.sendUnicast(std::make_shared<settings::Messages::RegisterOnVariableChange>(settings::EntryPath(
                                     {"mode", "service", "profile", "variable", settings::SettingsScope::AppLocal})),
                                 "db-worker");

        settings.bus.sendUnicast(std::make_shared<settings::Messages::UnregisterOnVariableChange>(settings::EntryPath(
                                     {"mode", "service", "profile", "variable", settings::SettingsScope::AppLocal})),
                                 "db-worker");
    }
}