Files
MuditaOS/module-apps/tests/test-CallbackStorage.cpp
Piotr Tański 6c900d7b38 [EGD-5166] Add query-callback synchronization mechanism
Receiver object cancels the callbacks at the end of its lifecycle.
2021-01-13 12:11:56 +01:00

71 lines
1.8 KiB
C++

// 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>
#include "CallbackStorage.hpp"
#include <functional>
using namespace app;
class TestCallbacksDeleter : public AsyncCallbacksDeleter
{
public:
explicit TestCallbacksDeleter(CallbackStorage &storage) : storage{storage}
{}
void cancelCallbacks(AsyncCallbackReceiver *receiver) override
{
storage.removeAll(receiver);
}
private:
CallbackStorage &storage;
};
class TestReceiver : public AsyncCallbackReceiver
{
public:
TestReceiver(TestCallbacksDeleter *deleter = nullptr) : AsyncCallbackReceiver(deleter)
{}
};
TEST_CASE("CallbackStorageTests")
{
CallbackStorage storage;
SECTION("Get callback")
{
constexpr auto MessageId = 1;
sys::ResponseMessage response{};
response.uniID = MessageId;
TestReceiver receiver;
storage.registerCallback(MessageId, &receiver);
REQUIRE(storage.containsCallbackFor(&response));
[[maybe_unused]] auto callback = storage.getCallback(&response);
REQUIRE(!storage.containsCallbackFor(&response));
}
SECTION("Remove receiver")
{
constexpr auto MessageId = 2;
sys::ResponseMessage response{};
response.uniID = MessageId;
{
TestCallbacksDeleter deleter{storage};
TestReceiver receiver{&deleter};
storage.registerCallback(MessageId, &receiver);
REQUIRE(storage.containsCallbackFor(&response));
}
REQUIRE(!storage.containsCallbackFor(&response));
[[maybe_unused]] auto callback = storage.getCallback(&response);
REQUIRE(callback->execute() == false);
}
}