1 //******************************************************************
3 // Copyright 2015 Samsung Electronics All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
22 #include <gtest/gtest.h>
23 #include <HippoMocks/hippomocks.h>
25 #include "ResourceCacheManager.h"
26 #include "UnitTestHelper.h"
28 using namespace OIC::Service;
30 class ResourceCacheManagerTest : public TestWithMock
33 ResourceCacheManager *cacheInstance;
34 PrimitiveResource::Ptr pResource;
41 TestWithMock::SetUp();
42 cacheInstance = ResourceCacheManager::getInstance();
43 pResource = PrimitiveResource::Ptr(mocks.Mock< PrimitiveResource >(), [](PrimitiveResource *) {});
44 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(false);
45 cb = ([](std::shared_ptr<PrimitiveResource >, const RCSResourceAttributes &)->OCStackResult {return OC_STACK_OK;});
48 virtual void TearDown()
51 TestWithMock::TearDown();
55 TEST_F(ResourceCacheManagerTest, requestResourceCache_resourceIsNULL)
59 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
60 long reportTime = 20l;
62 ASSERT_THROW(cacheInstance->requestResourceCache(NULL, func, rf, reportTime),
63 ResourceCacheManager::InvalidParameterException);
66 TEST_F(ResourceCacheManagerTest, requestResourceCache_cacheCBIsNULL)
70 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
71 long reportTime = 20l;
73 ASSERT_THROW(cacheInstance->requestResourceCache(pResource, func, rf, reportTime),
74 ResourceCacheManager::InvalidParameterException);
77 TEST_F(ResourceCacheManagerTest, requestResourceCache_reportTimeIsNULL)
80 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
81 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
82 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
83 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
86 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
88 id = cacheInstance->requestResourceCache(pResource, func, rf);
89 cacheInstance->cancelResourceCache(id);
95 TEST_F(ResourceCacheManagerTest, requestResourceCache_normalCase)
98 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
99 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
100 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
101 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
104 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
105 long reportTime = 20l;
107 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
108 cacheInstance->cancelResourceCache(id);
113 TEST_F(ResourceCacheManagerTest, cancelResourceCache_cacheIDIsZero)
116 ASSERT_THROW(cacheInstance->cancelResourceCache(0),
117 ResourceCacheManager::InvalidParameterException);
120 TEST_F(ResourceCacheManagerTest, cancelResourceCache_normalCase)
123 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
124 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
125 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
126 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
129 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
130 long reportTime = 20l;
132 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
134 cacheInstance->cancelResourceCache(id);
137 TEST_F(ResourceCacheManagerTest, updateResourceCachePrimitiveResource_resourceIsNULL)
142 ASSERT_THROW(cacheInstance->updateResourceCache(pResource),
143 ResourceCacheManager::InvalidParameterException);
146 TEST_F(ResourceCacheManagerTest, updateResourceCachePrimitiveResource_cacheIsNULL)
149 ASSERT_THROW(cacheInstance->updateResourceCache(pResource),
150 ResourceCacheManager::InvalidParameterException);
153 TEST_F(ResourceCacheManagerTest, updateResourceCachePrimitiveResource_normalCase)
156 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
157 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
158 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
159 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
160 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
161 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
164 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
165 long reportTime = 20l;
167 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
169 cacheInstance->updateResourceCache(pResource);
171 cacheInstance->cancelResourceCache(id);
174 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_cacheIDIsZero)
177 ASSERT_THROW(cacheInstance->updateResourceCache(0),
178 ResourceCacheManager::InvalidParameterException);
181 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_cacheIsNULL)
184 ASSERT_THROW(cacheInstance->updateResourceCache(id),
185 ResourceCacheManager::InvalidParameterException);
188 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_normalCase)
191 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
192 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
193 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
194 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
195 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
196 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
199 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
200 long reportTime = 20l;
202 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
204 cacheInstance->updateResourceCache(id);
206 cacheInstance->cancelResourceCache(id);
209 TEST_F(ResourceCacheManagerTest, getCachedDataPrimitiveResource_resourceIsNULL)
214 ASSERT_THROW(cacheInstance->getCachedData(pResource),
215 ResourceCacheManager::InvalidParameterException);
218 TEST_F(ResourceCacheManagerTest, getCachedDataPrimitiveResource_handlerIsNULL)
221 ASSERT_THROW(cacheInstance->getCachedData(pResource),
222 ResourceCacheManager::InvalidParameterException);
225 TEST_F(ResourceCacheManagerTest, getCachedDataCachID_resourceIsNULL)
228 ASSERT_THROW(cacheInstance->getCachedData(0), ResourceCacheManager::InvalidParameterException);
231 TEST_F(ResourceCacheManagerTest, getCachedDataCachID_handlerIsNULL)
234 ASSERT_THROW(cacheInstance->getCachedData(id), ResourceCacheManager::InvalidParameterException);
237 TEST_F(ResourceCacheManagerTest, getResourceCacheStatePrimitiveResource_resourceIsNULL)
242 ASSERT_THROW(cacheInstance->getResourceCacheState(pResource),
243 ResourceCacheManager::InvalidParameterException);
246 TEST_F(ResourceCacheManagerTest, getResourceCacheStatePrimitiveResource_handlerIsNULL)
249 ASSERT_EQ(cacheInstance->getResourceCacheState(pResource), CACHE_STATE::NONE);
252 TEST_F(ResourceCacheManagerTest, getResourceCacheStatePrimitiveResource_normalCase)
255 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
256 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
257 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
258 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
259 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
260 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
263 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
264 long reportTime = 20l;
266 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
267 CACHE_STATE state = cacheInstance->getResourceCacheState(pResource);
269 cacheInstance->cancelResourceCache(id);
271 ASSERT_EQ(state, CACHE_STATE::READY_YET);
274 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_cacheIDIsZero)
277 ASSERT_THROW(cacheInstance->getResourceCacheState(0),
278 ResourceCacheManager::InvalidParameterException);
281 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_handlerIsNULL)
285 ASSERT_EQ(cacheInstance->getResourceCacheState(id), CACHE_STATE::NONE);
288 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_normalCase)
291 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
292 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
293 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
294 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
295 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
296 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
299 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
300 long reportTime = 20l;
302 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
303 CACHE_STATE state = cacheInstance->getResourceCacheState(id);
305 cacheInstance->cancelResourceCache(id);
307 ASSERT_EQ(state, CACHE_STATE::READY_YET);