Skip to content

Commit ab30e86

Browse files
DELIA-69741 : [Enhancement] Increase the limits in PersistentStore (#6442)
* DELIA-69741 : [Enhancement] Increase the limits in PersistentStore Reason for change: Increase max limits for each key from 3K to 10K to allow storing tokens for different use cases. Increase limits for namespace from 10K to 50K. Test Procedure: None Risks: None Signed-off-by: Nikita Poltorapavlo <npoltorapavlo@productengine.com> * Copy workerpool setup from Thunder tests (Thunder/Tests/unit/workerpool/) Make tests less state agnostic --------- Signed-off-by: Nikita Poltorapavlo <npoltorapavlo@productengine.com>
1 parent 726563b commit ab30e86

File tree

3 files changed

+79
-147
lines changed

3 files changed

+79
-147
lines changed

PersistentStore/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ set(PLUGIN_PERSISTENTSTORE_PATH "/opt/secure/persistent/rdkservicestore" CACHE S
2828
set(PLUGIN_PERSISTENTSTORE_LEGACYPATH "/opt/persistent/rdkservicestore" CACHE STRING "Previously used path")
2929
set(PLUGIN_PERSISTENTSTORE_KEY "" CACHE STRING "Encryption key")
3030
set(PLUGIN_PERSISTENTSTORE_MAXSIZE "1000000" CACHE STRING "For all text data, in bytes")
31-
set(PLUGIN_PERSISTENTSTORE_MAXVALUE "3000" CACHE STRING "For single text data, in bytes")
32-
set(PLUGIN_PERSISTENTSTORE_LIMIT "10000" CACHE STRING "Default for all text data in namespace, in bytes")
31+
set(PLUGIN_PERSISTENTSTORE_MAXVALUE "10000" CACHE STRING "For single text data, in bytes")
32+
set(PLUGIN_PERSISTENTSTORE_LIMIT "50000" CACHE STRING "Default for all text data in namespace, in bytes")
3333
set(PLUGIN_PERSISTENTSTORE_STARTUPORDER "" CACHE STRING "To configure startup order of PersistentStore plugin")
3434

3535
add_library(${MODULE_NAME} SHARED

PersistentStore/sqlite/l1test/Store2Test.cpp

Lines changed: 77 additions & 96 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
#include "../Store2.h"
55
#include "Store2NotificationMock.h"
6-
#include "WorkerPoolImplementation.h"
76

87
using ::testing::_;
98
using ::testing::Eq;
@@ -21,31 +20,69 @@ using ::WPEFramework::Plugin::Sqlite::Store2;
2120
using ::WPEFramework::RPC::IStringIterator;
2221

2322
const auto kPath = "/tmp/persistentstore/sqlite/l1test/store2test";
24-
const auto kPathCorrupt = "/tmp/persistentstore/sqlite/l1test/corrupt";
2523
const auto kMaxSize = 100;
2624
const auto kMaxValue = 5;
2725
const auto kLimit = 50;
26+
const auto kNewLimit = 10;
2827
const auto kValue = "value";
2928
const auto kKey = "key";
3029
const auto kAppId = "app";
30+
const auto kTtl = 2;
3131
const auto kNoTtl = 0;
3232

3333
class AStore2 : public Test {
3434
protected:
35-
WPEFramework::Core::ProxyType<WorkerPoolImplementation> workerPool;
3635
WPEFramework::Core::ProxyType<Store2> store2;
37-
AStore2()
38-
: workerPool(WPEFramework::Core::ProxyType<WorkerPoolImplementation>::Create(
39-
WPEFramework::Core::Thread::DefaultStackSize()))
40-
, store2(WPEFramework::Core::ProxyType<Store2>::Create(
41-
kPath, kMaxSize, kMaxValue, kLimit))
36+
37+
void SetUp() override
4238
{
43-
WPEFramework::Core::IWorkerPool::Assign(&(*workerPool));
39+
// Create a WorkerPool with multiple threads
40+
_dispatcher = new WorkerPoolDispatcher();
41+
_workerPool = new WPEFramework::Core::WorkerPool(
42+
1, // threadCount
43+
WPEFramework::Core::Thread::DefaultStackSize(),
44+
2, // queueSize
45+
_dispatcher,
46+
nullptr);
47+
48+
WPEFramework::Core::IWorkerPool::Assign(_workerPool);
49+
_workerPool->Run();
50+
51+
store2 = WPEFramework::Core::ProxyType<Store2>::Create(
52+
kPath, kMaxSize, kMaxValue, kLimit);
4453
}
45-
~AStore2() override
54+
void TearDown() override
4655
{
47-
WPEFramework::Core::IWorkerPool::Assign(nullptr);
56+
if (_workerPool != nullptr) {
57+
_workerPool->Stop();
58+
WPEFramework::Core::IWorkerPool::Assign(nullptr);
59+
delete _workerPool;
60+
_workerPool = nullptr;
61+
}
62+
63+
if (_dispatcher != nullptr) {
64+
delete _dispatcher;
65+
_dispatcher = nullptr;
66+
}
4867
}
68+
69+
// Simple dispatcher for testing
70+
class WorkerPoolDispatcher
71+
: public WPEFramework::Core::ThreadPool::IDispatcher {
72+
public:
73+
WorkerPoolDispatcher() = default;
74+
~WorkerPoolDispatcher() override = default;
75+
76+
void Initialize() override {}
77+
void Deinitialize() override {}
78+
void Dispatch(WPEFramework::Core::IDispatch* job) override
79+
{
80+
job->Dispatch();
81+
}
82+
};
83+
84+
WorkerPoolDispatcher* _dispatcher;
85+
WPEFramework::Core::WorkerPool* _workerPool;
4986
};
5087

5188
TEST_F(AStore2, DoesNotSetValueWhenNamespaceEmpty)
@@ -120,28 +157,28 @@ TEST_F(AStore2, SetsValueWhenValueEmpty)
120157
EXPECT_THAT(value, Eq(""));
121158
}
122159

123-
TEST_F(AStore2, GetsValueWhenTtl2Seconds)
160+
TEST_F(AStore2, GetsValueWithTtl)
124161
{
125162
ASSERT_THAT(store2->SetValue(
126-
IStore2::ScopeType::DEVICE, kAppId, kKey, kValue, 2 /*ttl*/),
163+
IStore2::ScopeType::DEVICE, kAppId, kKey, kValue, kTtl),
127164
Eq(WPEFramework::Core::ERROR_NONE));
128165
string value;
129166
uint32_t ttl;
130167
ASSERT_THAT(store2->GetValue(
131168
IStore2::ScopeType::DEVICE, kAppId, kKey, value, ttl),
132169
Eq(WPEFramework::Core::ERROR_NONE));
133170
EXPECT_THAT(value, Eq(kValue));
134-
EXPECT_THAT(ttl, Le(2));
171+
EXPECT_THAT(ttl, Le(kTtl));
135172
EXPECT_THAT(ttl, Gt(0));
136173
}
137174

138-
TEST_F(AStore2, DoesNotGetValueWhenTtl2SecondsExpired)
175+
TEST_F(AStore2, DoesNotGetValueWhenTtlExpired)
139176
{
140177
ASSERT_THAT(store2->SetValue(
141-
IStore2::ScopeType::DEVICE, kAppId, kKey, kValue, 2),
178+
IStore2::ScopeType::DEVICE, kAppId, kKey, kValue, kTtl),
142179
Eq(WPEFramework::Core::ERROR_NONE));
143180
WPEFramework::Core::Event lock(false, true);
144-
lock.Lock(2 * WPEFramework::Core::Time::MilliSecondsPerSecond);
181+
lock.Lock(kTtl * WPEFramework::Core::Time::MilliSecondsPerSecond);
145182
string value;
146183
uint32_t ttl;
147184
EXPECT_THAT(store2->GetValue(
@@ -172,7 +209,7 @@ TEST_F(AStore2, SendsValueChangedEventWhenSetValue)
172209
EXPECT_THAT(store2->SetValue(
173210
IStore2::ScopeType::DEVICE, kAppId, kKey, kValue, kNoTtl),
174211
Eq(WPEFramework::Core::ERROR_NONE));
175-
lock.Lock(2 * WPEFramework::Core::Time::MilliSecondsPerSecond);
212+
lock.Lock();
176213
EXPECT_THAT(eventScope, Eq(IStore2::ScopeType::DEVICE));
177214
EXPECT_THAT(eventNamespace, Eq(kAppId));
178215
EXPECT_THAT(eventKey, Eq(kKey));
@@ -231,19 +268,15 @@ TEST_F(AStore2, DoesNotGetValueWhenDeletedNamespace)
231268
Eq(WPEFramework::Core::ERROR_NOT_EXIST));
232269
}
233270

234-
TEST(Store2, DoesNotSetValueWhenReachedMaxSize)
271+
TEST_F(AStore2, DoesNotSetValueWhenReachedMaxSize)
235272
{
236-
auto workerPool = WPEFramework::Core::ProxyType<WorkerPoolImplementation>::Create(
237-
WPEFramework::Core::Thread::DefaultStackSize());
238-
auto store2 = WPEFramework::Core::ProxyType<Store2>::Create(
239-
kPath, 10 /*max size*/, kMaxValue, kLimit);
240-
WPEFramework::Core::IWorkerPool::Assign(&(*workerPool));
273+
store2 = WPEFramework::Core::ProxyType<Store2>::Create(
274+
kPath, kNewLimit, kMaxValue, kLimit);
241275
ASSERT_THAT(store2->DeleteNamespace(IStore2::ScopeType::DEVICE, kAppId),
242276
Eq(WPEFramework::Core::ERROR_NONE));
243277
EXPECT_THAT(store2->SetValue(
244278
IStore2::ScopeType::DEVICE, kAppId, kKey, kValue, kNoTtl),
245279
Eq(WPEFramework::Core::ERROR_INVALID_INPUT_LENGTH));
246-
WPEFramework::Core::IWorkerPool::Assign(nullptr);
247280
}
248281

249282
TEST_F(AStore2, FlushesCache)
@@ -326,124 +359,72 @@ TEST_F(AStore2, DoesNotGetNamespaceStorageLimitWhenNamespaceDoesNotExist)
326359
TEST_F(AStore2, DoesNotSetNamespaceStorageLimitWhenNamespaceEmpty)
327360
{
328361
EXPECT_THAT(store2->SetNamespaceStorageLimit(
329-
IStoreLimit::ScopeType::DEVICE, "", 10 /*limit*/),
362+
IStoreLimit::ScopeType::DEVICE, "", kNewLimit),
330363
Eq(WPEFramework::Core::ERROR_INVALID_INPUT_LENGTH));
331364
}
332365

