Imported Upstream version 1.2.0
[platform/upstream/iotivity.git] / service / resource-encapsulation / src / resourceBroker / unittest / ResourceBrokerUnitTest.cpp
1 //******************************************************************
2 //
3 // Copyright 2015 Samsung Electronics All Rights Reserved.
4 //
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 //
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
10 //
11 //      http://www.apache.org/licenses/LICENSE-2.0
12 //
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.
18 //
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20 #include "gtest/gtest.h"
21 #include "HippoMocks/hippomocks.h"
22
23 #include "OCPlatform.h"
24 #include "PrimitiveResource.h"
25 #include "ResponseStatement.h"
26 #include "ResourceBroker.h"
27 #include "UnitTestHelper.h"
28
29 using namespace testing;
30 using namespace OIC::Service;
31 using namespace OC;
32
33 typedef OCStackResult (*subscribePresenceSig1)(OC::OCPlatform::OCPresenceHandle&,
34         const std::string&, OCConnectivityType, SubscribeCallback);
35
36 class ResourceBrokerTest : public TestWithMock
37 {
38 public:
39
40     ResourceBroker * brokerInstance;
41     PrimitiveResource::Ptr pResource;
42     BrokerCB cb;
43     BrokerID id;
44
45 protected:
46
47     void SetUp()
48     {
49         TestWithMock::SetUp();
50         brokerInstance = ResourceBroker::getInstance();
51         pResource = PrimitiveResource::Ptr(mocks.Mock< PrimitiveResource >(),
52                                            [](PrimitiveResource*)
53                                            {
54
55                                            });
56         cb = ([](BROKER_STATE)->OCStackResult
57                 {
58                     return OC_STACK_OK;
59                 });
60         id = 0;
61     }
62
63     void TearDown()
64     {
65         TestWithMock::TearDown();
66         pResource.reset();
67         id = 0;
68         cb = nullptr;
69     }
70
71     void MockingFunc()
72     {
73         mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
74         mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return(std::string());
75         mocks.OnCallFuncOverload(static_cast< subscribePresenceSig1 >(OC::OCPlatform::subscribePresence)).Return(OC_STACK_OK);
76     }
77
78 };
79
80 TEST_F(ResourceBrokerTest,HostResource_ReturnNormalValueIfNormalParams)
81 {
82
83     MockingFunc();
84
85     BrokerID ret = brokerInstance->hostResource(pResource, cb);
86     ASSERT_NE(BrokerID(0), ret);
87
88     brokerInstance->cancelHostResource(ret);
89
90 }
91
92 TEST_F(ResourceBrokerTest, HostResource_NormalErrorHandlingIfResourceNull)
93 {
94
95     ASSERT_THROW(brokerInstance->hostResource(nullptr, cb),ResourceBroker::InvalidParameterException);
96
97 }
98
99 TEST_F(ResourceBrokerTest, HostResource_NormalErrorHandlingIfCbFuncNull)
100 {
101
102     ASSERT_THROW(brokerInstance->hostResource(pResource,nullptr),ResourceBroker::InvalidParameterException);
103
104 }
105
106 TEST_F(ResourceBrokerTest,CancelHostResource_NoThrowIfNormalParams)
107 {
108
109     MockingFunc();
110
111     BrokerID ret;
112     ret = brokerInstance->hostResource(pResource,cb);
113
114     ASSERT_NO_THROW(brokerInstance->cancelHostResource(ret));
115
116
117 }
118
119 TEST_F(ResourceBrokerTest,CancelHostResource_NormalErrorHandlingIfAbNormalIdZero)
120 {
121
122     id = 0;
123     ASSERT_THROW(brokerInstance->cancelHostResource(id),ResourceBroker::InvalidParameterException);
124
125 }
126
127 TEST_F(ResourceBrokerTest,CancelHostResource_NormalErrorHandlingIfAbNormalIdOutOfRangeValue)
128 {
129
130     id = -1;
131     ASSERT_THROW(brokerInstance->cancelHostResource(id),ResourceBroker::InvalidParameterException);
132
133 }
134
135 TEST_F(ResourceBrokerTest,getResourceState_ReturnNormalValueIfNormalId)
136 {
137
138     MockingFunc();
139
140     BrokerID ret;
141     ret = brokerInstance->hostResource(pResource,cb);
142
143     ASSERT_NE(brokerInstance->getResourceState(ret),BROKER_STATE::NONE);
144
145     brokerInstance->cancelHostResource(ret);
146     TearDown();
147
148 }
149
150 TEST_F(ResourceBrokerTest,getResourceState_NormalErrorHandlingIfIdZero)
151 {
152
153     id = 0;
154     ASSERT_THROW(brokerInstance->getResourceState(id),ResourceBroker::InvalidParameterException);
155
156 }
157
158 TEST_F(ResourceBrokerTest,getResourceState_ReturnNormalValueIfNormalResource)
159 {
160
161     MockingFunc();
162
163     BrokerID ret;
164     ret = brokerInstance->hostResource(pResource,cb);
165
166     ASSERT_NE(brokerInstance->getResourceState(pResource),BROKER_STATE::NONE);
167
168     brokerInstance->cancelHostResource(ret);
169
170 }
171
172 TEST_F(ResourceBrokerTest,getResourceState_NormalErrorHandlingIfResourceNull)
173 {
174
175     ASSERT_THROW(brokerInstance->getResourceState((PrimitiveResource::Ptr)nullptr),ResourceBroker::InvalidParameterException);
176
177 }
178
179 TEST_F(ResourceBrokerTest,getResourceState_NormalErrorHandlingIfAbnormalResource)
180 {
181
182     MockingFunc();
183
184     PrimitiveResource::Ptr resource[3];
185     BrokerID id[3];
186
187     for(int i=0;i!=3;i++)
188     {
189         resource[i] = PrimitiveResource::Ptr(mocks.Mock< PrimitiveResource >(),
190                 [](PrimitiveResource*)
191                 {
192                 });
193         mocks.OnCall(resource[i].get(), PrimitiveResource::requestGet);
194         mocks.OnCall(resource[i].get(), PrimitiveResource::getHost).Return(std::string());
195         mocks.OnCallFuncOverload(static_cast< subscribePresenceSig1 >(OC::OCPlatform::subscribePresence)).Return(OC_STACK_OK);
196         id[i] = brokerInstance->hostResource(resource[i],cb);
197     }
198
199
200     EXPECT_EQ(brokerInstance->getResourceState(pResource),BROKER_STATE::NONE);
201
202     for(int i=0;i!=3;i++)
203     {
204         brokerInstance->cancelHostResource(id[i]);
205     }
206
207 }
208
209 TEST_F(ResourceBrokerTest,getResourceState_NormalErrorHandlingIfAbnormalId)
210 {
211
212     id = -1;
213     ASSERT_THROW(brokerInstance->getResourceState(id),ResourceBroker::InvalidParameterException);
214
215 }