1 //******************************************************************
3 // Copyright 2014 Intel Mobile Communications GmbH 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 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
24 #include "ocpayload.h"
26 #include "ocstackinternal.h"
28 #include "oic_malloc.h"
29 #include "oic_string.h"
32 #include "gtest/gtest.h"
33 #include <sys/types.h>
42 //-----------------------------------------------------------------------------
44 //-----------------------------------------------------------------------------
51 #include "gtest_helper.h"
55 namespace itst = iotivity::test;
57 #define DEFAULT_CONTEXT_VALUE 0x99
59 //-----------------------------------------------------------------------------
61 //-----------------------------------------------------------------------------
62 static const char TAG[] = "TestHarness";
64 char gDeviceUUID[] = "myDeviceUUID";
65 char gManufacturerName[] = "myName";
67 static char pinNumber;
68 static OCDPDev_t peer;
70 std::chrono::seconds const SHORT_TEST_TIMEOUT = std::chrono::seconds(5);
72 //-----------------------------------------------------------------------------
74 //-----------------------------------------------------------------------------
75 extern "C" OCStackApplicationResult asyncDoResourcesCallback(void* ctx,
76 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
78 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
80 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
82 if(ctx == (void*)DEFAULT_CONTEXT_VALUE) {
83 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
85 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
87 return OC_STACK_KEEP_TRANSACTION;
90 static void resultCallback(void *UNUSED1, OCDPDev_t *UNUSED2, OCStackResult UNUSED3)
97 extern "C" OCStackApplicationResult discoveryCallback(void* ctx,
98 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
100 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
102 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
104 if(ctx == (void*)DEFAULT_CONTEXT_VALUE)
106 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
109 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
111 OCDiscoveryPayload *discoveryPayload = ((OCDiscoveryPayload *) clientResponse->payload);
112 EXPECT_TRUE(discoveryPayload != NULL);
113 OCResourcePayload *res = discoveryPayload->resources;
115 for (OCResourcePayload *res1 = discoveryPayload->resources; res1; res1 = res1->next)
120 EXPECT_EQ("/a/led1", res->uri);
122 EXPECT_EQ("/a/led2", res->uri);
124 EXPECT_EQ("/a/led3", res->uri);
126 EXPECT_TRUE(res == NULL);
128 return OC_STACK_KEEP_TRANSACTION;
131 //-----------------------------------------------------------------------------
133 //-----------------------------------------------------------------------------
134 OCEntityHandlerResult entityHandler(OCEntityHandlerFlag /*flag*/,
135 OCEntityHandlerRequest * /*entityHandlerRequest*/,
136 void* /*callbackParam*/)
138 OIC_LOG(INFO, TAG, "Entering entityHandler");
143 //-----------------------------------------------------------------------------
145 //-----------------------------------------------------------------------------
146 void InitStack(OCMode mode)
148 OIC_LOG(INFO, TAG, "Entering InitStack");
150 EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, mode));
151 OIC_LOG(INFO, TAG, "Leaving InitStack");
154 uint8_t InitNumExpectedResources()
157 // When presence is enabled, it is a resource and so is (currently) included
158 // in the returned resource count returned by the OCGetNumberOfResources API.
165 uint8_t InitResourceIndex()
168 // When presence is enabled, it is a resource and so is (currently) included
169 // in the returned resource count returned by the OCGetNumberOfResources API.
170 // The index of the presence resource is 0, so the first user app resource index
177 //-----------------------------------------------------------------------------
179 //-----------------------------------------------------------------------------
181 TEST(StackInit, StackInitNullAddr)
183 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
184 EXPECT_EQ(OC_STACK_OK, OCInit(0, 5683, OC_SERVER));
185 EXPECT_EQ(OC_STACK_OK, OCStop());
188 TEST(StackInit, StackInitNullPort)
190 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
191 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 0, OC_SERVER));
192 EXPECT_EQ(OC_STACK_OK, OCStop());
195 TEST(StackInit, StackInitNullAddrAndPort)
197 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
198 EXPECT_EQ(OC_STACK_OK, OCInit(0, 0, OC_SERVER));
199 EXPECT_EQ(OC_STACK_OK, OCStop());
202 TEST(StackInit, StackInitInvalidMode)
204 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
205 EXPECT_EQ(OC_STACK_ERROR, OCInit(0, 0, (OCMode)10));
206 EXPECT_EQ(OC_STACK_ERROR, OCStop());
209 TEST(StackStart, StackStartSuccessClient)
211 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
212 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
213 EXPECT_EQ(OC_STACK_OK, OCStop());
216 TEST(StackStart, StackStartSuccessServer)
218 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
219 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
220 EXPECT_EQ(OC_STACK_OK, OCStop());
223 TEST(StackStart, StackStartSuccessClientServer)
225 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
226 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT_SERVER));
227 EXPECT_EQ(OC_STACK_OK, OCStop());
230 TEST(StackStart, StackStartSuccessServerThenClient)
232 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
233 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
234 EXPECT_EQ(OC_STACK_OK, OCStop());
235 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
236 EXPECT_EQ(OC_STACK_OK, OCStop());
239 TEST(StackStart, StackStartSuccessClientThenServer)
241 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
242 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
243 EXPECT_EQ(OC_STACK_OK, OCStop());
244 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
245 EXPECT_EQ(OC_STACK_OK, OCStop());
248 TEST(StackStart, StackStartSuccessiveInits)
250 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
251 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
252 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.2", 5683, OC_SERVER));
253 EXPECT_EQ(OC_STACK_OK, OCStop());
256 TEST(StackStart, SetPlatformInfoValid)
258 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
259 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
261 OCPlatformInfo info =
265 0, 0, 0, 0, 0, 0, 0, 0, 0
267 EXPECT_EQ(OC_STACK_OK, OCSetPlatformInfo(info));
268 EXPECT_EQ(OC_STACK_OK, OCStop());
271 TEST(StackStart, SetPlatformInfoWithClientMode)
273 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
274 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
276 OCPlatformInfo info =
280 0, 0, 0, 0, 0, 0, 0, 0, 0
282 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
283 EXPECT_EQ(OC_STACK_OK, OCStop());
286 TEST(StackStart, SetPlatformInfoWithNoPlatformID)
288 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
289 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
291 OCPlatformInfo info =
295 0, 0, 0, 0, 0, 0, 0, 0, 0
298 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
299 EXPECT_EQ(OC_STACK_OK, OCStop());
302 TEST(StackStart, SetPlatformInfoWithNoManufacturerName)
304 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
305 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
307 OCPlatformInfo info =
310 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
313 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
314 EXPECT_EQ(OC_STACK_OK, OCStop());
317 TEST(StackStart, SetPlatformInfoWithZeroLengthManufacturerName)
319 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
320 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
322 OCPlatformInfo info =
325 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
327 info.manufacturerName = (char *) "";
329 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
330 EXPECT_EQ(OC_STACK_OK, OCStop());
333 TEST(StackStart, SetPlatformInfoWithTooLongManufacName)
335 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
336 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
337 char gTooLongManufacturerName[MAX_PLATFORM_NAME_LENGTH+2];
338 for (int i = 0; i <= MAX_PLATFORM_NAME_LENGTH; i++ )
340 gTooLongManufacturerName[i] = 'a';
342 gTooLongManufacturerName[MAX_PLATFORM_NAME_LENGTH+1] = '\0';
343 OCPlatformInfo info =
346 gTooLongManufacturerName,
347 0, 0, 0, 0, 0, 0, 0, 0, 0
350 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
351 EXPECT_EQ(OC_STACK_OK, OCStop());
354 TEST(StackStart, SetPlatformInfoWithTooLongManufacURL)
356 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
357 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
358 char gManufacturerUrl[MAX_PLATFORM_URL_LENGTH+2];
359 for (int i = 0; i <= MAX_PLATFORM_URL_LENGTH; i++ )
361 gManufacturerUrl[i] = 'a';
363 gManufacturerUrl[MAX_PLATFORM_URL_LENGTH+1] = '\0';
364 OCPlatformInfo info =
369 0, 0, 0, 0, 0, 0, 0, 0
372 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
373 EXPECT_EQ(OC_STACK_OK, OCStop());
376 TEST(StackStart, SetPlatformInfoWithOCSetPropertyValueAPI)
378 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
379 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
380 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_ID, gDeviceUUID));
381 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_NAME, gManufacturerName));
382 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_URL, "http://www.iotivity.org"));
383 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MODEL_NUM, "S777"));
384 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_DATE, "15 Nov, 2016"));
385 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_OS_VERSION, "1.1"));
386 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_VERSION, "14"));
387 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_HARDWARE_VERSION, "0.1"));
388 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_FIRMWARE_VERSION, "0.1"));
389 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SUPPORT_URL, "http://www.iotivity.org"));
390 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SYSTEM_TIME, ""));
391 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, "x.org.iotivity.AAAA", "value"));
392 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, NULL, ""));
393 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPropertyValue(PAYLOAD_TYPE_INVALID, NULL, NULL));
394 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPropertyValue(PAYLOAD_TYPE_INVALID, NULL, NULL));
395 EXPECT_EQ(OC_STACK_OK, OCStop());
398 TEST(StackStart, GetPlatformInfoWithOCGetPropertyValueAPI)
400 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
401 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
402 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_ID, gDeviceUUID));
403 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_NAME, gManufacturerName));
404 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_URL, "http://www.iotivity.org"));
405 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MODEL_NUM, "S777"));
406 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_DATE, "15 Nov, 2016"));
407 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_OS_VERSION, "1.1"));
408 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_VERSION, "14"));
409 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_HARDWARE_VERSION, "0.1"));
410 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_FIRMWARE_VERSION, "0.1"));
411 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SUPPORT_URL, "http://www.iotivity.org"));
412 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SYSTEM_TIME, ""));
413 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, "x.org.iotivity.AAAA", "value"));
416 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_ID, &value));
417 ASSERT_TRUE(value != NULL);
418 EXPECT_STREQ(gDeviceUUID, (char *)value);
422 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_NAME, &value));
423 ASSERT_TRUE(value != NULL);
424 EXPECT_STREQ(gManufacturerName, (char *)value);
428 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_URL, &value));
429 ASSERT_TRUE(value != NULL);
430 EXPECT_STREQ("http://www.iotivity.org", (char *)value);
434 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MODEL_NUM, &value));
435 ASSERT_TRUE(value != NULL);
436 EXPECT_STREQ("S777", (char *)value);
440 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_DATE, &value));
441 ASSERT_TRUE(value != NULL);
442 EXPECT_STREQ("15 Nov, 2016", (char *)value);
446 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_OS_VERSION, &value));
447 ASSERT_TRUE(value != NULL);
448 EXPECT_STREQ("1.1", (char *)value);
452 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_VERSION, &value));
453 ASSERT_TRUE(value != NULL);
454 EXPECT_STREQ("14", (char *)value);
458 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_HARDWARE_VERSION, &value));
459 ASSERT_TRUE(value != NULL);
460 EXPECT_STREQ("0.1", (char *)value);
464 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_FIRMWARE_VERSION, &value));
465 ASSERT_TRUE(value != NULL);
466 EXPECT_STREQ("0.1", (char *)value);
470 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SUPPORT_URL, &value));
471 ASSERT_TRUE(value != NULL);
472 EXPECT_STREQ("http://www.iotivity.org", (char *)value);
476 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SYSTEM_TIME, &value));
477 ASSERT_TRUE(value != NULL);
478 EXPECT_STREQ("", (char *)value);
482 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, "x.org.iotivity.AAAA", &value));
483 ASSERT_TRUE(value != NULL);
484 EXPECT_STREQ("value", (char *)value);
487 EXPECT_EQ(OC_STACK_OK, OCStop());
490 TEST(StackStart, SetDeviceInfoAPI)
492 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
493 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
494 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_NAME, "Sample"));
495 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_SPEC_VERSION, "specVersion"));
496 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, "x.org.iotivity.newproperty", "value"));
497 OCStringLL *dataModelVersions = OCCreateOCStringLL("Data Model Version");
498 EXPECT_TRUE(dataModelVersions != NULL);
499 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DATA_MODEL_VERSION, dataModelVersions));
500 OCFreeOCStringLL(dataModelVersions);
501 OCResourceHandle handle = OCGetResourceHandleAtUri(OC_RSRVD_DEVICE_URI);
502 EXPECT_TRUE(handle != NULL);
503 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "oic.wk.tv"));
504 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPropertyValue(PAYLOAD_TYPE_INVALID, NULL, NULL));
505 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPropertyValue(PAYLOAD_TYPE_INVALID, "", NULL));
506 EXPECT_EQ(OC_STACK_OK, OCStop());
509 TEST(StackStart, GetDeviceInfoAPI)
511 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
512 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
513 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_NAME, "Sample"));
514 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_SPEC_VERSION, "specVersion"));
515 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, "x.org.iotivity.newproperty", "value"));
516 OCStringLL *dataModelVersions = OCCreateOCStringLL("Data Model Version");
517 EXPECT_TRUE(dataModelVersions != NULL);
518 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DATA_MODEL_VERSION, dataModelVersions));
519 OCFreeOCStringLL(dataModelVersions);
520 OCResourceHandle handle = OCGetResourceHandleAtUri(OC_RSRVD_DEVICE_URI);
521 EXPECT_TRUE(handle != NULL);
522 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "oic.wk.tv"));
525 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_NAME, &value));
526 ASSERT_TRUE(value != NULL);
527 EXPECT_STREQ("Sample", (char *)value);
531 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_SPEC_VERSION, &value));
532 ASSERT_TRUE(value != NULL);
533 EXPECT_STREQ("specVersion", (char *)value);
537 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, "x.org.iotivity.newproperty", &value));
538 ASSERT_TRUE(value != NULL);
539 EXPECT_STREQ("value", (char *)value);
543 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DATA_MODEL_VERSION, &value));
544 ASSERT_TRUE(value != NULL);
545 ASSERT_TRUE(((OCStringLL *)value)->value);
546 EXPECT_STREQ("Data Model Version", ((OCStringLL *)value)->value);
547 OCFreeOCStringLL((OCStringLL *) value);
550 EXPECT_STREQ("oic.wk.d", OCGetResourceTypeName(handle, 0));
551 EXPECT_STREQ("oic.wk.tv", OCGetResourceTypeName(handle, 1));
553 EXPECT_EQ(OC_STACK_OK, OCStop());
556 TEST(StackDiscovery, DISABLED_DoResourceDeviceDiscovery)
558 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
559 OCCallbackData cbData;
562 OIC_LOG(INFO, TAG, "Starting DoResourceDeviceDiscovery test ");
563 InitStack(OC_CLIENT);
565 /* Start a discovery query*/
566 char szQueryUri[MAX_QUERY_LENGTH] = { 0 };
567 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
568 cbData.cb = asyncDoResourcesCallback;
569 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
571 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
581 EXPECT_EQ(OC_STACK_OK, OCStop());
584 TEST(StackStop, StackStopWithoutInit)
586 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
587 EXPECT_EQ(OC_STACK_ERROR, OCStop());
590 TEST(StackStop, StackStopRepeated)
592 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
593 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
594 EXPECT_EQ(OC_STACK_OK, OCStop());
595 EXPECT_EQ(OC_STACK_ERROR, OCStop());
598 TEST(StackResource, DISABLED_UpdateResourceNullURI)
600 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
601 OCCallbackData cbData;
604 OIC_LOG(INFO, TAG, "Starting UpdateResourceNullURI test");
605 InitStack(OC_CLIENT);
607 /* Start a discovery query*/
608 char szQueryUri[MAX_QUERY_LENGTH] = { 0 };
609 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
610 cbData.cb = asyncDoResourcesCallback;
611 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
613 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
623 EXPECT_EQ(OC_STACK_OK, OCStop());
626 TEST(StackResource, CreateResourceBadParams)
628 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
629 OIC_LOG(INFO, TAG, "Starting CreateResourceBadParams test");
630 InitStack(OC_SERVER);
632 OCResourceHandle handle;
634 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(NULL, //&handle,
640 OC_DISCOVERABLE|OC_OBSERVABLE));
642 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
648 OC_DISCOVERABLE|OC_OBSERVABLE));
650 // Property bitmask out of range
651 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
657 255));// invalid bitmask for OCResourceProperty
659 EXPECT_EQ(OC_STACK_OK, OCStop());
662 TEST(StackResource, CreateResourceBadUri)
664 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
665 OIC_LOG(INFO, TAG, "Starting CreateResourceBadUri test");
666 InitStack(OC_SERVER);
668 const char *uri257 = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVW";
670 OCResourceHandle handle;
672 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
678 OC_DISCOVERABLE|OC_OBSERVABLE));
680 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
686 OC_DISCOVERABLE|OC_OBSERVABLE));
688 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
694 OC_DISCOVERABLE|OC_OBSERVABLE));
696 EXPECT_EQ(OC_STACK_OK, OCStop());
699 TEST(StackResource, CreateResourceSuccess)
701 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
702 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
703 InitStack(OC_SERVER);
705 OCResourceHandle handle;
706 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
712 OC_DISCOVERABLE|OC_OBSERVABLE));
713 const char *url = OCGetResourceUri(handle);
714 EXPECT_STREQ("/a/led", url);
716 EXPECT_EQ(OC_STACK_OK, OCStop());
719 TEST(StackResource, CreateResourceSuccessWithResourcePolicyPropNone)
721 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
722 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccessWithResourcePolicyPropNone test");
723 InitStack(OC_SERVER);
725 OCResourceHandle handle;
726 // the resource is non-discoverable & non-observable by the client.
727 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
733 OC_RES_PROP_NONE));// the resource is non-discoverable &
734 // non-observable by the client.
735 const char* url = OCGetResourceUri(handle);
736 EXPECT_STREQ("/a/led", url);
738 EXPECT_EQ(OC_STACK_OK, OCStop());
741 TEST(StackResource, CreateResourceWithClientStackMode)
743 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
744 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
745 InitStack(OC_CLIENT);
747 OCResourceHandle handle;
748 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
754 OC_DISCOVERABLE|OC_OBSERVABLE));
756 EXPECT_EQ(OC_STACK_OK, OCStop());
759 TEST(StackResource, CreateResourceFailDuplicateUri)
761 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
762 OIC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
763 InitStack(OC_SERVER);
765 OCResourceHandle handle;
766 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
772 OC_DISCOVERABLE|OC_OBSERVABLE));
773 const char *url = OCGetResourceUri(handle);
774 EXPECT_STREQ("/a/led", url);
776 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
782 OC_DISCOVERABLE|OC_OBSERVABLE));
784 EXPECT_EQ(OC_STACK_OK, OCStop());
787 TEST(StackResource, CreateResourceMultipleResources)
789 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
790 OIC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
791 InitStack(OC_SERVER);
793 OCResourceHandle handle1;
794 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
800 OC_DISCOVERABLE|OC_OBSERVABLE));
802 OCResourceHandle handle2;
803 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
809 OC_DISCOVERABLE|OC_OBSERVABLE));
810 OCResourceHandle handle3;
811 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
817 OC_DISCOVERABLE|OC_OBSERVABLE));
819 const char *url = OCGetResourceUri(handle1);
820 EXPECT_STREQ("/a/led1", url);
822 url = OCGetResourceUri(handle2);
823 EXPECT_STREQ("/a/led2", url);
825 url = OCGetResourceUri(handle3);
826 EXPECT_STREQ("/a/led3", url);
828 EXPECT_EQ(OC_STACK_OK, OCStop());
831 TEST(StackResource, CreateResourceBadResoureType)
833 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
834 OIC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
835 InitStack(OC_SERVER);
837 OCResourceHandle handle;
838 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
844 OC_DISCOVERABLE|OC_OBSERVABLE));
846 OCResourceHandle handle2;
847 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle2,
853 OC_DISCOVERABLE|OC_OBSERVABLE));
855 EXPECT_EQ(OC_STACK_OK, OCStop());
858 TEST(StackResource, CreateResourceGoodResourceType)
860 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
861 OIC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
862 InitStack(OC_SERVER);
864 OCResourceHandle handle;
865 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
871 OC_DISCOVERABLE|OC_OBSERVABLE));
873 EXPECT_EQ(OC_STACK_OK, OCStop());
876 TEST(StackResource, ResourceTypeName)
878 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
879 OIC_LOG(INFO, TAG, "Starting ResourceTypeName test");
880 InitStack(OC_SERVER);
882 OCResourceHandle handle;
883 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
889 OC_DISCOVERABLE|OC_OBSERVABLE));
891 uint8_t numResourceTypes;
892 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
893 EXPECT_EQ(1, numResourceTypes);
894 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
895 EXPECT_STREQ("core.led", resourceTypeName);
897 // try getting resource type names with an invalid index
898 resourceTypeName = OCGetResourceTypeName(handle, 1);
899 EXPECT_STREQ(NULL, resourceTypeName);
900 // try getting resource type names with an invalid index
901 resourceTypeName = OCGetResourceTypeName(handle, 10);
902 EXPECT_STREQ(NULL, resourceTypeName);
904 EXPECT_EQ(OC_STACK_OK, OCStop());
907 TEST(StackResource, ResourceTypeAttrRepresentation)
909 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
910 OIC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
911 InitStack(OC_SERVER);
913 OCResourceHandle handle;
914 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
920 OC_DISCOVERABLE|OC_OBSERVABLE));
922 uint8_t numResourceTypes;
923 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
924 EXPECT_EQ(1, numResourceTypes);
926 EXPECT_EQ(OC_STACK_OK, OCStop());
929 TEST(StackResource, ResourceTypeInterface)
931 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
932 OIC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
933 InitStack(OC_SERVER);
935 OCResourceHandle handle;
936 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
942 OC_DISCOVERABLE|OC_OBSERVABLE));
944 uint8_t numResourceInterfaces;
945 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
946 EXPECT_EQ(2, numResourceInterfaces);
947 const char *resourceInterfaceName1 = OCGetResourceInterfaceName(handle, 0);
948 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, resourceInterfaceName1);
949 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
950 EXPECT_STREQ("core.rw", resourceInterfaceName);
952 // try getting resource interface names with an invalid index
953 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
954 EXPECT_STREQ(NULL, resourceInterfaceName);
955 // try getting resource interface names with an invalid index
956 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
957 EXPECT_STREQ(NULL, resourceInterfaceName);
959 EXPECT_EQ(OC_STACK_OK, OCStop());
962 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
964 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
966 OIC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
968 InitStack(OC_SERVER);
970 OCResourceHandle handle;
971 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
977 OC_DISCOVERABLE|OC_OBSERVABLE));
978 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
979 OC_RSRVD_INTERFACE_DEFAULT));
980 uint8_t numResourceInterfaces;
981 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
982 EXPECT_EQ(2, numResourceInterfaces);
984 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
985 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
987 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
988 EXPECT_STREQ("core.rw", interfaceName_2);
990 EXPECT_EQ(OC_STACK_OK, OCStop());
993 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
995 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
997 OIC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
999 InitStack(OC_SERVER);
1001 OCResourceHandle handle;
1002 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1008 OC_DISCOVERABLE|OC_OBSERVABLE));
1010 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
1011 OC_RSRVD_INTERFACE_DEFAULT));
1012 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
1013 OC_RSRVD_INTERFACE_DEFAULT));
1015 uint8_t numResourceInterfaces;
1016 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1017 EXPECT_EQ(2, numResourceInterfaces);
1019 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
1020 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
1022 EXPECT_EQ(OC_STACK_OK, OCStop());
1025 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
1027 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1029 OIC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
1031 InitStack(OC_SERVER);
1033 OCResourceHandle handle;
1034 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1040 OC_DISCOVERABLE|OC_OBSERVABLE));
1042 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
1044 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
1047 uint8_t numResourceInterfaces;
1048 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1049 EXPECT_EQ(2, numResourceInterfaces);
1051 EXPECT_EQ(OC_STACK_OK, OCStop());
1054 TEST(StackResource, ResourceTypeInterfaceMethods)
1056 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1057 OIC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
1058 InitStack(OC_SERVER);
1060 OCResourceHandle handle;
1061 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1067 OC_DISCOVERABLE|OC_OBSERVABLE));
1069 uint8_t numResourceInterfaces;
1070 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1071 EXPECT_EQ(2, numResourceInterfaces);
1073 EXPECT_EQ(OC_STACK_OK, OCStop());
1076 TEST(StackResource, GetResourceProperties)
1078 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1079 OIC_LOG(INFO, TAG, "Starting GetResourceProperties test");
1080 InitStack(OC_SERVER);
1082 OCResourceHandle handle;
1083 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1089 OC_DISCOVERABLE|OC_OBSERVABLE));
1092 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE|OC_MQ_PUBLISHER, OCGetResourceProperties(handle));
1094 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
1096 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
1098 EXPECT_EQ(OC_STACK_OK, OCStop());
1101 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
1103 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1104 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
1105 InitStack(OC_SERVER);
1106 uint8_t numResources = 0;
1107 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1109 OCResourceHandle handle;
1110 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1116 OC_DISCOVERABLE|OC_OBSERVABLE));
1117 const char *url = OCGetResourceUri(handle);
1118 EXPECT_STREQ("/a1/led", url);
1120 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
1121 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
1122 uint8_t numExpectedResources = 0;
1124 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1125 EXPECT_EQ(numExpectedResources, numResources);
1127 EXPECT_EQ(OC_STACK_OK, OCStop());
1130 TEST(StackResource, StackTestResourceDiscoverOneResource)
1132 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1133 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
1134 InitStack(OC_SERVER);
1136 OCResourceHandle handle;
1137 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1143 OC_DISCOVERABLE|OC_OBSERVABLE));
1144 const char *url = OCGetResourceUri(handle);
1145 EXPECT_STREQ("/a/led", url);
1147 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
1148 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
1150 EXPECT_EQ(OC_STACK_OK, OCStop());
1153 TEST(StackResource, StackTestResourceDiscoverManyResources)
1155 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1156 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
1157 InitStack(OC_SERVER);
1159 OCResourceHandle handle1;
1160 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1167 const char *url = OCGetResourceUri(handle1);
1168 EXPECT_STREQ("/a/led1", url);
1170 OCResourceHandle handle2;
1171 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1177 OC_DISCOVERABLE|OC_OBSERVABLE));
1178 url = OCGetResourceUri(handle2);
1179 EXPECT_STREQ("/a/led2", url);
1181 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
1182 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
1184 OCResourceHandle handle3;
1185 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1191 OC_DISCOVERABLE|OC_OBSERVABLE));
1192 url = OCGetResourceUri(handle3);
1193 EXPECT_STREQ("/a/led3", url);
1195 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
1196 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
1198 OCResourceHandle handle4;
1199 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1206 url = OCGetResourceUri(handle4);
1207 EXPECT_STREQ("/a/led4", url);
1209 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
1210 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
1211 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
1213 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
1215 EXPECT_EQ(OC_STACK_OK, OCStop());
1218 TEST(StackBind, BindResourceTypeNameBad)
1220 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1221 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
1222 InitStack(OC_SERVER);
1224 OCResourceHandle handle;
1225 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1231 OC_DISCOVERABLE|OC_OBSERVABLE));
1233 uint8_t numResourceTypes;
1234 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1235 EXPECT_EQ(1, numResourceTypes);
1236 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1237 EXPECT_STREQ("core.led", resourceTypeName);
1239 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
1240 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.nameBad"));
1241 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.name bad"));
1243 EXPECT_EQ(OC_STACK_OK, OCStop());
1246 TEST(StackBind, BindResourceTypeNameGood)
1248 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1249 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
1250 InitStack(OC_SERVER);
1252 OCResourceHandle handle;
1253 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1259 OC_DISCOVERABLE|OC_OBSERVABLE));
1261 uint8_t numResourceTypes;
1262 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1263 EXPECT_EQ(1, numResourceTypes);
1264 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1265 EXPECT_STREQ("core.led", resourceTypeName);
1267 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1268 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1269 EXPECT_EQ(2, numResourceTypes);
1270 resourceTypeName = OCGetResourceTypeName(handle, 1);
1271 EXPECT_STREQ("core.brightled", resourceTypeName);
1273 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1274 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1275 EXPECT_EQ(3, numResourceTypes);
1276 resourceTypeName = OCGetResourceTypeName(handle, 2);
1277 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
1279 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "x.ReallyReallyBrightLED"));
1280 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1281 EXPECT_EQ(4, numResourceTypes);
1282 resourceTypeName = OCGetResourceTypeName(handle, 3);
1283 EXPECT_STREQ("x.ReallyReallyBrightLED", resourceTypeName);
1285 EXPECT_EQ(OC_STACK_OK, OCStop());
1288 TEST(StackBind, BindResourceTypeAttribRepGood)
1290 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1291 OIC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
1292 InitStack(OC_SERVER);
1294 OCResourceHandle handle;
1295 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1301 OC_DISCOVERABLE|OC_OBSERVABLE));
1303 uint8_t numResourceTypes;
1304 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1305 EXPECT_EQ(1, numResourceTypes);
1307 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1308 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1309 EXPECT_EQ(2, numResourceTypes);
1311 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1312 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1313 EXPECT_EQ(3, numResourceTypes);
1315 EXPECT_EQ(OC_STACK_OK, OCStop());
1319 TEST(StackBind, BindResourceInterfaceNameBad)
1321 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1322 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
1323 InitStack(OC_SERVER);
1325 OCResourceHandle handle;
1326 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1332 OC_DISCOVERABLE|OC_OBSERVABLE));
1334 uint8_t numResourceInterfaces;
1335 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1336 EXPECT_EQ(2, numResourceInterfaces);
1337 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1338 EXPECT_STREQ("core.rw", resourceInterfaceName);
1340 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
1342 EXPECT_EQ(OC_STACK_OK, OCStop());
1345 TEST(StackBind, BindResourceInterfaceNameGood)
1347 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1348 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
1349 InitStack(OC_SERVER);
1351 OCResourceHandle handle;
1352 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1358 OC_DISCOVERABLE|OC_OBSERVABLE));
1360 uint8_t numResourceInterfaces;
1361 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1362 EXPECT_EQ(2, numResourceInterfaces);
1363 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1364 EXPECT_STREQ("core.rw", resourceInterfaceName);
1366 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1368 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1369 EXPECT_EQ(3, numResourceInterfaces);
1370 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
1371 EXPECT_STREQ("core.r", resourceInterfaceName);
1373 EXPECT_EQ(OC_STACK_OK, OCStop());
1376 TEST(StackBind, BindResourceInterfaceMethodsBad)
1378 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1379 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
1380 InitStack(OC_SERVER);
1382 OCResourceHandle handle;
1383 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1389 OC_DISCOVERABLE|OC_OBSERVABLE));
1391 uint8_t numResourceInterfaces;
1392 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1393 EXPECT_EQ(2, numResourceInterfaces);
1395 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1397 EXPECT_EQ(OC_STACK_OK, OCStop());
1400 TEST(StackBind, BindResourceInterfaceMethodsGood)
1402 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1403 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
1404 InitStack(OC_SERVER);
1406 OCResourceHandle handle;
1407 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1413 OC_DISCOVERABLE|OC_OBSERVABLE));
1415 uint8_t numResourceInterfaces;
1416 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1417 EXPECT_EQ(2, numResourceInterfaces);
1419 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1421 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1422 EXPECT_EQ(3, numResourceInterfaces);
1424 EXPECT_EQ(OC_STACK_OK, OCStop());
1427 TEST(StackBind, BindContainedResourceBad)
1429 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1430 OIC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1431 InitStack(OC_SERVER);
1433 OCResourceHandle containerHandle;
1434 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1440 OC_DISCOVERABLE|OC_OBSERVABLE));
1442 OCResourceHandle handle0;
1443 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1449 OC_DISCOVERABLE|OC_OBSERVABLE));
1451 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1453 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1455 EXPECT_EQ(OC_STACK_OK, OCStop());
1458 TEST(StackBind, BindContainedResourceGood)
1460 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1461 OIC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1462 InitStack(OC_SERVER);
1464 uint8_t numResources = 0;
1465 uint8_t numExpectedResources = 0;
1467 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1469 OCResourceHandle containerHandle;
1470 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1476 OC_DISCOVERABLE|OC_OBSERVABLE));
1477 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1478 EXPECT_EQ(++numExpectedResources, numResources);
1480 OCResourceHandle handle0;
1481 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1487 OC_DISCOVERABLE|OC_OBSERVABLE));
1488 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1489 EXPECT_EQ(++numExpectedResources, numResources);
1491 OCResourceHandle handle1;
1492 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1498 OC_DISCOVERABLE|OC_OBSERVABLE));
1499 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1500 EXPECT_EQ(++numExpectedResources, numResources);
1502 OCResourceHandle handle2;
1503 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1509 OC_DISCOVERABLE|OC_OBSERVABLE));
1510 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1511 EXPECT_EQ(++numExpectedResources, numResources);
1513 OCResourceHandle handle3;
1514 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1520 OC_DISCOVERABLE|OC_OBSERVABLE));
1521 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1522 EXPECT_EQ(++numExpectedResources, numResources);
1524 OCResourceHandle handle4;
1525 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1531 OC_DISCOVERABLE|OC_OBSERVABLE));
1532 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1533 EXPECT_EQ(++numExpectedResources, numResources);
1535 OCResourceHandle handle5;
1536 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1542 OC_DISCOVERABLE|OC_OBSERVABLE));
1543 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1544 EXPECT_EQ(++numExpectedResources, numResources);
1547 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1548 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1549 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1550 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1551 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1552 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle5));
1554 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1555 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1556 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1557 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1558 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1559 EXPECT_EQ(handle5, OCGetResourceHandleFromCollection(containerHandle, 5));
1561 EXPECT_EQ(OC_STACK_OK, OCStop());
1565 TEST(StackBind, BindEntityHandlerBad)
1567 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1568 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1569 InitStack(OC_SERVER);
1571 OCResourceHandle handle;
1572 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1578 OC_DISCOVERABLE|OC_OBSERVABLE));
1580 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL, NULL));
1582 EXPECT_EQ(OC_STACK_OK, OCStop());
1585 TEST(StackBind, BindEntityHandlerGood)
1587 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1588 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1589 InitStack(OC_SERVER);
1591 OCResourceHandle handle;
1592 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1598 OC_DISCOVERABLE|OC_OBSERVABLE));
1600 OCEntityHandler myHandler = entityHandler;
1602 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler, NULL));
1604 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1606 EXPECT_EQ(OC_STACK_OK, OCStop());
1609 TEST(StackResourceAccess, GetResourceByIndex)
1611 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1612 OIC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1613 InitStack(OC_SERVER);
1615 uint8_t numResources = 0;
1616 uint8_t numExpectedResources = 0;
1617 uint8_t resourceIndex = 0;
1618 uint8_t prevResources = 0;
1619 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1620 prevResources = numExpectedResources;
1621 OCResourceHandle containerHandle;
1622 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1628 OC_DISCOVERABLE|OC_OBSERVABLE));
1629 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1630 EXPECT_EQ(++numExpectedResources, numResources);
1632 OCResourceHandle handle0;
1633 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1639 OC_DISCOVERABLE|OC_OBSERVABLE));
1640 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1641 EXPECT_EQ(++numExpectedResources, numResources);
1643 OCResourceHandle handle1;
1644 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1650 OC_DISCOVERABLE|OC_OBSERVABLE));
1651 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1652 EXPECT_EQ(++numExpectedResources, numResources);
1654 OCResourceHandle handle2;
1655 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1661 OC_DISCOVERABLE|OC_OBSERVABLE));
1662 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1663 EXPECT_EQ(++numExpectedResources, numResources);
1665 OCResourceHandle handle3;
1666 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1672 OC_DISCOVERABLE|OC_OBSERVABLE));
1673 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1674 EXPECT_EQ(++numExpectedResources, numResources);
1676 OCResourceHandle handle4;
1677 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1683 OC_DISCOVERABLE|OC_OBSERVABLE));
1684 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1685 EXPECT_EQ(++numExpectedResources, numResources);
1687 OCResourceHandle handle5;
1688 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1694 OC_DISCOVERABLE|OC_OBSERVABLE));
1695 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1696 EXPECT_EQ(++numExpectedResources, numResources);
1697 resourceIndex += prevResources;
1698 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1699 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1700 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1701 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1702 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1703 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1704 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1706 EXPECT_EQ(OC_STACK_OK, OCStop());
1709 TEST(StackResourceAccess, DeleteHeadResource)
1711 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1712 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1713 InitStack(OC_SERVER);
1715 uint8_t numResources = 0;
1716 uint8_t numExpectedResources = 0;
1718 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1720 OCResourceHandle handle0;
1721 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1727 OC_DISCOVERABLE|OC_OBSERVABLE));
1728 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1729 EXPECT_EQ(++numExpectedResources, numResources);
1731 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1732 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1733 EXPECT_EQ(--numExpectedResources, numResources);
1735 EXPECT_EQ(OC_STACK_OK, OCStop());
1738 TEST(StackResourceAccess, DeleteHeadResource2)
1740 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1741 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1742 InitStack(OC_SERVER);
1744 uint8_t numResources = 0;
1745 uint8_t numExpectedResources = 0;
1747 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1748 OCResourceHandle handle0;
1749 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1755 OC_DISCOVERABLE|OC_OBSERVABLE));
1756 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1757 EXPECT_EQ(++numExpectedResources, numResources);
1759 OCResourceHandle handle1;
1760 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1766 OC_DISCOVERABLE|OC_OBSERVABLE));
1767 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1768 EXPECT_EQ(++numExpectedResources, numResources);
1770 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1771 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1772 EXPECT_EQ(--numExpectedResources, numResources);
1774 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
1776 EXPECT_EQ(OC_STACK_OK, OCStop());
1780 TEST(StackResourceAccess, DeleteLastResource)
1782 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1783 OIC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1784 InitStack(OC_SERVER);
1786 uint8_t numResources = 0;
1787 uint8_t numExpectedResources = 0;
1789 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1791 OCResourceHandle handle0;
1792 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1798 OC_DISCOVERABLE|OC_OBSERVABLE));
1799 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1800 EXPECT_EQ(++numExpectedResources, numResources);
1802 OCResourceHandle handle1;
1803 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1809 OC_DISCOVERABLE|OC_OBSERVABLE));
1810 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1811 EXPECT_EQ(++numExpectedResources, numResources);
1813 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1814 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1815 EXPECT_EQ(--numExpectedResources, numResources);
1817 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
1819 OCResourceHandle handle2;
1820 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1826 OC_DISCOVERABLE|OC_OBSERVABLE));
1827 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1828 EXPECT_EQ(++numExpectedResources, numResources);
1830 EXPECT_EQ(OC_STACK_OK, OCStop());
1833 TEST(StackResourceAccess, DeleteMiddleResource)
1835 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1836 OIC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1837 InitStack(OC_SERVER);
1839 uint8_t numResources = 0;
1840 uint8_t numExpectedResources = 0;
1841 uint8_t resourceIndex = InitResourceIndex();
1843 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1844 resourceIndex = numExpectedResources;
1845 OCResourceHandle handle0;
1846 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1852 OC_DISCOVERABLE|OC_OBSERVABLE));
1853 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1854 EXPECT_EQ(++numExpectedResources, numResources);
1856 OCResourceHandle handle1;
1857 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1863 OC_DISCOVERABLE|OC_OBSERVABLE));
1864 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1865 EXPECT_EQ(++numExpectedResources, numResources);
1867 OCResourceHandle handle2;
1868 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1874 OC_DISCOVERABLE|OC_OBSERVABLE));
1875 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1876 EXPECT_EQ(++numExpectedResources, numResources);
1878 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1879 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1880 EXPECT_EQ(--numExpectedResources, numResources);
1882 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1883 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1885 // Make sure the resource elements are still correct
1886 uint8_t numResourceInterfaces;
1887 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1888 EXPECT_EQ(2, numResourceInterfaces);
1889 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 1);
1890 EXPECT_STREQ("core.rw", resourceInterfaceName);
1892 EXPECT_EQ(OC_STACK_OK, OCStop());
1895 // Visual Studio versions earlier than 2015 have bugs in is_pod and report the wrong answer.
1896 #if !defined(_MSC_VER) || (_MSC_VER >= 1900)
1897 TEST(PODTests, OCHeaderOption)
1899 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1902 TEST(PODTests, OCCallbackData)
1904 EXPECT_TRUE(std::is_pod<OCCallbackData>::value);
1908 TEST(OCDoDirectPairingTests, Nullpeer)
1910 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, NULL, pmSel, &pinNumber, &resultCallback));
1913 TEST(OCDoDirectPairingTests, NullCallback)
1915 EXPECT_EQ(OC_STACK_INVALID_CALLBACK,OCDoDirectPairing(NULL, &peer, pmSel, &pinNumber, NULL));
1918 TEST(OCDoDirectPairingTests, NullpinNumber)
1920 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, &peer, pmSel, NULL, &resultCallback));
1923 TEST(StackResource, MultipleResourcesDiscovery)
1925 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1926 OIC_LOG(INFO, TAG, "Starting MultipleResourcesDiscovery test");
1927 InitStack(OC_SERVER);
1929 OCResourceHandle handle1;
1930 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1936 OC_DISCOVERABLE|OC_OBSERVABLE));
1938 OCResourceHandle handle2;
1939 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1945 OC_DISCOVERABLE|OC_OBSERVABLE));
1946 OCResourceHandle handle3;
1947 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1953 OC_DISCOVERABLE|OC_OBSERVABLE));
1954 /* Start a discovery query*/
1955 char szQueryUri[MAX_QUERY_LENGTH] = "/oic/res?if=oic.if.ll";
1956 OCCallbackData cbData;
1957 cbData.cb = discoveryCallback;
1958 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
1962 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
1973 EXPECT_EQ(OC_STACK_OK, OCStop());
1976 TEST(StackPayload, CloneByteString)
1978 uint8_t bytes[] = { 0, 1, 2, 3 };
1979 OCByteString byteString;
1980 byteString.bytes = bytes;
1981 byteString.len = sizeof(bytes);
1983 OCRepPayload *original = OCRepPayloadCreate();
1984 ASSERT_TRUE(original != NULL);
1985 EXPECT_TRUE(OCRepPayloadSetPropByteString(original, "name", byteString));
1987 OCRepPayload *clone = OCRepPayloadClone(original);
1988 ASSERT_TRUE(clone != NULL);
1990 OCRepPayloadDestroy(original);
1992 OCByteString cloneByteString;
1993 EXPECT_TRUE(OCRepPayloadGetPropByteString(clone, "name", &cloneByteString));
1994 ASSERT_TRUE(cloneByteString.bytes != NULL);
1995 EXPECT_EQ(sizeof(bytes), cloneByteString.len);
1996 EXPECT_TRUE(0 == memcmp(bytes, cloneByteString.bytes, sizeof(bytes)));
1997 OICFree(cloneByteString.bytes);
1999 OCRepPayloadDestroy(clone);
2002 TEST(StackUri, Rfc6874_Noop_1)
2004 char validIPv6Address[] = "FF01:0:0:0:0:0:0:FB";
2005 char bytes[100] = {0};
2006 strncpy(bytes, validIPv6Address, sizeof(bytes));
2008 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
2010 // No % sign, should do nothing
2011 EXPECT_STREQ(bytes, validIPv6Address);
2012 EXPECT_EQ(OC_STACK_OK, result);
2015 TEST(StackUri, Rfc6874_Noop_2)
2017 char validIPv6Address[] = "3812:a61::4:1";
2018 char bytes[100] = {0};
2020 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
2022 // No % sign, should do nothing
2023 EXPECT_STREQ(bytes, validIPv6Address);
2024 EXPECT_EQ(OC_STACK_OK, result);
2027 TEST(StackUri, Rfc6874_WithEncoding)
2029 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%wlan0";
2030 char validIPv6AddressEncoded[] = "fe80::dafe:e3ff:fe00:ebfa%25wlan0";
2031 char bytes[100] = "";
2032 strncpy(bytes, validIPv6Address, sizeof(bytes));
2034 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
2036 // Encoding should have occured
2037 EXPECT_STREQ(bytes, validIPv6AddressEncoded);
2038 EXPECT_EQ(OC_STACK_OK, result);
2041 TEST(StackUri, Rfc6874_WithEncoding_ExtraPercent)
2043 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%%wlan0";
2044 char bytes[100] = {0};
2046 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
2048 // Encoding should have failed due to extra '%' character
2049 EXPECT_STREQ(bytes, "");
2050 EXPECT_EQ(OC_STACK_ERROR, result);
2053 TEST(StackUri, Rfc6874_AlreadyEncoded)
2055 char validIPv6AddressEncoded[] = "fe80::dafe:e3ff:fe00:ebfa%25wlan0";
2056 char bytes[100] = {0};
2058 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6AddressEncoded);
2060 // Encoding should have failed due to extra '%' character
2061 EXPECT_STREQ(bytes, "");
2062 EXPECT_EQ(OC_STACK_ERROR, result);
2065 TEST(StackUri, Rfc6874_NoOverflow)
2067 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%wlan0";
2068 char addrBuffer[100];
2069 char bytes[100] = {0};
2070 memset(addrBuffer, sizeof(addrBuffer), '_');
2072 // Just enough room to encode
2073 addrBuffer[sizeof(addrBuffer) - sizeof(validIPv6Address) - 3] = '\0';
2074 strcat(addrBuffer, validIPv6Address);
2076 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), addrBuffer);
2078 // Encoding should have succeeded
2079 EXPECT_EQ(OC_STACK_OK, result);
2082 TEST(StackUri, Rfc6874_NoOverflow_2)
2084 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%wlan0";
2085 char addrBuffer[100];
2086 char bytes[100] = {0};
2087 memset(addrBuffer, sizeof(addrBuffer), '_');
2089 // Not enough room to encode
2090 addrBuffer[sizeof(addrBuffer) - sizeof(validIPv6Address) - 1] = '\0';
2091 strcat(addrBuffer, validIPv6Address);
2093 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), addrBuffer);
2095 // Encoding should have failed due to output size limitations
2096 EXPECT_STREQ(bytes, "");
2097 EXPECT_EQ(OC_STACK_ERROR, result);
2100 TEST(StackHeaderOption, setHeaderOption)
2102 uint8_t optionValue1[MAX_HEADER_OPTION_DATA_LENGTH] =
2104 OCHeaderOption options[MAX_HEADER_OPTIONS] =
2106 { OC_COAP_ID, 6, 8, optionValue1 }, };
2107 uint8_t optionData = 255;
2108 size_t optionDataSize = sizeof(optionData);
2109 size_t numOptions = 1;
2110 uint16_t optionID = 2048;
2111 EXPECT_EQ(OC_STACK_OK, OCSetHeaderOption(options,
2116 EXPECT_EQ(options[1].optionID, optionID);
2117 EXPECT_EQ(options[1].optionData[0], 255);
2120 TEST(StackHeaderOption, getHeaderOption)
2122 uint8_t optionValue1[MAX_HEADER_OPTION_DATA_LENGTH] =
2124 uint8_t optionValue2[MAX_HEADER_OPTION_DATA_LENGTH] =
2126 OCHeaderOption options[MAX_HEADER_OPTIONS] =
2128 { OC_COAP_ID, 6, 8, optionValue1 },
2129 { OC_COAP_ID, 2048, 16, optionValue2 }, };
2130 uint8_t optionData[MAX_HEADER_OPTION_DATA_LENGTH];
2131 size_t optionDataSize = sizeof(optionData);
2132 size_t numOptions = 2;
2133 uint16_t optionID = 6;
2134 uint16_t actualDataSize = 0;
2135 EXPECT_EQ(OC_STACK_OK, OCGetHeaderOption(options,
2141 EXPECT_EQ(optionData[0], 1);
2142 EXPECT_EQ(actualDataSize, 8);