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;
39 ResourceCacheManagerTest()
44 virtual ~ResourceCacheManagerTest() noexcept(true)
51 TestWithMock::SetUp();
52 cacheInstance = ResourceCacheManager::getInstance();
53 pResource = PrimitiveResource::Ptr(mocks.Mock< PrimitiveResource >(), [](PrimitiveResource *) {});
54 cb = ([](std::shared_ptr<PrimitiveResource >, const RCSResourceAttributes &)->OCStackResult {return OC_STACK_OK;});
57 virtual void TearDown()
59 TestWithMock::TearDown();
63 TEST_F(ResourceCacheManagerTest, requestResourceCache_resourceIsNULL)
67 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
68 long reportTime = 20l;
70 ASSERT_THROW(cacheInstance->requestResourceCache(NULL, func, rf, reportTime),
71 ResourceCacheManager::InvalidParameterException);
74 TEST_F(ResourceCacheManagerTest, requestResourceCache_cacheCBIsNULL)
78 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
79 long reportTime = 20l;
81 ASSERT_THROW(cacheInstance->requestResourceCache(pResource, func, rf, reportTime),
82 ResourceCacheManager::InvalidParameterException);
85 TEST_F(ResourceCacheManagerTest, requestResourceCache_reportTimeIsNULL)
88 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
89 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
90 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
91 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
94 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
96 id = cacheInstance->requestResourceCache(pResource, func, rf);
97 cacheInstance->cancelResourceCache(id);
103 TEST_F(ResourceCacheManagerTest, requestResourceCache_normalCase)
106 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
107 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
108 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
109 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
112 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
113 long reportTime = 20l;
115 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
116 cacheInstance->cancelResourceCache(id);
121 TEST_F(ResourceCacheManagerTest, cancelResourceCache_cacheIDIsZero)
124 ASSERT_THROW(cacheInstance->cancelResourceCache(0),
125 ResourceCacheManager::InvalidParameterException);
128 TEST_F(ResourceCacheManagerTest, cancelResourceCache_normalCase)
131 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
132 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
133 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
134 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
137 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
138 long reportTime = 20l;
140 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
142 cacheInstance->cancelResourceCache(id);
145 TEST_F(ResourceCacheManagerTest, updateResourceCachePrimitiveResource_resourceIsNULL)
150 ASSERT_THROW(cacheInstance->updateResourceCache(pResource),
151 ResourceCacheManager::InvalidParameterException);
154 TEST_F(ResourceCacheManagerTest, updateResourceCachePrimitiveResource_cacheIsNULL)
157 ASSERT_THROW(cacheInstance->updateResourceCache(pResource),
158 ResourceCacheManager::InvalidParameterException);
161 TEST_F(ResourceCacheManagerTest, updateResourceCachePrimitiveResource_normalCase)
164 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
165 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
166 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
167 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
168 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
169 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
172 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
173 long reportTime = 20l;
175 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
177 cacheInstance->updateResourceCache(pResource);
179 cacheInstance->cancelResourceCache(id);
182 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_cacheIDIsZero)
185 ASSERT_THROW(cacheInstance->updateResourceCache(0),
186 ResourceCacheManager::InvalidParameterException);
189 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_cacheIsNULL)
192 ASSERT_THROW(cacheInstance->updateResourceCache(id),
193 ResourceCacheManager::InvalidParameterException);
196 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_normalCase)
199 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
200 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
201 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
202 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
203 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
204 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
207 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
208 long reportTime = 20l;
210 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
212 cacheInstance->updateResourceCache(id);
214 cacheInstance->cancelResourceCache(id);
217 TEST_F(ResourceCacheManagerTest, getCachedDataPrimitiveResource_resourceIsNULL)
222 ASSERT_THROW(cacheInstance->getCachedData(pResource),
223 ResourceCacheManager::InvalidParameterException);
226 TEST_F(ResourceCacheManagerTest, getCachedDataPrimitiveResource_handlerIsNULL)
229 ASSERT_THROW(cacheInstance->getCachedData(pResource),
230 ResourceCacheManager::InvalidParameterException);
233 TEST_F(ResourceCacheManagerTest, getCachedDataCachID_resourceIsNULL)
236 ASSERT_THROW(cacheInstance->getCachedData(0), ResourceCacheManager::InvalidParameterException);
239 TEST_F(ResourceCacheManagerTest, getCachedDataCachID_handlerIsNULL)
242 ASSERT_THROW(cacheInstance->getCachedData(id), ResourceCacheManager::InvalidParameterException);
245 TEST_F(ResourceCacheManagerTest, getResourceCacheStatePrimitiveResource_resourceIsNULL)
250 ASSERT_THROW(cacheInstance->getResourceCacheState(pResource),
251 ResourceCacheManager::InvalidParameterException);
254 TEST_F(ResourceCacheManagerTest, getResourceCacheStatePrimitiveResource_handlerIsNULL)
257 ASSERT_EQ(cacheInstance->getResourceCacheState(pResource), CACHE_STATE::NONE);
260 TEST_F(ResourceCacheManagerTest, getResourceCacheStatePrimitiveResource_normalCase)
263 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
264 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
265 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
266 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
267 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
268 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
271 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
272 long reportTime = 20l;
274 id = cacheInstance->requestResourceCache(pResource, func, rf, reportTime);
275 CACHE_STATE state = cacheInstance->getResourceCacheState(pResource);
277 cacheInstance->cancelResourceCache(id);
279 ASSERT_EQ(state, CACHE_STATE::READY_YET);
282 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_cacheIDIsZero)
285 ASSERT_THROW(cacheInstance->getResourceCacheState(0),
286 ResourceCacheManager::InvalidParameterException);
289 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);