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 >(),
44 [](PrimitiveResource *)
48 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(false);
49 cb = ([](std::shared_ptr<PrimitiveResource >, const RCSResourceAttributes &)->OCStackResult
55 virtual void TearDown()
58 TestWithMock::TearDown();
62 TEST_F(ResourceCacheManagerTest, requestResourceCache_resourceIsNULL)
66 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
67 long reportTime = 20l;
69 ASSERT_THROW(cacheInstance->requestResourceCache(NULL, func, rf, reportTime),
70 ResourceCacheManager::InvalidParameterException);
73 TEST_F(ResourceCacheManagerTest, requestResourceCache_cacheCBIsNULL)
77 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
78 long reportTime = 20l;
80 ASSERT_THROW(cacheInstance->requestResourceCache(pResource, func, rf, reportTime),
81 ResourceCacheManager::InvalidParameterException);
84 TEST_F(ResourceCacheManagerTest, requestResourceCache_reportTimeIsNULL)
87 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
88 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
89 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
90 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
93 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
95 id = cacheInstance->requestResourceCache(pResource, func, rf);
96 cacheInstance->cancelResourceCache(id);
102 TEST_F(ResourceCacheManagerTest, requestResourceCache_normalCase)
105 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
106 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
107 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
108 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
111 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
112 long reportTime = 20l;
114 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
115 cacheInstance->cancelResourceCache(id);
120 TEST_F(ResourceCacheManagerTest, cancelResourceCache_cacheIDIsZero)
123 ASSERT_THROW(cacheInstance->cancelResourceCache(0),
124 ResourceCacheManager::InvalidParameterException);
127 TEST_F(ResourceCacheManagerTest, cancelResourceCache_normalCase)
130 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
131 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
132 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
133 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
136 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
137 long reportTime = 20l;
139 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
141 cacheInstance->cancelResourceCache(id);
144 TEST_F(ResourceCacheManagerTest, updateResourceCachePrimitiveResource_resourceIsNULL)
149 ASSERT_THROW(cacheInstance->updateResourceCache(pResource),
150 ResourceCacheManager::InvalidParameterException);
153 TEST_F(ResourceCacheManagerTest, updateResourceCachePrimitiveResource_cacheIsNULL)
156 ASSERT_THROW(cacheInstance->updateResourceCache(pResource),
157 ResourceCacheManager::InvalidParameterException);
160 TEST_F(ResourceCacheManagerTest, updateResourceCachePrimitiveResource_normalCase)
163 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
164 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
165 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
166 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
167 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
168 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
171 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
172 long reportTime = 20l;
174 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
176 cacheInstance->updateResourceCache(pResource);
178 cacheInstance->cancelResourceCache(id);
181 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_cacheIDIsZero)
184 ASSERT_THROW(cacheInstance->updateResourceCache(0),
185 ResourceCacheManager::InvalidParameterException);
188 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_cacheIsNULL)
191 ASSERT_THROW(cacheInstance->updateResourceCache(id),
192 ResourceCacheManager::InvalidParameterException);
195 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_normalCase)
198 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
199 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
200 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
201 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
202 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
203 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
206 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
207 long reportTime = 20l;
209 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
211 cacheInstance->updateResourceCache(id);
213 cacheInstance->cancelResourceCache(id);
216 TEST_F(ResourceCacheManagerTest, getCachedDataPrimitiveResource_resourceIsNULL)
221 ASSERT_THROW(cacheInstance->getCachedData(pResource),
222 ResourceCacheManager::InvalidParameterException);
225 TEST_F(ResourceCacheManagerTest, getCachedDataPrimitiveResource_handlerIsNULL)
228 ASSERT_THROW(cacheInstance->getCachedData(pResource),
229 ResourceCacheManager::InvalidParameterException);
232 TEST_F(ResourceCacheManagerTest, getCachedDataCachID_resourceIsNULL)
235 ASSERT_THROW(cacheInstance->getCachedData(0), ResourceCacheManager::InvalidParameterException);
238 TEST_F(ResourceCacheManagerTest, getCachedDataCachID_handlerIsNULL)
241 ASSERT_THROW(cacheInstance->getCachedData(id), ResourceCacheManager::InvalidParameterException);
244 TEST_F(ResourceCacheManagerTest, getResourceCacheStatePrimitiveResource_resourceIsNULL)
249 ASSERT_THROW(cacheInstance->getResourceCacheState(pResource),
250 ResourceCacheManager::InvalidParameterException);
253 TEST_F(ResourceCacheManagerTest, getResourceCacheStatePrimitiveResource_handlerIsNULL)
256 ASSERT_EQ(cacheInstance->getResourceCacheState(pResource), CACHE_STATE::NONE);
259 TEST_F(ResourceCacheManagerTest, getResourceCacheStatePrimitiveResource_normalCase)
262 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
263 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
264 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
265 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
266 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
267 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
270 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
271 long reportTime = 20l;
273 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
274 CACHE_STATE state = cacheInstance->getResourceCacheState(pResource);
276 cacheInstance->cancelResourceCache(id);
278 ASSERT_EQ(state, CACHE_STATE::READY_YET);
281 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_cacheIDIsZero)
284 ASSERT_THROW(cacheInstance->getResourceCacheState(0),
285 ResourceCacheManager::InvalidParameterException);
288 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_handlerIsNULL)
292 ASSERT_EQ(cacheInstance->getResourceCacheState(id), CACHE_STATE::NONE);
295 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_normalCase)
298 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
299 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
300 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
301 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
302 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
303 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
306 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
307 long reportTime = 20l;
309 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
310 CACHE_STATE state = cacheInstance->getResourceCacheState(id);
312 cacheInstance->cancelResourceCache(id);
314 ASSERT_EQ(state, CACHE_STATE::READY_YET);