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 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
25 #include "ocstackinternal.h"
27 #include "oic_malloc.h"
30 #include "gtest/gtest.h"
31 #include <sys/types.h>
40 //-----------------------------------------------------------------------------
42 //-----------------------------------------------------------------------------
49 #include "gtest_helper.h"
53 namespace itst = iotivity::test;
55 #define DEFAULT_CONTEXT_VALUE 0x99
57 //-----------------------------------------------------------------------------
59 //-----------------------------------------------------------------------------
60 static const char TAG[] = "TestHarness";
62 char gDeviceUUID[] = "myDeviceUUID";
63 char gManufacturerName[] = "myName";
64 char gTooLongManufacturerName[] = "extremelylongmanufacturername";
65 char gManufacturerUrl[] = "www.foooooooooooooooo.baaaaaaaaaaaaar";
67 static char pinNumber;
68 static OCDPDev_t peer;
70 std::chrono::seconds const SHORT_TEST_TIMEOUT = std::chrono::seconds(5);
72 //-----------------------------------------------------------------------------
74 //-----------------------------------------------------------------------------
75 extern "C" OCStackApplicationResult asyncDoResourcesCallback(void* ctx,
76 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
78 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
80 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
82 if(ctx == (void*)DEFAULT_CONTEXT_VALUE) {
83 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
85 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
87 return OC_STACK_KEEP_TRANSACTION;
90 static void resultCallback(OCDPDev_t *UNUSED1, OCStackResult UNUSED2)
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));
1027 EXPECT_EQ(OC_STACK_OK, OCStop());
1030 TEST(StackBind, BindResourceTypeNameGood)
1032 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1033 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
1034 InitStack(OC_SERVER);
1036 OCResourceHandle handle;
1037 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1043 OC_DISCOVERABLE|OC_OBSERVABLE));
1045 uint8_t numResourceTypes;
1046 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1047 EXPECT_EQ(1, numResourceTypes);
1048 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1049 EXPECT_STREQ("core.led", resourceTypeName);
1051 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1052 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1053 EXPECT_EQ(2, numResourceTypes);
1054 resourceTypeName = OCGetResourceTypeName(handle, 1);
1055 EXPECT_STREQ("core.brightled", resourceTypeName);
1057 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1058 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1059 EXPECT_EQ(3, numResourceTypes);
1060 resourceTypeName = OCGetResourceTypeName(handle, 2);
1061 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
1063 EXPECT_EQ(OC_STACK_OK, OCStop());
1066 TEST(StackBind, BindResourceTypeAttribRepGood)
1068 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1069 OIC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
1070 InitStack(OC_SERVER);
1072 OCResourceHandle handle;
1073 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1079 OC_DISCOVERABLE|OC_OBSERVABLE));
1081 uint8_t numResourceTypes;
1082 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1083 EXPECT_EQ(1, numResourceTypes);
1085 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1086 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1087 EXPECT_EQ(2, numResourceTypes);
1089 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1090 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1091 EXPECT_EQ(3, numResourceTypes);
1093 EXPECT_EQ(OC_STACK_OK, OCStop());
1097 TEST(StackBind, BindResourceInterfaceNameBad)
1099 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1100 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
1101 InitStack(OC_SERVER);
1103 OCResourceHandle handle;
1104 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1110 OC_DISCOVERABLE|OC_OBSERVABLE));
1112 uint8_t numResourceInterfaces;
1113 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1114 EXPECT_EQ(2, numResourceInterfaces);
1115 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1116 EXPECT_STREQ("core.rw", resourceInterfaceName);
1118 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
1120 EXPECT_EQ(OC_STACK_OK, OCStop());
1123 TEST(StackBind, BindResourceInterfaceNameGood)
1125 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1126 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
1127 InitStack(OC_SERVER);
1129 OCResourceHandle handle;
1130 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1136 OC_DISCOVERABLE|OC_OBSERVABLE));
1138 uint8_t numResourceInterfaces;
1139 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1140 EXPECT_EQ(2, numResourceInterfaces);
1141 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1142 EXPECT_STREQ("core.rw", resourceInterfaceName);
1144 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1146 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1147 EXPECT_EQ(3, numResourceInterfaces);
1148 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
1149 EXPECT_STREQ("core.r", resourceInterfaceName);
1151 EXPECT_EQ(OC_STACK_OK, OCStop());
1154 TEST(StackBind, BindResourceInterfaceMethodsBad)
1156 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1157 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
1158 InitStack(OC_SERVER);
1160 OCResourceHandle handle;
1161 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1167 OC_DISCOVERABLE|OC_OBSERVABLE));
1169 uint8_t numResourceInterfaces;
1170 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1171 EXPECT_EQ(2, numResourceInterfaces);
1173 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1175 EXPECT_EQ(OC_STACK_OK, OCStop());
1178 TEST(StackBind, BindResourceInterfaceMethodsGood)
1180 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1181 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
1182 InitStack(OC_SERVER);
1184 OCResourceHandle handle;
1185 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1191 OC_DISCOVERABLE|OC_OBSERVABLE));
1193 uint8_t numResourceInterfaces;
1194 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1195 EXPECT_EQ(2, numResourceInterfaces);
1197 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1199 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1200 EXPECT_EQ(3, numResourceInterfaces);
1202 EXPECT_EQ(OC_STACK_OK, OCStop());
1205 TEST(StackBind, BindContainedResourceBad)
1207 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1208 OIC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1209 InitStack(OC_SERVER);
1211 OCResourceHandle containerHandle;
1212 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1218 OC_DISCOVERABLE|OC_OBSERVABLE));
1220 OCResourceHandle handle0;
1221 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1227 OC_DISCOVERABLE|OC_OBSERVABLE));
1229 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1231 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1233 EXPECT_EQ(OC_STACK_OK, OCStop());
1236 TEST(StackBind, BindContainedResourceGood)
1238 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1239 OIC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1240 InitStack(OC_SERVER);
1242 uint8_t numResources = 0;
1243 uint8_t numExpectedResources = 0;
1245 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1247 OCResourceHandle containerHandle;
1248 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1254 OC_DISCOVERABLE|OC_OBSERVABLE));
1255 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1256 EXPECT_EQ(++numExpectedResources, numResources);
1258 OCResourceHandle handle0;
1259 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1265 OC_DISCOVERABLE|OC_OBSERVABLE));
1266 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1267 EXPECT_EQ(++numExpectedResources, numResources);
1269 OCResourceHandle handle1;
1270 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1276 OC_DISCOVERABLE|OC_OBSERVABLE));
1277 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1278 EXPECT_EQ(++numExpectedResources, numResources);
1280 OCResourceHandle handle2;
1281 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1287 OC_DISCOVERABLE|OC_OBSERVABLE));
1288 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1289 EXPECT_EQ(++numExpectedResources, numResources);
1291 OCResourceHandle handle3;
1292 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1298 OC_DISCOVERABLE|OC_OBSERVABLE));
1299 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1300 EXPECT_EQ(++numExpectedResources, numResources);
1302 OCResourceHandle handle4;
1303 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1309 OC_DISCOVERABLE|OC_OBSERVABLE));
1310 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1311 EXPECT_EQ(++numExpectedResources, numResources);
1313 OCResourceHandle handle5;
1314 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1320 OC_DISCOVERABLE|OC_OBSERVABLE));
1321 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1322 EXPECT_EQ(++numExpectedResources, numResources);
1325 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1326 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1327 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1328 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1329 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1330 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle5));
1332 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1333 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1334 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1335 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1336 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1337 EXPECT_EQ(handle5, OCGetResourceHandleFromCollection(containerHandle, 5));
1339 EXPECT_EQ(OC_STACK_OK, OCStop());
1343 TEST(StackBind, BindEntityHandlerBad)
1345 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1346 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1347 InitStack(OC_SERVER);
1349 OCResourceHandle handle;
1350 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1356 OC_DISCOVERABLE|OC_OBSERVABLE));
1358 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL, NULL));
1360 EXPECT_EQ(OC_STACK_OK, OCStop());
1363 TEST(StackBind, BindEntityHandlerGood)
1365 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1366 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1367 InitStack(OC_SERVER);
1369 OCResourceHandle handle;
1370 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1376 OC_DISCOVERABLE|OC_OBSERVABLE));
1378 OCEntityHandler myHandler = entityHandler;
1380 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler, NULL));
1382 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1384 EXPECT_EQ(OC_STACK_OK, OCStop());
1387 TEST(StackResourceAccess, GetResourceByIndex)
1389 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1390 OIC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1391 InitStack(OC_SERVER);
1393 uint8_t numResources = 0;
1394 uint8_t numExpectedResources = 0;
1395 uint8_t resourceIndex = 0;
1396 uint8_t prevResources = 0;
1397 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1398 prevResources = numExpectedResources;
1399 OCResourceHandle containerHandle;
1400 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1406 OC_DISCOVERABLE|OC_OBSERVABLE));
1407 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1408 EXPECT_EQ(++numExpectedResources, numResources);
1410 OCResourceHandle handle0;
1411 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1417 OC_DISCOVERABLE|OC_OBSERVABLE));
1418 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1419 EXPECT_EQ(++numExpectedResources, numResources);
1421 OCResourceHandle handle1;
1422 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1428 OC_DISCOVERABLE|OC_OBSERVABLE));
1429 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1430 EXPECT_EQ(++numExpectedResources, numResources);
1432 OCResourceHandle handle2;
1433 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1439 OC_DISCOVERABLE|OC_OBSERVABLE));
1440 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1441 EXPECT_EQ(++numExpectedResources, numResources);
1443 OCResourceHandle handle3;
1444 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1450 OC_DISCOVERABLE|OC_OBSERVABLE));
1451 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1452 EXPECT_EQ(++numExpectedResources, numResources);
1454 OCResourceHandle handle4;
1455 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1461 OC_DISCOVERABLE|OC_OBSERVABLE));
1462 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1463 EXPECT_EQ(++numExpectedResources, numResources);
1465 OCResourceHandle handle5;
1466 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1472 OC_DISCOVERABLE|OC_OBSERVABLE));
1473 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1474 EXPECT_EQ(++numExpectedResources, numResources);
1475 resourceIndex += prevResources;
1476 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1477 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1478 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1479 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1480 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1481 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1482 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1484 EXPECT_EQ(OC_STACK_OK, OCStop());
1487 TEST(StackResourceAccess, DeleteHeadResource)
1489 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1490 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1491 InitStack(OC_SERVER);
1493 uint8_t numResources = 0;
1494 uint8_t numExpectedResources = 0;
1496 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1498 OCResourceHandle handle0;
1499 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1505 OC_DISCOVERABLE|OC_OBSERVABLE));
1506 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1507 EXPECT_EQ(++numExpectedResources, numResources);
1509 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1510 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1511 EXPECT_EQ(--numExpectedResources, numResources);
1513 EXPECT_EQ(OC_STACK_OK, OCStop());
1516 TEST(StackResourceAccess, DeleteHeadResource2)
1518 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1519 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1520 InitStack(OC_SERVER);
1522 uint8_t numResources = 0;
1523 uint8_t numExpectedResources = 0;
1525 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1526 OCResourceHandle handle0;
1527 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1533 OC_DISCOVERABLE|OC_OBSERVABLE));
1534 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1535 EXPECT_EQ(++numExpectedResources, numResources);
1537 OCResourceHandle handle1;
1538 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1544 OC_DISCOVERABLE|OC_OBSERVABLE));
1545 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1546 EXPECT_EQ(++numExpectedResources, numResources);
1548 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1549 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1550 EXPECT_EQ(--numExpectedResources, numResources);
1552 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
1554 EXPECT_EQ(OC_STACK_OK, OCStop());
1558 TEST(StackResourceAccess, DeleteLastResource)
1560 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1561 OIC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1562 InitStack(OC_SERVER);
1564 uint8_t numResources = 0;
1565 uint8_t numExpectedResources = 0;
1567 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1569 OCResourceHandle handle0;
1570 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1576 OC_DISCOVERABLE|OC_OBSERVABLE));
1577 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1578 EXPECT_EQ(++numExpectedResources, numResources);
1580 OCResourceHandle handle1;
1581 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1587 OC_DISCOVERABLE|OC_OBSERVABLE));
1588 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1589 EXPECT_EQ(++numExpectedResources, numResources);
1591 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1592 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1593 EXPECT_EQ(--numExpectedResources, numResources);
1595 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
1597 OCResourceHandle handle2;
1598 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1604 OC_DISCOVERABLE|OC_OBSERVABLE));
1605 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1606 EXPECT_EQ(++numExpectedResources, numResources);
1608 EXPECT_EQ(OC_STACK_OK, OCStop());
1611 TEST(StackResourceAccess, DeleteMiddleResource)
1613 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1614 OIC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1615 InitStack(OC_SERVER);
1617 uint8_t numResources = 0;
1618 uint8_t numExpectedResources = 0;
1619 uint8_t resourceIndex = InitResourceIndex();
1621 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1622 resourceIndex = numExpectedResources;
1623 OCResourceHandle handle0;
1624 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1630 OC_DISCOVERABLE|OC_OBSERVABLE));
1631 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1632 EXPECT_EQ(++numExpectedResources, numResources);
1634 OCResourceHandle handle1;
1635 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1641 OC_DISCOVERABLE|OC_OBSERVABLE));
1642 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1643 EXPECT_EQ(++numExpectedResources, numResources);
1645 OCResourceHandle handle2;
1646 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1652 OC_DISCOVERABLE|OC_OBSERVABLE));
1653 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1654 EXPECT_EQ(++numExpectedResources, numResources);
1656 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1657 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1658 EXPECT_EQ(--numExpectedResources, numResources);
1660 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1661 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1663 // Make sure the resource elements are still correct
1664 uint8_t numResourceInterfaces;
1665 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1666 EXPECT_EQ(2, numResourceInterfaces);
1667 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 1);
1668 EXPECT_STREQ("core.rw", resourceInterfaceName);
1670 EXPECT_EQ(OC_STACK_OK, OCStop());
1673 TEST(PODTests, OCHeaderOption)
1675 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1678 TEST(PODTests, OCCallbackData)
1680 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1683 TEST(OCDoDirectPairingTests, Nullpeer)
1685 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, pmSel, &pinNumber, &resultCallback));
1688 TEST(OCDoDirectPairingTests, NullCallback)
1690 EXPECT_EQ(OC_STACK_INVALID_CALLBACK,OCDoDirectPairing(&peer, pmSel, &pinNumber, NULL));
1693 TEST(OCDoDirectPairingTests, NullpinNumber)
1695 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(&peer, pmSel, NULL, &resultCallback));
1698 TEST(StackResource, MultipleResourcesDiscovery)
1700 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1701 OIC_LOG(INFO, TAG, "Starting MultipleResourcesDiscovery test");
1702 InitStack(OC_SERVER);
1704 OCResourceHandle handle1;
1705 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1711 OC_DISCOVERABLE|OC_OBSERVABLE));
1713 OCResourceHandle handle2;
1714 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1720 OC_DISCOVERABLE|OC_OBSERVABLE));
1721 OCResourceHandle handle3;
1722 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1728 OC_DISCOVERABLE|OC_OBSERVABLE));
1729 /* Start a discovery query*/
1730 char szQueryUri[256] = "/oic/res?if=oic.if.ll";
1731 OCCallbackData cbData;
1732 cbData.cb = discoveryCallback;
1733 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
1737 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
1748 EXPECT_EQ(OC_STACK_OK, OCStop());