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"
31 #include "gtest/gtest.h"
32 #include <sys/types.h>
41 //-----------------------------------------------------------------------------
43 //-----------------------------------------------------------------------------
50 #include "gtest_helper.h"
54 namespace itst = iotivity::test;
56 #define DEFAULT_CONTEXT_VALUE 0x99
58 //-----------------------------------------------------------------------------
60 //-----------------------------------------------------------------------------
61 static const char TAG[] = "TestHarness";
63 char gDeviceUUID[] = "myDeviceUUID";
64 char gManufacturerName[] = "myName";
65 char gTooLongManufacturerName[] = "extremelylongmanufacturername";
66 char gManufacturerUrl[] = "www.foooooooooooooooo.baaaaaaaaaaaaar";
68 static char pinNumber;
69 static OCDPDev_t peer;
71 std::chrono::seconds const SHORT_TEST_TIMEOUT = std::chrono::seconds(5);
73 //-----------------------------------------------------------------------------
75 //-----------------------------------------------------------------------------
76 extern "C" OCStackApplicationResult asyncDoResourcesCallback(void* ctx,
77 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
79 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
81 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
83 if(ctx == (void*)DEFAULT_CONTEXT_VALUE) {
84 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
86 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
88 return OC_STACK_KEEP_TRANSACTION;
91 static void resultCallback(void *UNUSED1, OCDPDev_t *UNUSED2, OCStackResult UNUSED3)
98 extern "C" OCStackApplicationResult discoveryCallback(void* ctx,
99 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
101 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
103 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
105 if(ctx == (void*)DEFAULT_CONTEXT_VALUE)
107 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
110 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
112 OCDiscoveryPayload *discoveryPayload = ((OCDiscoveryPayload *) clientResponse->payload);
113 EXPECT_TRUE(discoveryPayload != NULL);
114 OCResourcePayload *res = discoveryPayload->resources;
116 for (OCResourcePayload *res1 = discoveryPayload->resources; res1; res1 = res1->next)
121 EXPECT_EQ("/a/led1", res->uri);
123 EXPECT_EQ("/a/led2", res->uri);
125 EXPECT_EQ("/a/led3", res->uri);
127 EXPECT_TRUE(res == NULL);
129 return OC_STACK_KEEP_TRANSACTION;
132 //-----------------------------------------------------------------------------
134 //-----------------------------------------------------------------------------
135 OCEntityHandlerResult entityHandler(OCEntityHandlerFlag /*flag*/,
136 OCEntityHandlerRequest * /*entityHandlerRequest*/,
137 void* /*callbackParam*/)
139 OIC_LOG(INFO, TAG, "Entering entityHandler");
144 //-----------------------------------------------------------------------------
146 //-----------------------------------------------------------------------------
147 void InitStack(OCMode mode)
149 OIC_LOG(INFO, TAG, "Entering InitStack");
151 EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, mode));
152 OIC_LOG(INFO, TAG, "Leaving InitStack");
155 uint8_t InitNumExpectedResources()
158 // When presence is enabled, it is a resource and so is (currently) included
159 // in the returned resource count returned by the OCGetNumberOfResources API.
166 uint8_t InitResourceIndex()
169 // When presence is enabled, it is a resource and so is (currently) included
170 // in the returned resource count returned by the OCGetNumberOfResources API.
171 // The index of the presence resource is 0, so the first user app resource index
178 //-----------------------------------------------------------------------------
180 //-----------------------------------------------------------------------------
182 TEST(StackInit, StackInitNullAddr)
184 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
185 EXPECT_EQ(OC_STACK_OK, OCInit(0, 5683, OC_SERVER));
186 EXPECT_EQ(OC_STACK_OK, OCStop());
189 TEST(StackInit, StackInitNullPort)
191 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
192 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 0, OC_SERVER));
193 EXPECT_EQ(OC_STACK_OK, OCStop());
196 TEST(StackInit, StackInitNullAddrAndPort)
198 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
199 EXPECT_EQ(OC_STACK_OK, OCInit(0, 0, OC_SERVER));
200 EXPECT_EQ(OC_STACK_OK, OCStop());
203 TEST(StackInit, StackInitInvalidMode)
205 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
206 EXPECT_EQ(OC_STACK_ERROR, OCInit(0, 0, (OCMode)10));
207 EXPECT_EQ(OC_STACK_ERROR, OCStop());
210 TEST(StackStart, StackStartSuccessClient)
212 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
213 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
214 EXPECT_EQ(OC_STACK_OK, OCStop());
217 TEST(StackStart, StackStartSuccessServer)
219 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
220 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
221 EXPECT_EQ(OC_STACK_OK, OCStop());
224 TEST(StackStart, StackStartSuccessClientServer)
226 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
227 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT_SERVER));
228 EXPECT_EQ(OC_STACK_OK, OCStop());
231 TEST(StackStart, StackStartSuccessiveInits)
233 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
234 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
235 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.2", 5683, OC_SERVER));
236 EXPECT_EQ(OC_STACK_OK, OCStop());
239 TEST(StackStart, SetPlatformInfoValid)
241 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
242 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
244 OCPlatformInfo info =
248 0, 0, 0, 0, 0, 0, 0, 0, 0
250 EXPECT_EQ(OC_STACK_OK, OCSetPlatformInfo(info));
251 EXPECT_EQ(OC_STACK_OK, OCStop());
254 TEST(StackStart, SetPlatformInfoWithClientMode)
256 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
257 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
259 OCPlatformInfo info =
263 0, 0, 0, 0, 0, 0, 0, 0, 0
265 EXPECT_EQ(OC_STACK_ERROR, OCSetPlatformInfo(info));
266 EXPECT_EQ(OC_STACK_OK, OCStop());
269 TEST(StackStart, SetPlatformInfoWithNoPlatformID)
271 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
272 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
274 OCPlatformInfo info =
278 0, 0, 0, 0, 0, 0, 0, 0, 0
281 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
282 EXPECT_EQ(OC_STACK_OK, OCStop());
285 TEST(StackStart, SetPlatformInfoWithNoManufacturerName)
287 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
288 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
290 OCPlatformInfo info =
293 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
296 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
297 EXPECT_EQ(OC_STACK_OK, OCStop());
300 TEST(StackStart, SetPlatformInfoWithZeroLengthManufacturerName)
302 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
303 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
305 OCPlatformInfo info =
308 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
310 info.manufacturerName = (char *) "";
312 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
313 EXPECT_EQ(OC_STACK_OK, OCStop());
316 TEST(StackStart, SetPlatformInfoWithTooLongManufacName)
318 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
319 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
321 OCPlatformInfo info =
324 gTooLongManufacturerName,
325 0, 0, 0, 0, 0, 0, 0, 0, 0
328 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
329 EXPECT_EQ(OC_STACK_OK, OCStop());
332 TEST(StackStart, SetPlatformInfoWithTooLongManufacURL)
334 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
335 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
336 OCPlatformInfo info =
341 0, 0, 0, 0, 0, 0, 0, 0
344 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
345 EXPECT_EQ(OC_STACK_OK, OCStop());
348 TEST(StackDiscovery, DISABLED_DoResourceDeviceDiscovery)
350 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
351 OCCallbackData cbData;
354 OIC_LOG(INFO, TAG, "Starting DoResourceDeviceDiscovery test ");
355 InitStack(OC_CLIENT);
357 /* Start a discovery query*/
358 char szQueryUri[64] = { 0 };
359 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
360 cbData.cb = asyncDoResourcesCallback;
361 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
363 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
373 EXPECT_EQ(OC_STACK_OK, OCStop());
376 TEST(StackStop, StackStopWithoutInit)
378 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
379 EXPECT_EQ(OC_STACK_ERROR, OCStop());
382 TEST(StackStop, StackStopRepeated)
384 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
385 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
386 EXPECT_EQ(OC_STACK_OK, OCStop());
387 EXPECT_EQ(OC_STACK_ERROR, OCStop());
390 TEST(StackResource, DISABLED_UpdateResourceNullURI)
392 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
393 OCCallbackData cbData;
396 OIC_LOG(INFO, TAG, "Starting UpdateResourceNullURI test");
397 InitStack(OC_CLIENT);
399 /* Start a discovery query*/
400 char szQueryUri[64] = { 0 };
401 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
402 cbData.cb = asyncDoResourcesCallback;
403 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
405 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
415 EXPECT_EQ(OC_STACK_OK, OCStop());
418 TEST(StackResource, CreateResourceBadParams)
420 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
421 OIC_LOG(INFO, TAG, "Starting CreateResourceBadParams test");
422 InitStack(OC_SERVER);
424 OCResourceHandle handle;
426 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(NULL, //&handle,
432 OC_DISCOVERABLE|OC_OBSERVABLE));
434 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
440 OC_DISCOVERABLE|OC_OBSERVABLE));
442 // Property bitmask out of range
443 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
449 128));// invalid bitmask for OCResourceProperty
451 EXPECT_EQ(OC_STACK_OK, OCStop());
454 TEST(StackResource, CreateResourceBadUri)
456 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
457 OIC_LOG(INFO, TAG, "Starting CreateResourceBadUri test");
458 InitStack(OC_SERVER);
460 const char *uri257 = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVW";
462 OCResourceHandle handle;
464 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
470 OC_DISCOVERABLE|OC_OBSERVABLE));
472 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
478 OC_DISCOVERABLE|OC_OBSERVABLE));
480 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
486 OC_DISCOVERABLE|OC_OBSERVABLE));
488 EXPECT_EQ(OC_STACK_OK, OCStop());
491 TEST(StackResource, CreateResourceSuccess)
493 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
494 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
495 InitStack(OC_SERVER);
497 OCResourceHandle handle;
498 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
504 OC_DISCOVERABLE|OC_OBSERVABLE));
505 const char *url = OCGetResourceUri(handle);
506 EXPECT_STREQ("/a/led", url);
508 EXPECT_EQ(OC_STACK_OK, OCStop());
511 TEST(StackResource, CreateResourceSuccessWithResourcePolicyPropNone)
513 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
514 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccessWithResourcePolicyPropNone test");
515 InitStack(OC_SERVER);
517 OCResourceHandle handle;
518 // the resource is non-discoverable & non-observable by the client.
519 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
525 OC_RES_PROP_NONE));// the resource is non-discoverable &
526 // non-observable by the client.
527 const char* url = OCGetResourceUri(handle);
528 EXPECT_STREQ("/a/led", url);
530 EXPECT_EQ(OC_STACK_OK, OCStop());
533 TEST(StackResource, CreateResourceWithClientStackMode)
535 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
536 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
537 InitStack(OC_CLIENT);
539 OCResourceHandle handle;
540 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
546 OC_DISCOVERABLE|OC_OBSERVABLE));
548 EXPECT_EQ(OC_STACK_OK, OCStop());
551 TEST(StackResource, CreateResourceFailDuplicateUri)
553 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
554 OIC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
555 InitStack(OC_SERVER);
557 OCResourceHandle handle;
558 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
564 OC_DISCOVERABLE|OC_OBSERVABLE));
565 const char *url = OCGetResourceUri(handle);
566 EXPECT_STREQ("/a/led", url);
568 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
574 OC_DISCOVERABLE|OC_OBSERVABLE));
576 EXPECT_EQ(OC_STACK_OK, OCStop());
579 TEST(StackResource, CreateResourceMultipleResources)
581 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
582 OIC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
583 InitStack(OC_SERVER);
585 OCResourceHandle handle1;
586 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
592 OC_DISCOVERABLE|OC_OBSERVABLE));
594 OCResourceHandle handle2;
595 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
601 OC_DISCOVERABLE|OC_OBSERVABLE));
602 OCResourceHandle handle3;
603 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
609 OC_DISCOVERABLE|OC_OBSERVABLE));
611 const char *url = OCGetResourceUri(handle1);
612 EXPECT_STREQ("/a/led1", url);
614 url = OCGetResourceUri(handle2);
615 EXPECT_STREQ("/a/led2", url);
617 url = OCGetResourceUri(handle3);
618 EXPECT_STREQ("/a/led3", url);
620 EXPECT_EQ(OC_STACK_OK, OCStop());
623 TEST(StackResource, CreateResourceBadResoureType)
625 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
626 OIC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
627 InitStack(OC_SERVER);
629 OCResourceHandle handle;
630 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
636 OC_DISCOVERABLE|OC_OBSERVABLE));
638 OCResourceHandle handle2;
639 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle2,
645 OC_DISCOVERABLE|OC_OBSERVABLE));
647 EXPECT_EQ(OC_STACK_OK, OCStop());
650 TEST(StackResource, CreateResourceGoodResourceType)
652 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
653 OIC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
654 InitStack(OC_SERVER);
656 OCResourceHandle handle;
657 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
663 OC_DISCOVERABLE|OC_OBSERVABLE));
665 EXPECT_EQ(OC_STACK_OK, OCStop());
668 TEST(StackResource, ResourceTypeName)
670 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
671 OIC_LOG(INFO, TAG, "Starting ResourceTypeName test");
672 InitStack(OC_SERVER);
674 OCResourceHandle handle;
675 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
681 OC_DISCOVERABLE|OC_OBSERVABLE));
683 uint8_t numResourceTypes;
684 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
685 EXPECT_EQ(1, numResourceTypes);
686 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
687 EXPECT_STREQ("core.led", resourceTypeName);
689 // try getting resource type names with an invalid index
690 resourceTypeName = OCGetResourceTypeName(handle, 1);
691 EXPECT_STREQ(NULL, resourceTypeName);
692 // try getting resource type names with an invalid index
693 resourceTypeName = OCGetResourceTypeName(handle, 10);
694 EXPECT_STREQ(NULL, resourceTypeName);
696 EXPECT_EQ(OC_STACK_OK, OCStop());
699 TEST(StackResource, ResourceTypeAttrRepresentation)
701 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
702 OIC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
703 InitStack(OC_SERVER);
705 OCResourceHandle handle;
706 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
712 OC_DISCOVERABLE|OC_OBSERVABLE));
714 uint8_t numResourceTypes;
715 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
716 EXPECT_EQ(1, numResourceTypes);
718 EXPECT_EQ(OC_STACK_OK, OCStop());
721 TEST(StackResource, ResourceTypeInterface)
723 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
724 OIC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
725 InitStack(OC_SERVER);
727 OCResourceHandle handle;
728 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
734 OC_DISCOVERABLE|OC_OBSERVABLE));
736 uint8_t numResourceInterfaces;
737 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
738 EXPECT_EQ(2, numResourceInterfaces);
739 const char *resourceInterfaceName1 = OCGetResourceInterfaceName(handle, 0);
740 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, resourceInterfaceName1);
741 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
742 EXPECT_STREQ("core.rw", resourceInterfaceName);
744 // try getting resource interface names with an invalid index
745 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
746 EXPECT_STREQ(NULL, resourceInterfaceName);
747 // try getting resource interface names with an invalid index
748 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
749 EXPECT_STREQ(NULL, resourceInterfaceName);
751 EXPECT_EQ(OC_STACK_OK, OCStop());
754 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
756 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
758 OIC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
760 InitStack(OC_SERVER);
762 OCResourceHandle handle;
763 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
769 OC_DISCOVERABLE|OC_OBSERVABLE));
770 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
771 OC_RSRVD_INTERFACE_DEFAULT));
772 uint8_t numResourceInterfaces;
773 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
774 EXPECT_EQ(2, numResourceInterfaces);
776 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
777 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
779 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
780 EXPECT_STREQ("core.rw", interfaceName_2);
782 EXPECT_EQ(OC_STACK_OK, OCStop());
785 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
787 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
789 OIC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
791 InitStack(OC_SERVER);
793 OCResourceHandle handle;
794 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
800 OC_DISCOVERABLE|OC_OBSERVABLE));
802 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
803 OC_RSRVD_INTERFACE_DEFAULT));
804 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
805 OC_RSRVD_INTERFACE_DEFAULT));
807 uint8_t numResourceInterfaces;
808 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
809 EXPECT_EQ(2, numResourceInterfaces);
811 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
812 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
814 EXPECT_EQ(OC_STACK_OK, OCStop());
817 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
819 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
821 OIC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
823 InitStack(OC_SERVER);
825 OCResourceHandle handle;
826 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
832 OC_DISCOVERABLE|OC_OBSERVABLE));
834 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
836 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
839 uint8_t numResourceInterfaces;
840 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
841 EXPECT_EQ(2, numResourceInterfaces);
843 EXPECT_EQ(OC_STACK_OK, OCStop());
846 TEST(StackResource, ResourceTypeInterfaceMethods)
848 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
849 OIC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
850 InitStack(OC_SERVER);
852 OCResourceHandle handle;
853 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
859 OC_DISCOVERABLE|OC_OBSERVABLE));
861 uint8_t numResourceInterfaces;
862 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
863 EXPECT_EQ(2, numResourceInterfaces);
865 EXPECT_EQ(OC_STACK_OK, OCStop());
868 TEST(StackResource, GetResourceProperties)
870 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
871 OIC_LOG(INFO, TAG, "Starting GetResourceProperties test");
872 InitStack(OC_SERVER);
874 OCResourceHandle handle;
875 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
881 OC_DISCOVERABLE|OC_OBSERVABLE));
883 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
884 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
886 EXPECT_EQ(OC_STACK_OK, OCStop());
889 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
891 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
892 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
893 InitStack(OC_SERVER);
894 uint8_t numResources = 0;
895 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
897 OCResourceHandle handle;
898 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
904 OC_DISCOVERABLE|OC_OBSERVABLE));
905 const char *url = OCGetResourceUri(handle);
906 EXPECT_STREQ("/a1/led", url);
908 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
909 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
910 uint8_t numExpectedResources = 0;
912 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
913 EXPECT_EQ(numExpectedResources, numResources);
915 EXPECT_EQ(OC_STACK_OK, OCStop());
918 TEST(StackResource, StackTestResourceDiscoverOneResource)
920 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
921 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
922 InitStack(OC_SERVER);
924 OCResourceHandle handle;
925 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
931 OC_DISCOVERABLE|OC_OBSERVABLE));
932 const char *url = OCGetResourceUri(handle);
933 EXPECT_STREQ("/a/led", url);
935 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
936 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
938 EXPECT_EQ(OC_STACK_OK, OCStop());
941 TEST(StackResource, StackTestResourceDiscoverManyResources)
943 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
944 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
945 InitStack(OC_SERVER);
947 OCResourceHandle handle1;
948 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
955 const char *url = OCGetResourceUri(handle1);
956 EXPECT_STREQ("/a/led1", url);
958 OCResourceHandle handle2;
959 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
965 OC_DISCOVERABLE|OC_OBSERVABLE));
966 url = OCGetResourceUri(handle2);
967 EXPECT_STREQ("/a/led2", url);
969 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
970 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
972 OCResourceHandle handle3;
973 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
979 OC_DISCOVERABLE|OC_OBSERVABLE));
980 url = OCGetResourceUri(handle3);
981 EXPECT_STREQ("/a/led3", url);
983 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
984 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
986 OCResourceHandle handle4;
987 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
994 url = OCGetResourceUri(handle4);
995 EXPECT_STREQ("/a/led4", url);
997 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
998 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
999 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
1001 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
1003 EXPECT_EQ(OC_STACK_OK, OCStop());
1006 TEST(StackBind, BindResourceTypeNameBad)
1008 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1009 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
1010 InitStack(OC_SERVER);
1012 OCResourceHandle handle;
1013 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1019 OC_DISCOVERABLE|OC_OBSERVABLE));
1021 uint8_t numResourceTypes;
1022 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1023 EXPECT_EQ(1, numResourceTypes);
1024 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1025 EXPECT_STREQ("core.led", resourceTypeName);
1027 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
1028 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.nameBad"));
1029 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.name bad"));
1031 EXPECT_EQ(OC_STACK_OK, OCStop());
1034 TEST(StackBind, BindResourceTypeNameGood)
1036 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1037 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
1038 InitStack(OC_SERVER);
1040 OCResourceHandle handle;
1041 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1047 OC_DISCOVERABLE|OC_OBSERVABLE));
1049 uint8_t numResourceTypes;
1050 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1051 EXPECT_EQ(1, numResourceTypes);
1052 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1053 EXPECT_STREQ("core.led", resourceTypeName);
1055 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1056 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1057 EXPECT_EQ(2, numResourceTypes);
1058 resourceTypeName = OCGetResourceTypeName(handle, 1);
1059 EXPECT_STREQ("core.brightled", resourceTypeName);
1061 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1062 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1063 EXPECT_EQ(3, numResourceTypes);
1064 resourceTypeName = OCGetResourceTypeName(handle, 2);
1065 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
1067 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "x.ReallyReallyBrightLED"));
1068 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1069 EXPECT_EQ(4, numResourceTypes);
1070 resourceTypeName = OCGetResourceTypeName(handle, 3);
1071 EXPECT_STREQ("x.ReallyReallyBrightLED", resourceTypeName);
1073 EXPECT_EQ(OC_STACK_OK, OCStop());
1076 TEST(StackBind, BindResourceTypeAttribRepGood)
1078 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1079 OIC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
1080 InitStack(OC_SERVER);
1082 OCResourceHandle handle;
1083 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1089 OC_DISCOVERABLE|OC_OBSERVABLE));
1091 uint8_t numResourceTypes;
1092 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1093 EXPECT_EQ(1, numResourceTypes);
1095 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1096 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1097 EXPECT_EQ(2, numResourceTypes);
1099 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1100 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1101 EXPECT_EQ(3, numResourceTypes);
1103 EXPECT_EQ(OC_STACK_OK, OCStop());
1107 TEST(StackBind, BindResourceInterfaceNameBad)
1109 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1110 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
1111 InitStack(OC_SERVER);
1113 OCResourceHandle handle;
1114 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1120 OC_DISCOVERABLE|OC_OBSERVABLE));
1122 uint8_t numResourceInterfaces;
1123 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1124 EXPECT_EQ(2, numResourceInterfaces);
1125 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1126 EXPECT_STREQ("core.rw", resourceInterfaceName);
1128 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
1130 EXPECT_EQ(OC_STACK_OK, OCStop());
1133 TEST(StackBind, BindResourceInterfaceNameGood)
1135 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1136 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
1137 InitStack(OC_SERVER);
1139 OCResourceHandle handle;
1140 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1146 OC_DISCOVERABLE|OC_OBSERVABLE));
1148 uint8_t numResourceInterfaces;
1149 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1150 EXPECT_EQ(2, numResourceInterfaces);
1151 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1152 EXPECT_STREQ("core.rw", resourceInterfaceName);
1154 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1156 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1157 EXPECT_EQ(3, numResourceInterfaces);
1158 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
1159 EXPECT_STREQ("core.r", resourceInterfaceName);
1161 EXPECT_EQ(OC_STACK_OK, OCStop());
1164 TEST(StackBind, BindResourceInterfaceMethodsBad)
1166 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1167 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
1168 InitStack(OC_SERVER);
1170 OCResourceHandle handle;
1171 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1177 OC_DISCOVERABLE|OC_OBSERVABLE));
1179 uint8_t numResourceInterfaces;
1180 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1181 EXPECT_EQ(2, numResourceInterfaces);
1183 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1185 EXPECT_EQ(OC_STACK_OK, OCStop());
1188 TEST(StackBind, BindResourceInterfaceMethodsGood)
1190 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1191 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
1192 InitStack(OC_SERVER);
1194 OCResourceHandle handle;
1195 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1201 OC_DISCOVERABLE|OC_OBSERVABLE));
1203 uint8_t numResourceInterfaces;
1204 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1205 EXPECT_EQ(2, numResourceInterfaces);
1207 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1209 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1210 EXPECT_EQ(3, numResourceInterfaces);
1212 EXPECT_EQ(OC_STACK_OK, OCStop());
1215 TEST(StackBind, BindContainedResourceBad)
1217 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1218 OIC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1219 InitStack(OC_SERVER);
1221 OCResourceHandle containerHandle;
1222 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1228 OC_DISCOVERABLE|OC_OBSERVABLE));
1230 OCResourceHandle handle0;
1231 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1237 OC_DISCOVERABLE|OC_OBSERVABLE));
1239 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1241 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1243 EXPECT_EQ(OC_STACK_OK, OCStop());
1246 TEST(StackBind, BindContainedResourceGood)
1248 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1249 OIC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1250 InitStack(OC_SERVER);
1252 uint8_t numResources = 0;
1253 uint8_t numExpectedResources = 0;
1255 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1257 OCResourceHandle containerHandle;
1258 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1264 OC_DISCOVERABLE|OC_OBSERVABLE));
1265 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1266 EXPECT_EQ(++numExpectedResources, numResources);
1268 OCResourceHandle handle0;
1269 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1275 OC_DISCOVERABLE|OC_OBSERVABLE));
1276 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1277 EXPECT_EQ(++numExpectedResources, numResources);
1279 OCResourceHandle handle1;
1280 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1286 OC_DISCOVERABLE|OC_OBSERVABLE));
1287 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1288 EXPECT_EQ(++numExpectedResources, numResources);
1290 OCResourceHandle handle2;
1291 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1297 OC_DISCOVERABLE|OC_OBSERVABLE));
1298 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1299 EXPECT_EQ(++numExpectedResources, numResources);
1301 OCResourceHandle handle3;
1302 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1308 OC_DISCOVERABLE|OC_OBSERVABLE));
1309 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1310 EXPECT_EQ(++numExpectedResources, numResources);
1312 OCResourceHandle handle4;
1313 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1319 OC_DISCOVERABLE|OC_OBSERVABLE));
1320 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1321 EXPECT_EQ(++numExpectedResources, numResources);
1323 OCResourceHandle handle5;
1324 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1330 OC_DISCOVERABLE|OC_OBSERVABLE));
1331 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1332 EXPECT_EQ(++numExpectedResources, numResources);
1335 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1336 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1337 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1338 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1339 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1340 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle5));
1342 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1343 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1344 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1345 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1346 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1347 EXPECT_EQ(handle5, OCGetResourceHandleFromCollection(containerHandle, 5));
1349 EXPECT_EQ(OC_STACK_OK, OCStop());
1353 TEST(StackBind, BindEntityHandlerBad)
1355 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1356 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1357 InitStack(OC_SERVER);
1359 OCResourceHandle handle;
1360 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1366 OC_DISCOVERABLE|OC_OBSERVABLE));
1368 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL, NULL));
1370 EXPECT_EQ(OC_STACK_OK, OCStop());
1373 TEST(StackBind, BindEntityHandlerGood)
1375 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1376 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1377 InitStack(OC_SERVER);
1379 OCResourceHandle handle;
1380 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1386 OC_DISCOVERABLE|OC_OBSERVABLE));
1388 OCEntityHandler myHandler = entityHandler;
1390 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler, NULL));
1392 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1394 EXPECT_EQ(OC_STACK_OK, OCStop());
1397 TEST(StackResourceAccess, GetResourceByIndex)
1399 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1400 OIC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1401 InitStack(OC_SERVER);
1403 uint8_t numResources = 0;
1404 uint8_t numExpectedResources = 0;
1405 uint8_t resourceIndex = 0;
1406 uint8_t prevResources = 0;
1407 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1408 prevResources = numExpectedResources;
1409 OCResourceHandle containerHandle;
1410 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1416 OC_DISCOVERABLE|OC_OBSERVABLE));
1417 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1418 EXPECT_EQ(++numExpectedResources, numResources);
1420 OCResourceHandle handle0;
1421 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1427 OC_DISCOVERABLE|OC_OBSERVABLE));
1428 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1429 EXPECT_EQ(++numExpectedResources, numResources);
1431 OCResourceHandle handle1;
1432 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1438 OC_DISCOVERABLE|OC_OBSERVABLE));
1439 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1440 EXPECT_EQ(++numExpectedResources, numResources);
1442 OCResourceHandle handle2;
1443 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1449 OC_DISCOVERABLE|OC_OBSERVABLE));
1450 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1451 EXPECT_EQ(++numExpectedResources, numResources);
1453 OCResourceHandle handle3;
1454 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1460 OC_DISCOVERABLE|OC_OBSERVABLE));
1461 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1462 EXPECT_EQ(++numExpectedResources, numResources);
1464 OCResourceHandle handle4;
1465 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1471 OC_DISCOVERABLE|OC_OBSERVABLE));
1472 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1473 EXPECT_EQ(++numExpectedResources, numResources);
1475 OCResourceHandle handle5;
1476 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1482 OC_DISCOVERABLE|OC_OBSERVABLE));
1483 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1484 EXPECT_EQ(++numExpectedResources, numResources);
1485 resourceIndex += prevResources;
1486 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1487 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1488 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1489 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1490 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1491 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1492 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1494 EXPECT_EQ(OC_STACK_OK, OCStop());
1497 TEST(StackResourceAccess, DeleteHeadResource)
1499 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1500 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1501 InitStack(OC_SERVER);
1503 uint8_t numResources = 0;
1504 uint8_t numExpectedResources = 0;
1506 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1508 OCResourceHandle handle0;
1509 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1515 OC_DISCOVERABLE|OC_OBSERVABLE));
1516 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1517 EXPECT_EQ(++numExpectedResources, numResources);
1519 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1520 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1521 EXPECT_EQ(--numExpectedResources, numResources);
1523 EXPECT_EQ(OC_STACK_OK, OCStop());
1526 TEST(StackResourceAccess, DeleteHeadResource2)
1528 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1529 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1530 InitStack(OC_SERVER);
1532 uint8_t numResources = 0;
1533 uint8_t numExpectedResources = 0;
1535 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1536 OCResourceHandle handle0;
1537 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1543 OC_DISCOVERABLE|OC_OBSERVABLE));
1544 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1545 EXPECT_EQ(++numExpectedResources, numResources);
1547 OCResourceHandle handle1;
1548 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1554 OC_DISCOVERABLE|OC_OBSERVABLE));
1555 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1556 EXPECT_EQ(++numExpectedResources, numResources);
1558 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1559 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1560 EXPECT_EQ(--numExpectedResources, numResources);
1562 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
1564 EXPECT_EQ(OC_STACK_OK, OCStop());
1568 TEST(StackResourceAccess, DeleteLastResource)
1570 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1571 OIC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1572 InitStack(OC_SERVER);
1574 uint8_t numResources = 0;
1575 uint8_t numExpectedResources = 0;
1577 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1579 OCResourceHandle handle0;
1580 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1586 OC_DISCOVERABLE|OC_OBSERVABLE));
1587 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1588 EXPECT_EQ(++numExpectedResources, numResources);
1590 OCResourceHandle handle1;
1591 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1597 OC_DISCOVERABLE|OC_OBSERVABLE));
1598 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1599 EXPECT_EQ(++numExpectedResources, numResources);
1601 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1602 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1603 EXPECT_EQ(--numExpectedResources, numResources);
1605 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
1607 OCResourceHandle handle2;
1608 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1614 OC_DISCOVERABLE|OC_OBSERVABLE));
1615 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1616 EXPECT_EQ(++numExpectedResources, numResources);
1618 EXPECT_EQ(OC_STACK_OK, OCStop());
1621 TEST(StackResourceAccess, DeleteMiddleResource)
1623 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1624 OIC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1625 InitStack(OC_SERVER);
1627 uint8_t numResources = 0;
1628 uint8_t numExpectedResources = 0;
1629 uint8_t resourceIndex = InitResourceIndex();
1631 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1632 resourceIndex = numExpectedResources;
1633 OCResourceHandle handle0;
1634 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1640 OC_DISCOVERABLE|OC_OBSERVABLE));
1641 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1642 EXPECT_EQ(++numExpectedResources, numResources);
1644 OCResourceHandle handle1;
1645 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1651 OC_DISCOVERABLE|OC_OBSERVABLE));
1652 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1653 EXPECT_EQ(++numExpectedResources, numResources);
1655 OCResourceHandle handle2;
1656 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1662 OC_DISCOVERABLE|OC_OBSERVABLE));
1663 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1664 EXPECT_EQ(++numExpectedResources, numResources);
1666 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1667 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1668 EXPECT_EQ(--numExpectedResources, numResources);
1670 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1671 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1673 // Make sure the resource elements are still correct
1674 uint8_t numResourceInterfaces;
1675 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1676 EXPECT_EQ(2, numResourceInterfaces);
1677 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 1);
1678 EXPECT_STREQ("core.rw", resourceInterfaceName);
1680 EXPECT_EQ(OC_STACK_OK, OCStop());
1683 // Visual Studio versions earlier than 2015 have bugs in is_pod and report the wrong answer.
1684 #if !defined(_MSC_VER) || (_MSC_VER >= 1900)
1685 TEST(PODTests, OCHeaderOption)
1687 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1690 TEST(PODTests, OCCallbackData)
1692 EXPECT_TRUE(std::is_pod<OCCallbackData>::value);
1696 TEST(OCDoDirectPairingTests, Nullpeer)
1698 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, NULL, pmSel, &pinNumber, &resultCallback));
1701 TEST(OCDoDirectPairingTests, NullCallback)
1703 EXPECT_EQ(OC_STACK_INVALID_CALLBACK,OCDoDirectPairing(NULL, &peer, pmSel, &pinNumber, NULL));
1706 TEST(OCDoDirectPairingTests, NullpinNumber)
1708 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, &peer, pmSel, NULL, &resultCallback));
1711 TEST(StackResource, MultipleResourcesDiscovery)
1713 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1714 OIC_LOG(INFO, TAG, "Starting MultipleResourcesDiscovery test");
1715 InitStack(OC_SERVER);
1717 OCResourceHandle handle1;
1718 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1724 OC_DISCOVERABLE|OC_OBSERVABLE));
1726 OCResourceHandle handle2;
1727 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1733 OC_DISCOVERABLE|OC_OBSERVABLE));
1734 OCResourceHandle handle3;
1735 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1741 OC_DISCOVERABLE|OC_OBSERVABLE));
1742 /* Start a discovery query*/
1743 char szQueryUri[256] = "/oic/res?if=oic.if.ll";
1744 OCCallbackData cbData;
1745 cbData.cb = discoveryCallback;
1746 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
1750 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
1761 EXPECT_EQ(OC_STACK_OK, OCStop());
1764 TEST(StackPayload, CloneByteString)
1766 uint8_t bytes[] = { 0, 1, 2, 3 };
1767 OCByteString byteString;
1768 byteString.bytes = bytes;
1769 byteString.len = sizeof(bytes);
1771 OCRepPayload *original = OCRepPayloadCreate();
1772 ASSERT_TRUE(original != NULL);
1773 EXPECT_TRUE(OCRepPayloadSetPropByteString(original, "name", byteString));
1775 OCRepPayload *clone = OCRepPayloadClone(original);
1776 ASSERT_TRUE(clone != NULL);
1778 OCRepPayloadDestroy(original);
1780 OCByteString cloneByteString;
1781 EXPECT_TRUE(OCRepPayloadGetPropByteString(clone, "name", &cloneByteString));
1782 ASSERT_TRUE(cloneByteString.bytes != NULL);
1783 EXPECT_EQ(sizeof(bytes), cloneByteString.len);
1784 EXPECT_TRUE(0 == memcmp(bytes, cloneByteString.bytes, sizeof(bytes)));
1785 OICFree(cloneByteString.bytes);
1787 OCRepPayloadDestroy(clone);