Update UnitTest Code about "Resource Broker"
[platform/upstream/iotivity.git] / service / resource-manipulation / src / resourceBroker / unittest / ResourcePresenceUnitTest.cpp
1
2 #include <iostream>
3 #include <vector>
4 #include <unistd.h>
5
6 #include "gtest/gtest.h"
7 #include "HippoMocks/hippomocks.h"
8
9 #include "OCResource.h"
10 #include "OCPlatform.h"
11
12 #include "PrimitiveResource.h"
13 #include "ResponseStatement.h"
14 #include "ResourceAttributes.h"
15 #include "ResourcePresence.h"
16 #include "UnitTestHelper.h"
17
18 using namespace testing;
19 using namespace OIC::Service;
20 using namespace OC;
21
22 typedef OCStackResult (*subscribePresenceSig1)(OC::OCPlatform::OCPresenceHandle&,
23         const std::string&, OCConnectivityType, SubscribeCallback);
24
25 class ResourcePresenceTest : public TestWithMock
26 {
27 public:
28
29     typedef std::function<void(const HeaderOptions&, const ResponseStatement&, int)> GetCallback;
30
31     MockRepository mocks;
32     ResourcePresence * instance;
33     PrimitiveResource::Ptr pResource;
34     BrokerCB cb;
35     BrokerID id;
36
37 protected:
38
39     void SetUp() override
40     {
41         instance = (ResourcePresence*)new ResourcePresence();
42         pResource = PrimitiveResource::Ptr(mocks.Mock< PrimitiveResource >(), [](PrimitiveResource*){});
43         cb = ([](BROKER_STATE)->OCStackResult{return OC_STACK_OK;});
44         id = 0;
45     }
46
47     void TearDown() override
48     {
49         pResource.reset();
50         id = 0;
51         cb = nullptr;
52     }
53
54     void MockingFunc()
55     {
56         mocks.OnCall(pResource.get(), PrimitiveResource::requestGet).Do([](GetCallback cb){});
57         mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return(std::string());
58         mocks.OnCallFuncOverload(static_cast< subscribePresenceSig1 >(OC::OCPlatform::subscribePresence)).Return(OC_STACK_OK);
59     }
60
61 };
62
63 TEST_F(ResourcePresenceTest,initializeResourcePresence_NormalhandlingIfNormalResource)
64 {
65
66     MockingFunc();
67
68     instance->initializeResourcePresence(pResource);
69     ASSERT_NE(nullptr,instance->getPrimitiveResource());
70
71 }
72
73 TEST_F(ResourcePresenceTest,addBrokerRequester_ReturnNormalValueIfNormalParams)
74 {
75
76     MockingFunc();
77
78     instance->initializeResourcePresence(pResource);
79     id = 1;
80     instance->addBrokerRequester(id,cb);
81     EXPECT_FALSE(instance->isEmptyRequester());
82
83 }
84
85 TEST_F(ResourcePresenceTest,removeBrokerRequester_NormalHandlingIfNormalId)
86 {
87
88     MockingFunc();
89
90     instance->initializeResourcePresence(pResource);
91     id = 1;
92     instance->addBrokerRequester(id,cb);
93     id = 2;
94     instance->addBrokerRequester(id,cb);
95
96     instance->removeBrokerRequester(id);
97     ASSERT_EQ(1,instance->requesterListSize());
98
99 }
100
101 TEST_F(ResourcePresenceTest,removeAllBrokerRequester_NormalHandling)
102 {
103
104     MockingFunc();
105
106     instance->initializeResourcePresence(pResource);
107     id = 1;
108     instance->addBrokerRequester(id,cb);
109     id = 2;
110     instance->addBrokerRequester(id,cb);
111
112     instance->removeAllBrokerRequester();
113     ASSERT_TRUE(instance->isEmptyRequester());
114
115 }
116
117 TEST_F(ResourcePresenceTest,removeAllBrokerRequester_ErrorHandlingIfListNull)
118 {
119
120     MockingFunc();
121
122     instance->initializeResourcePresence(pResource);
123     instance->removeAllBrokerRequester();
124
125 }
126
127 TEST_F(ResourcePresenceTest,requestResourceState_NormalHandling)
128 {
129
130     MockingFunc();
131
132     instance->initializeResourcePresence(pResource);
133
134     ASSERT_NO_THROW(instance->requestResourceState());
135
136 }
137
138 TEST_F(ResourcePresenceTest,changePresenceMode_NormalHandlingIfNewModeDifferent)
139 {
140
141     MockingFunc();
142
143     instance->initializeResourcePresence(pResource);
144
145     instance->changePresenceMode(BROKER_MODE::DEVICE_PRESENCE_MODE);
146
147 }
148
149 TEST_F(ResourcePresenceTest,getResourceState_NormalHandling)
150 {
151
152     ASSERT_EQ(BROKER_STATE::REQUESTED,instance->getResourceState());
153
154 }
155
156 TEST_F(ResourcePresenceTest,changePresenceMode_NormalHandlingIfNewModeSame)
157 {
158
159     MockingFunc();
160
161     instance->initializeResourcePresence(pResource);
162
163     instance->changePresenceMode(BROKER_MODE::NON_PRESENCE_MODE);
164
165 }
166
167 TEST_F(ResourcePresenceTest,getPrimitiveResource_NormalHandling)
168 {
169
170     MockingFunc();
171
172     instance->initializeResourcePresence(pResource);
173     ASSERT_NE(nullptr,instance->getPrimitiveResource());
174
175 }
176
177 TEST_F(ResourcePresenceTest,getCB_NormalHandlingIfMessageOC_STACK_OK)
178 {
179
180     mocks.ExpectCall(pResource.get(), PrimitiveResource::requestGet).Do(
181                 [](GetCallback callback){
182
183         OIC::Service::HeaderOptions op;
184         ResourceAttributes attr;
185         OIC::Service::ResponseStatement res(attr);
186         callback(op,res,OC_STACK_OK);
187
188     });
189     mocks.OnCall(pResource.get(), PrimitiveResource::requestGet).Do(
190                                 [](GetCallback callback){
191         std::cout <<"End call requestGetFunc()\n";
192                     });
193     mocks.ExpectCall(pResource.get(), PrimitiveResource::getHost).Return("address1");
194     mocks.ExpectCall(pResource.get(), PrimitiveResource::getHost).Return("address2");
195     mocks.OnCallFuncOverload(static_cast< subscribePresenceSig1 >(OC::OCPlatform::subscribePresence)).Do(
196             [](OC::OCPlatform::OCPresenceHandle&,
197                     const std::string&, OCConnectivityType, SubscribeCallback callback)->OCStackResult{
198
199         callback(OC_STACK_OK,0,std::string());
200         return OC_STACK_OK;
201
202     }).Return(OC_STACK_OK);
203
204     instance->initializeResourcePresence(pResource);
205     sleep(3);
206
207 }
208
209 TEST_F(ResourcePresenceTest,isEmptyRequester_NormalHandling)
210 {
211
212     MockingFunc();
213
214     instance->initializeResourcePresence(pResource);
215     id = 1;
216     instance->addBrokerRequester(id,cb);
217     instance->removeAllBrokerRequester();
218     ASSERT_TRUE(instance->isEmptyRequester());
219
220 }