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 "DataCache.h"
27 #include "RCSResourceAttributes.h"
28 #include "ResponseStatement.h"
29 #include "UnitTestHelper.h"
31 using namespace OIC::Service;
33 class DataCacheTest : public TestWithMock
36 typedef std::function <
37 void(const OIC::Service::HeaderOptions &, const OIC::Service::ResponseStatement &,
40 typedef std::function <
41 void(const OIC::Service::HeaderOptions &, const OIC::Service::ResponseStatement &, int,
42 int) > ObserveCallback;
44 std::shared_ptr<DataCache> cacheHandler;
45 PrimitiveResource::Ptr pResource;
52 TestWithMock::SetUp();
53 pResource = PrimitiveResource::Ptr(mocks.Mock< PrimitiveResource >(),
54 [](PrimitiveResource *)
59 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(false);
60 cacheHandler.reset(new DataCache());
61 cb = ([](std::shared_ptr<PrimitiveResource >,
62 const RCSResourceAttributes &, int) -> OCStackResult
68 virtual void TearDown()
72 TestWithMock::TearDown();
76 TEST_F(DataCacheTest, initializeDataCache_normalCase)
79 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
80 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
81 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
82 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
84 cacheHandler->initializeDataCache(pResource);
87 TEST_F(DataCacheTest, initializeDataCache_normalCaseObservable)
90 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet).Do(
91 [](GetCallback callback)
93 OIC::Service::HeaderOptions hos;
95 OIC::Service::RCSResourceAttributes attr;
96 OIC::Service::ResponseStatement rep(attr);
97 callback(hos, rep, OC_STACK_OK);
101 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
102 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve).Do(
103 [](ObserveCallback callback)
105 OIC::Service::HeaderOptions hos;
106 OIC::Service::RCSResourceAttributes attr;
107 OIC::Service::ResponseStatement rep(attr);
109 callback(hos, rep, OC_STACK_OK, seq);
113 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
115 cacheHandler->initializeDataCache(pResource);
118 TEST_F(DataCacheTest, initializeDataCache_normalCaseNonObservable)
121 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet).Do(
122 [](GetCallback callback)
124 OIC::Service::HeaderOptions hos;
126 OIC::Service::RCSResourceAttributes attr;
127 OIC::Service::ResponseStatement rep(attr);
128 callback(hos, rep, OC_STACK_OK);
132 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(false);
133 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
135 cacheHandler->initializeDataCache(pResource);
140 TEST_F(DataCacheTest, initializeDataCache_normalCaseTimeOut)
143 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
144 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
145 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
146 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
148 cacheHandler->initializeDataCache(pResource);
153 TEST_F(DataCacheTest, addSubscriber_normalCase)
156 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
157 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
158 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
159 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
161 cacheHandler->initializeDataCache(pResource);
162 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
163 long reportTime = 1l;
165 ASSERT_NE(cacheHandler->addSubscriber(cb, rf, reportTime), 0);
168 TEST_F(DataCacheTest, deleteSubsciber_normalCase)
171 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
172 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
173 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
174 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
176 cacheHandler->initializeDataCache(pResource);
178 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
179 long reportTime = 1l;
181 id = cacheHandler->addSubscriber(cb, rf, reportTime);
183 ASSERT_NE(cacheHandler->deleteSubscriber(id), 0);
186 TEST_F(DataCacheTest, getCacheState_normalCase)
189 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
190 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
191 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
192 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
194 cacheHandler->initializeDataCache(pResource);
196 ASSERT_EQ(cacheHandler->getCacheState(), CACHE_STATE::READY_YET);
199 TEST_F(DataCacheTest, getCachedData_normalCase)
202 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
203 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
204 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
205 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
207 cacheHandler->initializeDataCache(pResource);
209 ASSERT_EQ(cacheHandler->getCachedData(), RCSResourceAttributes());
212 TEST_F(DataCacheTest, getPrimitiveResource_normalCase)
215 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
216 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
217 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
218 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
220 cacheHandler->initializeDataCache(pResource);
222 ASSERT_EQ(cacheHandler->getPrimitiveResource(), pResource);
225 TEST_F(DataCacheTest, requestGet_normalCase)
228 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
229 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
230 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
231 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
232 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
234 cacheHandler->initializeDataCache(pResource);
236 cacheHandler->requestGet();
239 TEST_F(DataCacheTest, isEmptySubscriber_normalCase)
242 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
243 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
244 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
245 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
247 cacheHandler->initializeDataCache(pResource);
249 ASSERT_EQ(cacheHandler->isEmptySubscriber(), true);
252 TEST_F(DataCacheTest, requestGet_normalCasetest)
255 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
256 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
257 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
258 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet).Do(
259 [](GetCallback callback)
261 OIC::Service::HeaderOptions hos;
262 OIC::Service::RCSResourceAttributes attr;
263 OIC::Service::ResponseStatement rep(attr);
264 callback(hos, rep, OC_STACK_OK);
267 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
269 cacheHandler->initializeDataCache(pResource);
271 cacheHandler->requestGet();