333366
TEST_F(AStore2, DoesNotSetNamespaceStorageLimitWhenNamespaceTooLarge)
334367
{
335368
EXPECT_THAT(store2->SetNamespaceStorageLimit(
336-
IStoreLimit::ScopeType::DEVICE, "this is too large", 10 /*limit*/),
369+
IStoreLimit::ScopeType::DEVICE, "this is too large", kNewLimit),
337370
Eq(WPEFramework::Core::ERROR_INVALID_INPUT_LENGTH));
338371
}
339372

340373
TEST_F(AStore2, SetsNamespaceStorageLimit)
341374
{
342375
ASSERT_THAT(store2->SetNamespaceStorageLimit(
343-
IStoreLimit::ScopeType::DEVICE, kAppId, 10 /*limit*/),
376+
IStoreLimit::ScopeType::DEVICE, kAppId, kNewLimit),
344377
Eq(WPEFramework::Core::ERROR_NONE));
345378
uint32_t value;
346379
ASSERT_THAT(store2->GetNamespaceStorageLimit(
347380
IStoreLimit::ScopeType::DEVICE, kAppId, value),
348381
Eq(WPEFramework::Core::ERROR_NONE));
349-
EXPECT_THAT(value, Eq(10));
350-
}
351-
352-
TEST_F(AStore2, UpdatesNamespaceStorageLimit)
353-
{
354-
ASSERT_THAT(store2->SetNamespaceStorageLimit(
355-
IStoreLimit::ScopeType::DEVICE, kAppId, 10 /*limit*/),
356-
Eq(WPEFramework::Core::ERROR_NONE));
357-
ASSERT_THAT(store2->SetNamespaceStorageLimit(
358-
IStoreLimit::ScopeType::DEVICE, kAppId, 20 /*limit*/),
359-
Eq(WPEFramework::Core::ERROR_NONE));
360-
uint32_t value;
361-
ASSERT_THAT(store2->GetNamespaceStorageLimit(
362-
IStoreLimit::ScopeType::DEVICE, kAppId, value),
382+
EXPECT_THAT(value, Eq(kNewLimit));
383+
// restore:
384+
EXPECT_THAT(store2->SetNamespaceStorageLimit(
385+
IStoreLimit::ScopeType::DEVICE, kAppId, kLimit),
363386
Eq(WPEFramework::Core::ERROR_NONE));
364-
EXPECT_THAT(value, Eq(20));
365387
}
366388

367-
TEST(Store2, DoesNotSetValueWhenReachedDefaultLimit)
389+
TEST_F(AStore2, DoesNotSetValueWhenReachedDefaultLimit)
368390
{
369-
auto workerPool = WPEFramework::Core::ProxyType<WorkerPoolImplementation>::Create(
370-
WPEFramework::Core::Thread::DefaultStackSize());
371-
auto store2 = WPEFramework::Core::ProxyType<Store2>::Create(
372-
kPath, kMaxSize, kMaxValue, 5 /*limit*/);
373-
WPEFramework::Core::IWorkerPool::Assign(&(*workerPool));
391+
store2 = WPEFramework::Core::ProxyType<Store2>::Create(
392+
kPath, kMaxSize, kMaxValue, kMaxValue);
374393
ASSERT_THAT(store2->DeleteNamespace(IStore2::ScopeType::DEVICE, kAppId),
375394
Eq(WPEFramework::Core::ERROR_NONE));
376395
EXPECT_THAT(store2->SetValue(
377396
IStore2::ScopeType::DEVICE, kAppId, kKey, kValue, kNoTtl),
378397
Eq(WPEFramework::Core::ERROR_INVALID_INPUT_LENGTH));
379-
WPEFramework::Core::IWorkerPool::Assign(nullptr);
380398
}
381399

382400
TEST_F(AStore2, DoesNotSetValueWhenReachedLimit)
383401
{
384402
ASSERT_THAT(store2->DeleteNamespace(IStore2::ScopeType::DEVICE, kAppId),
385403
Eq(WPEFramework::Core::ERROR_NONE));
386404
ASSERT_THAT(store2->SetNamespaceStorageLimit(
387-
IStoreLimit::ScopeType::DEVICE, kAppId, 5 /*limit*/),
405+
IStoreLimit::ScopeType::DEVICE, kAppId, kMaxValue),
388406
Eq(WPEFramework::Core::ERROR_NONE));
389407
EXPECT_THAT(store2->SetValue(
390408
IStore2::ScopeType::DEVICE, kAppId, kKey, kValue, kNoTtl),
391409
Eq(WPEFramework::Core::ERROR_INVALID_INPUT_LENGTH));
410+
// restore:
411+
EXPECT_THAT(store2->SetNamespaceStorageLimit(
412+
IStoreLimit::ScopeType::DEVICE, kAppId, kLimit),
413+
Eq(WPEFramework::Core::ERROR_NONE));
392414
}
393415

