mirror of
https://github.com/mudita/MuditaOS.git
synced 2026-01-30 08:52:01 -05:00
128 lines
4.1 KiB
C++
128 lines
4.1 KiB
C++
// Copyright (c) 2017-2024, Mudita Sp. z.o.o. All rights reserved.
|
|
// For licensing, see https://github.com/mudita/MuditaOS/blob/master/LICENSE.md
|
|
|
|
#include <catch2/catch.hpp>
|
|
#include <service-bluetooth/SettingsHolder.hpp>
|
|
#include <BtKeysStorage.hpp>
|
|
|
|
namespace bluetooth
|
|
{
|
|
class TestSettingsHolder : public SettingsHolder
|
|
{
|
|
public:
|
|
std::string entryValue;
|
|
Settings settingType;
|
|
auto getValue(const Settings setting) -> SettingEntry override
|
|
{
|
|
if (setting == settingType) {
|
|
return entryValue;
|
|
}
|
|
else {
|
|
return std::string{};
|
|
}
|
|
}
|
|
void setValue(const Settings &newSetting, const SettingEntry &value) override
|
|
{
|
|
settingType = newSetting;
|
|
entryValue = std::get<std::string>(value);
|
|
}
|
|
};
|
|
|
|
} // namespace bluetooth
|
|
|
|
using namespace bluetooth;
|
|
|
|
TEST_CASE("BT Keys storage")
|
|
{
|
|
KeyStorage storage;
|
|
auto settingHolder = std::make_shared<TestSettingsHolder>();
|
|
|
|
storage.settings = settingHolder;
|
|
|
|
auto btKeyStorage = storage.getKeyStorage();
|
|
SECTION("put key to the storage")
|
|
{
|
|
bd_addr_t addr;
|
|
sscanf_bd_addr("94:B2:CC:F1:92:B1", addr);
|
|
link_key_t key = "12345";
|
|
link_key_type_t type = COMBINATION_KEY;
|
|
btKeyStorage->put_link_key(addr, key, type);
|
|
|
|
REQUIRE(settingHolder->settingType == Settings::BtKeys);
|
|
REQUIRE(settingHolder->entryValue ==
|
|
"{\"keys\": [{\"bd_addr\": \"94:B2:CC:F1:92:B1\", \"link_key\": \"12345\", \"type\": 0}]}");
|
|
}
|
|
SECTION("get key from the storage")
|
|
{
|
|
bd_addr_t addr;
|
|
sscanf_bd_addr("94:B2:CC:F1:92:B1", addr);
|
|
link_key_t key;
|
|
link_key_type_t type;
|
|
settingHolder->entryValue =
|
|
"{\"keys\": [{\"bd_addr\": \"94:B2:CC:F1:92:B1\", \"link_key\": \"12345\", \"type\": 0}]}";
|
|
|
|
btKeyStorage->open();
|
|
auto ret = btKeyStorage->get_link_key(addr, key, &type);
|
|
|
|
REQUIRE(std::string(reinterpret_cast<char *>(key)) == "12345");
|
|
REQUIRE(type == COMBINATION_KEY);
|
|
REQUIRE(ret == 1);
|
|
}
|
|
SECTION("get key from the storage when there's no key")
|
|
{
|
|
bd_addr_t addr;
|
|
sscanf_bd_addr("94:B2:CC:F1:92:B1", addr);
|
|
link_key_t key;
|
|
link_key_type_t type;
|
|
settingHolder->entryValue = "";
|
|
btKeyStorage->open();
|
|
btKeyStorage->delete_link_key(addr);
|
|
auto ret = btKeyStorage->get_link_key(addr, key, &type);
|
|
|
|
REQUIRE(ret != 1);
|
|
}
|
|
SECTION("put key to the storage few times")
|
|
{
|
|
bd_addr_t addr;
|
|
sscanf_bd_addr("94:B2:CC:F1:92:B1", addr);
|
|
link_key_t key = "12345";
|
|
link_key_type_t type = COMBINATION_KEY;
|
|
|
|
btKeyStorage->open();
|
|
btKeyStorage->put_link_key(addr, key, type);
|
|
btKeyStorage->put_link_key(addr, key, type);
|
|
btKeyStorage->put_link_key(addr, key, type);
|
|
|
|
REQUIRE(settingHolder->settingType == Settings::BtKeys);
|
|
REQUIRE(settingHolder->entryValue ==
|
|
"{\"keys\": [{\"bd_addr\": \"94:B2:CC:F1:92:B1\", \"link_key\": \"12345\", \"type\": 0}]}");
|
|
}
|
|
SECTION("delete key from the storage")
|
|
{
|
|
bd_addr_t addr;
|
|
sscanf_bd_addr("94:B2:CC:F1:92:B1", addr);
|
|
settingHolder->entryValue =
|
|
"{\"keys\": [{\"bd_addr\": \"94:B2:CC:F1:92:B1\", \"link_key\": \"12345\", \"type\": 0}]}";
|
|
|
|
btKeyStorage->open();
|
|
btKeyStorage->delete_link_key(addr);
|
|
|
|
REQUIRE(settingHolder->settingType == Settings::BtKeys);
|
|
REQUIRE(settingHolder->entryValue == "{\"keys\": []}");
|
|
}
|
|
SECTION("double-delete key from the storage")
|
|
{
|
|
bd_addr_t addr;
|
|
sscanf_bd_addr("94:B2:CC:F1:92:B1", addr);
|
|
settingHolder->entryValue =
|
|
"{\"keys\": [{\"bd_addr\": \"94:B2:CC:F1:92:B1\", \"link_key\": \"12345\", \"type\": 0}]}";
|
|
|
|
btKeyStorage->open();
|
|
btKeyStorage->delete_link_key(addr);
|
|
btKeyStorage->delete_link_key(addr);
|
|
|
|
REQUIRE(settingHolder->settingType == Settings::BtKeys);
|
|
REQUIRE(settingHolder->entryValue == "{\"keys\": []}");
|
|
}
|
|
}
|