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 >(), [](PrimitiveResource *) {});
55 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(false);
56 cacheHandler.reset(new DataCache());
57 cb = ([](std::shared_ptr<PrimitiveResource >, const RCSResourceAttributes &)->OCStackResult {return OC_STACK_OK;});
60 virtual void TearDown()
64 TestWithMock::TearDown();
68 TEST_F(DataCacheTest, initializeDataCache_normalCase)
71 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
72 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
73 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
74 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
76 cacheHandler->initializeDataCache(pResource);
79 TEST_F(DataCacheTest, initializeDataCache_normalCaseObservable)
82 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet).Do(
83 [](GetCallback callback)
85 OIC::Service::HeaderOptions hos;
87 OIC::Service::RCSResourceAttributes attr;
88 OIC::Service::ResponseStatement rep(attr);
89 callback(hos, rep, OC_STACK_OK);
93 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
94 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve).Do(
95 [](ObserveCallback callback)
97 OIC::Service::HeaderOptions hos;
98 OIC::Service::RCSResourceAttributes attr;
99 OIC::Service::ResponseStatement rep(attr);
101 callback(hos, rep, OC_STACK_OK, seq);
105 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
107 cacheHandler->initializeDataCache(pResource);
110 TEST_F(DataCacheTest, initializeDataCache_normalCaseNonObservable)
113 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet).Do(
114 [](GetCallback callback)
116 OIC::Service::HeaderOptions hos;
118 OIC::Service::RCSResourceAttributes attr;
119 OIC::Service::ResponseStatement rep(attr);
120 callback(hos, rep, OC_STACK_OK);
124 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(false);
125 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
127 cacheHandler->initializeDataCache(pResource);
132 TEST_F(DataCacheTest, initializeDataCache_normalCaseTimeOut)
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);
140 cacheHandler->initializeDataCache(pResource);
145 TEST_F(DataCacheTest, addSubscriber_normalCase)
148 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
149 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
150 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
151 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
153 cacheHandler->initializeDataCache(pResource);
154 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
155 long reportTime = 1l;
157 ASSERT_NE(cacheHandler->addSubscriber(cb, rf, reportTime), 0);
160 TEST_F(DataCacheTest, deleteSubsciber_normalCase)
163 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
164 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
165 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
166 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
168 cacheHandler->initializeDataCache(pResource);
170 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
171 long reportTime = 1l;
173 id = cacheHandler->addSubscriber(cb, rf, reportTime);
175 ASSERT_NE(cacheHandler->deleteSubscriber(id), 0);
178 TEST_F(DataCacheTest, getCacheState_normalCase)
181 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
182 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
183 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
184 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
186 cacheHandler->initializeDataCache(pResource);
188 ASSERT_EQ(cacheHandler->getCacheState(), CACHE_STATE::READY_YET);
191 TEST_F(DataCacheTest, getCachedData_normalCase)
194 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
195 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
196 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
197 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
199 cacheHandler->initializeDataCache(pResource);
201 ASSERT_EQ(cacheHandler->getCachedData(), RCSResourceAttributes());
204 TEST_F(DataCacheTest, getPrimitiveResource_normalCase)
207 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
208 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
209 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
210 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
212 cacheHandler->initializeDataCache(pResource);
214 ASSERT_EQ(cacheHandler->getPrimitiveResource(), pResource);
217 TEST_F(DataCacheTest, requestGet_normalCase)
220 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
221 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
222 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
223 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
224 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
226 cacheHandler->initializeDataCache(pResource);
228 cacheHandler->requestGet();
231 TEST_F(DataCacheTest, isEmptySubscriber_normalCase)
234 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
235 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
236 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
237 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
239 cacheHandler->initializeDataCache(pResource);
241 ASSERT_EQ(cacheHandler->isEmptySubscriber(), true);
244 TEST_F(DataCacheTest, requestGet_normalCasetest)
247 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
248 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
249 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
250 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet).Do(
251 [](GetCallback callback)
253 OIC::Service::HeaderOptions hos;
254 OIC::Service::RCSResourceAttributes attr;
255 OIC::Service::ResponseStatement rep(attr);
256 callback(hos, rep, OC_STACK_OK);
259 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
261 cacheHandler->initializeDataCache(pResource);
263 cacheHandler->requestGet();