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()
49 TestWithMock::TearDown();
53 TEST_F(ResourceCacheManagerTest, requestResourceCache_resourceIsNULL)
57 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
58 long reportTime = 20l;
60 ASSERT_THROW(cacheInstance->requestResourceCache(NULL, func, rf, reportTime),
61 ResourceCacheManager::InvalidParameterException);
64 TEST_F(ResourceCacheManagerTest, requestResourceCache_cacheCBIsNULL)
68 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
69 long reportTime = 20l;
71 ASSERT_THROW(cacheInstance->requestResourceCache(pResource, func, rf, reportTime),
72 ResourceCacheManager::InvalidParameterException);
75 TEST_F(ResourceCacheManagerTest, requestResourceCache_reportTimeIsNULL)
78 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
79 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
80 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
81 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
84 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
86 id = cacheInstance->requestResourceCache(pResource, func, rf);
87 cacheInstance->cancelResourceCache(id);
93 TEST_F(ResourceCacheManagerTest, requestResourceCache_normalCase)
96 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
97 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
98 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
99 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
102 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
103 long reportTime = 20l;
105 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
106 cacheInstance->cancelResourceCache(id);
111 TEST_F(ResourceCacheManagerTest, cancelResourceCache_cacheIDIsZero)
114 ASSERT_THROW(cacheInstance->cancelResourceCache(0),
115 ResourceCacheManager::InvalidParameterException);
118 TEST_F(ResourceCacheManagerTest, cancelResourceCache_normalCase)
121 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
122 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
123 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
124 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
127 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
128 long reportTime = 20l;
130 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
132 cacheInstance->cancelResourceCache(id);
135 TEST_F(ResourceCacheManagerTest, updateResourceCachePrimitiveResource_resourceIsNULL)
140 ASSERT_THROW(cacheInstance->updateResourceCache(pResource),
141 ResourceCacheManager::InvalidParameterException);
144 TEST_F(ResourceCacheManagerTest, updateResourceCachePrimitiveResource_cacheIsNULL)
147 ASSERT_THROW(cacheInstance->updateResourceCache(pResource),
148 ResourceCacheManager::InvalidParameterException);
151 TEST_F(ResourceCacheManagerTest, updateResourceCachePrimitiveResource_normalCase)
154 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
155 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
156 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
157 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
158 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
159 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
162 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
163 long reportTime = 20l;
165 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
167 cacheInstance->updateResourceCache(pResource);
169 cacheInstance->cancelResourceCache(id);
172 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_cacheIDIsZero)
175 ASSERT_THROW(cacheInstance->updateResourceCache(0),
176 ResourceCacheManager::InvalidParameterException);
179 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_cacheIsNULL)
182 ASSERT_THROW(cacheInstance->updateResourceCache(id),
183 ResourceCacheManager::InvalidParameterException);
186 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_normalCase)
189 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
190 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
191 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
192 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
193 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
194 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
197 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
198 long reportTime = 20l;
200 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
202 cacheInstance->updateResourceCache(id);
204 cacheInstance->cancelResourceCache(id);
207 TEST_F(ResourceCacheManagerTest, getCachedDataPrimitiveResource_resourceIsNULL)
212 ASSERT_THROW(cacheInstance->getCachedData(pResource),
213 ResourceCacheManager::InvalidParameterException);
216 TEST_F(ResourceCacheManagerTest, getCachedDataPrimitiveResource_handlerIsNULL)
219 ASSERT_THROW(cacheInstance->getCachedData(pResource),
220 ResourceCacheManager::InvalidParameterException);
223 TEST_F(ResourceCacheManagerTest, getCachedDataCachID_resourceIsNULL)
226 ASSERT_THROW(cacheInstance->getCachedData(0), ResourceCacheManager::InvalidParameterException);
229 TEST_F(ResourceCacheManagerTest, getCachedDataCachID_handlerIsNULL)
232 ASSERT_THROW(cacheInstance->getCachedData(id), ResourceCacheManager::InvalidParameterException);
235 TEST_F(ResourceCacheManagerTest, getResourceCacheStatePrimitiveResource_resourceIsNULL)
240 ASSERT_THROW(cacheInstance->getResourceCacheState(pResource),
241 ResourceCacheManager::InvalidParameterException);
244 TEST_F(ResourceCacheManagerTest, getResourceCacheStatePrimitiveResource_handlerIsNULL)
247 ASSERT_EQ(cacheInstance->getResourceCacheState(pResource), CACHE_STATE::NONE);
250 TEST_F(ResourceCacheManagerTest, getResourceCacheStatePrimitiveResource_normalCase)
253 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
254 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
255 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
256 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
257 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
258 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
261 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
262 long reportTime = 20l;
264 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
265 CACHE_STATE state = cacheInstance->getResourceCacheState(pResource);
267 cacheInstance->cancelResourceCache(id);
269 ASSERT_EQ(state, CACHE_STATE::READY_YET);
272 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_cacheIDIsZero)
275 ASSERT_THROW(cacheInstance->getResourceCacheState(0),
276 ResourceCacheManager::InvalidParameterException);
279 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_handlerIsNULL)
282 ASSERT_EQ(cacheInstance->getResourceCacheState(id), CACHE_STATE::NONE);
285 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_normalCase)
288 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
289 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
290 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
291 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
292 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
293 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
296 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
297 long reportTime = 20l;
299 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
300 CACHE_STATE state = cacheInstance->getResourceCacheState(id);
302 cacheInstance->cancelResourceCache(id);
304 ASSERT_EQ(state, CACHE_STATE::READY_YET);