33
44#include " ../Store2.h"
55#include " Store2NotificationMock.h"
6- #include " WorkerPoolImplementation.h"
76
87using ::testing::_;
98using ::testing::Eq;
@@ -21,31 +20,69 @@ using ::WPEFramework::Plugin::Sqlite::Store2;
2120using ::WPEFramework::RPC::IStringIterator;
2221
2322const auto kPath = " /tmp/persistentstore/sqlite/l1test/store2test" ;
24- const auto kPathCorrupt = " /tmp/persistentstore/sqlite/l1test/corrupt" ;
2523const auto kMaxSize = 100 ;
2624const auto kMaxValue = 5 ;
2725const auto kLimit = 50 ;
26+ const auto kNewLimit = 10 ;
2827const auto kValue = " value" ;
2928const auto kKey = " key" ;
3029const auto kAppId = " app" ;
30+ const auto kTtl = 2 ;
3131const auto kNoTtl = 0 ;
3232
3333class AStore2 : public Test {
3434protected:
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
5188TEST_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
249282TEST_F (AStore2, FlushesCache)
@@ -326,124 +359,72 @@ TEST_F(AStore2, DoesNotGetNamespaceStorageLimitWhenNamespaceDoesNotExist)
326359TEST_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
333366TEST_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
340373TEST_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
382400TEST_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
394416TEST_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}
0 commit comments