Imported Upstream version 0.9.2
[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 >(), [](PrimitiveResource*){});
52         cb = ([](BROKER_STATE)->OCStackResult{return OC_STACK_OK;});
53         id = 0;
54     }
55
56     void TearDown()
57     {
58         TestWithMock::TearDown();
59         pResource.reset();
60         id = 0;
61         cb = nullptr;
62     }
63
64     void MockingFunc()
65     {
66         mocks.OnCall(pResource.get(), PrimitiveResource::requestGet);
67         mocks.OnCall(pResource.get(), PrimitiveResource::getHost).Return(std::string());
68         mocks.OnCallFuncOverload(static_cast< subscribePresenceSig1 >(OC::OCPlatform::subscribePresence)).Return(OC_STACK_OK);
69     }
70
71 };
72
73 TEST_F(ResourceBrokerTest,HostResource_ReturnNormalValueIfNormalParams)
74 {
75
76     MockingFunc();
77
78     BrokerID ret = brokerInstance->hostResource(pResource, cb);
79     ASSERT_NE(BrokerID(0), ret);
80
81     brokerInstance->cancelHostResource(ret);
82
83 }
84
85 TEST_F(ResourceBrokerTest, HostResource_NormalErrorHandlingIfResourceNull)
86 {
87
88     ASSERT_THROW(brokerInstance->hostResource(nullptr, cb),ResourceBroker::InvalidParameterException);
89
90 }
91
92 TEST_F(ResourceBrokerTest, HostResource_NormalErrorHandlingIfCbFuncNull)
93 {
94
95     ASSERT_THROW(brokerInstance->hostResource(pResource,nullptr),ResourceBroker::InvalidParameterException);
96
97 }
98
99 TEST_F(ResourceBrokerTest,CancelHostResource_NoThrowIfNormalParams)
100 {
101
102     MockingFunc();
103
104     BrokerID ret;
105     ret = brokerInstance->hostResource(pResource,cb);
106
107     ASSERT_NO_THROW(brokerInstance->cancelHostResource(ret));
108
109
110 }
111
112 TEST_F(ResourceBrokerTest,CancelHostResource_NormalErrorHandlingIfAbNormalIdZero)
113 {
114
115     id = 0;
116     ASSERT_THROW(brokerInstance->cancelHostResource(id),ResourceBroker::InvalidParameterException);
117
118 }
119
120 TEST_F(ResourceBrokerTest,CancelHostResource_NormalErrorHandlingIfAbNormalIdOutOfRangeValue)
121 {
122
123     id = -1;
124     ASSERT_THROW(brokerInstance->cancelHostResource(id),ResourceBroker::InvalidParameterException);
125
126 }
127
128 TEST_F(ResourceBrokerTest,getResourceState_ReturnNormalValueIfNormalId)
129 {
130
131     MockingFunc();
132
133     BrokerID ret;
134     ret = brokerInstance->hostResource(pResource,cb);
135
136     ASSERT_NE(brokerInstance->getResourceState(ret),BROKER_STATE::NONE);
137
138     brokerInstance->cancelHostResource(ret);
139     TearDown();
140
141 }
142
143 TEST_F(ResourceBrokerTest,getResourceState_NormalErrorHandlingIfIdZero)
144 {
145
146     id = 0;
147     ASSERT_THROW(brokerInstance->getResourceState(id),ResourceBroker::InvalidParameterException);
148
149 }
150
151 TEST_F(ResourceBrokerTest,getResourceState_ReturnNormalValueIfNormalResource)
152 {
153
154     MockingFunc();
155
156     BrokerID ret;
157     ret = brokerInstance->hostResource(pResource,cb);
158
159     ASSERT_NE(brokerInstance->getResourceState(pResource),BROKER_STATE::NONE);
160
161     brokerInstance->cancelHostResource(ret);
162
163 }
164
165 TEST_F(ResourceBrokerTest,getResourceState_NormalErrorHandlingIfResourceNull)
166 {
167
168     ASSERT_THROW(brokerInstance->getResourceState((PrimitiveResource::Ptr)nullptr),ResourceBroker::InvalidParameterException);
169
170 }
171
172 TEST_F(ResourceBrokerTest,getResourceState_NormalErrorHandlingIfAbnormalResource)
173 {
174
175     MockingFunc();
176
177     PrimitiveResource::Ptr resource[3];
178     BrokerID id[3];
179
180     for(int i=0;i!=3;i++)
181     {
182         resource[i] = PrimitiveResource::Ptr(mocks.Mock< PrimitiveResource >(), [](PrimitiveResource*){});
183         mocks.OnCall(resource[i].get(), PrimitiveResource::requestGet);
184         mocks.OnCall(resource[i].get(), PrimitiveResource::getHost).Return(std::string());
185         mocks.OnCallFuncOverload(static_cast< subscribePresenceSig1 >(OC::OCPlatform::subscribePresence)).Return(OC_STACK_OK);
186         id[i] = brokerInstance->hostResource(resource[i],cb);
187     }
188
189
190     EXPECT_EQ(brokerInstance->getResourceState(pResource),BROKER_STATE::NONE);
191
192     for(int i=0;i!=3;i++)
193     {
194         brokerInstance->cancelHostResource(id[i]);
195     }
196
197 }
198
199 TEST_F(ResourceBrokerTest,getResourceState_NormalErrorHandlingIfAbnormalId)
200 {
201
202     id = -1;
203     ASSERT_THROW(brokerInstance->getResourceState(id),ResourceBroker::InvalidParameterException);
204
205 }