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 >(),
63 [](PrimitiveResource*)
67 cb = ([](BROKER_STATE)->OCStackResult
76 TestWithMock::TearDown();
85 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet).Do(
90 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return(std::string());
91 mocks.OnCallFuncOverload(static_cast< subscribePresenceSig1 >(OC::OCPlatform::subscribePresence)).Return(OC_STACK_OK);
95 TEST_F(ResourcePresenceTest,timeoutCB_TimeOverWhenIsRequestGet)
98 instance->initializeResourcePresence(pResource);
99 std::cout<<"wait while done timeout requestGet\n";
100 BROKER_STATE state = BROKER_STATE::NONE;
101 state = instance->getResourceState();
102 sleep((BROKER_DEVICE_PRESENCE_TIMEROUT/1000)+1);
103 ASSERT_EQ(state,instance->getResourceState());
106 TEST_F(ResourcePresenceTest,initializeResourcePresence_NormalhandlingIfNormalResource)
109 instance->initializeResourcePresence(pResource);
110 ASSERT_NE(nullptr,instance->getPrimitiveResource());
113 TEST_F(ResourcePresenceTest,addBrokerRequester_ReturnNormalValueIfNormalParams)
116 instance->initializeResourcePresence(pResource);
118 instance->addBrokerRequester(id,cb);
119 EXPECT_FALSE(instance->isEmptyRequester());
123 TEST_F(ResourcePresenceTest,removeBrokerRequester_NormalHandlingIfNormalId)
128 instance->initializeResourcePresence(pResource);
130 instance->addBrokerRequester(id,cb);
132 instance->addBrokerRequester(id,cb);
134 instance->removeBrokerRequester(id);
135 ASSERT_EQ(1,instance->requesterListSize());
139 TEST_F(ResourcePresenceTest,removeAllBrokerRequester_NormalHandling)
144 instance->initializeResourcePresence(pResource);
146 instance->addBrokerRequester(id,cb);
148 instance->addBrokerRequester(id,cb);
150 instance->removeAllBrokerRequester();
151 ASSERT_TRUE(instance->isEmptyRequester());
155 TEST_F(ResourcePresenceTest,removeAllBrokerRequester_ErrorHandlingIfListNull)
159 instance->initializeResourcePresence(pResource);
160 instance->removeAllBrokerRequester();
164 TEST_F(ResourcePresenceTest,requestResourceState_NormalHandling)
169 instance->initializeResourcePresence(pResource);
171 ASSERT_NO_THROW(instance->requestResourceState());
175 TEST_F(ResourcePresenceTest,changePresenceMode_NormalHandlingIfNewModeDifferent)
180 instance->initializeResourcePresence(pResource);
182 instance->changePresenceMode(BROKER_MODE::DEVICE_PRESENCE_MODE);
186 TEST_F(ResourcePresenceTest,getResourceState_NormalHandling)
189 instance->initializeResourcePresence(pResource);
190 ASSERT_EQ(BROKER_STATE::REQUESTED,instance->getResourceState());
194 TEST_F(ResourcePresenceTest,changePresenceMode_NormalHandlingIfNewModeSame)
199 instance->initializeResourcePresence(pResource);
201 instance->changePresenceMode(BROKER_MODE::NON_PRESENCE_MODE);
205 TEST_F(ResourcePresenceTest,getPrimitiveResource_NormalHandling)
210 instance->initializeResourcePresence(pResource);
211 ASSERT_NE(nullptr,instance->getPrimitiveResource());
215 TEST_F(ResourcePresenceTest,isEmptyRequester_NormalHandling)
220 instance->initializeResourcePresence(pResource);
222 instance->addBrokerRequester(id,cb);
223 instance->removeAllBrokerRequester();
224 ASSERT_TRUE(instance->isEmptyRequester());
228 TEST_F(ResourcePresenceTest,getCB_NormalHandlingIfMessageOC_STACK_OK)
231 mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet).Do(
232 [](GetCallback callback)
234 OIC::Service::HeaderOptions op;
235 RCSResourceAttributes attr;
236 OIC::Service::ResponseStatement res(attr);
238 callback(op,res,OC_STACK_OK);
242 mocks.OnCall(pResource.get(), PrimitiveResource::requestGet).Do(
245 std::cout <<"End call requestGetFunc()\n";
247 mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return("address1");
249 mocks.OnCallFuncOverload(static_cast< subscribePresenceSig1 >(OC::OCPlatform::subscribePresence)).Do(
250 [](OC::OCPlatform::OCPresenceHandle&,
251 const std::string&, OCConnectivityType, SubscribeCallback callback)->OCStackResult
253 callback(OC_STACK_OK,0,std::string());
257 ).Return(OC_STACK_OK);
259 instance->initializeResourcePresence(pResource);