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"
32 #include "occollection.h"
33 #include "mbedtls/ssl_ciphersuites.h"
35 #if defined (WITH_POSIX) && (defined (__WITH_DTLS__) || defined(__WITH_TLS__))
36 #include "ca_adapter_net_ssl.h"
40 #include <gtest/gtest.h>
41 #include <sys/types.h>
50 //-----------------------------------------------------------------------------
52 //-----------------------------------------------------------------------------
59 #include "gtest_helper.h"
63 namespace itst = iotivity::test;
65 #define DEFAULT_CONTEXT_VALUE 0x99
66 #define INVALID_TPS_FLAGS (250)
67 #define INVALID_TPS_FLAGS_ZERO (0)
69 //-----------------------------------------------------------------------------
71 //-----------------------------------------------------------------------------
72 #define TAG "TestHarness"
74 char gDeviceUUID[] = "fe3f9a68-4931-4cb0-9ea4-81702b43116c";
75 char gDevicePIID[] = "32684bf3-4c44-47b0-99fe-6a9a59b73a8d";
76 char gManufacturerName[] = "myName";
78 static char pinNumber;
79 static OCDPDev_t peer;
81 std::chrono::seconds const SHORT_TEST_TIMEOUT = std::chrono::seconds(5);
82 std::chrono::seconds const LONG_TEST_TIMEOUT = std::chrono::seconds(450);
84 //-----------------------------------------------------------------------------
86 //-----------------------------------------------------------------------------
87 extern "C" OCStackApplicationResult asyncDoResourcesCallback(void* ctx,
88 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
90 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
92 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
94 if(ctx == (void*)DEFAULT_CONTEXT_VALUE) {
95 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
97 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
99 return OC_STACK_KEEP_TRANSACTION;
102 extern "C" OCStackApplicationResult discoveryCallback(void* ctx,
103 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
105 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
107 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
109 if(ctx == (void*)DEFAULT_CONTEXT_VALUE)
111 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
114 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
116 OCDiscoveryPayload *discoveryPayload = ((OCDiscoveryPayload *) clientResponse->payload);
117 EXPECT_TRUE(discoveryPayload != NULL);
118 OCResourcePayload *res = discoveryPayload->resources;
120 for (OCResourcePayload *res1 = discoveryPayload->resources; res1; res1 = res1->next)
125 EXPECT_EQ("/a/led1", res->uri);
127 EXPECT_EQ("/a/led2", res->uri);
129 EXPECT_EQ("/a/led3", res->uri);
131 EXPECT_TRUE(res == NULL);
133 return OC_STACK_KEEP_TRANSACTION;
136 //-----------------------------------------------------------------------------
138 //-----------------------------------------------------------------------------
139 OCEntityHandlerResult entityHandler(OCEntityHandlerFlag /*flag*/,
140 OCEntityHandlerRequest * /*entityHandlerRequest*/,
141 void* /*callbackParam*/)
143 OIC_LOG(INFO, TAG, "Entering entityHandler");
148 //-----------------------------------------------------------------------------
150 //-----------------------------------------------------------------------------
151 void InitStack(OCMode mode)
153 OIC_LOG(INFO, TAG, "Entering InitStack");
155 EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, mode));
156 OIC_LOG(INFO, TAG, "Leaving InitStack");
159 uint8_t InitNumExpectedResources()
162 // When presence is enabled, it is a resource and so is (currently) included
163 // in the returned resource count returned by the OCGetNumberOfResources API.
170 uint8_t InitResourceIndex()
173 // When presence is enabled, it is a resource and so is (currently) included
174 // in the returned resource count returned by the OCGetNumberOfResources API.
175 // The index of the presence resource is 0, so the first user app resource index
183 extern "C" uint32_t g_ocStackStartCount;
185 OCDeviceProperties* getTestDeviceProps()
187 OCDeviceProperties* deviceProps = (OCDeviceProperties*)OICCalloc(1, sizeof(OCDeviceProperties));
188 if (NULL != deviceProps)
190 OICStrcpy(deviceProps->protocolIndependentId, UUID_STRING_SIZE, gDevicePIID);
196 class OCDiscoverTests : public testing::Test
201 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT_SERVER));
204 virtual void TearDown()
210 class OCDevicePropertiesTests : public testing::Test
215 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
218 //-----------------------------------------------------------------------------
220 //-----------------------------------------------------------------------------
222 TEST(StackInit, StackInitNullAddr)
224 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
225 EXPECT_EQ(OC_STACK_OK, OCInit(0, 5683, OC_SERVER));
226 EXPECT_EQ(1u, g_ocStackStartCount);
227 EXPECT_EQ(OC_STACK_OK, OCStop());
228 EXPECT_EQ(0u, g_ocStackStartCount);
231 TEST(StackInit, StackInitNullPort)
233 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
234 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 0, OC_SERVER));
235 EXPECT_EQ(OC_STACK_OK, OCStop());
238 TEST(StackInit, StackInitNullAddrAndPort)
240 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
241 EXPECT_EQ(OC_STACK_OK, OCInit(0, 0, OC_SERVER));
242 EXPECT_EQ(OC_STACK_OK, OCStop());
245 TEST(StackInit, StackInitInvalidMode)
247 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
248 EXPECT_EQ(OC_STACK_ERROR, OCInit(0, 0, (OCMode)10));
249 EXPECT_EQ(0u, g_ocStackStartCount);
252 TEST(StackStart, StackStartSuccessClient)
254 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
255 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
256 EXPECT_EQ(OC_STACK_OK, OCStop());
259 TEST(StackStart, StackStartSuccessServer)
261 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
262 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
263 EXPECT_EQ(OC_STACK_OK, OCStop());
266 TEST(StackStart, StackStartSuccessClientServer)
268 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
269 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT_SERVER));
270 EXPECT_EQ(OC_STACK_OK, OCStop());
273 TEST(StackStart, StackStartSuccessServerThenClient)
275 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
276 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
277 EXPECT_EQ(OC_STACK_OK, OCStop());
278 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
279 EXPECT_EQ(OC_STACK_OK, OCStop());
282 TEST(StackStart, StackStartSuccessClientThenServer)
284 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
285 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
286 EXPECT_EQ(OC_STACK_OK, OCStop());
287 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
288 EXPECT_EQ(OC_STACK_OK, OCStop());
291 TEST(StackStart, StackStartSuccessiveInits)
293 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
294 EXPECT_EQ(0u, g_ocStackStartCount);
295 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
296 EXPECT_EQ(1u, g_ocStackStartCount);
297 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.2", 5683, OC_SERVER));
298 EXPECT_EQ(2u, g_ocStackStartCount);
299 EXPECT_EQ(OC_STACK_OK, OCStop());
300 EXPECT_EQ(1u, g_ocStackStartCount);
301 EXPECT_EQ(OC_STACK_OK, OCStop());
302 EXPECT_EQ(0u, g_ocStackStartCount);
305 TEST(StackStart, SetPlatformInfoValid)
307 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
308 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
310 OCPlatformInfo info =
314 0, 0, 0, 0, 0, 0, 0, 0, 0
316 EXPECT_EQ(OC_STACK_OK, OCSetPlatformInfo(info));
317 EXPECT_EQ(OC_STACK_OK, OCStop());
320 TEST(StackStart, SetPlatformInfoWithClientMode)
322 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
323 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
325 OCPlatformInfo info =
329 0, 0, 0, 0, 0, 0, 0, 0, 0
331 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
332 EXPECT_EQ(OC_STACK_OK, OCStop());
335 TEST(StackStart, SetPlatformInfoWithNoPlatformID)
337 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
338 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
340 OCPlatformInfo info =
344 0, 0, 0, 0, 0, 0, 0, 0, 0
347 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
348 EXPECT_EQ(OC_STACK_OK, OCStop());
351 TEST(StackStart, SetPlatformInfoWithBadPlatformID)
353 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
354 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
356 char invalidId[] = "myDeviceUUID";
357 OCPlatformInfo info =
361 0, 0, 0, 0, 0, 0, 0, 0, 0
364 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
365 EXPECT_EQ(OC_STACK_OK, OCStop());
368 TEST(StackStart, SetPlatformInfoWithNoManufacturerName)
370 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
371 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
373 OCPlatformInfo info =
376 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
379 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
380 EXPECT_EQ(OC_STACK_OK, OCStop());
383 TEST(StackStart, SetPlatformInfoWithZeroLengthManufacturerName)
385 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
386 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
388 OCPlatformInfo info =
391 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
393 info.manufacturerName = (char *) "";
395 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
396 EXPECT_EQ(OC_STACK_OK, OCStop());
399 TEST(StackStart, SetPlatformInfoWithTooLongManufacName)
401 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
402 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
403 char gTooLongManufacturerName[MAX_PLATFORM_NAME_LENGTH+2];
404 for (int i = 0; i <= MAX_PLATFORM_NAME_LENGTH; i++ )
406 gTooLongManufacturerName[i] = 'a';
408 gTooLongManufacturerName[MAX_PLATFORM_NAME_LENGTH+1] = '\0';
409 OCPlatformInfo info =
412 gTooLongManufacturerName,
413 0, 0, 0, 0, 0, 0, 0, 0, 0
416 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
417 EXPECT_EQ(OC_STACK_OK, OCStop());
420 TEST(StackStart, SetPlatformInfoWithTooLongManufacURL)
422 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
423 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
424 char gManufacturerUrl[MAX_PLATFORM_URL_LENGTH+2];
425 for (int i = 0; i <= MAX_PLATFORM_URL_LENGTH; i++ )
427 gManufacturerUrl[i] = 'a';
429 gManufacturerUrl[MAX_PLATFORM_URL_LENGTH+1] = '\0';
430 OCPlatformInfo info =
435 0, 0, 0, 0, 0, 0, 0, 0
438 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
439 EXPECT_EQ(OC_STACK_OK, OCStop());
442 TEST(StackStart, SetPlatformInfoWithOCSetPropertyValueAPI)
444 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
445 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
446 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_ID, gDeviceUUID));
447 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_NAME, gManufacturerName));
448 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_URL, "http://www.iotivity.org"));
449 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MODEL_NUM, "S777"));
450 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_DATE, "15 Nov, 2016"));
451 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_OS_VERSION, "1.1"));
452 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_VERSION, "14"));
453 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_HARDWARE_VERSION, "0.1"));
454 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_FIRMWARE_VERSION, "0.1"));
455 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SUPPORT_URL, "http://www.iotivity.org"));
456 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SYSTEM_TIME, ""));
457 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, "x.org.iotivity.AAAA", "value"));
458 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, NULL, ""));
459 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPropertyValue(PAYLOAD_TYPE_INVALID, NULL, NULL));
460 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPropertyValue(PAYLOAD_TYPE_INVALID, NULL, NULL));
461 EXPECT_EQ(OC_STACK_OK, OCStop());
464 TEST(StackStart, GetPlatformInfoWithOCGetPropertyValueAPI)
466 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
467 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
468 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_ID, gDeviceUUID));
469 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_NAME, gManufacturerName));
470 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_URL, "http://www.iotivity.org"));
471 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MODEL_NUM, "S777"));
472 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_DATE, "15 Nov, 2016"));
473 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_OS_VERSION, "1.1"));
474 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_VERSION, "14"));
475 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_HARDWARE_VERSION, "0.1"));
476 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_FIRMWARE_VERSION, "0.1"));
477 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SUPPORT_URL, "http://www.iotivity.org"));
478 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SYSTEM_TIME, ""));
479 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_PLATFORM, "x.org.iotivity.AAAA", "value"));
482 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_ID, &value));
483 ASSERT_TRUE(value != NULL);
484 EXPECT_STREQ(gDeviceUUID, (char *)value);
488 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_NAME, &value));
489 ASSERT_TRUE(value != NULL);
490 EXPECT_STREQ(gManufacturerName, (char *)value);
494 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_URL, &value));
495 ASSERT_TRUE(value != NULL);
496 EXPECT_STREQ("http://www.iotivity.org", (char *)value);
500 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MODEL_NUM, &value));
501 ASSERT_TRUE(value != NULL);
502 EXPECT_STREQ("S777", (char *)value);
506 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_MFG_DATE, &value));
507 ASSERT_TRUE(value != NULL);
508 EXPECT_STREQ("15 Nov, 2016", (char *)value);
512 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_OS_VERSION, &value));
513 ASSERT_TRUE(value != NULL);
514 EXPECT_STREQ("1.1", (char *)value);
518 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_PLATFORM_VERSION, &value));
519 ASSERT_TRUE(value != NULL);
520 EXPECT_STREQ("14", (char *)value);
524 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_HARDWARE_VERSION, &value));
525 ASSERT_TRUE(value != NULL);
526 EXPECT_STREQ("0.1", (char *)value);
530 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_FIRMWARE_VERSION, &value));
531 ASSERT_TRUE(value != NULL);
532 EXPECT_STREQ("0.1", (char *)value);
536 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SUPPORT_URL, &value));
537 ASSERT_TRUE(value != NULL);
538 EXPECT_STREQ("http://www.iotivity.org", (char *)value);
542 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, OC_RSRVD_SYSTEM_TIME, &value));
543 ASSERT_TRUE(value != NULL);
544 EXPECT_STREQ("", (char *)value);
548 EXPECT_EQ(OC_STACK_OK,OCGetPropertyValue(PAYLOAD_TYPE_PLATFORM, "x.org.iotivity.AAAA", &value));
549 ASSERT_TRUE(value != NULL);
550 EXPECT_STREQ("value", (char *)value);
553 EXPECT_EQ(OC_STACK_OK, OCStop());
556 TEST(StackStart, SetDeviceInfoAPI)
558 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
559 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
560 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_NAME, "Sample"));
561 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_SPEC_VERSION, "specVersion"));
562 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, "x.org.iotivity.newproperty", "value"));
563 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DATA_MODEL_VERSION,
564 "Data Model Version"));
565 OCResourceHandle handle = OCGetResourceHandleAtUri(OC_RSRVD_DEVICE_URI);
566 EXPECT_TRUE(handle != NULL);
567 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "oic.wk.tv"));
568 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPropertyValue(PAYLOAD_TYPE_INVALID, NULL, NULL));
569 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPropertyValue(PAYLOAD_TYPE_INVALID, "", NULL));
570 EXPECT_EQ(OC_STACK_OK, OCStop());
573 TEST(StackStart, GetDeviceInfoAPI)
575 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
576 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
577 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_NAME, "Sample"));
578 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_SPEC_VERSION, "specVersion"));
579 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, "x.org.iotivity.newproperty", "value"));
580 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DATA_MODEL_VERSION,
581 "Data Model Version"));
582 OCResourceHandle handle = OCGetResourceHandleAtUri(OC_RSRVD_DEVICE_URI);
583 EXPECT_TRUE(handle != NULL);
584 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "oic.wk.tv"));
587 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_NAME, &value));
588 ASSERT_TRUE(value != NULL);
589 EXPECT_STREQ("Sample", (char *)value);
593 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_SPEC_VERSION, &value));
594 ASSERT_TRUE(value != NULL);
595 EXPECT_STREQ("specVersion", (char *)value);
599 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, "x.org.iotivity.newproperty", &value));
600 ASSERT_TRUE(value != NULL);
601 EXPECT_STREQ("value", (char *)value);
605 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DATA_MODEL_VERSION, &value));
606 ASSERT_TRUE(value != NULL);
607 ASSERT_TRUE(((OCStringLL *)value)->value != NULL);
608 EXPECT_STREQ("Data Model Version", ((OCStringLL *)value)->value);
609 OCFreeOCStringLL((OCStringLL *) value);
612 EXPECT_STREQ("oic.wk.d", OCGetResourceTypeName(handle, 0));
613 EXPECT_STREQ("oic.wk.tv", OCGetResourceTypeName(handle, 1));
615 EXPECT_EQ(OC_STACK_OK, OCStop());
618 TEST(StackStart, SetGetDevicePropertyValues)
620 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
621 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
622 OCResourceHandle handle = OCGetResourceHandleAtUri(OC_RSRVD_DEVICE_URI);
623 EXPECT_TRUE(handle != NULL);
624 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "oic.wk.tv"));
625 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "oic.if.tv"));
630 OCStringLL *rts = NULL;
631 OCResourcePayloadAddStringLL(&rts, "oic.wk.d");
632 OCResourcePayloadAddStringLL(&rts, "oic.wk.tv");
633 EXPECT_NE(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_RESOURCE_TYPE, &value));
634 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_RESOURCE_TYPE, &value));
635 for (x = rts, y = (OCStringLL *) value; x && y; x = x->next, y = y->next)
637 EXPECT_STREQ(x->value, y->value);
639 EXPECT_TRUE(!x && !y);
640 OCFreeOCStringLL((OCStringLL *) value);
642 OCFreeOCStringLL(rts);
644 OCStringLL *itfs = NULL;
645 OCResourcePayloadAddStringLL(&itfs, "oic.if.baseline");
646 OCResourcePayloadAddStringLL(&itfs, "oic.if.r");
647 OCResourcePayloadAddStringLL(&itfs, "oic.if.tv");
648 EXPECT_NE(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_INTERFACE, &value));
649 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_INTERFACE, &value));
650 for (x = itfs, y = (OCStringLL *) value; x && y; x = x->next, y = y->next)
652 EXPECT_STREQ(x->value, y->value);
654 EXPECT_TRUE(!x && !y);
655 OCFreeOCStringLL((OCStringLL *) value);
657 OCFreeOCStringLL(itfs);
659 const char *n = "name";
660 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_NAME, n));
661 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_NAME, &value));
662 EXPECT_STREQ(n, (char *) value);
666 const char *id = "instance-identifier";
667 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_INSTANCE_ID, id));
668 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_INSTANCE_ID, &value));
669 EXPECT_STREQ(id, (char *) value);
673 EXPECT_NE(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_ID, &value));
674 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_ID, &value));
675 EXPECT_STREQ(OCGetServerInstanceIDString(), (char *) value);
679 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_SPEC_VERSION, OC_SPEC_VERSION));
680 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_SPEC_VERSION, &value));
681 EXPECT_STREQ(OC_SPEC_VERSION, (char *) value);
685 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DATA_MODEL_VERSION, OC_DATA_MODEL_VERSION));
686 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DATA_MODEL_VERSION, &value));
687 char *dmv = OCCreateString((OCStringLL *) value);
688 EXPECT_STREQ(OC_DATA_MODEL_VERSION, dmv);
690 OCFreeOCStringLL((OCStringLL *) value);
693 OCStringLL *ld = NULL;
694 OCResourcePayloadAddStringLL(&ld, "en");
695 OCResourcePayloadAddStringLL(&ld, "Description");
696 OCResourcePayloadAddStringLL(&ld, "de");
697 OCResourcePayloadAddStringLL(&ld, "Beschriebung");
698 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_DESCRIPTION, ld));
699 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_DESCRIPTION, &value));
700 for (x = ld, y = (OCStringLL *) value; x && y; x = x->next, y = y->next)
702 EXPECT_STREQ(x->value, y->value);
704 EXPECT_TRUE(!x && !y);
705 OCFreeOCStringLL((OCStringLL *) value);
707 OCFreeOCStringLL(ld);
709 const char *sv = "software-version";
710 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_SOFTWARE_VERSION, sv));
711 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_SOFTWARE_VERSION, &value));
712 EXPECT_STREQ(sv, (char *) value);
716 OCStringLL *dmn = NULL;
717 OCResourcePayloadAddStringLL(&dmn, "en");
718 OCResourcePayloadAddStringLL(&dmn, "Manufacturer");
719 OCResourcePayloadAddStringLL(&dmn, "de");
720 OCResourcePayloadAddStringLL(&dmn, "Hersteller");
721 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_MFG_NAME, dmn));
722 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_MFG_NAME, &value));
723 for (x = dmn, y = (OCStringLL *) value; x && y; x = x->next, y = y->next)
725 EXPECT_STREQ(x->value, y->value);
727 EXPECT_TRUE(!x && !y);
728 OCFreeOCStringLL((OCStringLL *) value);
730 OCFreeOCStringLL(dmn);
732 const char *dmno = "device-model-number";
733 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_MODEL_NUM, dmno));
734 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_MODEL_NUM, &value));
735 EXPECT_STREQ(dmno, (char *) value);
739 const char *piid = "protocol-independent-identifier";
740 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_PROTOCOL_INDEPENDENT_ID, piid));
741 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_PROTOCOL_INDEPENDENT_ID, &value));
742 EXPECT_STREQ(piid, (char *) value);
746 EXPECT_EQ(OC_STACK_OK, OCStop());
749 TEST(StackDiscovery, DISABLED_DoResourceDeviceDiscovery)
751 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
752 OCCallbackData cbData;
755 OIC_LOG(INFO, TAG, "Starting DoResourceDeviceDiscovery test ");
756 InitStack(OC_CLIENT);
758 /* Start a discovery query*/
759 char szQueryUri[MAX_QUERY_LENGTH] = { 0 };
760 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
761 cbData.cb = asyncDoResourcesCallback;
762 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
764 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
774 EXPECT_EQ(OC_STACK_OK, OCStop());
777 TEST(StackResource, DISABLED_UpdateResourceNullURI)
779 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
780 OCCallbackData cbData;
783 OIC_LOG(INFO, TAG, "Starting UpdateResourceNullURI test");
784 InitStack(OC_CLIENT);
786 /* Start a discovery query*/
787 char szQueryUri[MAX_QUERY_LENGTH] = { 0 };
788 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
789 cbData.cb = asyncDoResourcesCallback;
790 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
792 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
802 EXPECT_EQ(OC_STACK_OK, OCStop());
805 TEST(StackResource, CreateResourceBadParams)
807 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
808 OIC_LOG(INFO, TAG, "Starting CreateResourceBadParams test");
809 InitStack(OC_SERVER);
811 OCResourceHandle handle;
813 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(NULL, //&handle,
819 OC_DISCOVERABLE|OC_OBSERVABLE));
821 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
827 OC_DISCOVERABLE|OC_OBSERVABLE));
829 // Property bitmask out of range
830 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
836 255));// invalid bitmask for OCResourceProperty
838 EXPECT_EQ(OC_STACK_OK, OCStop());
841 TEST(StackResource, CreateResourceBadUri)
843 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
844 OIC_LOG(INFO, TAG, "Starting CreateResourceBadUri test");
845 InitStack(OC_SERVER);
847 const char *uri257 = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVW";
849 OCResourceHandle handle;
851 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
857 OC_DISCOVERABLE|OC_OBSERVABLE));
859 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
865 OC_DISCOVERABLE|OC_OBSERVABLE));
867 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
873 OC_DISCOVERABLE|OC_OBSERVABLE));
875 EXPECT_EQ(OC_STACK_OK, OCStop());
878 TEST(StackResource, CreateResourceSuccess)
880 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
881 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
882 InitStack(OC_SERVER);
884 OCResourceHandle handle;
885 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
891 OC_DISCOVERABLE|OC_OBSERVABLE));
892 const char *url = OCGetResourceUri(handle);
893 EXPECT_STREQ("/a/led", url);
895 EXPECT_EQ(OC_STACK_OK, OCStop());
898 TEST(StackResource, CreateResourceSuccessWithResourcePolicyPropNone)
900 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
901 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccessWithResourcePolicyPropNone test");
902 InitStack(OC_SERVER);
904 OCResourceHandle handle;
905 // the resource is non-discoverable & non-observable by the client.
906 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
912 OC_RES_PROP_NONE));// the resource is non-discoverable &
913 // non-observable by the client.
914 const char* url = OCGetResourceUri(handle);
915 EXPECT_STREQ("/a/led", url);
917 EXPECT_EQ(OC_STACK_OK, OCStop());
920 TEST(StackResource, CreateResourceWithClientStackMode)
922 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
923 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
924 InitStack(OC_CLIENT);
926 OCResourceHandle handle;
927 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
933 OC_DISCOVERABLE|OC_OBSERVABLE));
935 EXPECT_EQ(OC_STACK_OK, OCStop());
938 TEST(StackResource, CreateResourceFailDuplicateUri)
940 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
941 OIC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
942 InitStack(OC_SERVER);
944 OCResourceHandle handle;
945 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
951 OC_DISCOVERABLE|OC_OBSERVABLE));
952 const char *url = OCGetResourceUri(handle);
953 EXPECT_STREQ("/a/led", url);
955 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
961 OC_DISCOVERABLE|OC_OBSERVABLE));
963 EXPECT_EQ(OC_STACK_OK, OCStop());
966 TEST(StackResource, CreateResourceMultipleResources)
968 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
969 OIC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
970 InitStack(OC_SERVER);
972 OCResourceHandle handle1;
973 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
979 OC_DISCOVERABLE|OC_OBSERVABLE));
981 OCResourceHandle handle2;
982 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
988 OC_DISCOVERABLE|OC_OBSERVABLE));
989 OCResourceHandle handle3;
990 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
996 OC_DISCOVERABLE|OC_OBSERVABLE));
998 const char *url = OCGetResourceUri(handle1);
999 EXPECT_STREQ("/a/led1", url);
1001 url = OCGetResourceUri(handle2);
1002 EXPECT_STREQ("/a/led2", url);
1004 url = OCGetResourceUri(handle3);
1005 EXPECT_STREQ("/a/led3", url);
1007 EXPECT_EQ(OC_STACK_OK, OCStop());
1010 TEST(StackResource, CreateResourceBadResoureType)
1012 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1013 OIC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
1014 InitStack(OC_SERVER);
1016 OCResourceHandle handle;
1017 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
1023 OC_DISCOVERABLE|OC_OBSERVABLE));
1025 OCResourceHandle handle2;
1026 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle2,
1032 OC_DISCOVERABLE|OC_OBSERVABLE));
1034 EXPECT_EQ(OC_STACK_OK, OCStop());
1037 TEST(StackResource, CreateResourceGoodResourceType)
1039 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1040 OIC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
1041 InitStack(OC_SERVER);
1043 OCResourceHandle handle;
1044 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1050 OC_DISCOVERABLE|OC_OBSERVABLE));
1052 EXPECT_EQ(OC_STACK_OK, OCStop());
1055 TEST(StackResource, CreateResourceWithBadEndpointsFlags)
1057 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1059 OIC_LOG(INFO, TAG, "CreateResourceWithEndpointsFlags test");
1061 InitStack(OC_SERVER);
1063 OCResourceHandle handle;
1064 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResourceWithEp(&handle,
1070 OC_DISCOVERABLE|OC_OBSERVABLE,
1071 (OCTpsSchemeFlags)INVALID_TPS_FLAGS));
1073 EXPECT_EQ(OC_STACK_OK, OCStop());
1076 TEST(StackResource, CreateResourceWithGoodEndpointsFlags)
1078 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1080 OIC_LOG(INFO, TAG, "CreateResourceWithEndpointsFlags test");
1082 InitStack(OC_SERVER);
1084 OCResourceHandle handle;
1085 EXPECT_EQ(OC_STACK_OK, OCCreateResourceWithEp(&handle,
1091 OC_DISCOVERABLE|OC_OBSERVABLE,
1093 OCResourceHandle handle2;
1094 EXPECT_EQ(OC_STACK_OK, OCCreateResourceWithEp(&handle2,
1100 OC_DISCOVERABLE|OC_OBSERVABLE,
1103 OCResourceHandle handle3;
1104 EXPECT_EQ(OC_STACK_OK, OCCreateResourceWithEp(&handle3,
1110 OC_DISCOVERABLE|OC_OBSERVABLE,
1113 OCResourceHandle handle4;
1114 EXPECT_EQ(OC_STACK_OK, OCCreateResourceWithEp(&handle4,
1120 OC_DISCOVERABLE|OC_OBSERVABLE,
1121 (OCTpsSchemeFlags)(OC_COAP | OC_COAP_TCP)));
1124 EXPECT_EQ(OC_STACK_OK, OCStop());
1127 TEST(StackResource, ResourceTypeName)
1129 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1130 OIC_LOG(INFO, TAG, "Starting ResourceTypeName test");
1131 InitStack(OC_SERVER);
1133 OCResourceHandle handle;
1134 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1140 OC_DISCOVERABLE|OC_OBSERVABLE));
1142 uint8_t numResourceTypes;
1143 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1144 EXPECT_EQ(1, numResourceTypes);
1145 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1146 EXPECT_STREQ("core.led", resourceTypeName);
1148 // try getting resource type names with an invalid index
1149 resourceTypeName = OCGetResourceTypeName(handle, 1);
1150 EXPECT_STREQ(NULL, resourceTypeName);
1151 // try getting resource type names with an invalid index
1152 resourceTypeName = OCGetResourceTypeName(handle, 10);
1153 EXPECT_STREQ(NULL, resourceTypeName);
1155 EXPECT_EQ(OC_STACK_OK, OCStop());
1158 TEST(StackResource, ResourceTypeAttrRepresentation)
1160 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1161 OIC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
1162 InitStack(OC_SERVER);
1164 OCResourceHandle handle;
1165 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1171 OC_DISCOVERABLE|OC_OBSERVABLE));
1173 uint8_t numResourceTypes;
1174 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1175 EXPECT_EQ(1, numResourceTypes);
1177 EXPECT_EQ(OC_STACK_OK, OCStop());
1180 TEST(StackResource, ResourceTypeInterface)
1182 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1183 OIC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
1184 InitStack(OC_SERVER);
1186 OCResourceHandle handle;
1187 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1193 OC_DISCOVERABLE|OC_OBSERVABLE));
1195 uint8_t numResourceInterfaces;
1196 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1197 EXPECT_EQ(2, numResourceInterfaces);
1198 const char *resourceInterfaceName1 = OCGetResourceInterfaceName(handle, 0);
1199 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, resourceInterfaceName1);
1200 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1201 EXPECT_STREQ("core.rw", resourceInterfaceName);
1203 // try getting resource interface names with an invalid index
1204 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
1205 EXPECT_STREQ(NULL, resourceInterfaceName);
1206 // try getting resource interface names with an invalid index
1207 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
1208 EXPECT_STREQ(NULL, resourceInterfaceName);
1210 EXPECT_EQ(OC_STACK_OK, OCStop());
1213 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
1215 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1217 OIC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
1219 InitStack(OC_SERVER);
1221 OCResourceHandle handle;
1222 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1228 OC_DISCOVERABLE|OC_OBSERVABLE));
1229 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
1230 OC_RSRVD_INTERFACE_DEFAULT));
1231 uint8_t numResourceInterfaces;
1232 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1233 EXPECT_EQ(2, numResourceInterfaces);
1235 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
1236 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
1238 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
1239 EXPECT_STREQ("core.rw", interfaceName_2);
1241 EXPECT_EQ(OC_STACK_OK, OCStop());
1244 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
1246 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1248 OIC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
1250 InitStack(OC_SERVER);
1252 OCResourceHandle handle;
1253 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1259 OC_DISCOVERABLE|OC_OBSERVABLE));
1261 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
1262 OC_RSRVD_INTERFACE_DEFAULT));
1263 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
1264 OC_RSRVD_INTERFACE_DEFAULT));
1266 uint8_t numResourceInterfaces;
1267 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1268 EXPECT_EQ(2, numResourceInterfaces);
1270 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
1271 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
1273 EXPECT_EQ(OC_STACK_OK, OCStop());
1276 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
1278 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1280 OIC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
1282 InitStack(OC_SERVER);
1284 OCResourceHandle handle;
1285 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1291 OC_DISCOVERABLE|OC_OBSERVABLE));
1293 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
1295 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
1298 uint8_t numResourceInterfaces;
1299 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1300 EXPECT_EQ(2, numResourceInterfaces);
1302 EXPECT_EQ(OC_STACK_OK, OCStop());
1305 TEST(StackResource, ResourceTypeInterfaceMethods)
1307 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1308 OIC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
1309 InitStack(OC_SERVER);
1311 OCResourceHandle handle;
1312 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1318 OC_DISCOVERABLE|OC_OBSERVABLE));
1320 uint8_t numResourceInterfaces;
1321 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1322 EXPECT_EQ(2, numResourceInterfaces);
1324 EXPECT_EQ(OC_STACK_OK, OCStop());
1327 TEST(StackResource, GetResourceProperties)
1329 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1330 OIC_LOG(INFO, TAG, "Starting GetResourceProperties test");
1331 InitStack(OC_SERVER);
1333 uint8_t props = OC_DISCOVERABLE|OC_OBSERVABLE;
1334 OCResourceHandle handle;
1335 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1343 EXPECT_EQ(props, OCGetResourceProperties(handle) & props);
1344 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
1346 EXPECT_EQ(OC_STACK_OK, OCStop());
1349 TEST(StackResource, SetResourceProperties)
1351 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1352 OIC_LOG(INFO, TAG, "Starting SetResourceProperties test");
1353 InitStack(OC_SERVER);
1355 OCResourceHandle handle;
1356 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1364 uint8_t props = OC_DISCOVERABLE|OC_OBSERVABLE;
1365 EXPECT_EQ(OC_STACK_OK, OCSetResourceProperties(handle, props));
1366 EXPECT_EQ(props, OCGetResourceProperties(handle) & props);
1368 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
1370 EXPECT_EQ(OC_STACK_OK, OCStop());
1373 TEST(StackResource, ClearResourceProperties)
1375 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1376 OIC_LOG(INFO, TAG, "Starting ClearResourceProperties test");
1377 InitStack(OC_SERVER);
1379 uint8_t props = OC_DISCOVERABLE|OC_OBSERVABLE;
1380 OCResourceHandle handle;
1381 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1389 EXPECT_EQ(OC_STACK_OK, OCClearResourceProperties(handle, props));
1390 EXPECT_EQ(0, OCGetResourceProperties(handle) & props);
1392 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
1394 EXPECT_EQ(OC_STACK_OK, OCStop());
1397 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
1399 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1400 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
1401 InitStack(OC_SERVER);
1402 uint8_t numResources = 0;
1403 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1405 OCResourceHandle handle;
1406 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1412 OC_DISCOVERABLE|OC_OBSERVABLE));
1413 const char *url = OCGetResourceUri(handle);
1414 EXPECT_STREQ("/a1/led", url);
1416 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
1417 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
1418 uint8_t numExpectedResources = 0;
1420 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1421 EXPECT_EQ(numExpectedResources, numResources);
1423 EXPECT_EQ(OC_STACK_OK, OCStop());
1426 TEST(StackResource, StackTestResourceDiscoverOneResource)
1428 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1429 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
1430 InitStack(OC_SERVER);
1432 OCResourceHandle handle;
1433 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1439 OC_DISCOVERABLE|OC_OBSERVABLE));
1440 const char *url = OCGetResourceUri(handle);
1441 EXPECT_STREQ("/a/led", url);
1443 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
1444 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
1446 EXPECT_EQ(OC_STACK_OK, OCStop());
1449 TEST(StackResource, StackTestResourceDiscoverManyResources)
1451 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1452 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
1453 InitStack(OC_SERVER);
1455 OCResourceHandle handle1;
1456 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1463 const char *url = OCGetResourceUri(handle1);
1464 EXPECT_STREQ("/a/led1", url);
1466 OCResourceHandle handle2;
1467 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1473 OC_DISCOVERABLE|OC_OBSERVABLE));
1474 url = OCGetResourceUri(handle2);
1475 EXPECT_STREQ("/a/led2", url);
1477 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
1478 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
1480 OCResourceHandle handle3;
1481 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1487 OC_DISCOVERABLE|OC_OBSERVABLE));
1488 url = OCGetResourceUri(handle3);
1489 EXPECT_STREQ("/a/led3", url);
1491 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
1492 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
1494 OCResourceHandle handle4;
1495 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1502 url = OCGetResourceUri(handle4);
1503 EXPECT_STREQ("/a/led4", url);
1505 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
1506 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
1507 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
1509 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
1511 EXPECT_EQ(OC_STACK_OK, OCStop());
1514 TEST_F(OCDevicePropertiesTests, DevicePropertiesToCBORPayloadllNULL)
1516 EXPECT_EQ(OC_STACK_INVALID_PARAM, DevicePropertiesToCBORPayload(NULL, NULL, NULL));
1519 TEST_F(OCDevicePropertiesTests, DevicePropertiesToCBORPayloadNULLPayload)
1521 OCDeviceProperties* deviceProps = getTestDeviceProps();
1522 ASSERT_TRUE(NULL != deviceProps);
1525 EXPECT_EQ(OC_STACK_INVALID_PARAM, DevicePropertiesToCBORPayload(deviceProps, NULL, &size));
1527 CleanUpDeviceProperties(&deviceProps);
1530 TEST_F(OCDevicePropertiesTests, DevicePropertiesToCBORPayloadNULLSize)
1532 OCDeviceProperties* deviceProps = getTestDeviceProps();
1533 ASSERT_TRUE(NULL != deviceProps);
1534 uint8_t* payload = NULL;
1536 EXPECT_EQ(OC_STACK_INVALID_PARAM, DevicePropertiesToCBORPayload(deviceProps, &payload, NULL));
1538 CleanUpDeviceProperties(&deviceProps);
1541 TEST_F(OCDevicePropertiesTests, DevicePropertiesToCBORPayloadNULLDeviceProperties)
1543 uint8_t* payload = NULL;
1546 EXPECT_EQ(OC_STACK_INVALID_PARAM, DevicePropertiesToCBORPayload(NULL, &payload, &size));
1549 TEST_F(OCDevicePropertiesTests, DevicePropertiesToCBORPayloadVALID)
1551 OCDeviceProperties* deviceProps = getTestDeviceProps();
1552 ASSERT_TRUE(NULL != deviceProps);
1553 uint8_t* payload = NULL;
1556 EXPECT_EQ(OC_STACK_OK, DevicePropertiesToCBORPayload(deviceProps, &payload, &size));
1557 EXPECT_TRUE(payload != NULL);
1559 CleanUpDeviceProperties(&deviceProps);
1563 TEST_F(OCDevicePropertiesTests, CBORPayloadToDevicePropertiesAllNULL)
1565 EXPECT_EQ(OC_STACK_INVALID_PARAM, CBORPayloadToDeviceProperties(NULL, 0, NULL));
1568 TEST_F(OCDevicePropertiesTests, CBORPayloadToDevicePropertiesNULLPayload)
1570 OCDeviceProperties* deviceProps = NULL;
1573 EXPECT_EQ(OC_STACK_INVALID_PARAM, CBORPayloadToDeviceProperties(NULL, size, &deviceProps));
1576 TEST_F(OCDevicePropertiesTests, CBORPayloadToDevicePropertiesInvalidSize)
1578 OCDeviceProperties* deviceProps = NULL;
1579 uint8_t* payload = (uint8_t*)OICCalloc(1, sizeof(uint8_t));
1580 ASSERT_TRUE(NULL != payload);
1582 EXPECT_EQ(OC_STACK_INVALID_PARAM, CBORPayloadToDeviceProperties(payload, 0, &deviceProps));
1587 TEST_F(OCDevicePropertiesTests, CBORPayloadToDevicePropertiesNULLDeviceProperties)
1589 uint8_t* payload = (uint8_t*)OICCalloc(1, sizeof(uint8_t));
1590 ASSERT_TRUE(NULL != payload);
1593 EXPECT_EQ(OC_STACK_INVALID_PARAM, CBORPayloadToDeviceProperties(payload, size, NULL));
1598 TEST_F(OCDevicePropertiesTests, CBORPayloadToDevicePropertiesVALID)
1600 OCDeviceProperties* controlDeviceProps = getTestDeviceProps();
1601 ASSERT_TRUE(NULL != controlDeviceProps);
1602 OCDeviceProperties* testDeviceProps = NULL;
1603 uint8_t* payload = NULL;
1606 EXPECT_EQ(OC_STACK_OK, DevicePropertiesToCBORPayload(controlDeviceProps, &payload, &size));
1607 EXPECT_TRUE(payload != NULL);
1609 EXPECT_EQ(OC_STACK_OK, CBORPayloadToDeviceProperties(payload, size, &testDeviceProps));
1610 ASSERT_TRUE(testDeviceProps != NULL);
1611 EXPECT_STREQ(gDevicePIID, testDeviceProps->protocolIndependentId);
1613 CleanUpDeviceProperties(&controlDeviceProps);
1614 CleanUpDeviceProperties(&testDeviceProps);
1618 TEST_F(OCDevicePropertiesTests, PIIDAvailableAfterInit)
1622 InitStack(OC_SERVER);
1624 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_PROTOCOL_INDEPENDENT_ID, &piid));
1625 ASSERT_TRUE(piid != NULL);
1629 EXPECT_EQ(OC_STACK_OK, OCStop());
1632 TEST_F(OCDevicePropertiesTests, UpdatePIID)
1634 void *originalPIID = NULL;
1635 void *newPIID = NULL;
1637 InitStack(OC_SERVER);
1639 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_PROTOCOL_INDEPENDENT_ID, &originalPIID));
1640 ASSERT_TRUE(originalPIID != NULL);
1642 EXPECT_EQ(OC_STACK_OK, OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_PROTOCOL_INDEPENDENT_ID, gDevicePIID));
1644 EXPECT_EQ(OC_STACK_OK, OCGetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_PROTOCOL_INDEPENDENT_ID, &newPIID));
1645 ASSERT_TRUE(newPIID != NULL);
1646 EXPECT_STREQ(gDevicePIID, (char *)newPIID);
1647 EXPECT_STRNE((char *)originalPIID, (char *)newPIID);
1650 OICFree(originalPIID);
1652 EXPECT_EQ(OC_STACK_OK, OCStop());
1655 TEST(StackBind, BindResourceTypeNameBad)
1657 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1658 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
1659 InitStack(OC_SERVER);
1661 OCResourceHandle handle;
1662 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1668 OC_DISCOVERABLE|OC_OBSERVABLE));
1670 uint8_t numResourceTypes;
1671 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1672 EXPECT_EQ(1, numResourceTypes);
1673 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1674 EXPECT_STREQ("core.led", resourceTypeName);
1676 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
1677 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.nameBad"));
1678 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.name bad"));
1680 EXPECT_EQ(OC_STACK_OK, OCStop());
1683 TEST(StackBind, BindResourceTypeNameGood)
1685 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1686 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
1687 InitStack(OC_SERVER);
1689 OCResourceHandle handle;
1690 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1696 OC_DISCOVERABLE|OC_OBSERVABLE));
1698 uint8_t numResourceTypes;
1699 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1700 EXPECT_EQ(1, numResourceTypes);
1701 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1702 EXPECT_STREQ("core.led", resourceTypeName);
1704 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1705 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1706 EXPECT_EQ(2, numResourceTypes);
1707 resourceTypeName = OCGetResourceTypeName(handle, 1);
1708 EXPECT_STREQ("core.brightled", resourceTypeName);
1710 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1711 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1712 EXPECT_EQ(3, numResourceTypes);
1713 resourceTypeName = OCGetResourceTypeName(handle, 2);
1714 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
1716 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "x.ReallyReallyBrightLED"));
1717 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1718 EXPECT_EQ(4, numResourceTypes);
1719 resourceTypeName = OCGetResourceTypeName(handle, 3);
1720 EXPECT_STREQ("x.ReallyReallyBrightLED", resourceTypeName);
1722 EXPECT_EQ(OC_STACK_OK, OCStop());
1725 TEST(StackBind, BindResourceTypeAttribRepGood)
1727 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1728 OIC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
1729 InitStack(OC_SERVER);
1731 OCResourceHandle handle;
1732 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1738 OC_DISCOVERABLE|OC_OBSERVABLE));
1740 uint8_t numResourceTypes;
1741 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1742 EXPECT_EQ(1, numResourceTypes);
1744 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1745 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1746 EXPECT_EQ(2, numResourceTypes);
1748 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1749 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1750 EXPECT_EQ(3, numResourceTypes);
1752 EXPECT_EQ(OC_STACK_OK, OCStop());
1756 TEST(StackBind, BindResourceInterfaceNameBad)
1758 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1759 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
1760 InitStack(OC_SERVER);
1762 OCResourceHandle handle;
1763 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1769 OC_DISCOVERABLE|OC_OBSERVABLE));
1771 uint8_t numResourceInterfaces;
1772 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1773 EXPECT_EQ(2, numResourceInterfaces);
1774 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1775 EXPECT_STREQ("core.rw", resourceInterfaceName);
1777 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
1779 EXPECT_EQ(OC_STACK_OK, OCStop());
1782 TEST(StackBind, BindResourceInterfaceNameGood)
1784 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1785 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
1786 InitStack(OC_SERVER);
1788 OCResourceHandle handle;
1789 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1795 OC_DISCOVERABLE|OC_OBSERVABLE));
1797 uint8_t numResourceInterfaces;
1798 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1799 EXPECT_EQ(2, numResourceInterfaces);
1800 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1801 EXPECT_STREQ("core.rw", resourceInterfaceName);
1803 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1805 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1806 EXPECT_EQ(3, numResourceInterfaces);
1807 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
1808 EXPECT_STREQ("core.r", resourceInterfaceName);
1810 EXPECT_EQ(OC_STACK_OK, OCStop());
1813 TEST(StackBind, BindResourceInterfaceMethodsBad)
1815 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1816 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
1817 InitStack(OC_SERVER);
1819 OCResourceHandle handle;
1820 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1826 OC_DISCOVERABLE|OC_OBSERVABLE));
1828 uint8_t numResourceInterfaces;
1829 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1830 EXPECT_EQ(2, numResourceInterfaces);
1832 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1834 EXPECT_EQ(OC_STACK_OK, OCStop());
1837 TEST(StackBind, BindResourceInterfaceMethodsGood)
1839 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1840 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
1841 InitStack(OC_SERVER);
1843 OCResourceHandle handle;
1844 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1850 OC_DISCOVERABLE|OC_OBSERVABLE));
1852 uint8_t numResourceInterfaces;
1853 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1854 EXPECT_EQ(2, numResourceInterfaces);
1856 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1858 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1859 EXPECT_EQ(3, numResourceInterfaces);
1861 EXPECT_EQ(OC_STACK_OK, OCStop());
1864 TEST(StackBind, BindContainedResourceBad)
1866 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1867 OIC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1868 InitStack(OC_SERVER);
1870 OCResourceHandle containerHandle;
1871 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1877 OC_DISCOVERABLE|OC_OBSERVABLE));
1879 OCResourceHandle handle0;
1880 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1886 OC_DISCOVERABLE|OC_OBSERVABLE));
1888 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1890 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1892 EXPECT_EQ(OC_STACK_OK, OCStop());
1895 TEST(StackBind, BindContainedResourceGood)
1897 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1898 OIC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1899 InitStack(OC_SERVER);
1901 uint8_t numResources = 0;
1902 uint8_t numExpectedResources = 0;
1904 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1906 OCResourceHandle containerHandle;
1907 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1913 OC_DISCOVERABLE|OC_OBSERVABLE));
1914 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1915 EXPECT_EQ(++numExpectedResources, numResources);
1917 OCResourceHandle handle0;
1918 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1924 OC_DISCOVERABLE|OC_OBSERVABLE));
1925 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1926 EXPECT_EQ(++numExpectedResources, numResources);
1928 OCResourceHandle handle1;
1929 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1935 OC_DISCOVERABLE|OC_OBSERVABLE));
1936 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1937 EXPECT_EQ(++numExpectedResources, numResources);
1939 OCResourceHandle handle2;
1940 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1946 OC_DISCOVERABLE|OC_OBSERVABLE));
1947 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1948 EXPECT_EQ(++numExpectedResources, numResources);
1950 OCResourceHandle handle3;
1951 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1957 OC_DISCOVERABLE|OC_OBSERVABLE));
1958 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1959 EXPECT_EQ(++numExpectedResources, numResources);
1961 OCResourceHandle handle4;
1962 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1968 OC_DISCOVERABLE|OC_OBSERVABLE));
1969 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1970 EXPECT_EQ(++numExpectedResources, numResources);
1972 OCResourceHandle handle5;
1973 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1979 OC_DISCOVERABLE|OC_OBSERVABLE));
1980 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1981 EXPECT_EQ(++numExpectedResources, numResources);
1984 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1985 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1986 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1987 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1988 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1989 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle5));
1991 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1992 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1993 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1994 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1995 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1996 EXPECT_EQ(handle5, OCGetResourceHandleFromCollection(containerHandle, 5));
1998 EXPECT_EQ(OC_STACK_OK, OCStop());
2002 TEST(StackBind, BindEntityHandlerBad)
2004 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
2005 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
2006 InitStack(OC_SERVER);
2008 OCResourceHandle handle;
2009 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
2015 OC_DISCOVERABLE|OC_OBSERVABLE));
2017 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL, NULL));
2019 EXPECT_EQ(OC_STACK_OK, OCStop());
2022 TEST(StackBind, BindEntityHandlerGood)
2024 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
2025 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
2026 InitStack(OC_SERVER);
2028 OCResourceHandle handle;
2029 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
2035 OC_DISCOVERABLE|OC_OBSERVABLE));
2037 OCEntityHandler myHandler = entityHandler;
2039 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler, NULL));
2041 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
2043 EXPECT_EQ(OC_STACK_OK, OCStop());
2046 TEST(StackResourceAccess, GetResourceByIndex)
2048 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
2049 OIC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
2050 InitStack(OC_SERVER);
2052 uint8_t numResources = 0;
2053 uint8_t numExpectedResources = 0;
2054 uint8_t resourceIndex = 0;
2055 uint8_t prevResources = 0;
2056 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
2057 prevResources = numExpectedResources;
2058 OCResourceHandle containerHandle;
2059 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
2065 OC_DISCOVERABLE|OC_OBSERVABLE));
2066 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2067 EXPECT_EQ(++numExpectedResources, numResources);
2069 OCResourceHandle handle0;
2070 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
2076 OC_DISCOVERABLE|OC_OBSERVABLE));
2077 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2078 EXPECT_EQ(++numExpectedResources, numResources);
2080 OCResourceHandle handle1;
2081 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
2087 OC_DISCOVERABLE|OC_OBSERVABLE));
2088 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2089 EXPECT_EQ(++numExpectedResources, numResources);
2091 OCResourceHandle handle2;
2092 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
2098 OC_DISCOVERABLE|OC_OBSERVABLE));
2099 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2100 EXPECT_EQ(++numExpectedResources, numResources);
2102 OCResourceHandle handle3;
2103 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
2109 OC_DISCOVERABLE|OC_OBSERVABLE));
2110 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2111 EXPECT_EQ(++numExpectedResources, numResources);
2113 OCResourceHandle handle4;
2114 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
2120 OC_DISCOVERABLE|OC_OBSERVABLE));
2121 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2122 EXPECT_EQ(++numExpectedResources, numResources);
2124 OCResourceHandle handle5;
2125 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
2131 OC_DISCOVERABLE|OC_OBSERVABLE));
2132 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2133 EXPECT_EQ(++numExpectedResources, numResources);
2134 resourceIndex += prevResources;
2135 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
2136 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
2137 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
2138 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
2139 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
2140 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
2141 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
2143 EXPECT_EQ(OC_STACK_OK, OCStop());
2146 TEST(StackResourceAccess, DeleteHeadResource)
2148 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
2149 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
2150 InitStack(OC_SERVER);
2152 uint8_t numResources = 0;
2153 uint8_t numExpectedResources = 0;
2155 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
2157 OCResourceHandle handle0;
2158 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
2164 OC_DISCOVERABLE|OC_OBSERVABLE));
2165 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2166 EXPECT_EQ(++numExpectedResources, numResources);
2168 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
2169 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2170 EXPECT_EQ(--numExpectedResources, numResources);
2172 EXPECT_EQ(OC_STACK_OK, OCStop());
2175 TEST(StackResourceAccess, DeleteHeadResource2)
2177 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
2178 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
2179 InitStack(OC_SERVER);
2181 uint8_t numResources = 0;
2182 uint8_t numExpectedResources = 0;
2184 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
2185 OCResourceHandle handle0;
2186 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
2192 OC_DISCOVERABLE|OC_OBSERVABLE));
2193 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2194 EXPECT_EQ(++numExpectedResources, numResources);
2196 OCResourceHandle handle1;
2197 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
2203 OC_DISCOVERABLE|OC_OBSERVABLE));
2204 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2205 EXPECT_EQ(++numExpectedResources, numResources);
2207 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
2208 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2209 EXPECT_EQ(--numExpectedResources, numResources);
2211 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
2213 EXPECT_EQ(OC_STACK_OK, OCStop());
2217 TEST(StackResourceAccess, DeleteLastResource)
2219 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
2220 OIC_LOG(INFO, TAG, "Starting DeleteLastResource test");
2221 InitStack(OC_SERVER);
2223 uint8_t numResources = 0;
2224 uint8_t numExpectedResources = 0;
2226 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
2228 OCResourceHandle handle0;
2229 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
2235 OC_DISCOVERABLE|OC_OBSERVABLE));
2236 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2237 EXPECT_EQ(++numExpectedResources, numResources);
2239 OCResourceHandle handle1;
2240 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
2246 OC_DISCOVERABLE|OC_OBSERVABLE));
2247 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2248 EXPECT_EQ(++numExpectedResources, numResources);
2250 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
2251 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2252 EXPECT_EQ(--numExpectedResources, numResources);
2254 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
2256 OCResourceHandle handle2;
2257 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
2263 OC_DISCOVERABLE|OC_OBSERVABLE));
2264 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2265 EXPECT_EQ(++numExpectedResources, numResources);
2267 EXPECT_EQ(OC_STACK_OK, OCStop());
2270 TEST(StackResourceAccess, DeleteMiddleResource)
2272 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
2273 OIC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
2274 InitStack(OC_SERVER);
2276 uint8_t numResources = 0;
2277 uint8_t numExpectedResources = 0;
2278 uint8_t resourceIndex = InitResourceIndex();
2280 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
2281 resourceIndex = numExpectedResources;
2282 OCResourceHandle handle0;
2283 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
2289 OC_DISCOVERABLE|OC_OBSERVABLE));
2290 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2291 EXPECT_EQ(++numExpectedResources, numResources);
2293 OCResourceHandle handle1;
2294 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
2300 OC_DISCOVERABLE|OC_OBSERVABLE));
2301 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2302 EXPECT_EQ(++numExpectedResources, numResources);
2304 OCResourceHandle handle2;
2305 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
2311 OC_DISCOVERABLE|OC_OBSERVABLE));
2312 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2313 EXPECT_EQ(++numExpectedResources, numResources);
2315 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
2316 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
2317 EXPECT_EQ(--numExpectedResources, numResources);
2319 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
2320 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
2322 // Make sure the resource elements are still correct
2323 uint8_t numResourceInterfaces;
2324 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
2325 EXPECT_EQ(2, numResourceInterfaces);
2326 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 1);
2327 EXPECT_STREQ("core.rw", resourceInterfaceName);
2329 EXPECT_EQ(OC_STACK_OK, OCStop());
2332 // Visual Studio versions earlier than 2015 have bugs in is_pod and report the wrong answer.
2333 #if !defined(_MSC_VER) || (_MSC_VER >= 1900)
2334 TEST(PODTests, OCHeaderOption)
2336 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
2339 TEST(PODTests, OCCallbackData)
2341 EXPECT_TRUE(std::is_pod<OCCallbackData>::value);
2345 TEST(StackResource, MultipleResourcesDiscovery)
2347 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
2348 OIC_LOG(INFO, TAG, "Starting MultipleResourcesDiscovery test");
2349 InitStack(OC_SERVER);
2351 OCResourceHandle handle1;
2352 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
2358 OC_DISCOVERABLE|OC_OBSERVABLE));
2360 OCResourceHandle handle2;
2361 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
2367 OC_DISCOVERABLE|OC_OBSERVABLE));
2368 OCResourceHandle handle3;
2369 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
2375 OC_DISCOVERABLE|OC_OBSERVABLE));
2376 /* Start a discovery query*/
2377 char szQueryUri[MAX_QUERY_LENGTH] = "/oic/res?if=oic.if.ll";
2378 OCCallbackData cbData;
2379 cbData.cb = discoveryCallback;
2380 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
2384 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
2395 EXPECT_EQ(OC_STACK_OK, OCStop());
2398 TEST(StackPayload, CloneByteString)
2400 uint8_t bytes[] = { 0, 1, 2, 3 };
2401 OCByteString byteString;
2402 byteString.bytes = bytes;
2403 byteString.len = sizeof(bytes);
2405 OCRepPayload *original = OCRepPayloadCreate();
2406 ASSERT_TRUE(original != NULL);
2407 EXPECT_TRUE(OCRepPayloadSetPropByteString(original, "name", byteString));
2409 OCRepPayload *clone = OCRepPayloadClone(original);
2410 ASSERT_TRUE(clone != NULL);
2412 OCRepPayloadDestroy(original);
2414 OCByteString cloneByteString;
2415 EXPECT_TRUE(OCRepPayloadGetPropByteString(clone, "name", &cloneByteString));
2416 ASSERT_TRUE(cloneByteString.bytes != NULL);
2417 EXPECT_EQ(sizeof(bytes), cloneByteString.len);
2418 EXPECT_TRUE(0 == memcmp(bytes, cloneByteString.bytes, sizeof(bytes)));
2419 OICFree(cloneByteString.bytes);
2421 OCRepPayloadDestroy(clone);
2424 TEST(StackPayload, EmptyByteString)
2426 OCByteString value = { NULL, 0 };
2428 OCByteString dest = { NULL, 0 };
2429 EXPECT_TRUE(OCByteStringCopy(&dest, &value));
2430 EXPECT_EQ(0, memcmp(&dest, &value, sizeof(OCByteString)));
2432 OCRepPayload *payload = OCRepPayloadCreate();
2433 ASSERT_TRUE(payload != NULL);
2435 EXPECT_TRUE(OCRepPayloadSetPropByteString(payload, "value", value));
2436 EXPECT_TRUE(OCRepPayloadGetPropByteString(payload, "value", &dest));
2437 EXPECT_EQ(0, memcmp(&dest, &value, sizeof(OCByteString)));
2439 OCByteString array[] = {
2443 size_t dim[MAX_REP_ARRAY_DEPTH] = { 2, 0, 0 };
2444 EXPECT_TRUE(OCRepPayloadSetByteStringArray(payload, "array", array, dim));
2445 OCByteString *destArray = NULL;
2446 size_t destDim[MAX_REP_ARRAY_DEPTH] = { 0 };
2447 EXPECT_TRUE(OCRepPayloadGetByteStringArray(payload, "array", &destArray, destDim));
2448 EXPECT_EQ(0, memcmp(destDim, dim, sizeof(destDim)));
2449 size_t dimTotal = calcDimTotal(dim);
2450 for (size_t i = 0; i < dimTotal; ++i)
2452 EXPECT_EQ(0, memcmp(&destArray[i], &array[i], sizeof(OCByteString)));
2455 for(size_t i = 0; i < dimTotal; i++)
2457 OICFree(destArray[i].bytes);
2460 OCRepPayloadDestroy(payload);
2463 TEST(StackUri, Rfc6874_Noop_1)
2465 char validIPv6Address[] = "FF01:0:0:0:0:0:0:FB";
2466 char bytes[100] = {0};
2467 strncpy(bytes, validIPv6Address, sizeof(bytes));
2469 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
2471 // No % sign, should do nothing
2472 EXPECT_STREQ(bytes, validIPv6Address);
2473 EXPECT_EQ(OC_STACK_OK, result);
2476 TEST(StackUri, Rfc6874_Noop_2)
2478 char validIPv6Address[] = "3812:a61::4:1";
2479 char bytes[100] = {0};
2481 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
2483 // No % sign, should do nothing
2484 EXPECT_STREQ(bytes, validIPv6Address);
2485 EXPECT_EQ(OC_STACK_OK, result);
2488 TEST(StackUri, Rfc6874_WithEncoding)
2490 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%wlan0";
2491 char validIPv6AddressEncoded[] = "fe80::dafe:e3ff:fe00:ebfa%25wlan0";
2492 char bytes[100] = "";
2493 strncpy(bytes, validIPv6Address, sizeof(bytes));
2495 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
2497 // Encoding should have occured
2498 EXPECT_STREQ(bytes, validIPv6AddressEncoded);
2499 EXPECT_EQ(OC_STACK_OK, result);
2502 TEST(StackUri, Rfc6874_WithEncoding_ExtraPercent)
2504 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%%wlan0";
2505 char bytes[100] = {0};
2507 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
2509 // Encoding should have failed due to extra '%' character
2510 EXPECT_STREQ(bytes, "");
2511 EXPECT_EQ(OC_STACK_ERROR, result);
2514 TEST(StackUri, Rfc6874_AlreadyEncoded)
2516 char validIPv6AddressEncoded[] = "fe80::dafe:e3ff:fe00:ebfa%25wlan0";
2517 char bytes[100] = {0};
2519 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6AddressEncoded);
2521 // Encoding should have failed due to extra '%' character
2522 EXPECT_STREQ(bytes, "");
2523 EXPECT_EQ(OC_STACK_ERROR, result);
2526 TEST(StackUri, Rfc6874_NoOverflow)
2528 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%wlan0";
2529 char addrBuffer[100];
2530 char bytes[100] = {0};
2531 memset(addrBuffer, sizeof(addrBuffer), '_');
2533 // Just enough room to encode
2534 addrBuffer[sizeof(addrBuffer) - sizeof(validIPv6Address) - 3] = '\0';
2535 strcat(addrBuffer, validIPv6Address);
2537 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), addrBuffer);
2539 // Encoding should have succeeded
2540 EXPECT_EQ(OC_STACK_OK, result);
2543 TEST(StackUri, Rfc6874_NoOverflow_2)
2545 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%wlan0";
2546 char addrBuffer[100];
2547 char bytes[100] = {0};
2548 memset(addrBuffer, sizeof(addrBuffer), '_');
2550 // Not enough room to encode
2551 addrBuffer[sizeof(addrBuffer) - sizeof(validIPv6Address) - 1] = '\0';
2552 strcat(addrBuffer, validIPv6Address);
2554 OCStackResult result = OCEncodeAddressForRFC6874(bytes, sizeof(bytes), addrBuffer);
2556 // Encoding should have failed due to output size limitations
2557 EXPECT_STREQ(bytes, "");
2558 EXPECT_EQ(OC_STACK_ERROR, result);
2561 TEST(StackHeaderOption, setHeaderOption)
2563 uint8_t optionValue1[MAX_HEADER_OPTION_DATA_LENGTH] =
2565 OCHeaderOption options[MAX_HEADER_OPTIONS] =
2567 { OC_COAP_ID, 6, 8, optionValue1 }, };
2568 uint8_t optionData = 255;
2569 size_t optionDataSize = sizeof(optionData);
2570 size_t numOptions = 1;
2571 uint16_t optionID = 2048;
2572 EXPECT_EQ(OC_STACK_OK, OCSetHeaderOption(options,
2577 EXPECT_EQ(options[1].optionID, optionID);
2578 EXPECT_EQ(options[1].optionData[0], 255);
2581 TEST(StackHeaderOption, getHeaderOption)
2583 uint8_t optionValue1[MAX_HEADER_OPTION_DATA_LENGTH] =
2585 uint8_t optionValue2[MAX_HEADER_OPTION_DATA_LENGTH] =
2587 OCHeaderOption options[MAX_HEADER_OPTIONS] =
2589 { OC_COAP_ID, 6, 8, optionValue1 },
2590 { OC_COAP_ID, 2048, 16, optionValue2 }, };
2591 uint8_t optionData[MAX_HEADER_OPTION_DATA_LENGTH];
2592 size_t optionDataSize = sizeof(optionData);
2593 size_t numOptions = 2;
2594 uint16_t optionID = 6;
2595 uint16_t actualDataSize = 0;
2596 EXPECT_EQ(OC_STACK_OK, OCGetHeaderOption(options,
2602 EXPECT_EQ(1, optionData[0]);
2603 EXPECT_EQ(8, actualDataSize);
2606 TEST(StackEndpoints, OCGetSupportedEndpointTpsFlags)
2608 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
2610 OIC_LOG(INFO, TAG, "OCGetSupportedEndpointTpsFlags test");
2612 InitStack(OC_SERVER);
2614 EXPECT_LE(INVALID_TPS_FLAGS_ZERO, OCGetSupportedEndpointTpsFlags());
2616 EXPECT_EQ(OC_STACK_OK, OCStop());
2619 static OCStackApplicationResult DiscoverBaselineResource(void *ctx, OCDoHandle handle,
2620 OCClientResponse *response)
2624 EXPECT_EQ(OC_STACK_OK, response->result);
2625 EXPECT_TRUE(NULL != response->payload);
2626 if (NULL != response->payload)
2628 EXPECT_EQ(PAYLOAD_TYPE_DISCOVERY, response->payload->type);
2630 OCDiscoveryPayload *payload = (OCDiscoveryPayload *)response->payload;
2631 EXPECT_TRUE(NULL != payload->sid);
2632 EXPECT_STREQ("StackTest", payload->name);
2633 EXPECT_STREQ(OC_RSRVD_RESOURCE_TYPE_RES, payload->type->value);
2634 EXPECT_STREQ(OC_RSRVD_INTERFACE_LL, payload->iface->value);
2635 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, payload->iface->next->value);
2637 for (OCResourcePayload *resource = payload->resources; resource; resource = resource->next)
2639 if (0 == strcmp("/a/light", resource->uri))
2641 EXPECT_STREQ("/a/light", resource->uri);
2642 EXPECT_STREQ("core.light", resource->types->value);
2643 EXPECT_EQ(NULL, resource->types->next);
2644 EXPECT_STREQ("oic.if.baseline", resource->interfaces->value);
2645 EXPECT_EQ(NULL, resource->interfaces->next);
2646 EXPECT_TRUE(resource->bitmap & OC_DISCOVERABLE);
2647 EXPECT_FALSE(resource->secure);
2648 EXPECT_EQ(0, resource->port);
2649 EXPECT_EQ(NULL, resource->next);
2654 return OC_STACK_DELETE_TRANSACTION;
2657 static OCStackApplicationResult DiscoverLinkedListResource(void *ctx, OCDoHandle handle,
2658 OCClientResponse *response)
2662 EXPECT_EQ(OC_STACK_OK, response->result);
2663 EXPECT_TRUE(NULL != response->payload);
2664 if (NULL != response->payload)
2666 EXPECT_EQ(PAYLOAD_TYPE_DISCOVERY, response->payload->type);
2668 OCDiscoveryPayload *payload = (OCDiscoveryPayload *)response->payload;
2669 EXPECT_NE((char *)NULL, payload->sid);
2670 EXPECT_EQ(NULL, payload->name);
2671 EXPECT_EQ(NULL, payload->type);
2672 EXPECT_EQ(NULL, payload->iface);
2674 for (OCResourcePayload *resource = payload->resources; resource; resource = resource->next)
2676 if (0 == strcmp("/a/light", resource->uri))
2678 EXPECT_STREQ("/a/light", resource->uri);
2679 EXPECT_STREQ("core.light", resource->types->value);
2680 EXPECT_EQ(NULL, resource->types->next);
2681 EXPECT_STREQ("oic.if.baseline", resource->interfaces->value);
2682 EXPECT_EQ(NULL, resource->interfaces->next);
2683 EXPECT_TRUE(resource->bitmap & OC_DISCOVERABLE);
2684 EXPECT_FALSE(resource->secure);
2685 EXPECT_EQ(0, resource->port);
2686 EXPECT_EQ(NULL, resource->next);
2690 return OC_STACK_DELETE_TRANSACTION;
2694 static OCStackApplicationResult DiscoverResourceTypeResponse(void *ctx, OCDoHandle handle,
2695 OCClientResponse *response)
2699 EXPECT_EQ(OC_STACK_OK, response->result);
2700 EXPECT_TRUE(NULL != response->payload);
2701 if (NULL != response->payload)
2703 EXPECT_EQ(PAYLOAD_TYPE_DISCOVERY, response->payload->type);
2705 OCDiscoveryPayload *payload = (OCDiscoveryPayload *)response->payload;
2706 EXPECT_NE((char *)NULL, payload->sid);
2707 EXPECT_EQ(NULL, payload->name);
2708 EXPECT_EQ(NULL, payload->type);
2709 EXPECT_EQ(NULL, payload->iface);
2710 EXPECT_TRUE(NULL != payload->resources);
2712 OCResourcePayload *resource = payload->resources;
2714 if (0 == strcmp("/a/light", resource->uri))
2716 EXPECT_STREQ("/a/light", resource->uri);
2717 EXPECT_STREQ("core.light", resource->types->value);
2718 EXPECT_EQ(NULL, resource->types->next);
2719 EXPECT_STREQ("oic.if.baseline", resource->interfaces->value);
2720 EXPECT_EQ(NULL, resource->interfaces->next);
2721 EXPECT_TRUE(resource->bitmap & OC_DISCOVERABLE);
2722 EXPECT_FALSE(resource->secure);
2723 EXPECT_EQ(0, resource->port);
2724 EXPECT_EQ(NULL, resource->next);
2728 return OC_STACK_DELETE_TRANSACTION;
2731 static OCStackApplicationResult DiscoverUnicastErrorResponse(void *ctx, OCDoHandle handle,
2732 OCClientResponse *response)
2736 EXPECT_NE(OC_STACK_OK, response->result);
2737 EXPECT_TRUE(NULL == response->payload);
2739 return OC_STACK_DELETE_TRANSACTION;
2742 // Disabled to unblock other developers untill IOT-1807 is done.
2743 TEST_F(OCDiscoverTests, DISABLED_DiscoverResourceWithValidQueries)
2745 itst::DeadmanTimer killSwitch(LONG_TEST_TIMEOUT);
2747 OCResourceHandle handles;
2748 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handles, "core.light", "oic.if.baseline", "/a/light",
2749 entityHandler, NULL, OC_DISCOVERABLE));
2750 OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, OC_RSRVD_DEVICE_NAME, "StackTest");
2752 itst::Callback discoverBaselineCB(&DiscoverBaselineResource);
2753 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res?if=oic.if.baseline", NULL,
2754 0, CT_DEFAULT, OC_HIGH_QOS, discoverBaselineCB, NULL, 0));
2755 EXPECT_EQ(OC_STACK_OK, discoverBaselineCB.Wait(100));
2757 // Disabled temporarily on Windows to unblock other developers. Will be enabled in IOT-1806.
2759 itst::Callback discoverDefaultCB(&DiscoverLinkedListResource);
2760 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res", NULL, 0, CT_DEFAULT,
2761 OC_HIGH_QOS, discoverDefaultCB, NULL, 0));
2762 EXPECT_EQ(OC_STACK_OK, discoverDefaultCB.Wait(100));
2765 itst::Callback discoverLinkedListCB(&DiscoverLinkedListResource);
2766 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res?if=oic.if.ll", NULL, 0,
2767 CT_DEFAULT, OC_HIGH_QOS, discoverLinkedListCB, NULL, 0));
2768 EXPECT_EQ(OC_STACK_OK, discoverLinkedListCB.Wait(100));
2770 itst::Callback discoverRTCB(&DiscoverResourceTypeResponse);
2771 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res?rt=core.light", NULL, 0,
2772 CT_DEFAULT, OC_HIGH_QOS, discoverRTCB, NULL, 0));
2773 EXPECT_EQ(OC_STACK_OK, discoverRTCB.Wait(100));
2776 // Disabled to unblock other developers untill IOT-1807 is done.
2777 TEST_F(OCDiscoverTests, DISABLED_DiscoverResourceWithInvalidQueries)
2779 itst::DeadmanTimer killSwitch(LONG_TEST_TIMEOUT);
2781 OCResourceHandle handles;
2782 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handles, "core.light", "oic.if.baseline", "/a/light",
2783 entityHandler, NULL, OC_DISCOVERABLE));
2784 OCSetPropertyValue(PAYLOAD_TYPE_DEVICE, "deviceName", "StackTest");
2786 itst::Callback discoverRTInvalidCB(&DiscoverUnicastErrorResponse);
2787 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res?rt=invalid", NULL, 0,
2788 CT_DEFAULT, OC_HIGH_QOS, discoverRTInvalidCB, NULL, 0));
2789 EXPECT_EQ(OC_STACK_OK, discoverRTInvalidCB.Wait(10));
2791 itst::Callback discoverRTEmptyCB(&DiscoverUnicastErrorResponse);
2792 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res?rt=", NULL, 0, CT_DEFAULT,
2793 OC_HIGH_QOS, discoverRTEmptyCB, NULL, 0));
2794 EXPECT_EQ(OC_STACK_OK, discoverRTEmptyCB.Wait(10));
2796 itst::Callback discoverIfInvalidCB(&DiscoverUnicastErrorResponse);
2797 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res?if=invalid", NULL, 0,
2798 CT_DEFAULT, OC_HIGH_QOS, discoverIfInvalidCB, NULL, 0));
2799 EXPECT_EQ(OC_STACK_OK, discoverIfInvalidCB.Wait(10));
2801 itst::Callback discoverIfEmptyCB(&DiscoverUnicastErrorResponse);
2802 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res?if=", NULL, 0, CT_DEFAULT,
2803 OC_HIGH_QOS, discoverIfEmptyCB, NULL, 0));
2804 EXPECT_EQ(OC_STACK_OK, discoverIfEmptyCB.Wait(10));
2807 char targetUri[MAX_URI_LENGTH * 2] ={ 0, };
2809 itst::Callback discoverUnicastIfInvalidCB(&DiscoverUnicastErrorResponse);
2810 snprintf(targetUri, MAX_URI_LENGTH * 2, "127.0.0.1/oic/res?if=invalid");
2811 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, targetUri, NULL, 0,
2812 CT_DEFAULT, OC_HIGH_QOS, discoverUnicastIfInvalidCB, NULL, 0));
2813 EXPECT_EQ(OC_STACK_OK, discoverUnicastIfInvalidCB.Wait(10));
2815 itst::Callback discoverUnicastIfEmptyCB(&DiscoverUnicastErrorResponse);
2816 snprintf(targetUri, MAX_URI_LENGTH * 2, "127.0.0.1/oic/res?if=");
2817 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, targetUri, NULL, 0, CT_DEFAULT,
2818 OC_HIGH_QOS, discoverUnicastIfEmptyCB, NULL, 0));
2819 EXPECT_EQ(OC_STACK_OK, discoverUnicastIfEmptyCB.Wait(10));
2821 itst::Callback discoverUnicastRTInvalidCB(&DiscoverUnicastErrorResponse);
2822 snprintf(targetUri, MAX_URI_LENGTH * 2, "127.0.0.1/oic/res?rt=invalid");
2823 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, targetUri, NULL, 0,
2824 CT_DEFAULT, OC_HIGH_QOS, discoverUnicastRTInvalidCB, NULL, 0));
2825 EXPECT_EQ(OC_STACK_OK, discoverUnicastRTInvalidCB.Wait(10));
2827 itst::Callback discoverUnicastRTEmptyCB(&DiscoverUnicastErrorResponse);
2828 snprintf(targetUri, MAX_URI_LENGTH * 2, "127.0.0.1/oic/res?rt=");
2829 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, targetUri, NULL, 0, CT_DEFAULT,
2830 OC_HIGH_QOS, discoverUnicastRTEmptyCB, NULL, 0));
2831 EXPECT_EQ(OC_STACK_OK, discoverUnicastRTEmptyCB.Wait(10));
2834 class OCEndpointTests : public testing::Test
2837 virtual void SetUp()
2839 OCPersistentStorage ps = { fopen, fread, fwrite, fclose, unlink };
2840 EXPECT_EQ(OC_STACK_OK, OCRegisterPersistentStorageHandler(&ps));
2841 EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, OC_CLIENT_SERVER));
2844 virtual void TearDown()
2850 static OCStackApplicationResult SecureAndNonsecureEndpoints(void *ctx, OCDoHandle handle,
2851 OCClientResponse *response)
2855 EXPECT_EQ(OC_STACK_OK, response->result);
2856 EXPECT_TRUE(NULL != response->payload);
2857 if (NULL != response->payload)
2859 EXPECT_EQ(PAYLOAD_TYPE_DISCOVERY, response->payload->type);
2860 OCDiscoveryPayload *payload = (OCDiscoveryPayload *)response->payload;
2861 EXPECT_TRUE(NULL != payload->sid);
2862 for (OCResourcePayload *resource = payload->resources; resource; resource = resource->next)
2864 if (!strcmp("/a/default", resource->uri))
2866 for (OCEndpointPayload *ep = resource->eps; ep; ep = ep->next)
2868 EXPECT_EQ(0, OC_FLAG_SECURE & ep->family);
2871 else if (!strcmp("/a/secure", resource->uri))
2873 for (OCEndpointPayload *ep = resource->eps; ep; ep = ep->next)
2875 #ifdef __WITH_DTLS__
2876 EXPECT_EQ(OC_FLAG_SECURE, OC_FLAG_SECURE & ep->family);
2878 EXPECT_EQ(0, OC_FLAG_SECURE & ep->family);
2882 else if (!strcmp("/a/nonsecure", resource->uri))
2884 for (OCEndpointPayload *ep = resource->eps; ep; ep = ep->next)
2886 EXPECT_EQ(0, OC_FLAG_SECURE & ep->family);
2889 else if (!strcmp("/a/both", resource->uri))
2891 bool hasSecure = false;
2892 bool hasNonsecure = false;
2893 for (OCEndpointPayload *ep = resource->eps; ep; ep = ep->next)
2895 if (OC_FLAG_SECURE & ep->family)
2901 hasNonsecure = true;
2904 #ifdef __WITH_DTLS__
2905 EXPECT_TRUE(hasSecure);
2907 EXPECT_FALSE(hasSecure);
2909 EXPECT_TRUE(hasNonsecure);
2913 return OC_STACK_DELETE_TRANSACTION;
2916 // Disabled until unit tests can run with SECURED=1 builds
2917 TEST_F(OCEndpointTests, DISABLED_SecureAndNonsecureEndpoints)
2919 itst::DeadmanTimer killSwitch(LONG_TEST_TIMEOUT);
2921 OCResourceHandle handle;
2922 handle = OCGetResourceHandleAtUri(OC_RSRVD_WELL_KNOWN_URI);
2923 EXPECT_EQ(OC_STACK_OK, OCSetResourceProperties(handle, OC_DISCOVERABLE | OC_OBSERVABLE));
2924 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle, "core.light", "oic.if.baseline", "/a/default",
2925 entityHandler, NULL, OC_DISCOVERABLE));
2926 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle, "core.light", "oic.if.baseline", "/a/secure",
2927 entityHandler, NULL, OC_DISCOVERABLE | OC_SECURE));
2928 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle, "core.light", "oic.if.baseline", "/a/nonsecure",
2929 entityHandler, NULL, OC_DISCOVERABLE | OC_NONSECURE));
2930 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle, "core.light", "oic.if.baseline", "/a/both",
2931 entityHandler, NULL, OC_DISCOVERABLE | OC_SECURE | OC_NONSECURE));
2933 itst::Callback secureAndNonSecureEndpointsCB(&SecureAndNonsecureEndpoints);
2934 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_DISCOVER, "/oic/res", NULL,
2935 0, CT_DEFAULT, OC_HIGH_QOS, secureAndNonSecureEndpointsCB, NULL, 0));
2936 EXPECT_EQ(OC_STACK_OK, secureAndNonSecureEndpointsCB.Wait(100));
2940 TEST(StackZoneId, getZoneId)
2942 size_t tempSize = 0;
2943 CAEndpoint_t *tempInfo = NULL;
2944 CAGetNetworkInformation(&tempInfo, &tempSize);
2946 for (size_t i = 0; i < tempSize; i++)
2948 char *zoneId = NULL;
2949 EXPECT_EQ(OC_STACK_OK, OCGetLinkLocalZoneId(tempInfo[i].ifindex, &zoneId));
2957 TEST(StackZoneId, getZoneIdWithInvalidParams)
2959 char *zoneId = NULL;
2960 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCGetLinkLocalZoneId(0, NULL));
2961 EXPECT_EQ(OC_STACK_ERROR, OCGetLinkLocalZoneId(9999, &zoneId));
2962 EXPECT_EQ(OC_STACK_ERROR, OCGetLinkLocalZoneId(UINT32_MAX, &zoneId));
2966 TEST(LinksPayloadArray, BuildCollectionLinksPayloadArray)
2968 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
2969 OIC_LOG(INFO, TAG, "Starting createLinksPayloadValue test");
2970 InitStack(OC_SERVER);
2972 size_t numResources = 0;
2973 uint8_t parentBitmap = (OC_DISCOVERABLE | OC_OBSERVABLE) | OC_SECURE;
2974 uint8_t inBitmap[2] = {( OC_DISCOVERABLE | OC_OBSERVABLE) | OC_SECURE,
2975 OC_DISCOVERABLE | OC_SECURE };
2976 int64_t outBitmap[2] = { 0 };
2978 OCResourceHandle containerHandle;
2979 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
2987 OCResourceHandle handle0;
2988 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
2997 OCResourceHandle handle1;
2998 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
3007 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
3008 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
3010 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
3011 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
3013 OCRepPayload** linksRepPayloadArray = NULL;
3014 OCRepPayload* collectionPayload = NULL;
3015 OCRepPayload* policyMap = NULL;
3016 OCRepPayload** linksMap = NULL;
3018 OCDevAddr* devAddr = (OCDevAddr*)OICCalloc(1, sizeof(OCDevAddr));
3019 devAddr->adapter = OC_ADAPTER_IP;
3020 CAEndpoint_t *info = NULL;
3022 CAGetNetworkInformation(&info, &size);
3023 devAddr->ifindex = info->ifindex;
3025 //check for OIC1.1 logic
3026 size_t arraySize = 0;
3027 linksRepPayloadArray = BuildCollectionLinksPayloadArray("/a/kitchen", false,
3028 devAddr, &arraySize);
3029 ASSERT_TRUE(NULL != linksRepPayloadArray);
3031 collectionPayload = OCRepPayloadCreate();
3032 ASSERT_TRUE(NULL != collectionPayload);
3034 size_t dim[MAX_REP_ARRAY_DEPTH] = { numResources, 0, 0 };
3035 EXPECT_EQ(numResources, arraySize);
3037 ASSERT_TRUE(OCRepPayloadSetPropObjectArrayAsOwner(collectionPayload, OC_RSRVD_LINKS,
3038 linksRepPayloadArray, dim));
3040 ASSERT_TRUE(OCRepPayloadGetPropObjectArray(collectionPayload, OC_RSRVD_LINKS, &linksMap, dim));
3042 for (size_t i = 0; i < numResources; i++)
3044 ASSERT_TRUE(OCRepPayloadGetPropObject(linksMap[i], OC_RSRVD_POLICY, &policyMap));
3045 ASSERT_TRUE(OCRepPayloadGetPropInt(policyMap, OC_RSRVD_BITMAP, &outBitmap[i]));
3046 // check bitmap excluding secure bit
3047 EXPECT_EQ(inBitmap[i] & ~OC_MASK_RESOURCE_SECURE, outBitmap[i]);
3053 bool isSecure = false;
3054 ASSERT_TRUE(OCRepPayloadGetPropBool(policyMap, OC_RSRVD_SECURE, &isSecure));
3058 int64_t outTlsPort = 0;
3059 ASSERT_TRUE(OCRepPayloadGetPropInt(policyMap, OC_RSRVD_TLS_PORT, &outTlsPort));
3061 uint16_t tlsPort = 0;
3062 GetTCPPortInfo(devAddr, &tlsPort, true);
3063 EXPECT_EQ(tlsPort, outTlsPort);
3068 int64_t outTcpPort = 0;
3069 ASSERT_TRUE(OCRepPayloadGetPropInt(policyMap, OC_RSRVD_TCP_PORT, &outTcpPort));
3071 uint16_t tcpPort = 0;
3072 GetTCPPortInfo(devAddr, &tcpPort, false);
3074 EXPECT_EQ(tcpPort, outTcpPort);
3078 int64_t outTcpPort = 0;
3079 ASSERT_TRUE(OCRepPayloadGetPropInt(policyMap, OC_RSRVD_TCP_PORT, &outTcpPort));
3081 uint16_t tcpPort = 0;
3082 GetTCPPortInfo(devAddr, &tcpPort, false);
3084 EXPECT_EQ(tcpPort, outTcpPort);
3088 OCRepPayloadDestroy(linksMap[i]);
3092 OCRepPayloadDestroy(policyMap);
3093 OCRepPayloadDestroy(collectionPayload);
3095 //check for OCF1.0 logic
3096 linksRepPayloadArray = BuildCollectionLinksPayloadArray("/a/kitchen", true, devAddr, &arraySize);
3097 ASSERT_TRUE(NULL != linksRepPayloadArray);
3099 collectionPayload = OCRepPayloadCreate();
3100 ASSERT_TRUE(NULL != collectionPayload);
3102 EXPECT_EQ(numResources, arraySize);
3104 ASSERT_TRUE(OCRepPayloadSetPropObjectArrayAsOwner(collectionPayload, OC_RSRVD_LINKS,
3105 linksRepPayloadArray, dim));
3107 ASSERT_TRUE(OCRepPayloadGetPropObjectArray(collectionPayload, OC_RSRVD_LINKS, &linksMap, dim));
3109 for (size_t i = 0; i < numResources; i++)
3111 ASSERT_TRUE(OCRepPayloadGetPropObject(linksMap[i], OC_RSRVD_POLICY, &policyMap));
3112 ASSERT_TRUE(OCRepPayloadGetPropInt(policyMap, OC_RSRVD_BITMAP, &outBitmap[i]));
3113 // check bitmap excluding secure bit
3114 EXPECT_EQ(inBitmap[i] & ~OC_MASK_RESOURCE_SECURE, outBitmap[i]);
3116 size_t epsDim[MAX_REP_ARRAY_DEPTH] = { 0 };
3117 OCRepPayload **epsMap = NULL;
3118 ASSERT_TRUE(OCRepPayloadGetPropObjectArray(linksMap[i], OC_RSRVD_ENDPOINTS, &epsMap, epsDim));
3120 size_t count = calcDimTotal(epsDim);
3121 size_t coap_scheme_cnt[4] = { 0, 0, 0, 0 };
3122 const char* coap_scheme[4] = { "coap", "coaps://", "coap+tcp://", "coaps+tcp://" };
3124 for (size_t k = 0; k < count; k++)
3126 ASSERT_TRUE(OCRepPayloadGetPropString(epsMap[k], OC_RSRVD_ENDPOINT, &outUri));
3128 if (!strncmp(outUri, coap_scheme[3], strlen(coap_scheme[3])))
3129 coap_scheme_cnt[3]++;
3130 else if (!strncmp(outUri, coap_scheme[2], strlen(coap_scheme[2])))
3131 coap_scheme_cnt[2]++;
3132 else if (!strncmp(outUri, coap_scheme[1], strlen(coap_scheme[1])))
3133 coap_scheme_cnt[1]++;
3134 else if (!strncmp(outUri, coap_scheme[0], strlen(coap_scheme[0])))
3135 coap_scheme_cnt[0]++;
3139 OIC_LOG_V(ERROR, TAG, "ep uri = %s \n", outUri);
3142 OCRepPayloadDestroy(epsMap[k]);
3145 #ifdef __WITH_DTLS__
3146 ASSERT_GE(coap_scheme_cnt[1], (size_t) 1);
3148 ASSERT_GE(coap_scheme_cnt[3], (size_t) 1);
3151 ASSERT_GE(coap_scheme_cnt[0], (size_t) 1);
3153 ASSERT_GE(coap_scheme_cnt[2], (size_t) 1);
3157 OCRepPayloadDestroy(linksMap[i]);
3162 OCRepPayloadDestroy(policyMap);
3163 OCRepPayloadDestroy(collectionPayload);
3165 EXPECT_EQ(OC_STACK_OK, OCStop());
3168 TEST(DiagnosticPayload, CreateDestroy)
3170 OCDiagnosticPayload *payload;
3173 OCDiagnosticPayloadDestroy(payload);
3175 payload = OCDiagnosticPayloadCreate(NULL);
3176 ASSERT_TRUE(payload == NULL);
3178 payload = OCDiagnosticPayloadCreate("message");
3179 ASSERT_TRUE(payload != NULL);
3180 ASSERT_STREQ("message", payload->message);
3181 OCDiagnosticPayloadDestroy(payload);
3184 static OCEntityHandlerResult DiagnosticPayloadRequest(OCEntityHandlerFlag flag,
3185 OCEntityHandlerRequest *request, void *ctx)
3189 OCEntityHandlerResponse response;
3190 memset(&response, 0, sizeof(response));
3191 response.requestHandle = request->requestHandle;
3192 response.resourceHandle = request->resource;
3193 response.ehResult = OC_EH_BAD_REQ;
3194 response.payload = (OCPayload*) OCDiagnosticPayloadCreate("message");
3195 EXPECT_TRUE(response.payload != NULL);
3196 EXPECT_EQ(OC_STACK_OK, OCDoResponse(&response));
3200 static OCStackApplicationResult DiagnosticPayloadResponse(void *ctx, OCDoHandle handle,
3201 OCClientResponse *response)
3205 EXPECT_EQ(OC_STACK_INVALID_QUERY, response->result);
3206 EXPECT_EQ(PAYLOAD_TYPE_DIAGNOSTIC, response->payload->type);
3207 OCDiagnosticPayload *payload = (OCDiagnosticPayload*) response->payload;
3208 EXPECT_STREQ("message", payload->message);
3209 return OC_STACK_DELETE_TRANSACTION;
3212 TEST(DiagnosticPayload, DISABLED_EndToEnd)
3214 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT_SERVER));
3215 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
3217 OCResourceHandle handle;
3218 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle, "core.light", "oic.if.baseline", "/a/light",
3219 DiagnosticPayloadRequest, NULL, OC_DISCOVERABLE));
3221 itst::Callback diagnosticPayloadCB(&DiagnosticPayloadResponse);
3222 EXPECT_EQ(OC_STACK_OK, OCDoResource(NULL, OC_REST_GET, "127.0.0.1:5683/a/light", NULL,
3223 0, CT_DEFAULT, OC_HIGH_QOS, diagnosticPayloadCB, NULL, 0));
3224 EXPECT_EQ(OC_STACK_OK, diagnosticPayloadCB.Wait(100));
3229 // Mostly copy-paste from ca_api_unittest.cpp
3230 TEST(OCIpv6ScopeLevel, getMulticastScope)
3232 const char interfaceLocalStart[] = "ff01::";
3233 const char linkLocalStart[] = "ff02::";
3234 const char realmLocalStart[] = "ff03::";
3235 const char adminLocalStart[] = "ff04::";
3236 const char siteLocalStart[] = "ff05::";
3237 const char orgLocalStart[] = "ff08::";
3238 const char globalStart[] = "ff0e::";
3240 const char interfaceLocalMid[] = "ff81:0000:0000:f000:0000:0000:0000:0000";
3241 const char linkLocalMid[] = "ff82:0000:0000:f000:0000:0000:0000:0000";
3242 const char realmLocalMid[] = "ff83:0000:0000:f000:0000:0000:0000:0000";
3243 const char adminLocalMid[] = "ff84:0000:0000:f000:0000:0000:0000:0000";
3244 const char siteLocalMid[] = "ff85:0000:0000:f000:0000:0000:0000:0000";
3245 const char orgLocalMid[] = "ff88:0000:0000:f000:0000:0000:0000:0000";
3246 const char globalMid[] = "ff8e:0000:0000:f000:0000:0000:0000:0000";
3248 const char interfaceLocalEnd[] = "fff1:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
3249 const char linkLocalEnd[] = "fff2:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
3250 const char realmLocalEnd[] = "fff3:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
3251 const char adminLocalEnd[] = "fff4:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
3252 const char siteLocalEnd[] = "fff5:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
3253 const char orgLocalEnd[] = "fff8:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
3254 const char globalEnd[] = "fffe:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
3257 OCTransportFlags scopeLevel = OC_DEFAULT_FLAGS;
3258 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(interfaceLocalStart, &scopeLevel));
3259 EXPECT_EQ(OC_SCOPE_INTERFACE, scopeLevel);
3260 scopeLevel = OC_DEFAULT_FLAGS;
3262 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(linkLocalStart, &scopeLevel));
3263 EXPECT_EQ(OC_SCOPE_LINK, scopeLevel);
3264 scopeLevel = OC_DEFAULT_FLAGS;
3266 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(realmLocalStart, &scopeLevel));
3267 EXPECT_EQ(OC_SCOPE_REALM, scopeLevel);
3268 scopeLevel = OC_DEFAULT_FLAGS;
3270 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(adminLocalStart, &scopeLevel));
3271 EXPECT_EQ(OC_SCOPE_ADMIN, scopeLevel);
3272 scopeLevel = OC_DEFAULT_FLAGS;
3274 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(siteLocalStart, &scopeLevel));
3275 EXPECT_EQ(OC_SCOPE_SITE, scopeLevel);
3276 scopeLevel = OC_DEFAULT_FLAGS;
3278 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(orgLocalStart, &scopeLevel));
3279 EXPECT_EQ(OC_SCOPE_ORG, scopeLevel);
3280 scopeLevel = OC_DEFAULT_FLAGS;
3282 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(globalStart, &scopeLevel));
3283 EXPECT_EQ(OC_SCOPE_GLOBAL, scopeLevel);
3284 scopeLevel = OC_DEFAULT_FLAGS;
3287 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(interfaceLocalMid, &scopeLevel));
3288 EXPECT_EQ(OC_SCOPE_INTERFACE, scopeLevel);
3289 scopeLevel = OC_DEFAULT_FLAGS;
3291 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(linkLocalMid, &scopeLevel));
3292 EXPECT_EQ(OC_SCOPE_LINK, scopeLevel);
3293 scopeLevel = OC_DEFAULT_FLAGS;
3295 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(realmLocalMid, &scopeLevel));
3296 EXPECT_EQ(OC_SCOPE_REALM, scopeLevel);
3297 scopeLevel = OC_DEFAULT_FLAGS;
3299 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(adminLocalMid, &scopeLevel));
3300 EXPECT_EQ(OC_SCOPE_ADMIN, scopeLevel);
3301 scopeLevel = OC_DEFAULT_FLAGS;
3303 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(siteLocalMid, &scopeLevel));
3304 EXPECT_EQ(OC_SCOPE_SITE, scopeLevel);
3305 scopeLevel = OC_DEFAULT_FLAGS;
3307 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(orgLocalMid, &scopeLevel));
3308 EXPECT_EQ(OC_SCOPE_ORG, scopeLevel);
3309 scopeLevel = OC_DEFAULT_FLAGS;
3311 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(globalMid, &scopeLevel));
3312 EXPECT_EQ(OC_SCOPE_GLOBAL, scopeLevel);
3313 scopeLevel = OC_DEFAULT_FLAGS;
3316 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(interfaceLocalEnd, &scopeLevel));
3317 EXPECT_EQ(OC_SCOPE_INTERFACE, scopeLevel);
3318 scopeLevel = OC_DEFAULT_FLAGS;
3320 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(linkLocalEnd, &scopeLevel));
3321 EXPECT_EQ(OC_SCOPE_LINK, scopeLevel);
3322 scopeLevel = OC_DEFAULT_FLAGS;
3324 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(realmLocalEnd, &scopeLevel));
3325 EXPECT_EQ(OC_SCOPE_REALM, scopeLevel);
3326 scopeLevel = OC_DEFAULT_FLAGS;
3328 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(adminLocalEnd, &scopeLevel));
3329 EXPECT_EQ(OC_SCOPE_ADMIN, scopeLevel);
3330 scopeLevel = OC_DEFAULT_FLAGS;
3332 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(siteLocalEnd, &scopeLevel));
3333 EXPECT_EQ(OC_SCOPE_SITE, scopeLevel);
3334 scopeLevel = OC_DEFAULT_FLAGS;
3336 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(orgLocalEnd, &scopeLevel));
3337 EXPECT_EQ(OC_SCOPE_ORG, scopeLevel);
3338 scopeLevel = OC_DEFAULT_FLAGS;
3340 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(globalEnd, &scopeLevel));
3341 EXPECT_EQ(OC_SCOPE_GLOBAL, scopeLevel);
3342 scopeLevel = OC_DEFAULT_FLAGS;
3345 // Mostly copy-paste from ca_api_unittest.cpp
3346 TEST(OCIpv6ScopeLevel, getUnicastScope)
3348 const char linkLocalLoopBack[] = "::1";
3350 const char linkLocalStart[] = "fe80::";
3351 const char linkLocalMid[] = "fe80:0000:0000:0000:0f00:0000:0000:0000";
3352 const char linkLocalEnd[] = "febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
3354 const char siteLocalStart[] = "fec0::";
3355 const char siteLocalMid[] = "fec0:0000:0000:0000:0f00:0000:0000:0000";
3356 const char siteLocalEnd[] = "feff:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
3358 const char globalStart[] = "2000:0000:0000:0000:0000:0000:0000:0000";
3359 const char globalMid[] = "2000:0000:0000:0f00:0000:0000:0000:0000";
3360 const char globalEnd[] = "3fff:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
3363 OCTransportFlags scopeLevel = OC_DEFAULT_FLAGS;
3364 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(linkLocalLoopBack, &scopeLevel));
3365 EXPECT_EQ(OC_SCOPE_LINK, scopeLevel);
3366 scopeLevel = OC_DEFAULT_FLAGS;
3369 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(linkLocalStart, &scopeLevel));
3370 EXPECT_EQ(OC_SCOPE_LINK, scopeLevel);
3371 scopeLevel = OC_DEFAULT_FLAGS;
3373 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(linkLocalMid, &scopeLevel));
3374 EXPECT_EQ(OC_SCOPE_LINK, scopeLevel);
3375 scopeLevel = OC_DEFAULT_FLAGS;
3377 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(linkLocalEnd, &scopeLevel));
3378 EXPECT_EQ(OC_SCOPE_LINK, scopeLevel);
3379 scopeLevel = OC_DEFAULT_FLAGS;
3382 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(siteLocalStart, &scopeLevel));
3383 EXPECT_EQ(OC_SCOPE_SITE, scopeLevel);
3384 scopeLevel = OC_DEFAULT_FLAGS;
3386 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(siteLocalMid, &scopeLevel));
3387 EXPECT_EQ(OC_SCOPE_SITE, scopeLevel);
3388 scopeLevel = OC_DEFAULT_FLAGS;
3390 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(siteLocalEnd, &scopeLevel));
3391 EXPECT_EQ(OC_SCOPE_SITE, scopeLevel);
3392 scopeLevel = OC_DEFAULT_FLAGS;
3395 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(globalStart, &scopeLevel));
3396 EXPECT_EQ(OC_SCOPE_GLOBAL, scopeLevel);
3397 scopeLevel = OC_DEFAULT_FLAGS;
3399 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(globalMid, &scopeLevel));
3400 EXPECT_EQ(OC_SCOPE_GLOBAL, scopeLevel);
3401 scopeLevel = OC_DEFAULT_FLAGS;
3403 EXPECT_EQ(OC_STACK_OK, OCGetIpv6AddrScope(globalEnd, &scopeLevel));
3404 EXPECT_EQ(OC_SCOPE_GLOBAL, scopeLevel);
3405 scopeLevel = OC_DEFAULT_FLAGS;
3408 // Mostly copy-paste from ca_api_unittest.cpp
3409 TEST(OCIpv6ScopeLevel, invalidAddressTest)
3411 const char invalidAddr1[] = "qqqq";
3412 const char invalidAddr2[] = "ffx7:ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff";
3413 const char invalidAddr3[] = "ffx7::::::::::dsds";
3414 const char invalidAddr4[] = "ffx7:ffff:ffff:ff@f:ffff:ffff:ffff:ffff";
3416 OCTransportFlags scopeLevel = OC_DEFAULT_FLAGS;
3417 EXPECT_EQ(OC_STACK_ERROR, OCGetIpv6AddrScope(invalidAddr1, &scopeLevel));
3418 EXPECT_EQ(OC_STACK_ERROR, OCGetIpv6AddrScope(invalidAddr2, &scopeLevel));
3419 EXPECT_EQ(OC_STACK_ERROR, OCGetIpv6AddrScope(invalidAddr3, &scopeLevel));
3420 EXPECT_EQ(OC_STACK_ERROR, OCGetIpv6AddrScope(invalidAddr4, &scopeLevel));
3423 #if defined (WITH_POSIX) && (defined (__WITH_DTLS__) || defined(__WITH_TLS__))
3424 TEST(SelectCipherSuite,SelectPositiveAdapter)
3429 uint16_t cipher = 0xC0AE;
3430 EXPECT_EQ(OC_STACK_OK,OCSelectCipherSuite(cipher, OC_ADAPTER_IP));
3431 EXPECT_EQ(OC_STACK_OK,OCSelectCipherSuite(cipher, OC_ADAPTER_GATT_BTLE));
3432 EXPECT_EQ(OC_STACK_OK,OCSelectCipherSuite(cipher, OC_ADAPTER_RFCOMM_BTEDR));
3433 EXPECT_EQ(OC_STACK_OK,OCSelectCipherSuite(cipher, OC_ADAPTER_TCP));
3434 EXPECT_EQ(OC_STACK_OK,OCSelectCipherSuite(cipher, OC_ADAPTER_NFC));
3437 EXPECT_EQ(OC_STACK_OK,OCSelectCipherSuite(cipher, OC_ADAPTER_REMOTE_ACCESS));