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 cb = ([](std::shared_ptr<PrimitiveResource >, const RCSResourceAttributes &)->OCStackResult {return OC_STACK_OK;});
47 virtual void TearDown()
50 TestWithMock::TearDown();
54 TEST_F(ResourceCacheManagerTest, requestResourceCache_resourceIsNULL)
58 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
59 long reportTime = 20l;
61 ASSERT_THROW(cacheInstance->requestResourceCache(NULL, func, rf, reportTime),
62 ResourceCacheManager::InvalidParameterException);
65 TEST_F(ResourceCacheManagerTest, requestResourceCache_cacheCBIsNULL)
69 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
70 long reportTime = 20l;
72 ASSERT_THROW(cacheInstance->requestResourceCache(pResource, func, rf, reportTime),
73 ResourceCacheManager::InvalidParameterException);
76 TEST_F(ResourceCacheManagerTest, requestResourceCache_reportTimeIsNULL)
79 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
80 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
81 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
82 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
85 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
87 id = cacheInstance->requestResourceCache(pResource, func, rf);
88 cacheInstance->cancelResourceCache(id);
94 TEST_F(ResourceCacheManagerTest, requestResourceCache_normalCase)
97 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
98 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
99 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
100 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
103 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
104 long reportTime = 20l;
106 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
107 cacheInstance->cancelResourceCache(id);
112 TEST_F(ResourceCacheManagerTest, cancelResourceCache_cacheIDIsZero)
115 ASSERT_THROW(cacheInstance->cancelResourceCache(0),
116 ResourceCacheManager::InvalidParameterException);
119 TEST_F(ResourceCacheManagerTest, cancelResourceCache_normalCase)
122 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
123 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
124 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
125 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
128 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
129 long reportTime = 20l;
131 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
133 cacheInstance->cancelResourceCache(id);
136 TEST_F(ResourceCacheManagerTest, updateResourceCachePrimitiveResource_resourceIsNULL)
141 ASSERT_THROW(cacheInstance->updateResourceCache(pResource),
142 ResourceCacheManager::InvalidParameterException);
145 TEST_F(ResourceCacheManagerTest, updateResourceCachePrimitiveResource_cacheIsNULL)
148 ASSERT_THROW(cacheInstance->updateResourceCache(pResource),
149 ResourceCacheManager::InvalidParameterException);
152 TEST_F(ResourceCacheManagerTest, updateResourceCachePrimitiveResource_normalCase)
155 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
156 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
157 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
158 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
159 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
160 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
163 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
164 long reportTime = 20l;
166 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
168 cacheInstance->updateResourceCache(pResource);
170 cacheInstance->cancelResourceCache(id);
173 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_cacheIDIsZero)
176 ASSERT_THROW(cacheInstance->updateResourceCache(0),
177 ResourceCacheManager::InvalidParameterException);
180 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_cacheIsNULL)
183 ASSERT_THROW(cacheInstance->updateResourceCache(id),
184 ResourceCacheManager::InvalidParameterException);
187 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_normalCase)
190 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
191 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
192 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
193 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
194 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
195 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
198 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
199 long reportTime = 20l;
201 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
203 cacheInstance->updateResourceCache(id);
205 cacheInstance->cancelResourceCache(id);
208 TEST_F(ResourceCacheManagerTest, getCachedDataPrimitiveResource_resourceIsNULL)
213 ASSERT_THROW(cacheInstance->getCachedData(pResource),
214 ResourceCacheManager::InvalidParameterException);
217 TEST_F(ResourceCacheManagerTest, getCachedDataPrimitiveResource_handlerIsNULL)
220 ASSERT_THROW(cacheInstance->getCachedData(pResource),
221 ResourceCacheManager::InvalidParameterException);
224 TEST_F(ResourceCacheManagerTest, getCachedDataCachID_resourceIsNULL)
227 ASSERT_THROW(cacheInstance->getCachedData(0), ResourceCacheManager::InvalidParameterException);
230 TEST_F(ResourceCacheManagerTest, getCachedDataCachID_handlerIsNULL)
233 ASSERT_THROW(cacheInstance->getCachedData(id), ResourceCacheManager::InvalidParameterException);
236 TEST_F(ResourceCacheManagerTest, getResourceCacheStatePrimitiveResource_resourceIsNULL)
241 ASSERT_THROW(cacheInstance->getResourceCacheState(pResource),
242 ResourceCacheManager::InvalidParameterException);
245 TEST_F(ResourceCacheManagerTest, getResourceCacheStatePrimitiveResource_handlerIsNULL)
248 ASSERT_EQ(cacheInstance->getResourceCacheState(pResource), CACHE_STATE::NONE);
251 TEST_F(ResourceCacheManagerTest, getResourceCacheStatePrimitiveResource_normalCase)
254 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
255 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
256 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
257 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
258 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
259 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
262 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
263 long reportTime = 20l;
265 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
266 CACHE_STATE state = cacheInstance->getResourceCacheState(pResource);
268 cacheInstance->cancelResourceCache(id);
270 ASSERT_EQ(state, CACHE_STATE::READY_YET);
273 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_cacheIDIsZero)
276 ASSERT_THROW(cacheInstance->getResourceCacheState(0),
277 ResourceCacheManager::InvalidParameterException);
280 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_handlerIsNULL)
284 ASSERT_EQ(cacheInstance->getResourceCacheState(id), CACHE_STATE::NONE);
287 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_normalCase)
290 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
291 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
292 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
293 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
294 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
295 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
298 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
299 long reportTime = 20l;
301 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
302 CACHE_STATE state = cacheInstance->getResourceCacheState(id);
304 cacheInstance->cancelResourceCache(id);
306 ASSERT_EQ(state, CACHE_STATE::READY_YET);