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>
39 //-----------------------------------------------------------------------------
41 //-----------------------------------------------------------------------------
48 #include "gtest_helper.h"
52 namespace itst = iotivity::test;
54 #define DEFAULT_CONTEXT_VALUE 0x99
56 //-----------------------------------------------------------------------------
58 //-----------------------------------------------------------------------------
59 static const char TAG[] = "TestHarness";
61 char gDeviceUUID[] = "myDeviceUUID";
62 char gManufacturerName[] = "myName";
63 char gTooLongManufacturerName[] = "extremelylongmanufacturername";
64 char gManufacturerUrl[] = "www.foooooooooooooooo.baaaaaaaaaaaaar";
66 static char pinNumber;
67 static OCDPDev_t peer;
69 std::chrono::seconds const SHORT_TEST_TIMEOUT = std::chrono::seconds(5);
71 //-----------------------------------------------------------------------------
73 //-----------------------------------------------------------------------------
74 extern "C" OCStackApplicationResult asyncDoResourcesCallback(void* ctx,
75 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
77 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
79 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
81 if(ctx == (void*)DEFAULT_CONTEXT_VALUE) {
82 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
84 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
86 return OC_STACK_KEEP_TRANSACTION;
89 static void resultCallback(void *UNUSED1, OCDPDev_t *UNUSED2, OCStackResult UNUSED3)
96 extern "C" OCStackApplicationResult discoveryCallback(void* ctx,
97 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
99 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
101 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
103 if(ctx == (void*)DEFAULT_CONTEXT_VALUE)
105 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
108 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
110 OCDiscoveryPayload *discoveryPayload = ((OCDiscoveryPayload *) clientResponse->payload);
111 EXPECT_TRUE(discoveryPayload != NULL);
112 OCResourcePayload *res = discoveryPayload->resources;
114 for (OCResourcePayload *res1 = discoveryPayload->resources; res1; res1 = res1->next)
119 EXPECT_EQ("/a/led1", res->uri);
121 EXPECT_EQ("/a/led2", res->uri);
123 EXPECT_EQ("/a/led3", res->uri);
125 EXPECT_TRUE(res == NULL);
127 return OC_STACK_KEEP_TRANSACTION;
130 //-----------------------------------------------------------------------------
132 //-----------------------------------------------------------------------------
133 OCEntityHandlerResult entityHandler(OCEntityHandlerFlag /*flag*/,
134 OCEntityHandlerRequest * /*entityHandlerRequest*/,
135 void* /*callbackParam*/)
137 OIC_LOG(INFO, TAG, "Entering entityHandler");
142 //-----------------------------------------------------------------------------
144 //-----------------------------------------------------------------------------
145 void InitStack(OCMode mode)
147 OIC_LOG(INFO, TAG, "Entering InitStack");
149 EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, mode));
150 OIC_LOG(INFO, TAG, "Leaving InitStack");
153 uint8_t InitNumExpectedResources()
156 // When presence is enabled, it is a resource and so is (currently) included
157 // in the returned resource count returned by the OCGetNumberOfResources API.
164 uint8_t InitResourceIndex()
167 // When presence is enabled, it is a resource and so is (currently) included
168 // in the returned resource count returned by the OCGetNumberOfResources API.
169 // The index of the presence resource is 0, so the first user app resource index
176 //-----------------------------------------------------------------------------
178 //-----------------------------------------------------------------------------
180 TEST(StackInit, StackInitNullAddr)
182 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
183 EXPECT_EQ(OC_STACK_OK, OCInit(0, 5683, OC_SERVER));
184 EXPECT_EQ(OC_STACK_OK, OCStop());
187 TEST(StackInit, StackInitNullPort)
189 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
190 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 0, OC_SERVER));
191 EXPECT_EQ(OC_STACK_OK, OCStop());
194 TEST(StackInit, StackInitNullAddrAndPort)
196 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
197 EXPECT_EQ(OC_STACK_OK, OCInit(0, 0, OC_SERVER));
198 EXPECT_EQ(OC_STACK_OK, OCStop());
201 TEST(StackInit, StackInitInvalidMode)
203 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
204 EXPECT_EQ(OC_STACK_ERROR, OCInit(0, 0, (OCMode)10));
205 EXPECT_EQ(OC_STACK_ERROR, OCStop());
208 TEST(StackStart, StackStartSuccessClient)
210 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
211 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
212 EXPECT_EQ(OC_STACK_OK, OCStop());
215 TEST(StackStart, StackStartSuccessServer)
217 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
218 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
219 EXPECT_EQ(OC_STACK_OK, OCStop());
222 TEST(StackStart, StackStartSuccessClientServer)
224 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
225 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT_SERVER));
226 EXPECT_EQ(OC_STACK_OK, OCStop());
229 TEST(StackStart, StackStartSuccessiveInits)
231 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
232 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
233 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.2", 5683, OC_SERVER));
234 EXPECT_EQ(OC_STACK_OK, OCStop());
237 TEST(StackStart, SetPlatformInfoValid)
239 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
240 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
242 OCPlatformInfo info =
246 0, 0, 0, 0, 0, 0, 0, 0, 0
248 EXPECT_EQ(OC_STACK_OK, OCSetPlatformInfo(info));
249 EXPECT_EQ(OC_STACK_OK, OCStop());
252 TEST(StackStart, SetPlatformInfoWithClientMode)
254 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
255 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
257 OCPlatformInfo info =
261 0, 0, 0, 0, 0, 0, 0, 0, 0
263 EXPECT_EQ(OC_STACK_ERROR, OCSetPlatformInfo(info));
264 EXPECT_EQ(OC_STACK_OK, OCStop());
267 TEST(StackStart, SetPlatformInfoWithNoPlatformID)
269 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
270 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
272 OCPlatformInfo info =
276 0, 0, 0, 0, 0, 0, 0, 0, 0
279 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
280 EXPECT_EQ(OC_STACK_OK, OCStop());
283 TEST(StackStart, SetPlatformInfoWithNoManufacturerName)
285 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
286 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
288 OCPlatformInfo info =
291 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
294 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
295 EXPECT_EQ(OC_STACK_OK, OCStop());
298 TEST(StackStart, SetPlatformInfoWithZeroLengthManufacturerName)
300 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
301 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
303 OCPlatformInfo info =
306 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
308 info.manufacturerName = (char *) "";
310 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
311 EXPECT_EQ(OC_STACK_OK, OCStop());
314 TEST(StackStart, SetPlatformInfoWithTooLongManufacName)
316 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
317 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
319 OCPlatformInfo info =
322 gTooLongManufacturerName,
323 0, 0, 0, 0, 0, 0, 0, 0, 0
326 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
327 EXPECT_EQ(OC_STACK_OK, OCStop());
330 TEST(StackStart, SetPlatformInfoWithTooLongManufacURL)
332 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
333 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
334 OCPlatformInfo info =
339 0, 0, 0, 0, 0, 0, 0, 0
342 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
343 EXPECT_EQ(OC_STACK_OK, OCStop());
346 TEST(StackDiscovery, DISABLED_DoResourceDeviceDiscovery)
348 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
349 OCCallbackData cbData;
352 OIC_LOG(INFO, TAG, "Starting DoResourceDeviceDiscovery test ");
353 InitStack(OC_CLIENT);
355 /* Start a discovery query*/
356 char szQueryUri[64] = { 0 };
357 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
358 cbData.cb = asyncDoResourcesCallback;
359 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
361 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
371 EXPECT_EQ(OC_STACK_OK, OCStop());
374 TEST(StackStop, StackStopWithoutInit)
376 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
377 EXPECT_EQ(OC_STACK_ERROR, OCStop());
380 TEST(StackStop, StackStopRepeated)
382 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
383 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
384 EXPECT_EQ(OC_STACK_OK, OCStop());
385 EXPECT_EQ(OC_STACK_ERROR, OCStop());
388 TEST(StackResource, DISABLED_UpdateResourceNullURI)
390 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
391 OCCallbackData cbData;
394 OIC_LOG(INFO, TAG, "Starting UpdateResourceNullURI test");
395 InitStack(OC_CLIENT);
397 /* Start a discovery query*/
398 char szQueryUri[64] = { 0 };
399 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
400 cbData.cb = asyncDoResourcesCallback;
401 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
403 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
413 EXPECT_EQ(OC_STACK_OK, OCStop());
416 TEST(StackResource, CreateResourceBadParams)
418 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
419 OIC_LOG(INFO, TAG, "Starting CreateResourceBadParams test");
420 InitStack(OC_SERVER);
422 OCResourceHandle handle;
424 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(NULL, //&handle,
430 OC_DISCOVERABLE|OC_OBSERVABLE));
432 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
438 OC_DISCOVERABLE|OC_OBSERVABLE));
440 // Property bitmask out of range
441 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
447 128));// invalid bitmask for OCResourceProperty
449 EXPECT_EQ(OC_STACK_OK, OCStop());
452 TEST(StackResource, CreateResourceBadUri)
454 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
455 OIC_LOG(INFO, TAG, "Starting CreateResourceBadUri test");
456 InitStack(OC_SERVER);
458 const char *uri257 = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVW";
460 OCResourceHandle handle;
462 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
468 OC_DISCOVERABLE|OC_OBSERVABLE));
470 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
476 OC_DISCOVERABLE|OC_OBSERVABLE));
478 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
484 OC_DISCOVERABLE|OC_OBSERVABLE));
486 EXPECT_EQ(OC_STACK_OK, OCStop());
489 TEST(StackResource, CreateResourceSuccess)
491 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
492 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
493 InitStack(OC_SERVER);
495 OCResourceHandle handle;
496 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
502 OC_DISCOVERABLE|OC_OBSERVABLE));
503 const char *url = OCGetResourceUri(handle);
504 EXPECT_STREQ("/a/led", url);
506 EXPECT_EQ(OC_STACK_OK, OCStop());
509 TEST(StackResource, CreateResourceSuccessWithResourcePolicyPropNone)
511 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
512 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccessWithResourcePolicyPropNone test");
513 InitStack(OC_SERVER);
515 OCResourceHandle handle;
516 // the resource is non-discoverable & non-observable by the client.
517 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
523 OC_RES_PROP_NONE));// the resource is non-discoverable &
524 // non-observable by the client.
525 const char* url = OCGetResourceUri(handle);
526 EXPECT_STREQ("/a/led", url);
528 EXPECT_EQ(OC_STACK_OK, OCStop());
531 TEST(StackResource, CreateResourceWithClientStackMode)
533 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
534 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
535 InitStack(OC_CLIENT);
537 OCResourceHandle handle;
538 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
544 OC_DISCOVERABLE|OC_OBSERVABLE));
546 EXPECT_EQ(OC_STACK_OK, OCStop());
549 TEST(StackResource, CreateResourceFailDuplicateUri)
551 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
552 OIC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
553 InitStack(OC_SERVER);
555 OCResourceHandle handle;
556 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
562 OC_DISCOVERABLE|OC_OBSERVABLE));
563 const char *url = OCGetResourceUri(handle);
564 EXPECT_STREQ("/a/led", url);
566 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
572 OC_DISCOVERABLE|OC_OBSERVABLE));
574 EXPECT_EQ(OC_STACK_OK, OCStop());
577 TEST(StackResource, CreateResourceMultipleResources)
579 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
580 OIC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
581 InitStack(OC_SERVER);
583 OCResourceHandle handle1;
584 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
590 OC_DISCOVERABLE|OC_OBSERVABLE));
592 OCResourceHandle handle2;
593 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
599 OC_DISCOVERABLE|OC_OBSERVABLE));
600 OCResourceHandle handle3;
601 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
607 OC_DISCOVERABLE|OC_OBSERVABLE));
609 const char *url = OCGetResourceUri(handle1);
610 EXPECT_STREQ("/a/led1", url);
612 url = OCGetResourceUri(handle2);
613 EXPECT_STREQ("/a/led2", url);
615 url = OCGetResourceUri(handle3);
616 EXPECT_STREQ("/a/led3", url);
618 EXPECT_EQ(OC_STACK_OK, OCStop());
621 TEST(StackResource, CreateResourceBadResoureType)
623 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
624 OIC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
625 InitStack(OC_SERVER);
627 OCResourceHandle handle;
628 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
634 OC_DISCOVERABLE|OC_OBSERVABLE));
636 OCResourceHandle handle2;
637 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle2,
643 OC_DISCOVERABLE|OC_OBSERVABLE));
645 EXPECT_EQ(OC_STACK_OK, OCStop());
648 TEST(StackResource, CreateResourceGoodResourceType)
650 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
651 OIC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
652 InitStack(OC_SERVER);
654 OCResourceHandle handle;
655 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
661 OC_DISCOVERABLE|OC_OBSERVABLE));
663 EXPECT_EQ(OC_STACK_OK, OCStop());
666 TEST(StackResource, ResourceTypeName)
668 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
669 OIC_LOG(INFO, TAG, "Starting ResourceTypeName test");
670 InitStack(OC_SERVER);
672 OCResourceHandle handle;
673 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
679 OC_DISCOVERABLE|OC_OBSERVABLE));
681 uint8_t numResourceTypes;
682 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
683 EXPECT_EQ(1, numResourceTypes);
684 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
685 EXPECT_STREQ("core.led", resourceTypeName);
687 // try getting resource type names with an invalid index
688 resourceTypeName = OCGetResourceTypeName(handle, 1);
689 EXPECT_STREQ(NULL, resourceTypeName);
690 // try getting resource type names with an invalid index
691 resourceTypeName = OCGetResourceTypeName(handle, 10);
692 EXPECT_STREQ(NULL, resourceTypeName);
694 EXPECT_EQ(OC_STACK_OK, OCStop());
697 TEST(StackResource, ResourceTypeAttrRepresentation)
699 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
700 OIC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
701 InitStack(OC_SERVER);
703 OCResourceHandle handle;
704 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
710 OC_DISCOVERABLE|OC_OBSERVABLE));
712 uint8_t numResourceTypes;
713 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
714 EXPECT_EQ(1, numResourceTypes);
716 EXPECT_EQ(OC_STACK_OK, OCStop());
719 TEST(StackResource, ResourceTypeInterface)
721 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
722 OIC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
723 InitStack(OC_SERVER);
725 OCResourceHandle handle;
726 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
732 OC_DISCOVERABLE|OC_OBSERVABLE));
734 uint8_t numResourceInterfaces;
735 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
736 EXPECT_EQ(2, numResourceInterfaces);
737 const char *resourceInterfaceName1 = OCGetResourceInterfaceName(handle, 0);
738 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, resourceInterfaceName1);
739 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
740 EXPECT_STREQ("core.rw", resourceInterfaceName);
742 // try getting resource interface names with an invalid index
743 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
744 EXPECT_STREQ(NULL, resourceInterfaceName);
745 // try getting resource interface names with an invalid index
746 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
747 EXPECT_STREQ(NULL, resourceInterfaceName);
749 EXPECT_EQ(OC_STACK_OK, OCStop());
752 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
754 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
756 OIC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
758 InitStack(OC_SERVER);
760 OCResourceHandle handle;
761 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
767 OC_DISCOVERABLE|OC_OBSERVABLE));
768 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
769 OC_RSRVD_INTERFACE_DEFAULT));
770 uint8_t numResourceInterfaces;
771 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
772 EXPECT_EQ(2, numResourceInterfaces);
774 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
775 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
777 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
778 EXPECT_STREQ("core.rw", interfaceName_2);
780 EXPECT_EQ(OC_STACK_OK, OCStop());
783 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
785 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
787 OIC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
789 InitStack(OC_SERVER);
791 OCResourceHandle handle;
792 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
798 OC_DISCOVERABLE|OC_OBSERVABLE));
800 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
801 OC_RSRVD_INTERFACE_DEFAULT));
802 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
803 OC_RSRVD_INTERFACE_DEFAULT));
805 uint8_t numResourceInterfaces;
806 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
807 EXPECT_EQ(2, numResourceInterfaces);
809 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
810 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
812 EXPECT_EQ(OC_STACK_OK, OCStop());
815 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
817 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
819 OIC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
821 InitStack(OC_SERVER);
823 OCResourceHandle handle;
824 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
830 OC_DISCOVERABLE|OC_OBSERVABLE));
832 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
834 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
837 uint8_t numResourceInterfaces;
838 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
839 EXPECT_EQ(2, numResourceInterfaces);
841 EXPECT_EQ(OC_STACK_OK, OCStop());
844 TEST(StackResource, ResourceTypeInterfaceMethods)
846 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
847 OIC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
848 InitStack(OC_SERVER);
850 OCResourceHandle handle;
851 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
857 OC_DISCOVERABLE|OC_OBSERVABLE));
859 uint8_t numResourceInterfaces;
860 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
861 EXPECT_EQ(2, numResourceInterfaces);
863 EXPECT_EQ(OC_STACK_OK, OCStop());
866 TEST(StackResource, GetResourceProperties)
868 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
869 OIC_LOG(INFO, TAG, "Starting GetResourceProperties test");
870 InitStack(OC_SERVER);
872 OCResourceHandle handle;
873 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
879 OC_DISCOVERABLE|OC_OBSERVABLE));
881 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
882 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
884 EXPECT_EQ(OC_STACK_OK, OCStop());
887 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
889 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
890 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
891 InitStack(OC_SERVER);
892 uint8_t numResources = 0;
893 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
895 OCResourceHandle handle;
896 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
902 OC_DISCOVERABLE|OC_OBSERVABLE));
903 const char *url = OCGetResourceUri(handle);
904 EXPECT_STREQ("/a1/led", url);
906 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
907 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
908 uint8_t numExpectedResources = 0;
910 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
911 EXPECT_EQ(numExpectedResources, numResources);
913 EXPECT_EQ(OC_STACK_OK, OCStop());
916 TEST(StackResource, StackTestResourceDiscoverOneResource)
918 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
919 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
920 InitStack(OC_SERVER);
922 OCResourceHandle handle;
923 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
929 OC_DISCOVERABLE|OC_OBSERVABLE));
930 const char *url = OCGetResourceUri(handle);
931 EXPECT_STREQ("/a/led", url);
933 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
934 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
936 EXPECT_EQ(OC_STACK_OK, OCStop());
939 TEST(StackResource, StackTestResourceDiscoverManyResources)
941 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
942 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
943 InitStack(OC_SERVER);
945 OCResourceHandle handle1;
946 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
953 const char *url = OCGetResourceUri(handle1);
954 EXPECT_STREQ("/a/led1", url);
956 OCResourceHandle handle2;
957 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
963 OC_DISCOVERABLE|OC_OBSERVABLE));
964 url = OCGetResourceUri(handle2);
965 EXPECT_STREQ("/a/led2", url);
967 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
968 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
970 OCResourceHandle handle3;
971 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
977 OC_DISCOVERABLE|OC_OBSERVABLE));
978 url = OCGetResourceUri(handle3);
979 EXPECT_STREQ("/a/led3", url);
981 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
982 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
984 OCResourceHandle handle4;
985 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
992 url = OCGetResourceUri(handle4);
993 EXPECT_STREQ("/a/led4", url);
995 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
996 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
997 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
999 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
1001 EXPECT_EQ(OC_STACK_OK, OCStop());
1004 TEST(StackBind, BindResourceTypeNameBad)
1006 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1007 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
1008 InitStack(OC_SERVER);
1010 OCResourceHandle handle;
1011 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1017 OC_DISCOVERABLE|OC_OBSERVABLE));
1019 uint8_t numResourceTypes;
1020 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1021 EXPECT_EQ(1, numResourceTypes);
1022 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1023 EXPECT_STREQ("core.led", resourceTypeName);
1025 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
1026 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.nameBad"));
1027 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.name bad"));
1029 EXPECT_EQ(OC_STACK_OK, OCStop());
1032 TEST(StackBind, BindResourceTypeNameGood)
1034 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1035 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
1036 InitStack(OC_SERVER);
1038 OCResourceHandle handle;
1039 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1045 OC_DISCOVERABLE|OC_OBSERVABLE));
1047 uint8_t numResourceTypes;
1048 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1049 EXPECT_EQ(1, numResourceTypes);
1050 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1051 EXPECT_STREQ("core.led", resourceTypeName);
1053 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1054 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1055 EXPECT_EQ(2, numResourceTypes);
1056 resourceTypeName = OCGetResourceTypeName(handle, 1);
1057 EXPECT_STREQ("core.brightled", resourceTypeName);
1059 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1060 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1061 EXPECT_EQ(3, numResourceTypes);
1062 resourceTypeName = OCGetResourceTypeName(handle, 2);
1063 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
1065 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "x.ReallyReallyBrightLED"));
1066 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1067 EXPECT_EQ(4, numResourceTypes);
1068 resourceTypeName = OCGetResourceTypeName(handle, 3);
1069 EXPECT_STREQ("x.ReallyReallyBrightLED", resourceTypeName);
1071 EXPECT_EQ(OC_STACK_OK, OCStop());
1074 TEST(StackBind, BindResourceTypeAttribRepGood)
1076 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1077 OIC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
1078 InitStack(OC_SERVER);
1080 OCResourceHandle handle;
1081 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1087 OC_DISCOVERABLE|OC_OBSERVABLE));
1089 uint8_t numResourceTypes;
1090 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1091 EXPECT_EQ(1, numResourceTypes);
1093 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1094 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1095 EXPECT_EQ(2, numResourceTypes);
1097 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1098 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1099 EXPECT_EQ(3, numResourceTypes);
1101 EXPECT_EQ(OC_STACK_OK, OCStop());
1105 TEST(StackBind, BindResourceInterfaceNameBad)
1107 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1108 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
1109 InitStack(OC_SERVER);
1111 OCResourceHandle handle;
1112 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1118 OC_DISCOVERABLE|OC_OBSERVABLE));
1120 uint8_t numResourceInterfaces;
1121 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1122 EXPECT_EQ(2, numResourceInterfaces);
1123 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1124 EXPECT_STREQ("core.rw", resourceInterfaceName);
1126 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
1128 EXPECT_EQ(OC_STACK_OK, OCStop());
1131 TEST(StackBind, BindResourceInterfaceNameGood)
1133 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1134 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
1135 InitStack(OC_SERVER);
1137 OCResourceHandle handle;
1138 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1144 OC_DISCOVERABLE|OC_OBSERVABLE));
1146 uint8_t numResourceInterfaces;
1147 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1148 EXPECT_EQ(2, numResourceInterfaces);
1149 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1150 EXPECT_STREQ("core.rw", resourceInterfaceName);
1152 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1154 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1155 EXPECT_EQ(3, numResourceInterfaces);
1156 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
1157 EXPECT_STREQ("core.r", resourceInterfaceName);
1159 EXPECT_EQ(OC_STACK_OK, OCStop());
1162 TEST(StackBind, BindResourceInterfaceMethodsBad)
1164 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1165 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
1166 InitStack(OC_SERVER);
1168 OCResourceHandle handle;
1169 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1175 OC_DISCOVERABLE|OC_OBSERVABLE));
1177 uint8_t numResourceInterfaces;
1178 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1179 EXPECT_EQ(2, numResourceInterfaces);
1181 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1183 EXPECT_EQ(OC_STACK_OK, OCStop());
1186 TEST(StackBind, BindResourceInterfaceMethodsGood)
1188 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1189 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
1190 InitStack(OC_SERVER);
1192 OCResourceHandle handle;
1193 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1199 OC_DISCOVERABLE|OC_OBSERVABLE));
1201 uint8_t numResourceInterfaces;
1202 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1203 EXPECT_EQ(2, numResourceInterfaces);
1205 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1207 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1208 EXPECT_EQ(3, numResourceInterfaces);
1210 EXPECT_EQ(OC_STACK_OK, OCStop());
1213 TEST(StackBind, BindContainedResourceBad)
1215 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1216 OIC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1217 InitStack(OC_SERVER);
1219 OCResourceHandle containerHandle;
1220 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1226 OC_DISCOVERABLE|OC_OBSERVABLE));
1228 OCResourceHandle handle0;
1229 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1235 OC_DISCOVERABLE|OC_OBSERVABLE));
1237 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1239 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1241 EXPECT_EQ(OC_STACK_OK, OCStop());
1244 TEST(StackBind, BindContainedResourceGood)
1246 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1247 OIC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1248 InitStack(OC_SERVER);
1250 uint8_t numResources = 0;
1251 uint8_t numExpectedResources = 0;
1253 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1255 OCResourceHandle containerHandle;
1256 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1262 OC_DISCOVERABLE|OC_OBSERVABLE));
1263 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1264 EXPECT_EQ(++numExpectedResources, numResources);
1266 OCResourceHandle handle0;
1267 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1273 OC_DISCOVERABLE|OC_OBSERVABLE));
1274 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1275 EXPECT_EQ(++numExpectedResources, numResources);
1277 OCResourceHandle handle1;
1278 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1284 OC_DISCOVERABLE|OC_OBSERVABLE));
1285 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1286 EXPECT_EQ(++numExpectedResources, numResources);
1288 OCResourceHandle handle2;
1289 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1295 OC_DISCOVERABLE|OC_OBSERVABLE));
1296 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1297 EXPECT_EQ(++numExpectedResources, numResources);
1299 OCResourceHandle handle3;
1300 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1306 OC_DISCOVERABLE|OC_OBSERVABLE));
1307 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1308 EXPECT_EQ(++numExpectedResources, numResources);
1310 OCResourceHandle handle4;
1311 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1317 OC_DISCOVERABLE|OC_OBSERVABLE));
1318 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1319 EXPECT_EQ(++numExpectedResources, numResources);
1321 OCResourceHandle handle5;
1322 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1328 OC_DISCOVERABLE|OC_OBSERVABLE));
1329 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1330 EXPECT_EQ(++numExpectedResources, numResources);
1333 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1334 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1335 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1336 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1337 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1338 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle5));
1340 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1341 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1342 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1343 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1344 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1345 EXPECT_EQ(handle5, OCGetResourceHandleFromCollection(containerHandle, 5));
1347 EXPECT_EQ(OC_STACK_OK, OCStop());
1351 TEST(StackBind, BindEntityHandlerBad)
1353 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1354 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1355 InitStack(OC_SERVER);
1357 OCResourceHandle handle;
1358 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1364 OC_DISCOVERABLE|OC_OBSERVABLE));
1366 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL, NULL));
1368 EXPECT_EQ(OC_STACK_OK, OCStop());
1371 TEST(StackBind, BindEntityHandlerGood)
1373 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1374 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1375 InitStack(OC_SERVER);
1377 OCResourceHandle handle;
1378 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1384 OC_DISCOVERABLE|OC_OBSERVABLE));
1386 OCEntityHandler myHandler = entityHandler;
1388 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler, NULL));
1390 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1392 EXPECT_EQ(OC_STACK_OK, OCStop());
1395 TEST(StackResourceAccess, GetResourceByIndex)
1397 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1398 OIC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1399 InitStack(OC_SERVER);
1401 uint8_t numResources = 0;
1402 uint8_t numExpectedResources = 0;
1403 uint8_t resourceIndex = 0;
1404 uint8_t prevResources = 0;
1405 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1406 prevResources = numExpectedResources;
1407 OCResourceHandle containerHandle;
1408 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1414 OC_DISCOVERABLE|OC_OBSERVABLE));
1415 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1416 EXPECT_EQ(++numExpectedResources, numResources);
1418 OCResourceHandle handle0;
1419 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1425 OC_DISCOVERABLE|OC_OBSERVABLE));
1426 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1427 EXPECT_EQ(++numExpectedResources, numResources);
1429 OCResourceHandle handle1;
1430 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1436 OC_DISCOVERABLE|OC_OBSERVABLE));
1437 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1438 EXPECT_EQ(++numExpectedResources, numResources);
1440 OCResourceHandle handle2;
1441 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1447 OC_DISCOVERABLE|OC_OBSERVABLE));
1448 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1449 EXPECT_EQ(++numExpectedResources, numResources);
1451 OCResourceHandle handle3;
1452 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1458 OC_DISCOVERABLE|OC_OBSERVABLE));
1459 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1460 EXPECT_EQ(++numExpectedResources, numResources);
1462 OCResourceHandle handle4;
1463 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1469 OC_DISCOVERABLE|OC_OBSERVABLE));
1470 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1471 EXPECT_EQ(++numExpectedResources, numResources);
1473 OCResourceHandle handle5;
1474 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1480 OC_DISCOVERABLE|OC_OBSERVABLE));
1481 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1482 EXPECT_EQ(++numExpectedResources, numResources);
1483 resourceIndex += prevResources;
1484 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1485 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1486 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1487 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1488 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1489 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1490 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1492 EXPECT_EQ(OC_STACK_OK, OCStop());
1495 TEST(StackResourceAccess, DeleteHeadResource)
1497 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1498 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1499 InitStack(OC_SERVER);
1501 uint8_t numResources = 0;
1502 uint8_t numExpectedResources = 0;
1504 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1506 OCResourceHandle handle0;
1507 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1513 OC_DISCOVERABLE|OC_OBSERVABLE));
1514 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1515 EXPECT_EQ(++numExpectedResources, numResources);
1517 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1518 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1519 EXPECT_EQ(--numExpectedResources, numResources);
1521 EXPECT_EQ(OC_STACK_OK, OCStop());
1524 TEST(StackResourceAccess, DeleteHeadResource2)
1526 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1527 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1528 InitStack(OC_SERVER);
1530 uint8_t numResources = 0;
1531 uint8_t numExpectedResources = 0;
1533 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1534 OCResourceHandle handle0;
1535 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1541 OC_DISCOVERABLE|OC_OBSERVABLE));
1542 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1543 EXPECT_EQ(++numExpectedResources, numResources);
1545 OCResourceHandle handle1;
1546 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1552 OC_DISCOVERABLE|OC_OBSERVABLE));
1553 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1554 EXPECT_EQ(++numExpectedResources, numResources);
1556 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1557 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1558 EXPECT_EQ(--numExpectedResources, numResources);
1560 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
1562 EXPECT_EQ(OC_STACK_OK, OCStop());
1566 TEST(StackResourceAccess, DeleteLastResource)
1568 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1569 OIC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1570 InitStack(OC_SERVER);
1572 uint8_t numResources = 0;
1573 uint8_t numExpectedResources = 0;
1575 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1577 OCResourceHandle handle0;
1578 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1584 OC_DISCOVERABLE|OC_OBSERVABLE));
1585 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1586 EXPECT_EQ(++numExpectedResources, numResources);
1588 OCResourceHandle handle1;
1589 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1595 OC_DISCOVERABLE|OC_OBSERVABLE));
1596 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1597 EXPECT_EQ(++numExpectedResources, numResources);
1599 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1600 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1601 EXPECT_EQ(--numExpectedResources, numResources);
1603 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
1605 OCResourceHandle handle2;
1606 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1612 OC_DISCOVERABLE|OC_OBSERVABLE));
1613 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1614 EXPECT_EQ(++numExpectedResources, numResources);
1616 EXPECT_EQ(OC_STACK_OK, OCStop());
1619 TEST(StackResourceAccess, DeleteMiddleResource)
1621 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1622 OIC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1623 InitStack(OC_SERVER);
1625 uint8_t numResources = 0;
1626 uint8_t numExpectedResources = 0;
1627 uint8_t resourceIndex = InitResourceIndex();
1629 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1630 resourceIndex = numExpectedResources;
1631 OCResourceHandle handle0;
1632 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1638 OC_DISCOVERABLE|OC_OBSERVABLE));
1639 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1640 EXPECT_EQ(++numExpectedResources, numResources);
1642 OCResourceHandle handle1;
1643 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1649 OC_DISCOVERABLE|OC_OBSERVABLE));
1650 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1651 EXPECT_EQ(++numExpectedResources, numResources);
1653 OCResourceHandle handle2;
1654 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1660 OC_DISCOVERABLE|OC_OBSERVABLE));
1661 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1662 EXPECT_EQ(++numExpectedResources, numResources);
1664 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1665 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1666 EXPECT_EQ(--numExpectedResources, numResources);
1668 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1669 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1671 // Make sure the resource elements are still correct
1672 uint8_t numResourceInterfaces;
1673 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1674 EXPECT_EQ(2, numResourceInterfaces);
1675 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 1);
1676 EXPECT_STREQ("core.rw", resourceInterfaceName);
1678 EXPECT_EQ(OC_STACK_OK, OCStop());
1681 TEST(PODTests, OCHeaderOption)
1683 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1686 TEST(PODTests, OCCallbackData)
1688 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1691 TEST(OCDoDirectPairingTests, Nullpeer)
1693 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, NULL, pmSel, &pinNumber, &resultCallback));
1696 TEST(OCDoDirectPairingTests, NullCallback)
1698 EXPECT_EQ(OC_STACK_INVALID_CALLBACK,OCDoDirectPairing(NULL, &peer, pmSel, &pinNumber, NULL));
1701 TEST(OCDoDirectPairingTests, NullpinNumber)
1703 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, &peer, pmSel, NULL, &resultCallback));
1706 TEST(StackResource, MultipleResourcesDiscovery)
1708 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1709 OIC_LOG(INFO, TAG, "Starting MultipleResourcesDiscovery test");
1710 InitStack(OC_SERVER);
1712 OCResourceHandle handle1;
1713 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1719 OC_DISCOVERABLE|OC_OBSERVABLE));
1721 OCResourceHandle handle2;
1722 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1728 OC_DISCOVERABLE|OC_OBSERVABLE));
1729 OCResourceHandle handle3;
1730 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1736 OC_DISCOVERABLE|OC_OBSERVABLE));
1737 /* Start a discovery query*/
1738 char szQueryUri[256] = "/oic/res?if=oic.if.ll";
1739 OCCallbackData cbData;
1740 cbData.cb = discoveryCallback;
1741 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
1745 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
1756 EXPECT_EQ(OC_STACK_OK, OCStop());
1759 TEST(StackPayload, CloneByteString)
1761 uint8_t bytes[] = { 0, 1, 2, 3 };
1762 OCByteString byteString;
1763 byteString.bytes = bytes;
1764 byteString.len = sizeof(bytes);
1766 OCRepPayload *original = OCRepPayloadCreate();
1767 ASSERT_TRUE(original != NULL);
1768 EXPECT_TRUE(OCRepPayloadSetPropByteString(original, "name", byteString));
1770 OCRepPayload *clone = OCRepPayloadClone(original);
1771 ASSERT_TRUE(clone != NULL);
1773 OCRepPayloadDestroy(original);
1775 OCByteString cloneByteString;
1776 EXPECT_TRUE(OCRepPayloadGetPropByteString(clone, "name", &cloneByteString));
1777 ASSERT_TRUE(cloneByteString.bytes != NULL);
1778 EXPECT_EQ(sizeof(bytes), cloneByteString.len);
1779 EXPECT_TRUE(0 == memcmp(bytes, cloneByteString.bytes, sizeof(bytes)));
1780 OICFree(cloneByteString.bytes);
1782 OCRepPayloadDestroy(clone);