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 CACHE_METHOD cm = CACHE_METHOD::ITERATED_GET;
68 long reportTime = 20l;
70 ASSERT_THROW(cacheInstance->requestResourceCache(NULL, func, cm, rf, reportTime),
71 RCSInvalidParameterException);
74 TEST_F(ResourceCacheManagerTest, requestResourceCache_cacheCBIsNULL)
78 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
79 CACHE_METHOD cm = CACHE_METHOD::ITERATED_GET;
80 long reportTime = 20l;
82 ASSERT_THROW(cacheInstance->requestResourceCache(pResource, func, cm, rf, reportTime),
83 RCSInvalidParameterException);
86 TEST_F(ResourceCacheManagerTest, requestResourceCache_reportTimeIsNULL)
89 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
90 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
91 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
92 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
95 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
96 CACHE_METHOD cm = CACHE_METHOD::ITERATED_GET;
98 id = cacheInstance->requestResourceCache(pResource, func, cm, rf);
99 cacheInstance->cancelResourceCache(id);
105 TEST_F(ResourceCacheManagerTest, requestResourceCache_normalCase)
108 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
109 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
110 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
111 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
114 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
115 CACHE_METHOD cm = CACHE_METHOD::ITERATED_GET;
116 long reportTime = 20l;
118 id = cacheInstance->requestResourceCache(pResource, func, cm, rf, reportTime);
119 cacheInstance->cancelResourceCache(id);
124 TEST_F(ResourceCacheManagerTest, cancelResourceCache_cacheIDIsZero)
127 ASSERT_THROW(cacheInstance->cancelResourceCache(0),
128 RCSInvalidParameterException);
131 TEST_F(ResourceCacheManagerTest, cancelResourceCache_normalCase)
134 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
135 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
136 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
137 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
140 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
141 CACHE_METHOD cm = CACHE_METHOD::ITERATED_GET;
142 long reportTime = 20l;
144 id = cacheInstance->requestResourceCache(pResource, func, cm, rf, reportTime);
146 cacheInstance->cancelResourceCache(id);
149 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_cacheIDIsZero)
152 ASSERT_THROW(cacheInstance->updateResourceCache(0),
153 RCSInvalidParameterException);
156 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_cacheIsNULL)
159 ASSERT_THROW(cacheInstance->updateResourceCache(id),
160 RCSInvalidParameterException);
163 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_normalCase)
166 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
167 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
168 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
169 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
170 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
171 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
174 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
175 CACHE_METHOD cm = CACHE_METHOD::ITERATED_GET;
176 long reportTime = 20l;
178 id = cacheInstance->requestResourceCache(pResource, func, cm, rf, reportTime);
180 cacheInstance->updateResourceCache(id);
182 cacheInstance->cancelResourceCache(id);
185 TEST_F(ResourceCacheManagerTest, getCachedDataCachID_resourceIsNULL)
188 ASSERT_THROW(cacheInstance->getCachedData(0), RCSInvalidParameterException);
191 TEST_F(ResourceCacheManagerTest, getCachedDataCachID_handlerIsNULL)
194 ASSERT_THROW(cacheInstance->getCachedData(id), RCSInvalidParameterException);
197 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_cacheIDIsZero)
200 ASSERT_THROW(cacheInstance->getResourceCacheState(0),
201 RCSInvalidParameterException);
204 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_handlerIsNULL)
208 ASSERT_EQ(cacheInstance->getResourceCacheState(id), CACHE_STATE::NONE);
211 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_normalCase)
214 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
215 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
216 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
217 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
218 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
219 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
222 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
223 CACHE_METHOD cm = CACHE_METHOD::ITERATED_GET;
224 long reportTime = 20l;
226 id = cacheInstance->requestResourceCache(pResource, func, cm, rf, reportTime);
227 CACHE_STATE state = cacheInstance->getResourceCacheState(id);
229 cacheInstance->cancelResourceCache(id);
231 ASSERT_EQ(state, CACHE_STATE::READY_YET);