// throw InvalidParameterException;
bool isCachedData(CacheID id) const;
+ static void stopResourceCacheManager();
+
private:
static ResourceCacheManager *s_instance;
static std::mutex s_mutex;
if (subscriberList != nullptr)
{
subscriberList->clear();
- subscriberList.release();
+ subscriberList.reset();
}
if (sResource->isObservable())
{
namespace Service
{
- ResourceCacheManager *ResourceCacheManager::s_instance = NULL;
+ ResourceCacheManager *ResourceCacheManager::s_instance = nullptr;
std::mutex ResourceCacheManager::s_mutexForCreation;
std::mutex ResourceCacheManager::s_mutex;
std::unique_ptr<std::list<DataCachePtr>> ResourceCacheManager::s_cacheDataList(nullptr);
+ void ResourceCacheManager::stopResourceCacheManager()
+ {
+ delete s_instance;
+ s_instance = nullptr;
+ }
+
ResourceCacheManager::~ResourceCacheManager()
{
std::lock_guard<std::mutex> lock(s_mutex);
if (s_cacheDataList != nullptr)
{
s_cacheDataList->clear();
+ s_cacheDataList.reset();
}
}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#include <iostream>
-#include <gtest/gtest.h>
-#include <HippoMocks/hippomocks.h>
+#include <mutex>
+#include <condition_variable>
+#include <chrono>
#include "ResourceCacheManager.h"
#include "DataCache.h"
int) > ObserveCallback;
public:
std::shared_ptr<DataCache> cacheHandler;
- PrimitiveResource::Ptr pResource;
CacheCB cb;
CacheID id;
+ static PrimitiveResource::Ptr pResource;
+ static MockRepository mocks;
+ static bool isLast;
protected:
+ DataCacheTest()
+ {
+ id = 0;
+ static std::once_flag flag;
+ std::call_once(flag, [this]()
+ {
+ isLast = false;
+ pResource = PrimitiveResource::Ptr(mocks.Mock< PrimitiveResource >());
+ });
+ }
+ virtual ~DataCacheTest() noexcept(noexcept(std::declval<Test>().~Test()))
+ {
+ if (isLast)
+ {
+ mocks.reset();
+ }
+ }
virtual void SetUp()
{
TestWithMock::SetUp();
- pResource = PrimitiveResource::Ptr(mocks.Mock< PrimitiveResource >(),
- [](PrimitiveResource *)
- {
-
- });
mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(false);
cacheHandler.reset(new DataCache());
virtual void TearDown()
{
cacheHandler.reset();
- pResource.reset();
TestWithMock::TearDown();
}
};
+PrimitiveResource::Ptr DataCacheTest::pResource = nullptr;
+MockRepository DataCacheTest::mocks;
+bool DataCacheTest::isLast;
+
TEST_F(DataCacheTest, initializeDataCache_normalCase)
{
-
mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
TEST_F(DataCacheTest, initializeDataCache_normalCaseNonObservable)
{
+ std::condition_variable responseCon;
+ std::mutex mutexForCondition;
+
mocks.OnCall(pResource.get(), PrimitiveResource::requestGet).Do(
- [](GetCallback callback)
+ [& responseCon](GetCallback callback)
{
OIC::Service::HeaderOptions hos;
OIC::Service::RCSResourceAttributes attr;
OIC::Service::ResponseStatement rep(attr);
callback(hos, rep, OC_STACK_OK);
- return;
- }
- );
+ responseCon.notify_all();
+ });
mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(false);
mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
cacheHandler->initializeDataCache(pResource);
- sleep(3);
+ std::unique_lock< std::mutex > lock{ mutexForCondition };
+ responseCon.wait_for(lock, std::chrono::milliseconds(1000));
}
TEST_F(DataCacheTest, initializeDataCache_normalCaseTimeOut)
{
-
mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
-
cacheHandler->initializeDataCache(pResource);
-
sleep(3);
}
cacheHandler->initializeDataCache(pResource);
cacheHandler->requestGet();
+ isLast = true;
}
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#include <iostream>
-#include <gtest/gtest.h>
-#include <HippoMocks/hippomocks.h>
+#include <mutex>
#include "ResourceCacheManager.h"
#include "UnitTestHelper.h"
{
public:
ResourceCacheManager *cacheInstance;
- PrimitiveResource::Ptr pResource;
CacheCB cb;
CacheID id;
+ static PrimitiveResource::Ptr pResource;
+ static MockRepository mocks;
+ static bool isLast;
protected:
virtual void SetUp()
{
TestWithMock::SetUp();
+ id = 0;
cacheInstance = ResourceCacheManager::getInstance();
- pResource = PrimitiveResource::Ptr(mocks.Mock< PrimitiveResource >(),
- [](PrimitiveResource *)
- {
- });
+ static std::once_flag flag;
+ std::call_once(flag, [this]()
+ {
+ isLast = false;
+ pResource = PrimitiveResource::Ptr(mocks.Mock< PrimitiveResource >());
+ });
mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(false);
cb = ([](std::shared_ptr<PrimitiveResource >, const RCSResourceAttributes &)->OCStackResult
{
virtual void TearDown()
{
- pResource.reset();
- TestWithMock::TearDown();
+ //TestWithMock::TearDown();
+ if (isLast)
+ {
+ mocks.reset();
+ }
}
};
+PrimitiveResource::Ptr ResourceCacheManagerTest::pResource;
+MockRepository ResourceCacheManagerTest::mocks;
+bool ResourceCacheManagerTest::isLast;
+
TEST_F(ResourceCacheManagerTest, requestResourceCache_resourceIsNULL)
{
TEST_F(ResourceCacheManagerTest, requestResourceCache_reportTimeIsNULL)
{
-
mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
TEST_F(ResourceCacheManagerTest, requestResourceCache_normalCase)
{
-
mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
TEST_F(ResourceCacheManagerTest, cancelResourceCache_normalCase)
{
-
mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_normalCase)
{
-
mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_normalCase)
{
-
mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
cacheInstance->cancelResourceCache(id);
ASSERT_EQ(state, CACHE_STATE::READY_YET);
+ ResourceCacheManager::stopResourceCacheManager();
+ isLast = true;
}