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 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
25 #include "gtest/gtest.h"
26 #include "HippoMocks/hippomocks.h"
28 #include "OCResource.h"
29 #include "OCPlatform.h"
31 #include "PrimitiveResource.h"
32 #include "BrokerTypes.h"
33 #include "ResponseStatement.h"
34 #include "RCSResourceAttributes.h"
35 #include "ResourcePresence.h"
36 #include "UnitTestHelper.h"
38 using namespace testing;
39 using namespace OIC::Service;
42 typedef OCStackResult (*subscribePresenceSig1)(OC::OCPlatform::OCPresenceHandle&,
43 const std::string&, OCConnectivityType, SubscribeCallback);
45 class ResourcePresenceTest : public TestWithMock
49 typedef std::function<void(const HeaderOptions&, const ResponseStatement&, int)> GetCallback;
51 std::shared_ptr<ResourcePresence> instance;
52 PrimitiveResource::Ptr pResource;
60 TestWithMock::SetUp();
61 instance.reset(new ResourcePresence());
62 pResource = PrimitiveResource::Ptr(mocks.Mock< PrimitiveResource >(), [](PrimitiveResource*){});
63 cb = ([](BROKER_STATE)->OCStackResult{return OC_STACK_OK;});
69 TestWithMock::TearDown();
78 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet).Do([](GetCallback){});
79 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return(std::string());
80 mocks.OnCallFuncOverload(static_cast< subscribePresenceSig1 >(OC::OCPlatform::subscribePresence)).Return(OC_STACK_OK);
84 TEST_F(ResourcePresenceTest,timeoutCB_TimeOverWhenIsRequestGet)
87 instance->initializeResourcePresence(pResource);
88 std::cout<<"wait while done timeout requestGet\n";
90 state = instance->getResourceState();
91 sleep((BROKER_DEVICE_PRESENCE_TIMEROUT/1000)+1);
92 ASSERT_EQ(state,instance->getResourceState());
95 TEST_F(ResourcePresenceTest,initializeResourcePresence_NormalhandlingIfNormalResource)
98 instance->initializeResourcePresence(pResource);
99 ASSERT_NE(nullptr,instance->getPrimitiveResource());
102 TEST_F(ResourcePresenceTest,addBrokerRequester_ReturnNormalValueIfNormalParams)
105 instance->initializeResourcePresence(pResource);
107 instance->addBrokerRequester(id,cb);
108 EXPECT_FALSE(instance->isEmptyRequester());
112 TEST_F(ResourcePresenceTest,removeBrokerRequester_NormalHandlingIfNormalId)
117 instance->initializeResourcePresence(pResource);
119 instance->addBrokerRequester(id,cb);
121 instance->addBrokerRequester(id,cb);
123 instance->removeBrokerRequester(id);
124 ASSERT_EQ(1,instance->requesterListSize());
128 TEST_F(ResourcePresenceTest,removeAllBrokerRequester_NormalHandling)
133 instance->initializeResourcePresence(pResource);
135 instance->addBrokerRequester(id,cb);
137 instance->addBrokerRequester(id,cb);
139 instance->removeAllBrokerRequester();
140 ASSERT_TRUE(instance->isEmptyRequester());
144 TEST_F(ResourcePresenceTest,removeAllBrokerRequester_ErrorHandlingIfListNull)
148 instance->initializeResourcePresence(pResource);
149 instance->removeAllBrokerRequester();
153 TEST_F(ResourcePresenceTest,requestResourceState_NormalHandling)
158 instance->initializeResourcePresence(pResource);
160 ASSERT_NO_THROW(instance->requestResourceState());
164 TEST_F(ResourcePresenceTest,changePresenceMode_NormalHandlingIfNewModeDifferent)
169 instance->initializeResourcePresence(pResource);
171 instance->changePresenceMode(BROKER_MODE::DEVICE_PRESENCE_MODE);
175 TEST_F(ResourcePresenceTest,getResourceState_NormalHandling)
178 instance->initializeResourcePresence(pResource);
179 ASSERT_EQ(BROKER_STATE::REQUESTED,instance->getResourceState());
183 TEST_F(ResourcePresenceTest,changePresenceMode_NormalHandlingIfNewModeSame)
188 instance->initializeResourcePresence(pResource);
190 instance->changePresenceMode(BROKER_MODE::NON_PRESENCE_MODE);
194 TEST_F(ResourcePresenceTest,getPrimitiveResource_NormalHandling)
199 instance->initializeResourcePresence(pResource);
200 ASSERT_NE(nullptr,instance->getPrimitiveResource());
204 TEST_F(ResourcePresenceTest,isEmptyRequester_NormalHandling)
209 instance->initializeResourcePresence(pResource);
211 instance->addBrokerRequester(id,cb);
212 instance->removeAllBrokerRequester();
213 ASSERT_TRUE(instance->isEmptyRequester());
217 TEST_F(ResourcePresenceTest,getCB_NormalHandlingIfMessageOC_STACK_OK)
220 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet).Do(
221 [](GetCallback callback){
223 OIC::Service::HeaderOptions op;
224 RCSResourceAttributes attr;
225 OIC::Service::ResponseStatement res(attr);
227 callback(op,res,OC_STACK_OK);
231 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet).Do(
233 std::cout <<"End call requestGetFunc()\n";
235 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("address1");
237 mocks.OnCallFuncOverload(static_cast< subscribePresenceSig1 >(OC::OCPlatform::subscribePresence)).Do(
238 [](OC::OCPlatform::OCPresenceHandle&,
239 const std::string&, OCConnectivityType, SubscribeCallback callback)->OCStackResult{
241 callback(OC_STACK_OK,0,std::string());
244 }).Return(OC_STACK_OK);
246 instance->initializeResourcePresence(pResource);