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"
31 #include "ocresourcehandler.h"
34 #include "gtest/gtest.h"
35 #include <sys/types.h>
44 //-----------------------------------------------------------------------------
46 //-----------------------------------------------------------------------------
53 #include "gtest_helper.h"
57 namespace itst = iotivity::test;
59 #define DEFAULT_CONTEXT_VALUE 0x99
60 #define INVALID_TPS_FLAGS (250)
61 #define INVALID_TPS_FLAGS_ZERO (0)
63 //-----------------------------------------------------------------------------
65 //-----------------------------------------------------------------------------
66 #define TAG "TestHarness"
68 char gDeviceUUID[] = "fe3f9a68-4931-4cb0-9ea4-81702b43116c";
69 char gDevicePIID[] = "32684bf3-4c44-47b0-99fe-6a9a59b73a8d";
70 char gManufacturerName[] = "myName";
72 static char pinNumber;
73 static OCDPDev_t peer;
75 std::chrono::seconds const SHORT_TEST_TIMEOUT = std::chrono::seconds(5);
76 std::chrono::seconds const LONG_TEST_TIMEOUT = std::chrono::seconds(450);
78 //-----------------------------------------------------------------------------
80 //-----------------------------------------------------------------------------
81 extern "C" OCStackApplicationResult asyncDoResourcesCallback(void* ctx,
82 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
84 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
86 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
88 if(ctx == (void*)DEFAULT_CONTEXT_VALUE) {
89 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
91 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
93 return OC_STACK_KEEP_TRANSACTION;
96 static void resultCallback(void *UNUSED1, OCDPDev_t *UNUSED2, OCStackResult UNUSED3)
103 extern "C" OCStackApplicationResult discoveryCallback(void* ctx,
104 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
106 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
108 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
110 if(ctx == (void*)DEFAULT_CONTEXT_VALUE)
112 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
115 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
117 OCDiscoveryPayload *discoveryPayload = ((OCDiscoveryPayload *) clientResponse->payload);
118 EXPECT_TRUE(discoveryPayload != NULL);
119 OCResourcePayload *res = discoveryPayload->resources;
121 for (OCResourcePayload *res1 = discoveryPayload->resources; res1; res1 = res1->next)
126 EXPECT_EQ("/a/led1", res->uri);
128 EXPECT_EQ("/a/led2", res->uri);
130 EXPECT_EQ("/a/led3", res->uri);
132 EXPECT_TRUE(res == NULL);
134 return OC_STACK_KEEP_TRANSACTION;
137 //-----------------------------------------------------------------------------
139 //-----------------------------------------------------------------------------
140 OCEntityHandlerResult entityHandler(OCEntityHandlerFlag /*flag*/,
141 OCEntityHandlerRequest * /*entityHandlerRequest*/,
142 void* /*callbackParam*/)
144 OIC_LOG(INFO, TAG, "Entering entityHandler");
149 //-----------------------------------------------------------------------------
151 //-----------------------------------------------------------------------------
152 void InitStack(OCMode mode)
154 OIC_LOG(INFO, TAG, "Entering InitStack");
156 EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, mode));
157 OIC_LOG(INFO, TAG, "Leaving InitStack");
160 uint8_t InitNumExpectedResources()
163 // When presence is enabled, it is a resource and so is (currently) included
164 // in the returned resource count returned by the OCGetNumberOfResources API.
171 uint8_t InitResourceIndex()
174 // When presence is enabled, it is a resource and so is (currently) included
175 // in the returned resource count returned by the OCGetNumberOfResources API.
176 // The index of the presence resource is 0, so the first user app resource index
184 extern "C" uint32_t g_ocStackStartCount;
186 OCDeviceProperties* getTestDeviceProps()
188 OCDeviceProperties* deviceProps = (OCDeviceProperties*)OICCalloc(1, sizeof(OCDeviceProperties));
189 if (NULL != deviceProps)
191 OICStrcpy(deviceProps->protocolIndependentId, UUID_STRING_SIZE, gDevicePIID);
197 class OCDiscoverTests : public testing::Test
202 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT_SERVER));
205 virtual void TearDown()
211 class OCDevicePropertiesTests : public testing::Test
216 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
219 //-----------------------------------------------------------------------------
221 //-----------------------------------------------------------------------------
223 TEST(StackInit, StackInitNullAddr)
225 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
226 EXPECT_EQ(OC_STACK_OK, OCInit(0, 5683, OC_SERVER));
227 EXPECT_EQ(1u, g_ocStackStartCount);
228 EXPECT_EQ(OC_STACK_OK, OCStop());
229 EXPECT_EQ(0u, g_ocStackStartCount);
232 TEST(StackInit, StackInitNullPort)
234 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
235 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 0, OC_SERVER));
236 EXPECT_EQ(OC_STACK_OK, OCStop());
239 TEST(StackInit, StackInitNullAddrAndPort)
241 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
242 EXPECT_EQ(OC_STACK_OK, OCInit(0, 0, OC_SERVER));
243 EXPECT_EQ(OC_STACK_OK, OCStop());
246 TEST(StackInit, StackInitInvalidMode)
248 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
249 EXPECT_EQ(OC_STACK_ERROR, OCInit(0, 0, (OCMode)10));
250 EXPECT_EQ(0u, g_ocStackStartCount);
253 TEST(StackStart, StackStartSuccessClient)
255 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
256 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
257 EXPECT_EQ(OC_STACK_OK, OCStop());
260 TEST(StackStart, StackStartSuccessServer)
262 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
263 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
264 EXPECT_EQ(OC_STACK_OK, OCStop());
267 TEST(StackStart, StackStartSuccessClientServer)
269 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
270 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT_SERVER));
271 EXPECT_EQ(OC_STACK_OK, OCStop());
274 TEST(StackStart, StackStartSuccessServerThenClient)
276 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
277 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
278 EXPECT_EQ(OC_STACK_OK, OCStop());
279 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
280 EXPECT_EQ(OC_STACK_OK, OCStop());
283 TEST(StackStart, StackStartSuccessClientThenServer)
285 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
286 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
287 EXPECT_EQ(OC_STACK_OK, OCStop());
288 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
289 EXPECT_EQ(OC_STACK_OK, OCStop());
292 TEST(StackStart, StackStartSuccessiveInits)
294 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
295 EXPECT_EQ(0u, g_ocStackStartCount);
296 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
297 EXPECT_EQ(1u, g_ocStackStartCount);
298 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.2", 5683, OC_SERVER));
299 EXPECT_EQ(2u, g_ocStackStartCount);
300 EXPECT_EQ(OC_STACK_OK, OCStop());
301 EXPECT_EQ(1u, g_ocStackStartCount);
302 EXPECT_EQ(OC_STACK_OK, OCStop());
303 EXPECT_EQ(0u, g_ocStackStartCount);
306 TEST(StackStart, SetPlatformInfoValid)
308 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
309 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
311 OCPlatformInfo info =
315 0, 0, 0, 0, 0, 0, 0, 0, 0
317 EXPECT_EQ(OC_STACK_OK, OCSetPlatformInfo(info));
318 EXPECT_EQ(OC_STACK_OK, OCStop());
321 TEST(StackStart, SetPlatformInfoWithClientMode)
323 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
324 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
326 OCPlatformInfo info =
330 0, 0, 0, 0, 0, 0, 0, 0, 0
332 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
333 EXPECT_EQ(OC_STACK_OK, OCStop());
336 TEST(StackStart, SetPlatformInfoWithNoPlatformID)
338 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
339 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
341 OCPlatformInfo info =
345 0, 0, 0, 0, 0, 0, 0, 0, 0
348 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
349 EXPECT_EQ(OC_STACK_OK, OCStop());
352 TEST(StackStart, SetPlatformInfoWithBadPlatformID)
354 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
355 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
357 char invalidId[] = "myDeviceUUID";
358 OCPlatformInfo info =
362 0, 0, 0, 0, 0, 0, 0, 0, 0
365 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
366 EXPECT_EQ(OC_STACK_OK, OCStop());
369 TEST(StackStart, SetPlatformInfoWithNoManufacturerName)
371 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
372 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
374 OCPlatformInfo info =
377 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
380 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
381 EXPECT_EQ(OC_STACK_OK, OCStop());
384 TEST(StackStart, SetPlatformInfoWithZeroLengthManufacturerName)
386 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
387 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
389 OCPlatformInfo info =
392 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
394 info.manufacturerName = (char *) "";
396 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
397 EXPECT_EQ(OC_STACK_OK, OCStop());
400 TEST(StackStart, SetPlatformInfoWithTooLongManufacName)
402 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
403 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
404 char gTooLongManufacturerName[MAX_PLATFORM_NAME_LENGTH+2];
405 for (int i = 0; i <= MAX_PLATFORM_NAME_LENGTH; i++ )
407 gTooLongManufacturerName[i] = 'a';
409 gTooLongManufacturerName[MAX_PLATFORM_NAME_LENGTH+1] = '\0';
410 OCPlatformInfo info =
413 gTooLongManufacturerName,
414 0, 0, 0, 0, 0, 0, 0, 0, 0
417 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
418 EXPECT_EQ(OC_STACK_OK, OCStop());
421 TEST(StackStart, SetPlatformInfoWithTooLongManufacURL)
423 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
424 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
425 char gManufacturerUrl[MAX_PLATFORM_URL_LENGTH+2];
426 for (int i = 0; i <= MAX_PLATFORM_URL_LENGTH; i++ )
428 gManufacturerUrl[i] = 'a';
430 gManufacturerUrl[MAX_PLATFORM_URL_LENGTH+1] = '\0';
431 OCPlatformInfo info =
436 0, 0, 0, 0, 0, 0, 0, 0
439 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
440 EXPECT_EQ(OC_STACK_OK, OCStop());
443 TEST(StackStart, SetPlatformInfoWithOCSetPropertyValueAPI)
445 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
446 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
447 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_ID, gDeviceUUID));
448 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_NAME, gManufacturerName));
449 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_URL, "http://www.iotivity.org"));
450 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MODEL_NUM, "S777"));
451 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_DATE, "15 Nov, 2016"));
452 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_OS_VERSION, "1.1"));
453 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_VERSION, "14"));
454 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_HARDWARE_VERSION, "0.1"));
455 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_FIRMWARE_VERSION, "0.1"));
456 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SUPPORT_URL, "http://www.iotivity.org"));
457 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SYSTEM_TIME, ""));
458 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, "x.org.iotivity.AAAA", "value"));
459 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, NULL, ""));
460 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPropertyValue(PAYLOAD_TYPE_INVALID, NULL, NULL));
461 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPropertyValue(PAYLOAD_TYPE_INVALID, NULL, NULL));
462 EXPECT_EQ(OC_STACK_OK, OCStop());
465 TEST(StackStart, GetPlatformInfoWithOCGetPropertyValueAPI)
467 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
468 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
469 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_ID, gDeviceUUID));
470 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_NAME, gManufacturerName));
471 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_URL, "http://www.iotivity.org"));
472 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MODEL_NUM, "S777"));
473 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_DATE, "15 Nov, 2016"));
474 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_OS_VERSION, "1.1"));
475 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_VERSION, "14"));
476 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_HARDWARE_VERSION, "0.1"));
477 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_FIRMWARE_VERSION, "0.1"));
478 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SUPPORT_URL, "http://www.iotivity.org"));
479 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SYSTEM_TIME, ""));
480 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, "x.org.iotivity.AAAA", "value"));
483 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_ID, &value));
484 ASSERT_TRUE(value != NULL);
485 EXPECT_STREQ(gDeviceUUID, (char *)value);
489 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_NAME, &value));
490 ASSERT_TRUE(value != NULL);
491 EXPECT_STREQ(gManufacturerName, (char *)value);
495 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_URL, &value));
496 ASSERT_TRUE(value != NULL);
497 EXPECT_STREQ("http://www.iotivity.org", (char *)value);
501 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MODEL_NUM, &value));
502 ASSERT_TRUE(value != NULL);
503 EXPECT_STREQ("S777", (char *)value);
507 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_DATE, &value));
508 ASSERT_TRUE(value != NULL);
509 EXPECT_STREQ("15 Nov, 2016", (char *)value);
513 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_OS_VERSION, &value));
514 ASSERT_TRUE(value != NULL);
515 EXPECT_STREQ("1.1", (char *)value);
519 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_VERSION, &value));
520 ASSERT_TRUE(value != NULL);
521 EXPECT_STREQ("14", (char *)value);
525 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_HARDWARE_VERSION, &value));
526 ASSERT_TRUE(value != NULL);
527 EXPECT_STREQ("0.1", (char *)value);
531 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_FIRMWARE_VERSION, &value));
532 ASSERT_TRUE(value != NULL);
533 EXPECT_STREQ("0.1", (char *)value);
537 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SUPPORT_URL, &value));
538 ASSERT_TRUE(value != NULL);
539 EXPECT_STREQ("http://www.iotivity.org", (char *)value);
543 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SYSTEM_TIME, &value));
544 ASSERT_TRUE(value != NULL);
545 EXPECT_STREQ("", (char *)value);
549 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, "x.org.iotivity.AAAA", &value));
550 ASSERT_TRUE(value != NULL);
551 EXPECT_STREQ("value", (char *)value);
554 EXPECT_EQ(OC_STACK_OK, OCStop());
557 TEST(StackStart, SetDeviceInfoAPI)
559 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
560 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
561 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_NAME, "Sample"));
562 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_SPEC_VERSION, "specVersion"));
563 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, "x.org.iotivity.newproperty", "value"));
564 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DATA_MODEL_VERSION,
565 "Data Model Version"));
566 OCResourceHandle handle = OCGetResourceHandleAtUri(OC_RSRVD_DEVICE_URI);
567 EXPECT_TRUE(handle != NULL);
568 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "oic.wk.tv"));
569 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPropertyValue(PAYLOAD_TYPE_INVALID, NULL, NULL));
570 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPropertyValue(PAYLOAD_TYPE_INVALID, "", NULL));
571 EXPECT_EQ(OC_STACK_OK, OCStop());
574 TEST(StackStart, GetDeviceInfoAPI)
576 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
577 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
578 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_NAME, "Sample"));
579 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_SPEC_VERSION, "specVersion"));
580 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, "x.org.iotivity.newproperty", "value"));
581 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DATA_MODEL_VERSION,
582 "Data Model Version"));
583 OCResourceHandle handle = OCGetResourceHandleAtUri(OC_RSRVD_DEVICE_URI);
584 EXPECT_TRUE(handle != NULL);
585 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "oic.wk.tv"));
588 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_NAME, &value));
589 ASSERT_TRUE(value != NULL);
590 EXPECT_STREQ("Sample", (char *)value);
594 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_SPEC_VERSION, &value));
595 ASSERT_TRUE(value != NULL);
596 EXPECT_STREQ("specVersion", (char *)value);
600 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, "x.org.iotivity.newproperty", &value));
601 ASSERT_TRUE(value != NULL);
602 EXPECT_STREQ("value", (char *)value);
606 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DATA_MODEL_VERSION, &value));
607 ASSERT_TRUE(value != NULL);
608 ASSERT_TRUE(((OCStringLL *)value)->value != NULL);
609 EXPECT_STREQ("Data Model Version", ((OCStringLL *)value)->value);
610 OCFreeOCStringLL((OCStringLL *) value);
613 EXPECT_STREQ("oic.wk.d", OCGetResourceTypeName(handle, 0));
614 EXPECT_STREQ("oic.wk.tv", OCGetResourceTypeName(handle, 1));
616 EXPECT_EQ(OC_STACK_OK, OCStop());
619 TEST(StackDiscovery, DISABLED_DoResourceDeviceDiscovery)
621 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
622 OCCallbackData cbData;
625 OIC_LOG(INFO, TAG, "Starting DoResourceDeviceDiscovery test ");
626 InitStack(OC_CLIENT);
628 /* Start a discovery query*/
629 char szQueryUri[MAX_QUERY_LENGTH] = { 0 };
630 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
631 cbData.cb = asyncDoResourcesCallback;
632 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
634 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
644 EXPECT_EQ(OC_STACK_OK, OCStop());
647 TEST(StackResource, DISABLED_UpdateResourceNullURI)
649 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
650 OCCallbackData cbData;
653 OIC_LOG(INFO, TAG, "Starting UpdateResourceNullURI test");
654 InitStack(OC_CLIENT);
656 /* Start a discovery query*/
657 char szQueryUri[MAX_QUERY_LENGTH] = { 0 };
658 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
659 cbData.cb = asyncDoResourcesCallback;
660 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
662 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
672 EXPECT_EQ(OC_STACK_OK, OCStop());
675 TEST(StackResource, CreateResourceBadParams)
677 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
678 OIC_LOG(INFO, TAG, "Starting CreateResourceBadParams test");
679 InitStack(OC_SERVER);
681 OCResourceHandle handle;
683 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(NULL, //&handle,
689 OC_DISCOVERABLE|OC_OBSERVABLE));
691 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
697 OC_DISCOVERABLE|OC_OBSERVABLE));
699 // Property bitmask out of range
700 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
706 255));// invalid bitmask for OCResourceProperty
708 EXPECT_EQ(OC_STACK_OK, OCStop());
711 TEST(StackResource, CreateResourceBadUri)
713 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
714 OIC_LOG(INFO, TAG, "Starting CreateResourceBadUri test");
715 InitStack(OC_SERVER);
717 const char *uri257 = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVW";
719 OCResourceHandle handle;
721 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
727 OC_DISCOVERABLE|OC_OBSERVABLE));
729 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
735 OC_DISCOVERABLE|OC_OBSERVABLE));
737 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
743 OC_DISCOVERABLE|OC_OBSERVABLE));
745 EXPECT_EQ(OC_STACK_OK, OCStop());
748 TEST(StackResource, CreateResourceSuccess)
750 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
751 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
752 InitStack(OC_SERVER);
754 OCResourceHandle handle;
755 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
761 OC_DISCOVERABLE|OC_OBSERVABLE));
762 const char *url = OCGetResourceUri(handle);
763 EXPECT_STREQ("/a/led", url);
765 EXPECT_EQ(OC_STACK_OK, OCStop());
768 TEST(StackResource, CreateResourceSuccessWithResourcePolicyPropNone)
770 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
771 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccessWithResourcePolicyPropNone test");
772 InitStack(OC_SERVER);
774 OCResourceHandle handle;
775 // the resource is non-discoverable & non-observable by the client.
776 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
782 OC_RES_PROP_NONE));// the resource is non-discoverable &
783 // non-observable by the client.
784 const char* url = OCGetResourceUri(handle);
785 EXPECT_STREQ("/a/led", url);
787 EXPECT_EQ(OC_STACK_OK, OCStop());
790 TEST(StackResource, CreateResourceWithClientStackMode)
792 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
793 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
794 InitStack(OC_CLIENT);
796 OCResourceHandle handle;
797 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
803 OC_DISCOVERABLE|OC_OBSERVABLE));
805 EXPECT_EQ(OC_STACK_OK, OCStop());
808 TEST(StackResource, CreateResourceFailDuplicateUri)
810 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
811 OIC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
812 InitStack(OC_SERVER);
814 OCResourceHandle handle;
815 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
821 OC_DISCOVERABLE|OC_OBSERVABLE));
822 const char *url = OCGetResourceUri(handle);
823 EXPECT_STREQ("/a/led", url);
825 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
831 OC_DISCOVERABLE|OC_OBSERVABLE));
833 EXPECT_EQ(OC_STACK_OK, OCStop());
836 TEST(StackResource, CreateResourceMultipleResources)
838 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
839 OIC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
840 InitStack(OC_SERVER);
842 OCResourceHandle handle1;
843 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
849 OC_DISCOVERABLE|OC_OBSERVABLE));
851 OCResourceHandle handle2;
852 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
858 OC_DISCOVERABLE|OC_OBSERVABLE));
859 OCResourceHandle handle3;
860 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
866 OC_DISCOVERABLE|OC_OBSERVABLE));
868 const char *url = OCGetResourceUri(handle1);
869 EXPECT_STREQ("/a/led1", url);
871 url = OCGetResourceUri(handle2);
872 EXPECT_STREQ("/a/led2", url);
874 url = OCGetResourceUri(handle3);
875 EXPECT_STREQ("/a/led3", url);
877 EXPECT_EQ(OC_STACK_OK, OCStop());
880 TEST(StackResource, CreateResourceBadResoureType)
882 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
883 OIC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
884 InitStack(OC_SERVER);
886 OCResourceHandle handle;
887 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
893 OC_DISCOVERABLE|OC_OBSERVABLE));
895 OCResourceHandle handle2;
896 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle2,
902 OC_DISCOVERABLE|OC_OBSERVABLE));
904 EXPECT_EQ(OC_STACK_OK, OCStop());
907 TEST(StackResource, CreateResourceGoodResourceType)
909 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
910 OIC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
911 InitStack(OC_SERVER);
913 OCResourceHandle handle;
914 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
920 OC_DISCOVERABLE|OC_OBSERVABLE));
922 EXPECT_EQ(OC_STACK_OK, OCStop());
925 TEST(StackResource, CreateResourceWithBadEndpointsFlags)
927 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
929 OIC_LOG(INFO, TAG, "CreateResourceWithEndpointsFlags test");
931 InitStack(OC_SERVER);
933 OCResourceHandle handle;
934 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResourceWithEp(&handle,
940 OC_DISCOVERABLE|OC_OBSERVABLE,
941 (OCTpsSchemeFlags)INVALID_TPS_FLAGS));
943 EXPECT_EQ(OC_STACK_OK, OCStop());
946 TEST(StackResource, CreateResourceWithGoodEndpointsFlags)
948 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
950 OIC_LOG(INFO, TAG, "CreateResourceWithEndpointsFlags test");
952 InitStack(OC_SERVER);
954 OCResourceHandle handle;
955 EXPECT_EQ(OC_STACK_OK, OCCreateResourceWithEp(&handle,
961 OC_DISCOVERABLE|OC_OBSERVABLE,
963 OCResourceHandle handle2;
964 EXPECT_EQ(OC_STACK_OK, OCCreateResourceWithEp(&handle2,
970 OC_DISCOVERABLE|OC_OBSERVABLE,
973 OCResourceHandle handle3;
974 EXPECT_EQ(OC_STACK_OK, OCCreateResourceWithEp(&handle3,
980 OC_DISCOVERABLE|OC_OBSERVABLE,
983 OCResourceHandle handle4;
984 EXPECT_EQ(OC_STACK_OK, OCCreateResourceWithEp(&handle4,
990 OC_DISCOVERABLE|OC_OBSERVABLE,
991 (OCTpsSchemeFlags)(OC_COAP | OC_COAP_TCP)));
994 EXPECT_EQ(OC_STACK_OK, OCStop());
997 TEST(StackResource, ResourceTypeName)
999 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1000 OIC_LOG(INFO, TAG, "Starting ResourceTypeName test");
1001 InitStack(OC_SERVER);
1003 OCResourceHandle handle;
1004 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1010 OC_DISCOVERABLE|OC_OBSERVABLE));
1012 uint8_t numResourceTypes;
1013 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1014 EXPECT_EQ(1, numResourceTypes);
1015 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1016 EXPECT_STREQ("core.led", resourceTypeName);
1018 // try getting resource type names with an invalid index
1019 resourceTypeName = OCGetResourceTypeName(handle, 1);
1020 EXPECT_STREQ(NULL, resourceTypeName);
1021 // try getting resource type names with an invalid index
1022 resourceTypeName = OCGetResourceTypeName(handle, 10);
1023 EXPECT_STREQ(NULL, resourceTypeName);
1025 EXPECT_EQ(OC_STACK_OK, OCStop());
1028 TEST(StackResource, ResourceTypeAttrRepresentation)
1030 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1031 OIC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
1032 InitStack(OC_SERVER);
1034 OCResourceHandle handle;
1035 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1041 OC_DISCOVERABLE|OC_OBSERVABLE));
1043 uint8_t numResourceTypes;
1044 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1045 EXPECT_EQ(1, numResourceTypes);
1047 EXPECT_EQ(OC_STACK_OK, OCStop());
1050 TEST(StackResource, ResourceTypeInterface)
1052 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1053 OIC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
1054 InitStack(OC_SERVER);
1056 OCResourceHandle handle;
1057 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1063 OC_DISCOVERABLE|OC_OBSERVABLE));
1065 uint8_t numResourceInterfaces;
1066 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1067 EXPECT_EQ(2, numResourceInterfaces);
1068 const char *resourceInterfaceName1 = OCGetResourceInterfaceName(handle, 0);
1069 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, resourceInterfaceName1);
1070 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1071 EXPECT_STREQ("core.rw", resourceInterfaceName);
1073 // try getting resource interface names with an invalid index
1074 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
1075 EXPECT_STREQ(NULL, resourceInterfaceName);
1076 // try getting resource interface names with an invalid index
1077 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
1078 EXPECT_STREQ(NULL, resourceInterfaceName);
1080 EXPECT_EQ(OC_STACK_OK, OCStop());
1083 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
1085 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1087 OIC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
1089 InitStack(OC_SERVER);
1091 OCResourceHandle handle;
1092 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1098 OC_DISCOVERABLE|OC_OBSERVABLE));
1099 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
1100 OC_RSRVD_INTERFACE_DEFAULT));
1101 uint8_t numResourceInterfaces;
1102 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1103 EXPECT_EQ(2, numResourceInterfaces);
1105 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
1106 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
1108 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
1109 EXPECT_STREQ("core.rw", interfaceName_2);
1111 EXPECT_EQ(OC_STACK_OK, OCStop());
1114 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
1116 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1118 OIC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
1120 InitStack(OC_SERVER);
1122 OCResourceHandle handle;
1123 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1129 OC_DISCOVERABLE|OC_OBSERVABLE));
1131 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
1132 OC_RSRVD_INTERFACE_DEFAULT));
1133 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
1134 OC_RSRVD_INTERFACE_DEFAULT));
1136 uint8_t numResourceInterfaces;
1137 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1138 EXPECT_EQ(2, numResourceInterfaces);
1140 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
1141 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
1143 EXPECT_EQ(OC_STACK_OK, OCStop());
1146 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
1148 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1150 OIC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
1152 InitStack(OC_SERVER);
1154 OCResourceHandle handle;
1155 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1161 OC_DISCOVERABLE|OC_OBSERVABLE));
1163 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
1165 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
1168 uint8_t numResourceInterfaces;
1169 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1170 EXPECT_EQ(2, numResourceInterfaces);
1172 EXPECT_EQ(OC_STACK_OK, OCStop());
1175 TEST(StackResource, ResourceTypeInterfaceMethods)
1177 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1178 OIC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
1179 InitStack(OC_SERVER);
1181 OCResourceHandle handle;
1182 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1188 OC_DISCOVERABLE|OC_OBSERVABLE));
1190 uint8_t numResourceInterfaces;
1191 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1192 EXPECT_EQ(2, numResourceInterfaces);
1194 EXPECT_EQ(OC_STACK_OK, OCStop());
1197 TEST(StackResource, GetResourceProperties)
1199 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1200 OIC_LOG(INFO, TAG, "Starting GetResourceProperties test");
1201 InitStack(OC_SERVER);
1203 OCResourceHandle handle;
1204 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1210 OC_DISCOVERABLE|OC_OBSERVABLE));
1213 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE|OC_MQ_PUBLISHER, OCGetResourceProperties(handle));
1215 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
1217 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
1219 EXPECT_EQ(OC_STACK_OK, OCStop());
1222 TEST(StackResource, SetResourceProperties)
1224 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1225 OIC_LOG(INFO, TAG, "Starting SetResourceProperties test");
1226 InitStack(OC_SERVER);
1228 OCResourceHandle handle;
1229 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1237 EXPECT_EQ(OC_STACK_OK, OCSetResourceProperties(handle, OC_DISCOVERABLE|OC_OBSERVABLE));
1239 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE|OC_MQ_PUBLISHER, OCGetResourceProperties(handle));
1241 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
1244 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
1246 EXPECT_EQ(OC_STACK_OK, OCStop());
1249 TEST(StackResource, ClearResourceProperties)
1251 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1252 OIC_LOG(INFO, TAG, "Starting ClearResourceProperties test");
1253 InitStack(OC_SERVER);
1255 OCResourceHandle handle;
1256 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1262 OC_DISCOVERABLE|OC_OBSERVABLE));
1264 EXPECT_EQ(OC_STACK_OK, OCClearResourceProperties(handle, OC_DISCOVERABLE|OC_OBSERVABLE));
1266 EXPECT_EQ(OC_ACTIVE|OC_MQ_PUBLISHER, OCGetResourceProperties(handle));
1268 EXPECT_EQ(OC_ACTIVE, OCGetResourceProperties(handle));
1271 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
1273 EXPECT_EQ(OC_STACK_OK, OCStop());
1276 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
1278 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1279 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
1280 InitStack(OC_SERVER);
1281 uint8_t numResources = 0;
1282 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1284 OCResourceHandle handle;
1285 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1291 OC_DISCOVERABLE|OC_OBSERVABLE));
1292 const char *url = OCGetResourceUri(handle);
1293 EXPECT_STREQ("/a1/led", url);
1295 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
1296 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
1297 uint8_t numExpectedResources = 0;
1299 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1300 EXPECT_EQ(numExpectedResources, numResources);
1302 EXPECT_EQ(OC_STACK_OK, OCStop());
1305 TEST(StackResource, StackTestResourceDiscoverOneResource)
1307 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1308 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
1309 InitStack(OC_SERVER);
1311 OCResourceHandle handle;
1312 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1318 OC_DISCOVERABLE|OC_OBSERVABLE));
1319 const char *url = OCGetResourceUri(handle);
1320 EXPECT_STREQ("/a/led", url);
1322 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
1323 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
1325 EXPECT_EQ(OC_STACK_OK, OCStop());
1328 TEST(StackResource, StackTestResourceDiscoverManyResources)
1330 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1331 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
1332 InitStack(OC_SERVER);
1334 OCResourceHandle handle1;
1335 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1342 const char *url = OCGetResourceUri(handle1);
1343 EXPECT_STREQ("/a/led1", url);
1345 OCResourceHandle handle2;
1346 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1352 OC_DISCOVERABLE|OC_OBSERVABLE));
1353 url = OCGetResourceUri(handle2);
1354 EXPECT_STREQ("/a/led2", url);
1356 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
1357 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
1359 OCResourceHandle handle3;
1360 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1366 OC_DISCOVERABLE|OC_OBSERVABLE));
1367 url = OCGetResourceUri(handle3);
1368 EXPECT_STREQ("/a/led3", url);
1370 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
1371 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
1373 OCResourceHandle handle4;
1374 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1381 url = OCGetResourceUri(handle4);
1382 EXPECT_STREQ("/a/led4", url);
1384 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
1385 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
1386 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
1388 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
1390 EXPECT_EQ(OC_STACK_OK, OCStop());
1393 TEST_F(OCDevicePropertiesTests, DevicePropertiesToCBORPayloadllNULL)
1395 EXPECT_EQ(OC_STACK_INVALID_PARAM, DevicePropertiesToCBORPayload(NULL, NULL, NULL));
1398 TEST_F(OCDevicePropertiesTests, DevicePropertiesToCBORPayloadNULLPayload)
1400 OCDeviceProperties* deviceProps = getTestDeviceProps();
1401 ASSERT_TRUE(NULL != deviceProps);
1404 EXPECT_EQ(OC_STACK_INVALID_PARAM, DevicePropertiesToCBORPayload(deviceProps, NULL, &size));
1406 CleanUpDeviceProperties(&deviceProps);
1409 TEST_F(OCDevicePropertiesTests, DevicePropertiesToCBORPayloadNULLSize)
1411 OCDeviceProperties* deviceProps = getTestDeviceProps();
1412 ASSERT_TRUE(NULL != deviceProps);
1413 uint8_t* payload = NULL;
1415 EXPECT_EQ(OC_STACK_INVALID_PARAM, DevicePropertiesToCBORPayload(deviceProps, &payload, NULL));
1417 CleanUpDeviceProperties(&deviceProps);
1420 TEST_F(OCDevicePropertiesTests, DevicePropertiesToCBORPayloadNULLDeviceProperties)
1422 uint8_t* payload = NULL;
1425 EXPECT_EQ(OC_STACK_INVALID_PARAM, DevicePropertiesToCBORPayload(NULL, &payload, &size));
1428 TEST_F(OCDevicePropertiesTests, DevicePropertiesToCBORPayloadVALID)
1430 OCDeviceProperties* deviceProps = getTestDeviceProps();
1431 ASSERT_TRUE(NULL != deviceProps);
1432 uint8_t* payload = NULL;
1435 EXPECT_EQ(OC_STACK_OK, DevicePropertiesToCBORPayload(deviceProps, &payload, &size));
1436 EXPECT_TRUE(payload != NULL);
1438 CleanUpDeviceProperties(&deviceProps);
1442 TEST_F(OCDevicePropertiesTests, CBORPayloadToDevicePropertiesAllNULL)
1444 EXPECT_EQ(OC_STACK_INVALID_PARAM, CBORPayloadToDeviceProperties(NULL, 0, NULL));
1447 TEST_F(OCDevicePropertiesTests, CBORPayloadToDevicePropertiesNULLPayload)
1449 OCDeviceProperties* deviceProps = NULL;
1452 EXPECT_EQ(OC_STACK_INVALID_PARAM, CBORPayloadToDeviceProperties(NULL, size, &deviceProps));
1455 TEST_F(OCDevicePropertiesTests, CBORPayloadToDevicePropertiesInvalidSize)
1457 OCDeviceProperties* deviceProps = NULL;
1458 uint8_t* payload = (uint8_t*)OICCalloc(1, sizeof(uint8_t));
1459 ASSERT_TRUE(NULL != payload);
1461 EXPECT_EQ(OC_STACK_INVALID_PARAM, CBORPayloadToDeviceProperties(payload, 0, &deviceProps));
1466 TEST_F(OCDevicePropertiesTests, CBORPayloadToDevicePropertiesNULLDeviceProperties)
1468 uint8_t* payload = (uint8_t*)OICCalloc(1, sizeof(uint8_t));
1469 ASSERT_TRUE(NULL != payload);
1472 EXPECT_EQ(OC_STACK_INVALID_PARAM, CBORPayloadToDeviceProperties(payload, size, NULL));
1477 TEST_F(OCDevicePropertiesTests, CBORPayloadToDevicePropertiesVALID)
1479 OCDeviceProperties* controlDeviceProps = getTestDeviceProps();
1480 ASSERT_TRUE(NULL != controlDeviceProps);
1481 OCDeviceProperties* testDeviceProps = NULL;
1482 uint8_t* payload = NULL;
1485 EXPECT_EQ(OC_STACK_OK, DevicePropertiesToCBORPayload(controlDeviceProps, &payload, &size));
1486 EXPECT_TRUE(payload != NULL);
1488 EXPECT_EQ(OC_STACK_OK, CBORPayloadToDeviceProperties(payload, size, &testDeviceProps));
1489 ASSERT_TRUE(testDeviceProps != NULL);
1490 EXPECT_STREQ(gDevicePIID, testDeviceProps->protocolIndependentId);
1492 CleanUpDeviceProperties(&controlDeviceProps);
1493 CleanUpDeviceProperties(&testDeviceProps);
1497 TEST_F(OCDevicePropertiesTests, PIIDAvailableAfterInit)
1501 InitStack(OC_SERVER);
1503 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_PROTOCOL_INDEPENDENT_ID, &piid));
1504 ASSERT_TRUE(piid != NULL);
1508 EXPECT_EQ(OC_STACK_OK, OCStop());
1511 TEST_F(OCDevicePropertiesTests, UpdatePIID)
1513 void *originalPIID = NULL;
1514 void *newPIID = NULL;
1516 InitStack(OC_SERVER);
1518 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_PROTOCOL_INDEPENDENT_ID, &originalPIID));
1519 ASSERT_TRUE(originalPIID != NULL);
1521 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_PROTOCOL_INDEPENDENT_ID, gDevicePIID));
1523 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_PROTOCOL_INDEPENDENT_ID, &newPIID));
1524 ASSERT_TRUE(newPIID != NULL);
1525 EXPECT_STREQ(gDevicePIID, (char *)newPIID);
1526 EXPECT_STRNE((char *)originalPIID, (char *)newPIID);
1529 OICFree(originalPIID);
1531 EXPECT_EQ(OC_STACK_OK, OCStop());
1534 TEST(StackBind, BindResourceTypeNameBad)
1536 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1537 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
1538 InitStack(OC_SERVER);
1540 OCResourceHandle handle;
1541 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1547 OC_DISCOVERABLE|OC_OBSERVABLE));
1549 uint8_t numResourceTypes;
1550 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1551 EXPECT_EQ(1, numResourceTypes);
1552 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1553 EXPECT_STREQ("core.led", resourceTypeName);
1555 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
1556 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.nameBad"));
1557 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.name bad"));
1559 EXPECT_EQ(OC_STACK_OK, OCStop());
1562 TEST(StackBind, BindResourceTypeNameGood)
1564 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1565 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
1566 InitStack(OC_SERVER);
1568 OCResourceHandle handle;
1569 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1575 OC_DISCOVERABLE|OC_OBSERVABLE));
1577 uint8_t numResourceTypes;
1578 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1579 EXPECT_EQ(1, numResourceTypes);
1580 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1581 EXPECT_STREQ("core.led", resourceTypeName);
1583 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1584 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1585 EXPECT_EQ(2, numResourceTypes);
1586 resourceTypeName = OCGetResourceTypeName(handle, 1);
1587 EXPECT_STREQ("core.brightled", resourceTypeName);
1589 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1590 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1591 EXPECT_EQ(3, numResourceTypes);
1592 resourceTypeName = OCGetResourceTypeName(handle, 2);
1593 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
1595 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "x.ReallyReallyBrightLED"));
1596 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1597 EXPECT_EQ(4, numResourceTypes);
1598 resourceTypeName = OCGetResourceTypeName(handle, 3);
1599 EXPECT_STREQ("x.ReallyReallyBrightLED", resourceTypeName);
1601 EXPECT_EQ(OC_STACK_OK, OCStop());
1604 TEST(StackBind, BindResourceTypeAttribRepGood)
1606 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1607 OIC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
1608 InitStack(OC_SERVER);
1610 OCResourceHandle handle;
1611 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1617 OC_DISCOVERABLE|OC_OBSERVABLE));
1619 uint8_t numResourceTypes;
1620 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1621 EXPECT_EQ(1, numResourceTypes);
1623 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1624 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1625 EXPECT_EQ(2, numResourceTypes);
1627 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1628 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1629 EXPECT_EQ(3, numResourceTypes);
1631 EXPECT_EQ(OC_STACK_OK, OCStop());
1635 TEST(StackBind, BindResourceInterfaceNameBad)
1637 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1638 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
1639 InitStack(OC_SERVER);
1641 OCResourceHandle handle;
1642 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1648 OC_DISCOVERABLE|OC_OBSERVABLE));
1650 uint8_t numResourceInterfaces;
1651 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1652 EXPECT_EQ(2, numResourceInterfaces);
1653 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1654 EXPECT_STREQ("core.rw", resourceInterfaceName);
1656 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
1658 EXPECT_EQ(OC_STACK_OK, OCStop());
1661 TEST(StackBind, BindResourceInterfaceNameGood)
1663 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1664 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
1665 InitStack(OC_SERVER);
1667 OCResourceHandle handle;
1668 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1674 OC_DISCOVERABLE|OC_OBSERVABLE));
1676 uint8_t numResourceInterfaces;
1677 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1678 EXPECT_EQ(2, numResourceInterfaces);
1679 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1680 EXPECT_STREQ("core.rw", resourceInterfaceName);
1682 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1684 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1685 EXPECT_EQ(3, numResourceInterfaces);
1686 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
1687 EXPECT_STREQ("core.r", resourceInterfaceName);
1689 EXPECT_EQ(OC_STACK_OK, OCStop());
1692 TEST(StackBind, BindResourceInterfaceMethodsBad)
1694 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1695 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
1696 InitStack(OC_SERVER);
1698 OCResourceHandle handle;
1699 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1705 OC_DISCOVERABLE|OC_OBSERVABLE));
1707 uint8_t numResourceInterfaces;
1708 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1709 EXPECT_EQ(2, numResourceInterfaces);
1711 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1713 EXPECT_EQ(OC_STACK_OK, OCStop());
1716 TEST(StackBind, BindResourceInterfaceMethodsGood)
1718 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1719 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
1720 InitStack(OC_SERVER);
1722 OCResourceHandle handle;
1723 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1729 OC_DISCOVERABLE|OC_OBSERVABLE));
1731 uint8_t numResourceInterfaces;
1732 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1733 EXPECT_EQ(2, numResourceInterfaces);
1735 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1737 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1738 EXPECT_EQ(3, numResourceInterfaces);
1740 EXPECT_EQ(OC_STACK_OK, OCStop());
1743 TEST(StackBind, BindContainedResourceBad)
1745 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1746 OIC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1747 InitStack(OC_SERVER);
1749 OCResourceHandle containerHandle;
1750 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1756 OC_DISCOVERABLE|OC_OBSERVABLE));
1758 OCResourceHandle handle0;
1759 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1765 OC_DISCOVERABLE|OC_OBSERVABLE));
1767 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1769 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1771 EXPECT_EQ(OC_STACK_OK, OCStop());
1774 TEST(StackBind, BindContainedResourceGood)
1776 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1777 OIC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1778 InitStack(OC_SERVER);
1780 uint8_t numResources = 0;
1781 uint8_t numExpectedResources = 0;
1783 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1785 OCResourceHandle containerHandle;
1786 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1792 OC_DISCOVERABLE|OC_OBSERVABLE));
1793 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1794 EXPECT_EQ(++numExpectedResources, numResources);
1796 OCResourceHandle handle0;
1797 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1803 OC_DISCOVERABLE|OC_OBSERVABLE));
1804 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1805 EXPECT_EQ(++numExpectedResources, numResources);
1807 OCResourceHandle handle1;
1808 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1814 OC_DISCOVERABLE|OC_OBSERVABLE));
1815 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1816 EXPECT_EQ(++numExpectedResources, numResources);
1818 OCResourceHandle handle2;
1819 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1825 OC_DISCOVERABLE|OC_OBSERVABLE));
1826 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1827 EXPECT_EQ(++numExpectedResources, numResources);
1829 OCResourceHandle handle3;
1830 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1836 OC_DISCOVERABLE|OC_OBSERVABLE));
1837 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1838 EXPECT_EQ(++numExpectedResources, numResources);
1840 OCResourceHandle handle4;
1841 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1847 OC_DISCOVERABLE|OC_OBSERVABLE));
1848 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1849 EXPECT_EQ(++numExpectedResources, numResources);
1851 OCResourceHandle handle5;
1852 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1858 OC_DISCOVERABLE|OC_OBSERVABLE));
1859 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1860 EXPECT_EQ(++numExpectedResources, numResources);
1863 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1864 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1865 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1866 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1867 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1868 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle5));
1870 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1871 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1872 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1873 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1874 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1875 EXPECT_EQ(handle5, OCGetResourceHandleFromCollection(containerHandle, 5));
1877 EXPECT_EQ(OC_STACK_OK, OCStop());
1881 TEST(StackBind, BindEntityHandlerBad)
1883 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1884 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1885 InitStack(OC_SERVER);
1887 OCResourceHandle handle;
1888 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1894 OC_DISCOVERABLE|OC_OBSERVABLE));
1896 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL, NULL));
1898 EXPECT_EQ(OC_STACK_OK, OCStop());
1901 TEST(StackBind, BindEntityHandlerGood)
1903 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1904 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1905 InitStack(OC_SERVER);
1907 OCResourceHandle handle;
1908 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1914 OC_DISCOVERABLE|OC_OBSERVABLE));
1916 OCEntityHandler myHandler = entityHandler;
1918 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler, NULL));
1920 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1922 EXPECT_EQ(OC_STACK_OK, OCStop());
1925 TEST(StackResourceAccess, GetResourceByIndex)
1927 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1928 OIC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1929 InitStack(OC_SERVER);
1931 uint8_t numResources = 0;
1932 uint8_t numExpectedResources = 0;
1933 uint8_t resourceIndex = 0;
1934 uint8_t prevResources = 0;
1935 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1936 prevResources = numExpectedResources;
1937 OCResourceHandle containerHandle;
1938 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1944 OC_DISCOVERABLE|OC_OBSERVABLE));
1945 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1946 EXPECT_EQ(++numExpectedResources, numResources);
1948 OCResourceHandle handle0;
1949 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1955 OC_DISCOVERABLE|OC_OBSERVABLE));
1956 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1957 EXPECT_EQ(++numExpectedResources, numResources);
1959 OCResourceHandle handle1;
1960 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1966 OC_DISCOVERABLE|OC_OBSERVABLE));
1967 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1968 EXPECT_EQ(++numExpectedResources, numResources);
1970 OCResourceHandle handle2;
1971 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1977 OC_DISCOVERABLE|OC_OBSERVABLE));
1978 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1979 EXPECT_EQ(++numExpectedResources, numResources);
1981 OCResourceHandle handle3;
1982 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1988 OC_DISCOVERABLE|OC_OBSERVABLE));
1989 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1990 EXPECT_EQ(++numExpectedResources, numResources);
1992 OCResourceHandle handle4;
1993 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1999 OC_DISCOVERABLE|OC_OBSERVABLE));
2000 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2001 EXPECT_EQ(++numExpectedResources, numResources);
2003 OCResourceHandle handle5;
2004 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
2010 OC_DISCOVERABLE|OC_OBSERVABLE));
2011 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2012 EXPECT_EQ(++numExpectedResources, numResources);
2013 resourceIndex += prevResources;
2014 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
2015 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
2016 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
2017 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
2018 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
2019 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
2020 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
2022 EXPECT_EQ(OC_STACK_OK, OCStop());
2025 TEST(StackResourceAccess, DeleteHeadResource)
2027 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
2028 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
2029 InitStack(OC_SERVER);
2031 uint8_t numResources = 0;
2032 uint8_t numExpectedResources = 0;
2034 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
2036 OCResourceHandle handle0;
2037 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
2043 OC_DISCOVERABLE|OC_OBSERVABLE));
2044 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2045 EXPECT_EQ(++numExpectedResources, numResources);
2047 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
2048 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2049 EXPECT_EQ(--numExpectedResources, numResources);
2051 EXPECT_EQ(OC_STACK_OK, OCStop());
2054 TEST(StackResourceAccess, DeleteHeadResource2)
2056 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
2057 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
2058 InitStack(OC_SERVER);
2060 uint8_t numResources = 0;
2061 uint8_t numExpectedResources = 0;
2063 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
2064 OCResourceHandle handle0;
2065 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
2071 OC_DISCOVERABLE|OC_OBSERVABLE));
2072 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2073 EXPECT_EQ(++numExpectedResources, numResources);
2075 OCResourceHandle handle1;
2076 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
2082 OC_DISCOVERABLE|OC_OBSERVABLE));
2083 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2084 EXPECT_EQ(++numExpectedResources, numResources);
2086 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
2087 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2088 EXPECT_EQ(--numExpectedResources, numResources);
2090 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
2092 EXPECT_EQ(OC_STACK_OK, OCStop());
2096 TEST(StackResourceAccess, DeleteLastResource)
2098 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
2099 OIC_LOG(INFO, TAG, "Starting DeleteLastResource test");
2100 InitStack(OC_SERVER);
2102 uint8_t numResources = 0;
2103 uint8_t numExpectedResources = 0;
2105 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
2107 OCResourceHandle handle0;
2108 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
2114 OC_DISCOVERABLE|OC_OBSERVABLE));
2115 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2116 EXPECT_EQ(++numExpectedResources, numResources);
2118 OCResourceHandle handle1;
2119 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
2125 OC_DISCOVERABLE|OC_OBSERVABLE));
2126 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2127 EXPECT_EQ(++numExpectedResources, numResources);
2129 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
2130 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2131 EXPECT_EQ(--numExpectedResources, numResources);
2133 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
2135 OCResourceHandle handle2;
2136 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
2142 OC_DISCOVERABLE|OC_OBSERVABLE));
2143 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2144 EXPECT_EQ(++numExpectedResources, numResources);
2146 EXPECT_EQ(OC_STACK_OK, OCStop());
2149 TEST(StackResourceAccess, DeleteMiddleResource)
2151 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
2152 OIC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
2153 InitStack(OC_SERVER);
2155 uint8_t numResources = 0;
2156 uint8_t numExpectedResources = 0;
2157 uint8_t resourceIndex = InitResourceIndex();
2159 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
2160 resourceIndex = numExpectedResources;
2161 OCResourceHandle handle0;
2162 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
2168 OC_DISCOVERABLE|OC_OBSERVABLE));
2169 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2170 EXPECT_EQ(++numExpectedResources, numResources);
2172 OCResourceHandle handle1;
2173 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
2179 OC_DISCOVERABLE|OC_OBSERVABLE));
2180 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2181 EXPECT_EQ(++numExpectedResources, numResources);
2183 OCResourceHandle handle2;
2184 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
2190 OC_DISCOVERABLE|OC_OBSERVABLE));
2191 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2192 EXPECT_EQ(++numExpectedResources, numResources);
2194 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
2195 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2196 EXPECT_EQ(--numExpectedResources, numResources);
2198 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
2199 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
2201 // Make sure the resource elements are still correct
2202 uint8_t numResourceInterfaces;
2203 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
2204 EXPECT_EQ(2, numResourceInterfaces);
2205 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 1);
2206 EXPECT_STREQ("core.rw", resourceInterfaceName);
2208 EXPECT_EQ(OC_STACK_OK, OCStop());
2211 // Visual Studio versions earlier than 2015 have bugs in is_pod and report the wrong answer.
2212 #if !defined(_MSC_VER) || (_MSC_VER >= 1900)
2213 TEST(PODTests, OCHeaderOption)
2215 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
2218 TEST(PODTests, OCCallbackData)
2220 EXPECT_TRUE(std::is_pod<OCCallbackData>::value);
2224 TEST(OCDoDirectPairingTests, Nullpeer)
2226 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, NULL, pmSel, &pinNumber, &resultCallback));
2229 TEST(OCDoDirectPairingTests, NullCallback)
2231 EXPECT_EQ(OC_STACK_INVALID_CALLBACK,OCDoDirectPairing(NULL, &peer, pmSel, &pinNumber, NULL));
2234 TEST(OCDoDirectPairingTests, NullpinNumber)
2236 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, &peer, pmSel, NULL, &resultCallback));
2239 TEST(StackResource, MultipleResourcesDiscovery)
2241 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
2242 OIC_LOG(INFO, TAG, "Starting MultipleResourcesDiscovery test");
2243 InitStack(OC_SERVER);
2245 OCResourceHandle handle1;
2246 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
2252 OC_DISCOVERABLE|OC_OBSERVABLE));
2254 OCResourceHandle handle2;
2255 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
2261 OC_DISCOVERABLE|OC_OBSERVABLE));
2262 OCResourceHandle handle3;
2263 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
2269 OC_DISCOVERABLE|OC_OBSERVABLE));
2270 /* Start a discovery query*/
2271 char szQueryUri[MAX_QUERY_LENGTH] = "/oic/res?if=oic.if.ll";
2272 OCCallbackData cbData;
2273 cbData.cb = discoveryCallback;
2274 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
2278 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
2289 EXPECT_EQ(OC_STACK_OK, OCStop());
2292 TEST(StackPayload, CloneByteString)
2294 uint8_t bytes[] = { 0, 1, 2, 3 };
2295 OCByteString byteString;
2296 byteString.bytes = bytes;
2297 byteString.len = sizeof(bytes);
2299 OCRepPayload *original = OCRepPayloadCreate();
2300 ASSERT_TRUE(original != NULL);
2301 EXPECT_TRUE(OCRepPayloadSetPropByteString(original, "name", byteString));
2303 OCRepPayload *clone = OCRepPayloadClone(original);
2304 ASSERT_TRUE(clone != NULL);
2306 OCRepPayloadDestroy(original);
2308 OCByteString cloneByteString;
2309 EXPECT_TRUE(OCRepPayloadGetPropByteString(clone, "name", &cloneByteString));
2310 ASSERT_TRUE(cloneByteString.bytes != NULL);
2311 EXPECT_EQ(sizeof(bytes), cloneByteString.len);
2312 EXPECT_TRUE(0 == memcmp(bytes, cloneByteString.bytes, sizeof(bytes)));
2313 OICFree(cloneByteString.bytes);
2315 OCRepPayloadDestroy(clone);
2318 TEST(StackUri, Rfc6874_Noop_1)
2320 char validIPv6Address[] = "FF01:0:0:0:0:0:0:FB";
2321 char bytes[100] = {0};
2322 strncpy(bytes, validIPv6Address, sizeof(bytes));
2324 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
2326 // No % sign, should do nothing
2327 EXPECT_STREQ(bytes, validIPv6Address);
2328 EXPECT_EQ(OC_STACK_OK, result);
2331 TEST(StackUri, Rfc6874_Noop_2)
2333 char validIPv6Address[] = "3812:a61::4:1";
2334 char bytes[100] = {0};
2336 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
2338 // No % sign, should do nothing
2339 EXPECT_STREQ(bytes, validIPv6Address);
2340 EXPECT_EQ(OC_STACK_OK, result);
2343 TEST(StackUri, Rfc6874_WithEncoding)
2345 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%wlan0";
2346 char validIPv6AddressEncoded[] = "fe80::dafe:e3ff:fe00:ebfa%25wlan0";
2347 char bytes[100] = "";
2348 strncpy(bytes, validIPv6Address, sizeof(bytes));
2350 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
2352 // Encoding should have occured
2353 EXPECT_STREQ(bytes, validIPv6AddressEncoded);
2354 EXPECT_EQ(OC_STACK_OK, result);
2357 TEST(StackUri, Rfc6874_WithEncoding_ExtraPercent)
2359 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%%wlan0";
2360 char bytes[100] = {0};
2362 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
2364 // Encoding should have failed due to extra '%' character
2365 EXPECT_STREQ(bytes, "");
2366 EXPECT_EQ(OC_STACK_ERROR, result);
2369 TEST(StackUri, Rfc6874_AlreadyEncoded)
2371 char validIPv6AddressEncoded[] = "fe80::dafe:e3ff:fe00:ebfa%25wlan0";
2372 char bytes[100] = {0};
2374 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6AddressEncoded);
2376 // Encoding should have failed due to extra '%' character
2377 EXPECT_STREQ(bytes, "");
2378 EXPECT_EQ(OC_STACK_ERROR, result);
2381 TEST(StackUri, Rfc6874_NoOverflow)
2383 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%wlan0";
2384 char addrBuffer[100];
2385 char bytes[100] = {0};
2386 memset(addrBuffer, sizeof(addrBuffer), '_');
2388 // Just enough room to encode
2389 addrBuffer[sizeof(addrBuffer) - sizeof(validIPv6Address) - 3] = '\0';
2390 strcat(addrBuffer, validIPv6Address);
2392 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), addrBuffer);
2394 // Encoding should have succeeded
2395 EXPECT_EQ(OC_STACK_OK, result);
2398 TEST(StackUri, Rfc6874_NoOverflow_2)
2400 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%wlan0";
2401 char addrBuffer[100];
2402 char bytes[100] = {0};
2403 memset(addrBuffer, sizeof(addrBuffer), '_');
2405 // Not enough room to encode
2406 addrBuffer[sizeof(addrBuffer) - sizeof(validIPv6Address) - 1] = '\0';
2407 strcat(addrBuffer, validIPv6Address);
2409 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), addrBuffer);
2411 // Encoding should have failed due to output size limitations
2412 EXPECT_STREQ(bytes, "");
2413 EXPECT_EQ(OC_STACK_ERROR, result);
2416 TEST(StackHeaderOption, setHeaderOption)
2418 uint8_t optionValue1[MAX_HEADER_OPTION_DATA_LENGTH] =
2420 OCHeaderOption options[MAX_HEADER_OPTIONS] =
2422 { OC_COAP_ID, 6, 8, optionValue1 }, };
2423 uint8_t optionData = 255;
2424 size_t optionDataSize = sizeof(optionData);
2425 size_t numOptions = 1;
2426 uint16_t optionID = 2048;
2427 EXPECT_EQ(OC_STACK_OK, OCSetHeaderOption(options,
2432 EXPECT_EQ(options[1].optionID, optionID);
2433 EXPECT_EQ(options[1].optionData[0], 255);
2436 TEST(StackHeaderOption, getHeaderOption)
2438 uint8_t optionValue1[MAX_HEADER_OPTION_DATA_LENGTH] =
2440 uint8_t optionValue2[MAX_HEADER_OPTION_DATA_LENGTH] =
2442 OCHeaderOption options[MAX_HEADER_OPTIONS] =
2444 { OC_COAP_ID, 6, 8, optionValue1 },
2445 { OC_COAP_ID, 2048, 16, optionValue2 }, };
2446 uint8_t optionData[MAX_HEADER_OPTION_DATA_LENGTH];
2447 size_t optionDataSize = sizeof(optionData);
2448 size_t numOptions = 2;
2449 uint16_t optionID = 6;
2450 uint16_t actualDataSize = 0;
2451 EXPECT_EQ(OC_STACK_OK, OCGetHeaderOption(options,
2457 EXPECT_EQ(optionData[0], 1);
2458 EXPECT_EQ(actualDataSize, 8);
2461 TEST(StackEndpoints, OCGetSupportedEndpointTpsFlags)
2463 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
2465 OIC_LOG(INFO, TAG, "OCGetSupportedEndpointTpsFlags test");
2467 InitStack(OC_SERVER);
2469 EXPECT_LE(INVALID_TPS_FLAGS_ZERO, OCGetSupportedEndpointTpsFlags());
2471 EXPECT_EQ(OC_STACK_OK, OCStop());
2474 static OCStackApplicationResult DiscoverBaselineResource(void *ctx, OCDoHandle handle,
2475 OCClientResponse *response)
2479 EXPECT_EQ(OC_STACK_OK, response->result);
2480 EXPECT_TRUE(NULL != response->payload);
2481 if (NULL != response->payload)
2483 EXPECT_EQ(PAYLOAD_TYPE_DISCOVERY, response->payload->type);
2485 OCDiscoveryPayload *payload = (OCDiscoveryPayload *)response->payload;
2486 EXPECT_TRUE(NULL != payload->sid);
2487 EXPECT_STREQ("StackTest", payload->name);
2488 EXPECT_STREQ(OC_RSRVD_RESOURCE_TYPE_RES, payload->type->value);
2489 EXPECT_STREQ(OC_RSRVD_INTERFACE_LL, payload->iface->value);
2490 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, payload->iface->next->value);
2492 for (OCResourcePayload *resource = payload->resources; resource; resource = resource->next)
2494 if (0 == strcmp("/a/light", resource->uri))
2496 EXPECT_STREQ("/a/light", resource->uri);
2497 EXPECT_STREQ("core.light", resource->types->value);
2498 EXPECT_EQ(NULL, resource->types->next);
2499 EXPECT_STREQ("oic.if.baseline", resource->interfaces->value);
2500 EXPECT_EQ(NULL, resource->interfaces->next);
2501 EXPECT_TRUE(resource->bitmap & OC_DISCOVERABLE);
2502 EXPECT_FALSE(resource->secure);
2503 EXPECT_EQ(0, resource->port);
2504 EXPECT_EQ(NULL, resource->next);
2509 return OC_STACK_DELETE_TRANSACTION;
2512 static OCStackApplicationResult DiscoverLinkedListResource(void *ctx, OCDoHandle handle,
2513 OCClientResponse *response)
2517 EXPECT_EQ(OC_STACK_OK, response->result);
2518 EXPECT_TRUE(NULL != response->payload);
2519 if (NULL != response->payload)
2521 EXPECT_EQ(PAYLOAD_TYPE_DISCOVERY, response->payload->type);
2523 OCDiscoveryPayload *payload = (OCDiscoveryPayload *)response->payload;
2524 EXPECT_NE((char *)NULL, payload->sid);
2525 EXPECT_EQ(NULL, payload->name);
2526 EXPECT_EQ(NULL, payload->type);
2527 EXPECT_EQ(NULL, payload->iface);
2529 for (OCResourcePayload *resource = payload->resources; resource; resource = resource->next)
2531 if (0 == strcmp("/a/light", resource->uri))
2533 EXPECT_STREQ("/a/light", resource->uri);
2534 EXPECT_STREQ("core.light", resource->types->value);
2535 EXPECT_EQ(NULL, resource->types->next);
2536 EXPECT_STREQ("oic.if.baseline", resource->interfaces->value);
2537 EXPECT_EQ(NULL, resource->interfaces->next);
2538 EXPECT_TRUE(resource->bitmap & OC_DISCOVERABLE);
2539 EXPECT_FALSE(resource->secure);
2540 EXPECT_EQ(0, resource->port);
2541 EXPECT_EQ(NULL, resource->next);
2545 return OC_STACK_DELETE_TRANSACTION;
2549 static OCStackApplicationResult DiscoverResourceTypeResponse(void *ctx, OCDoHandle handle,
2550 OCClientResponse *response)
2554 EXPECT_EQ(OC_STACK_OK, response->result);
2555 EXPECT_TRUE(NULL != response->payload);
2556 if (NULL != response->payload)
2558 EXPECT_EQ(PAYLOAD_TYPE_DISCOVERY, response->payload->type);
2560 OCDiscoveryPayload *payload = (OCDiscoveryPayload *)response->payload;
2561 EXPECT_NE((char *)NULL, payload->sid);
2562 EXPECT_EQ(NULL, payload->name);
2563 EXPECT_EQ(NULL, payload->type);
2564 EXPECT_EQ(NULL, payload->iface);
2565 EXPECT_TRUE(NULL != payload->resources);
2567 OCResourcePayload *resource = payload->resources;
2569 if (0 == strcmp("/a/light", resource->uri))
2571 EXPECT_STREQ("/a/light", resource->uri);
2572 EXPECT_STREQ("core.light", resource->types->value);
2573 EXPECT_EQ(NULL, resource->types->next);
2574 EXPECT_STREQ("oic.if.baseline", resource->interfaces->value);
2575 EXPECT_EQ(NULL, resource->interfaces->next);
2576 EXPECT_TRUE(resource->bitmap & OC_DISCOVERABLE);
2577 EXPECT_FALSE(resource->secure);
2578 EXPECT_EQ(0, resource->port);
2579 EXPECT_EQ(NULL, resource->next);
2583 return OC_STACK_DELETE_TRANSACTION;
2586 static OCStackApplicationResult DiscoverUnicastErrorResponse(void *ctx, OCDoHandle handle,
2587 OCClientResponse *response)
2591 EXPECT_NE(OC_STACK_OK, response->result);
2592 EXPECT_TRUE(NULL == response->payload);
2594 return OC_STACK_DELETE_TRANSACTION;
2597 // Disabled to unblock other developers untill IOT-1807 is done.
2598 TEST_F(OCDiscoverTests, DISABLED_DiscoverResourceWithValidQueries)
2600 itst::DeadmanTimer killSwitch(LONG_TEST_TIMEOUT);
2602 OCResourceHandle handles;
2603 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handles, "core.light", "oic.if.baseline", "/a/light",
2604 entityHandler, NULL, OC_DISCOVERABLE));
2605 OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_NAME, "StackTest");
2607 itst::Callback discoverBaselineCB(&DiscoverBaselineResource);
2608 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res?if=oic.if.baseline", NULL,
2609 0, CT_DEFAULT, OC_HIGH_QOS, discoverBaselineCB, NULL, 0));
2610 EXPECT_EQ(OC_STACK_OK, discoverBaselineCB.Wait(100));
2612 // Disabled temporarily on Windows to unblock other developers. Will be enabled in IOT-1806.
2614 itst::Callback discoverDefaultCB(&DiscoverLinkedListResource);
2615 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res", NULL, 0, CT_DEFAULT,
2616 OC_HIGH_QOS, discoverDefaultCB, NULL, 0));
2617 EXPECT_EQ(OC_STACK_OK, discoverDefaultCB.Wait(100));
2620 itst::Callback discoverLinkedListCB(&DiscoverLinkedListResource);
2621 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res?if=oic.if.ll", NULL, 0,
2622 CT_DEFAULT, OC_HIGH_QOS, discoverLinkedListCB, NULL, 0));
2623 EXPECT_EQ(OC_STACK_OK, discoverLinkedListCB.Wait(100));
2625 itst::Callback discoverRTCB(&DiscoverResourceTypeResponse);
2626 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res?rt=core.light", NULL, 0,
2627 CT_DEFAULT, OC_HIGH_QOS, discoverRTCB, NULL, 0));
2628 EXPECT_EQ(OC_STACK_OK, discoverRTCB.Wait(100));
2631 // Disabled to unblock other developers untill IOT-1807 is done.
2632 TEST_F(OCDiscoverTests, DISABLED_DiscoverResourceWithInvalidQueries)
2634 itst::DeadmanTimer killSwitch(LONG_TEST_TIMEOUT);
2636 OCResourceHandle handles;
2637 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handles, "core.light", "oic.if.baseline", "/a/light",
2638 entityHandler, NULL, OC_DISCOVERABLE));
2639 OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, "deviceName", "StackTest");
2641 itst::Callback discoverRTInvalidCB(&DiscoverUnicastErrorResponse);
2642 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res?rt=invalid", NULL, 0,
2643 CT_DEFAULT, OC_HIGH_QOS, discoverRTInvalidCB, NULL, 0));
2644 EXPECT_EQ(OC_STACK_OK, discoverRTInvalidCB.Wait(10));
2646 itst::Callback discoverRTEmptyCB(&DiscoverUnicastErrorResponse);
2647 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res?rt=", NULL, 0, CT_DEFAULT,
2648 OC_HIGH_QOS, discoverRTEmptyCB, NULL, 0));
2649 EXPECT_EQ(OC_STACK_OK, discoverRTEmptyCB.Wait(10));
2651 itst::Callback discoverIfInvalidCB(&DiscoverUnicastErrorResponse);
2652 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res?if=invalid", NULL, 0,
2653 CT_DEFAULT, OC_HIGH_QOS, discoverIfInvalidCB, NULL, 0));
2654 EXPECT_EQ(OC_STACK_OK, discoverIfInvalidCB.Wait(10));
2656 itst::Callback discoverIfEmptyCB(&DiscoverUnicastErrorResponse);
2657 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res?if=", NULL, 0, CT_DEFAULT,
2658 OC_HIGH_QOS, discoverIfEmptyCB, NULL, 0));
2659 EXPECT_EQ(OC_STACK_OK, discoverIfEmptyCB.Wait(10));
2662 char targetUri[MAX_URI_LENGTH * 2] ={ 0, };
2664 itst::Callback discoverUnicastIfInvalidCB(&DiscoverUnicastErrorResponse);
2665 snprintf(targetUri, MAX_URI_LENGTH * 2, "127.0.0.1/oic/res?if=invalid");
2666 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, targetUri, NULL, 0,
2667 CT_DEFAULT, OC_HIGH_QOS, discoverUnicastIfInvalidCB, NULL, 0));
2668 EXPECT_EQ(OC_STACK_OK, discoverUnicastIfInvalidCB.Wait(10));
2670 itst::Callback discoverUnicastIfEmptyCB(&DiscoverUnicastErrorResponse);
2671 snprintf(targetUri, MAX_URI_LENGTH * 2, "127.0.0.1/oic/res?if=");
2672 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, targetUri, NULL, 0, CT_DEFAULT,
2673 OC_HIGH_QOS, discoverUnicastIfEmptyCB, NULL, 0));
2674 EXPECT_EQ(OC_STACK_OK, discoverUnicastIfEmptyCB.Wait(10));
2676 itst::Callback discoverUnicastRTInvalidCB(&DiscoverUnicastErrorResponse);
2677 snprintf(targetUri, MAX_URI_LENGTH * 2, "127.0.0.1/oic/res?rt=invalid");
2678 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, targetUri, NULL, 0,
2679 CT_DEFAULT, OC_HIGH_QOS, discoverUnicastRTInvalidCB, NULL, 0));
2680 EXPECT_EQ(OC_STACK_OK, discoverUnicastRTInvalidCB.Wait(10));
2682 itst::Callback discoverUnicastRTEmptyCB(&DiscoverUnicastErrorResponse);
2683 snprintf(targetUri, MAX_URI_LENGTH * 2, "127.0.0.1/oic/res?rt=");
2684 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, targetUri, NULL, 0, CT_DEFAULT,
2685 OC_HIGH_QOS, discoverUnicastRTEmptyCB, NULL, 0));
2686 EXPECT_EQ(OC_STACK_OK, discoverUnicastRTEmptyCB.Wait(10));
2689 TEST(StackZoneId, getZoneId)
2691 size_t tempSize = 0;
2692 CAEndpoint_t *tempInfo = NULL;
2693 CAGetNetworkInformation(&tempInfo, &tempSize);
2695 for (size_t i = 0; i < tempSize; i++)
2697 char *zoneId = NULL;
2698 EXPECT_EQ(OC_STACK_OK, OCGetLinkLocalZoneId(tempInfo[i].ifindex, &zoneId));
2706 TEST(StackZoneId, getZoneIdWithInvalidParams)
2708 char *zoneId = NULL;
2709 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCGetLinkLocalZoneId(0, NULL));
2710 EXPECT_EQ(OC_STACK_ERROR, OCGetLinkLocalZoneId(9999, &zoneId));
2711 EXPECT_EQ(OC_STACK_ERROR, OCGetLinkLocalZoneId(-1, &zoneId));