394416
TEST_F(AStore2, SetsValueWhenDoesNotReachLimit)
395417
{
396418
ASSERT_THAT(store2->DeleteNamespace(IStore2::ScopeType::DEVICE, kAppId),
397419
Eq(WPEFramework::Core::ERROR_NONE));
398420
ASSERT_THAT(store2->SetNamespaceStorageLimit(
399-
IStoreLimit::ScopeType::DEVICE, kAppId, 5 /*limit*/),
421+
IStoreLimit::ScopeType::DEVICE, kAppId, kMaxValue),
400422
Eq(WPEFramework::Core::ERROR_NONE));
401423
EXPECT_THAT(store2->SetValue(
402424
IStore2::ScopeType::DEVICE, kAppId, kKey, "", kNoTtl),
403425
Eq(WPEFramework::Core::ERROR_NONE));
404-
}
405-
406-
TEST(Store2, SetsValueWhenFileIsNotDatabase)
407-
{
408-
{
409-
WPEFramework::Core::File file(kPathCorrupt);
410-
file.Destroy();
411-
WPEFramework::Core::Directory(file.PathName().c_str()).CreatePath();
412-
ASSERT_THAT(file.Create(), IsTrue());
413-
uint8_t buffer[1024];
414-
ASSERT_THAT(file.Write(buffer, 1024), Eq(1024));
415-
}
416-
auto workerPool = WPEFramework::Core::ProxyType<WorkerPoolImplementation>::Create(
417-
WPEFramework::Core::Thread::DefaultStackSize());
418-
auto store2 = WPEFramework::Core::ProxyType<Store2>::Create(
419-
kPathCorrupt, kMaxSize, kMaxValue, kLimit);
420-
WPEFramework::Core::IWorkerPool::Assign(&(*workerPool));
421-
EXPECT_THAT(store2->SetValue(
422-
IStore2::ScopeType::DEVICE, kAppId, kKey, kValue, kNoTtl),
423-
Eq(WPEFramework::Core::ERROR_NONE));
424-
WPEFramework::Core::IWorkerPool::Assign(nullptr);
425-
}
426-
427-
TEST(Store2, SetsValueWhenFileCorrupt)
428-
{
429-
{
430-
WPEFramework::Core::ProxyType<Store2>::Create(
431-
kPathCorrupt, kMaxSize, kMaxValue, kLimit);
432-
}
433-
{
434-
WPEFramework::Core::File file(kPathCorrupt);
435-
ASSERT_THAT(file.Open(false /*readOnly*/), IsTrue());
436-
ASSERT_THAT(file.Position(false /*relative*/, 8192), IsTrue());
437-
uint8_t buffer[1024];
438-
ASSERT_THAT(file.Write(buffer, 1024), Eq(1024));
439-
}
440-
auto workerPool = WPEFramework::Core::ProxyType<WorkerPoolImplementation>::Create(
441-
WPEFramework::Core::Thread::DefaultStackSize());
442-
auto store2 = WPEFramework::Core::ProxyType<Store2>::Create(
443-
kPathCorrupt, kMaxSize, kMaxValue, kLimit);
444-
WPEFramework::Core::IWorkerPool::Assign(&(*workerPool));
445-
EXPECT_THAT(store2->SetValue(
446-
IStore2::ScopeType::DEVICE, kAppId, kKey, kValue, kNoTtl),
426+
// restore:
427+
EXPECT_THAT(store2->SetNamespaceStorageLimit(
428+
IStoreLimit::ScopeType::DEVICE, kAppId, kLimit),
447429
Eq(WPEFramework::Core::ERROR_NONE));
448-
WPEFramework::Core::IWorkerPool::Assign(nullptr);
449430
}

PersistentStore/sqlite/l1test/WorkerPoolImplementation.h

Lines changed: 0 additions & 49 deletions
This file was deleted.

0 commit comments

Comments
 (0)