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 *) {});
54 cacheHandler.reset(new DataCache());
55 cb = ([](std::shared_ptr<PrimitiveResource >, const RCSResourceAttributes &)->OCStackResult {return OC_STACK_OK;});
58 virtual void TearDown()
62 TestWithMock::TearDown();
66 TEST_F(DataCacheTest, initializeDataCache_normalCase)
69 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
70 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
71 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
72 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
74 cacheHandler->initializeDataCache(pResource);
77 TEST_F(DataCacheTest, initializeDataCache_normalCaseObservable)
80 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet).Do(
81 [](GetCallback callback)
83 OIC::Service::HeaderOptions hos;
85 OIC::Service::RCSResourceAttributes attr;
86 OIC::Service::ResponseStatement rep(attr);
87 callback(hos, rep, OC_STACK_OK);
91 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
92 mocks.OnCall(pResource.get(), PrimitiveResource::requestObserve).Do(
93 [](ObserveCallback callback)
95 OIC::Service::HeaderOptions hos;
96 OIC::Service::RCSResourceAttributes attr;
97 OIC::Service::ResponseStatement rep(attr);
99 callback(hos, rep, OC_STACK_OK, seq);
103 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
105 cacheHandler->initializeDataCache(pResource);
108 TEST_F(DataCacheTest, initializeDataCache_normalCaseNonObservable)
111 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet).Do(
112 [](GetCallback callback)
114 OIC::Service::HeaderOptions hos;
116 OIC::Service::RCSResourceAttributes attr;
117 OIC::Service::ResponseStatement rep(attr);
118 callback(hos, rep, OC_STACK_OK);
122 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(false);
123 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
125 cacheHandler->initializeDataCache(pResource);
130 TEST_F(DataCacheTest, initializeDataCache_normalCaseTimeOut)
133 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
134 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
135 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
136 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
138 cacheHandler->initializeDataCache(pResource);
143 TEST_F(DataCacheTest, addSubscriber_normalCase)
146 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
147 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
148 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
149 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
151 cacheHandler->initializeDataCache(pResource);
152 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
153 long reportTime = 1l;
155 ASSERT_NE(cacheHandler->addSubscriber(cb, rf, reportTime), 0);
158 TEST_F(DataCacheTest, deleteSubsciber_normalCase)
161 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
162 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
163 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
164 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
166 cacheHandler->initializeDataCache(pResource);
168 REPORT_FREQUENCY rf = REPORT_FREQUENCY::UPTODATE;
169 long reportTime = 1l;
171 id = cacheHandler->addSubscriber(cb, rf, reportTime);
173 ASSERT_NE(cacheHandler->deleteSubscriber(id), 0);
176 TEST_F(DataCacheTest, getCacheState_normalCase)
179 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
180 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
181 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
182 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
184 cacheHandler->initializeDataCache(pResource);
186 ASSERT_EQ(cacheHandler->getCacheState(), CACHE_STATE::READY_YET);
189 TEST_F(DataCacheTest, getCachedData_normalCase)
192 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
193 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
194 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
195 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
197 cacheHandler->initializeDataCache(pResource);
199 ASSERT_EQ(cacheHandler->getCachedData(), RCSResourceAttributes());
202 TEST_F(DataCacheTest, getPrimitiveResource_normalCase)
205 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
206 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
207 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
208 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
210 cacheHandler->initializeDataCache(pResource);
212 ASSERT_EQ(cacheHandler->getPrimitiveResource(), pResource);
215 TEST_F(DataCacheTest, requestGet_normalCase)
218 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
219 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
220 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
221 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
222 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
224 cacheHandler->initializeDataCache(pResource);
226 cacheHandler->requestGet();
229 TEST_F(DataCacheTest, isEmptySubscriber_normalCase)
232 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
233 mocks.ExpectCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
234 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
235 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
237 cacheHandler->initializeDataCache(pResource);
239 ASSERT_EQ(cacheHandler->isEmptySubscriber(), true);
242 TEST_F(DataCacheTest, requestGet_normalCasetest)
245 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet);
246 mocks.OnCall(pResource.get(), PrimitiveResource::isObservable).Return(true);
247 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestObserve);
248 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet).Do(
249 [](GetCallback callback)
251 OIC::Service::HeaderOptions hos;
252 OIC::Service::RCSResourceAttributes attr;
253 OIC::Service::ResponseStatement rep(attr);
254 callback(hos, rep, OC_STACK_OK);
257 mocks.OnCall(pResource.get(), PrimitiveResource::cancelObserve);
259 cacheHandler->initializeDataCache(pResource);
261 cacheHandler->requestGet();