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 >,
50 const RCSResourceAttributes &, int) -> OCStackResult
56 virtual void TearDown()
59 TestWithMock::TearDown();
63 TEST_F(ResourceCacheManagerTest, requestResourceCache_resourceIsNULL)
67 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
68 CACHE_METHOD cm = CACHE_METHOD::ITERATED_GET;
69 long reportTime = 20l;
71 ASSERT_THROW(cacheInstance->requestResourceCache(NULL, func, cm, rf, reportTime),
72 RCSInvalidParameterException);
75 TEST_F(ResourceCacheManagerTest, requestResourceCache_cacheCBIsNULL)
79 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
80 CACHE_METHOD cm = CACHE_METHOD::ITERATED_GET;
81 long reportTime = 20l;
83 ASSERT_THROW(cacheInstance->requestResourceCache(pResource, func, cm, rf, reportTime),
84 RCSInvalidParameterException);
87 TEST_F(ResourceCacheManagerTest, requestResourceCache_reportTimeIsNULL)
90 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
91 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
92 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
93 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
96 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
97 CACHE_METHOD cm = CACHE_METHOD::ITERATED_GET;
99 id = cacheInstance->requestResourceCache(pResource, func, cm, rf);
100 cacheInstance->cancelResourceCache(id);
106 TEST_F(ResourceCacheManagerTest, requestResourceCache_normalCase)
109 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
110 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
111 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
112 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
115 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
116 CACHE_METHOD cm = CACHE_METHOD::ITERATED_GET;
117 long reportTime = 20l;
119 id = cacheInstance->requestResourceCache(pResource, func, cm, rf, reportTime);
120 cacheInstance->cancelResourceCache(id);
125 TEST_F(ResourceCacheManagerTest, cancelResourceCache_cacheIDIsZero)
128 ASSERT_THROW(cacheInstance->cancelResourceCache(0),
129 RCSInvalidParameterException);
132 TEST_F(ResourceCacheManagerTest, cancelResourceCache_normalCase)
135 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
136 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
137 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
138 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
141 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
142 CACHE_METHOD cm = CACHE_METHOD::ITERATED_GET;
143 long reportTime = 20l;
145 id = cacheInstance->requestResourceCache(pResource, func, cm, rf, reportTime);
147 cacheInstance->cancelResourceCache(id);
150 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_cacheIDIsZero)
153 ASSERT_THROW(cacheInstance->updateResourceCache(0),
154 RCSInvalidParameterException);
157 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_cacheIsNULL)
160 ASSERT_THROW(cacheInstance->updateResourceCache(id),
161 RCSInvalidParameterException);
164 TEST_F(ResourceCacheManagerTest, updateResourceCacheCacheID_normalCase)
167 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
168 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
169 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
170 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
171 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
172 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
175 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
176 CACHE_METHOD cm = CACHE_METHOD::ITERATED_GET;
177 long reportTime = 20l;
179 id = cacheInstance->requestResourceCache(pResource, func, cm, rf, reportTime);
181 cacheInstance->updateResourceCache(id);
183 cacheInstance->cancelResourceCache(id);
186 TEST_F(ResourceCacheManagerTest, getCachedDataCachID_resourceIsNULL)
189 ASSERT_THROW(cacheInstance->getCachedData(0), RCSInvalidParameterException);
192 TEST_F(ResourceCacheManagerTest, getCachedDataCachID_handlerIsNULL)
195 ASSERT_THROW(cacheInstance->getCachedData(id), RCSInvalidParameterException);
198 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_cacheIDIsZero)
201 ASSERT_THROW(cacheInstance->getResourceCacheState(0),
202 RCSInvalidParameterException);
205 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_handlerIsNULL)
209 ASSERT_EQ(cacheInstance->getResourceCacheState(id), CACHE_STATE::NONE);
212 TEST_F(ResourceCacheManagerTest, getResourceCacheStateCacheID_normalCase)
215 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
216 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
217 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve);
218 mocks.OnCall(pResource.get(), PrimitiveResource::getUri).Return("testUri");
219 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("testHost");
220 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
223 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
224 CACHE_METHOD cm = CACHE_METHOD::ITERATED_GET;
225 long reportTime = 20l;
227 id = cacheInstance->requestResourceCache(pResource, func, cm, rf, reportTime);
228 CACHE_STATE state = cacheInstance->getResourceCacheState(id);
230 cacheInstance->cancelResourceCache(id);
232 ASSERT_EQ(state, CACHE_STATE::READY_YET);