Merge test folder of test branch
[iotivity.git] / test / src / tc / rd / gtest / src / btc / RDClientTest.cpp
1 /******************************************************************
2 *
3 * Copyright 2016 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
21 #include "RDHelper.h"
22 using namespace OC;
23
24 class RDClientTest_btc: public ::testing::Test
25 {
26 protected:
27
28     RDHelper* m_rdHelper;
29
30     RDClientTest_btc()
31     {
32         m_rdHelper = nullptr;
33     }
34
35     virtual void SetUp()
36     {
37         CommonTestUtil::runCommonTCSetUpPart();
38
39         m_rdHelper = RDHelper::getInstance();
40
41         PlatformConfig config { OC::ServiceType::InProc, ModeType::Both, "0.0.0.0",0, OC::QualityOfService::LowQos };
42         OCPlatform::Configure(config);
43
44         m_rdHelper->registerLocalResources();
45         CommonUtil::waitInSecond(RD_SLEEPTIME_MAX);
46     }
47
48     virtual void TearDown()
49     {
50         CommonTestUtil::runCommonTCTearDownPart();
51         m_rdHelper->unregisterLocalResources();
52         free(m_rdHelper);
53     }
54 };
55
56
57 /**
58  * @since             2015-08-26
59  * @see                void Configure(const PlatformConfig& config)
60  * @see                OCStackResult registerResource(OCResourceHandle& resourceHandle,std::string& resourceURI,
61  *                                                   const std::string& resourceTypeName,const std::string& resourceInterface,
62  *                                                    EntityHandler entityHandler,uint8_t resourceProperty)
63  * @see                OCStackResult unregisterResource(const OCResourceHandle& resourceHandle)
64  * @objective         Test OCRDPublish function with empty ip address that will return OC_STACK_NO_MEMORY
65  * @target             OCStackResult OCRDPublish(char *addr, uint16_t port, int num, ...);
66  * @test_data         1. addr (The IP address of the RD) as empty
67  *                     2. port (The port of the RD) as NULL
68  *                     3. num as 0 (This denotes the number of registered resource handles being passed for the remaining arguments)
69  * @pre_condition     1. Call OCPlatform::Configure to overwrite the default configuration of the OCPlatform object
70  *                     2. Call registerResource to registers a resource with the server
71  * @procedure         Call OCRDPublish with empty address,null port and number of 0 resource
72  * @post_condition     Call unregisterResource to unregisters a resource with the server
73  * @expected         OCRDPublish will not succeed and will return OC_STACK_NO_MEMORY
74  */
75 #if defined(__LINUX__) || defined(__WINDOWS__)
76 TEST_F(RDClientTest_btc, RDPublishPort_NV_N)
77 {
78     try
79     {
80         char *ipAddressOfRD="";
81
82         OCStackResult actualResult = m_rdHelper->rdPublish(ipAddressOfRD,RD_UNIT16_PORT_NULL,RD_NUMBER_OF_REGISTER_RESOURCE_ZERO);
83         CommonUtil::waitInSecond(RD_SLEEPTIME_MAX);
84
85         EXPECT_EQ(OC_STACK_ERROR,actualResult) << "Actual result string : " << CommonUtil::s_OCStackResultString.at(actualResult);
86     }
87     catch (std::exception &ex)
88     {
89         FAIL() << "Exception occurred : " << ex.what();
90     }
91
92     SUCCEED();
93 }
94 #endif
95
96 /**
97  * @since             2015-08-26
98  * @see                void Configure(const PlatformConfig& config)
99  * @see                OCStackResult registerResource(OCResourceHandle& resourceHandle,std::string& resourceURI,
100  *                                                   const std::string& resourceTypeName,const std::string& resourceInterface,
101  *                                                    EntityHandler entityHandler,uint8_t resourceProperty)
102  * @see                OCStackResult unregisterResource(const OCResourceHandle& resourceHandle)
103  * @objective         Test OCRDPublish function negatively with null value
104  * @target             OCStackResult OCRDPublish(char *addr, uint16_t port, int num, ...);
105  * @test_data         1. addr (The IP address of the RD) as NULL
106  *                     2. port The port of the RD
107  *                     3. num This denotes the number of registered resource handles being passed for the remaining arguments
108  * @pre_condition     1. Call OCPlatform::Configure to overwrite the default configuration of the OCPlatform object
109  *                     2. Call registerResource to registers a resource with the server
110  * @procedure         Call OCRDPublish with null address
111  * @post_condition     Call unregisterResource to unregisters a resource with the server
112  * @expected         OCRDPublish will not succeed and not return OC_STACK_OK
113  */
114 #if defined(__LINUX__) || defined(__WINDOWS__)
115 TEST_F(RDClientTest_btc, RDPublishAddress_NV_N)
116 {
117     try
118     {
119         char *ipAddressOfRD=NULL;
120
121         OCStackResult actualResult = m_rdHelper->rdPublish(ipAddressOfRD,RD_UNIT16_PORT,RD_NUMBER_OF_REGISTER_RESOURCE_ZERO);
122         CommonUtil::waitInSecond(RD_SLEEPTIME_MAX);
123
124         EXPECT_EQ(OC_STACK_INVALID_IP,actualResult) << "Actual result string : " << CommonUtil::s_OCStackResultString.at(actualResult);
125     }
126     catch (std::exception &ex)
127     {
128         FAIL() << "Exception occurred : " << ex.what();
129     }
130
131     SUCCEED();
132 }
133 #endif
134
135
136 /**
137  * @since             2015-08-26
138  * @see                void Configure(const PlatformConfig& config)
139  * @see                OCStackResult registerResource(OCResourceHandle& resourceHandle,std::string& resourceURI,
140  *                                                   const std::string& resourceTypeName,const std::string& resourceInterface,
141  *                                                    EntityHandler entityHandler,uint8_t resourceProperty)
142  * @see                OCStackResult unregisterResource(const OCResourceHandle& resourceHandle)
143  * @objective         Test publishing resource without registerResource that will return OC_STACK_INVALID_PARAM
144  * @target             OCRDPublish();
145  * @test_data         1. addr (addr The IP address of the RD, it could be either retrieved via OCRDDiscover())
146  *                     2. port The port of the RD
147  *                     3. num This denotes the number of registered resource handles being passed for the remaining arguments
148  * @pre_condition     1. Call OCPlatform::Configure to overwrite the default configuration of the OCPlatform object
149  *                     3. Call unregisterResource to unregisters a resource with the server
150  *                     4. Call OCRDDiscover to find the RD server
151  * @procedure         Call OCRDPublish
152  * @post_condition     Call registerResource to registers a resource with the server that will be unregister in tear down
153  * @expected         Publish will not succeed and will return OC_STACK_INVALID_PARAM
154  */
155 #if defined(__LINUX__) || defined(__WINDOWS__)
156 TEST_F(RDClientTest_btc, RDPublishWithoutRegisterRD_NV_N)
157 {
158     try
159     {
160         m_rdHelper->unregisterLocalResources();
161         CommonUtil::waitInSecond(RD_SLEEPTIME_MAX);
162
163         OCStackResult actualResultPublish = m_rdHelper->rdPublish();
164         EXPECT_EQ(OC_STACK_INVALID_PARAM,actualResultPublish) << "Actual result string : " << CommonUtil::s_OCStackResultString.at(actualResultPublish);
165
166         m_rdHelper->registerLocalResources();
167         CommonUtil::waitInSecond(RD_SLEEPTIME_MAX);
168     }
169     catch (std::exception &ex)
170     {
171         FAIL() << "Exception occurred : " << ex.what();
172     }
173
174     SUCCEED();
175 }
176 #endif
177
178 /**
179  * @since             2015-08-26
180  * @see                void Configure(const PlatformConfig& config)
181  * @see                OCStackResult registerResource(OCResourceHandle& resourceHandle,std::string& resourceURI,
182  *                                                   const std::string& resourceTypeName,const std::string& resourceInterface,
183  *                                                    EntityHandler entityHandler,uint8_t resourceProperty)
184  * @see                OCStackResult unregisterResource(const OCResourceHandle& resourceHandle)
185  * @objective         Test OCRDDiscover function with NULL callback function
186  * @target             OCStackResult OCRDDiscover(OCRDBiasFactorCB cbBiasFactor)
187  * @test_data         OCRDBiasFactorCB (It's a callback function that invoked when bias factor
188  *                                       is returned by the Resource Directory Server)
189  * @pre_condition     1. Call OCPlatform::Configure to overwrite the default configuration of the OCPlatform object
190  *                     2. Call registerResource to registers a resource with the server
191  * @procedure         Call OCRDDiscover with NULL argument
192  * @post_condition     Call unregisterResource to unregisters a resource with the server
193  * @expected         OCRDDiscover will not succeed and will return OC_STACK_INVALID_CALLBACK
194  */
195 #if defined(__LINUX__) || defined(__WINDOWS__)
196 TEST_F(RDClientTest_btc, RDDiscover_USV_N)
197 {
198     try
199     {
200         OCStackResult actualResult = m_rdHelper->rdDiscover(RD_DISCOVER_WITH_INVALID_PARAM,RD_DISCOVER_WITHOUT_CALLBACK);
201         CommonUtil::waitInSecond(RD_SLEEPTIME_MAX);
202         EXPECT_EQ(OC_STACK_INVALID_CALLBACK,actualResult) << "Actual result string : " << CommonUtil::s_OCStackResultString.at(actualResult);
203     }
204     catch (std::exception &ex)
205     {
206         FAIL() << "Exception occurred : " << ex.what();
207     }
208
209     SUCCEED();
210 }
211 #endif
212
213 /**
214  * @since             2015-10-15
215  * @see               void Configure(const PlatformConfig& config)
216  * @see               OCStackResult registerResource(OCResourceHandle& resourceHandle,std::string& resourceURI,
217  *                                                   const std::string& resourceTypeName,const std::string& resourceInterface,
218  *                                                    EntityHandler entityHandler,uint8_t resourceProperty)
219  * @see               OCStackResult OCBindResourceInsToResource(resourceHandle, ins);
220  * @objective         Test OCBindResourceInsToResource function positively
221  * @test_data         OCResourceHandle handle (It's a resource handle that the contained resource is to be bound
222  *                    ins is the Unique ID for resource
223  * @pre_condition     1. Call OCPlatform::Configure to overwrite the default configuration of the OCPlatform object
224  *                    2. Call registerResource to registers a resource with the server
225  * @procedure         Call rdBindResourceInsToResource with Resource handle and Unique ID
226  * @post_condition    Call unregisterResource to unregisters a resource with the server
227  * @expected          OCBindResourceInsToResource will succeed and will return OC_STACK_OK
228  */
229 #if defined(__LINUX__) || defined(__WINDOWS__)
230 TEST_F(RDClientTest_btc, RDBindResourceInsToResource_SRC_P)
231 {
232     try
233     {
234
235         OCStackResult actualResult = m_rdHelper->rdBindResourceInsToResource(1, OC_RSRVD_INS);
236         CommonUtil::waitInSecond(RD_SLEEPTIME_MIN);
237         ASSERT_EQ(OC_STACK_OK,actualResult)<< "Actual result string : " << CommonUtil::s_OCStackResultString.at(actualResult);
238
239         m_rdHelper->rdStopServer();
240     }
241     catch (std::exception &ex)
242     {
243         FAIL() << "Exception occurred : " << ex.what();
244     }
245
246     SUCCEED();
247 }
248 #endif
249 #if defined(__LINUX__) || defined(__WINDOWS__)
250
251 /**
252  * @since             2015-10-15
253  * @see               void Configure(const PlatformConfig& config)
254  * @see               OCStackResult registerResource(OCResourceHandle& resourceHandle,std::string& resourceURI,
255  *                                                   const std::string& resourceTypeName,const std::string& resourceInterface,
256  *                                                    EntityHandler entityHandler,uint8_t resourceProperty)
257  * @see               OCStackResult OCBindResourceInsToResource(resourceHandle, ins);
258  * @objective         Test OCBindResourceInsToResource function Negatively
259  * @test_data         OCResourceHandle handle (It's a resource handle that the contained resource is to be bound
260  *                    ins is the Unique ID for resource
261  * @pre_condition     1. Call OCPlatform::Configure to overwrite the default configuration of the OCPlatform object
262  *                    2. Call registerResource to registers a resource with the server
263  * @procedure         Call rdBindResourceInsToResource with Resource handle and Unique ID
264  * @post_condition    Call unregisterResource to unregisters a resource with the server
265  * @expected          OCBindResourceInsToResource will succeed and will not return OC_STACK_OK
266  */
267 TEST_F(RDClientTest_btc, RDBindResourceInsToResource_NV_N)
268 {
269     try
270     {
271         OCStackResult actualResult = m_rdHelper->rdBindResourceInsToResource(0, OC_RSRVD_INS);
272         CommonUtil::waitInSecond(RD_SLEEPTIME_MIN);
273         ASSERT_NE(OC_STACK_OK,actualResult)<< "Actual result string : " << CommonUtil::s_OCStackResultString.at(actualResult);
274
275         m_rdHelper->rdStopServer();
276     }
277     catch (std::exception &ex)
278     {
279         FAIL() << "Exception occurred : " << ex.what();
280     }
281
282     SUCCEED();
283 }
284 #endif
285
286 /**
287  * @since             2015-10-15
288  * @see               void Configure(const PlatformConfig& config)
289  * @see               OCStackResult registerResource(OCResourceHandle& resourceHandle,std::string& resourceURI,
290  *                                                   const std::string& resourceTypeName,const std::string& resourceInterface,
291  *                                                    EntityHandler entityHandler,uint8_t resourceProperty)
292  * @see               OCStackResult OCGetResourceIns(OCResourceHandle handle, int64_t *ins);;
293  * @objective         Test OCGetResourceIns function positively
294  * @test_data         OCResourceHandle handle (It's a resource handle that the contained resource is to be bound
295  *                    ins is the Unique ID for resource
296  * @pre_condition     1. Call OCPlatform::Configure to overwrite the default configuration of the OCPlatform object
297  *                    2. Call registerResource to registers a resource with the server
298  * @procedure         Call rdBindResourceInsToResource with Resource handle and Unique ID
299  * @post_condition    Call unregisterResource to unregisters a resource with the server
300  * @expected          OCGetResourceIns will succeed and will return OC_STACK_OK
301  */
302 #if defined(__LINUX__) || defined(__WINDOWS__)
303 TEST_F(RDClientTest_btc, RDGetResourceIns_SRC_P)
304 {
305     try
306     {
307         int64_t rdresIns = 0;
308         OCStackResult actualResult = m_rdHelper->rdGetResourceIns(1, &rdresIns);
309         CommonUtil::waitInSecond(RD_SLEEPTIME_MIN);
310         ASSERT_EQ(OC_STACK_OK,actualResult)<< "Actual result string : " << CommonUtil::s_OCStackResultString.at(actualResult);
311
312         m_rdHelper->rdStopServer();
313     }
314     catch (std::exception &ex)
315     {
316         FAIL() << "Exception occurred : " << ex.what();
317     }
318
319     SUCCEED();
320 }
321 #endif
322
323 /**
324  * @since             2015-10-15
325  * @see               void Configure(const PlatformConfig& config)
326  * @see               OCStackResult registerResource(OCResourceHandle& resourceHandle,std::string& resourceURI,
327  *                                                   const std::string& resourceTypeName,const std::string& resourceInterface,
328  *                                                    EntityHandler entityHandler,uint8_t resourceProperty)
329  * @see               OCStackResult OCGetResourceIns(OCResourceHandle handle, int64_t *ins);;
330  * @objective         Test OCGetResourceIns function Negatively
331  * @test_data         OCResourceHandle handle (It's a resource handle that the contained resource is to be bound
332  *                    ins is the Unique ID for resource
333  * @pre_condition     1. Call OCPlatform::Configure to overwrite the default configuration of the OCPlatform object
334  *                    2. Call registerResource to registers a resource with the server
335  * @procedure         Call rdBindResourceInsToResource with Resource handle and Unique ID
336  * @post_condition    Call unregisterResource to unregisters a resource with the server
337  * @expected          OCGetResourceIns will succeed and not will return OC_STACK_OK
338  */
339 #if defined(__LINUX__) || defined(__WINDOWS__)
340 TEST_F(RDClientTest_btc, RDGetResourceIns_NV_N)
341 {
342     try
343     {
344         int64_t rdresIns;
345         OCStackResult actualResult = m_rdHelper->rdGetResourceIns(0, &rdresIns);
346         CommonUtil::waitInSecond(RD_SLEEPTIME_MIN);
347         ASSERT_NE(OC_STACK_OK,actualResult)<< "Actual result string : " << CommonUtil::s_OCStackResultString.at(actualResult);
348
349         m_rdHelper->rdStopServer();
350     }
351     catch (std::exception &ex)
352     {
353         FAIL() << "Exception occurred : " << ex.what();
354     }
355
356     SUCCEED();
357 }
358 #endif