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>
38 //-----------------------------------------------------------------------------
40 //-----------------------------------------------------------------------------
47 #include "gtest_helper.h"
51 namespace itst = iotivity::test;
53 #define DEFAULT_CONTEXT_VALUE 0x99
55 //-----------------------------------------------------------------------------
57 //-----------------------------------------------------------------------------
58 static const char TAG[] = "TestHarness";
60 char gDeviceUUID[] = "myDeviceUUID";
61 char gManufacturerName[] = "myName";
62 char gTooLongManufacturerName[] = "extremelylongmanufacturername";
63 char gManufacturerUrl[] = "www.foooooooooooooooo.baaaaaaaaaaaaar";
65 static char pinNumber;
66 static OCDPDev_t peer;
68 std::chrono::seconds const SHORT_TEST_TIMEOUT = std::chrono::seconds(5);
70 //-----------------------------------------------------------------------------
72 //-----------------------------------------------------------------------------
73 extern "C" OCStackApplicationResult asyncDoResourcesCallback(void* ctx,
74 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
76 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
78 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
80 if(ctx == (void*)DEFAULT_CONTEXT_VALUE) {
81 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
83 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
85 return OC_STACK_KEEP_TRANSACTION;
88 static void resultCallback(OCDPDev_t *UNUSED1, OCStackResult UNUSED2)
94 extern "C" OCStackApplicationResult discoveryCallback(void* ctx,
95 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
97 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
99 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
101 if(ctx == (void*)DEFAULT_CONTEXT_VALUE)
103 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
106 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
108 OCDiscoveryPayload *discoveryPayload = ((OCDiscoveryPayload *) clientResponse->payload);
109 EXPECT_TRUE(discoveryPayload != NULL);
110 OCResourcePayload *res = discoveryPayload->resources;
112 for (OCResourcePayload *res1 = discoveryPayload->resources; res1; res1 = res1->next)
117 EXPECT_EQ("/a/led1", res->uri);
119 EXPECT_EQ("/a/led2", res->uri);
121 EXPECT_EQ("/a/led3", res->uri);
123 EXPECT_TRUE(res == NULL);
125 return OC_STACK_KEEP_TRANSACTION;
128 //-----------------------------------------------------------------------------
130 //-----------------------------------------------------------------------------
131 OCEntityHandlerResult entityHandler(OCEntityHandlerFlag /*flag*/,
132 OCEntityHandlerRequest * /*entityHandlerRequest*/,
133 void* /*callbackParam*/)
135 OIC_LOG(INFO, TAG, "Entering entityHandler");
140 //-----------------------------------------------------------------------------
142 //-----------------------------------------------------------------------------
143 void InitStack(OCMode mode)
145 OIC_LOG(INFO, TAG, "Entering InitStack");
147 EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, mode));
148 OIC_LOG(INFO, TAG, "Leaving InitStack");
151 uint8_t InitNumExpectedResources()
154 // When presence is enabled, it is a resource and so is (currently) included
155 // in the returned resource count returned by the OCGetNumberOfResources API.
162 uint8_t InitResourceIndex()
165 // When presence is enabled, it is a resource and so is (currently) included
166 // in the returned resource count returned by the OCGetNumberOfResources API.
167 // The index of the presence resource is 0, so the first user app resource index
174 //-----------------------------------------------------------------------------
176 //-----------------------------------------------------------------------------
178 TEST(StackInit, StackInitNullAddr)
180 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
181 EXPECT_EQ(OC_STACK_OK, OCInit(0, 5683, OC_SERVER));
182 EXPECT_EQ(OC_STACK_OK, OCStop());
185 TEST(StackInit, StackInitNullPort)
187 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
188 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 0, OC_SERVER));
189 EXPECT_EQ(OC_STACK_OK, OCStop());
192 TEST(StackInit, StackInitNullAddrAndPort)
194 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
195 EXPECT_EQ(OC_STACK_OK, OCInit(0, 0, OC_SERVER));
196 EXPECT_EQ(OC_STACK_OK, OCStop());
199 TEST(StackInit, StackInitInvalidMode)
201 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
202 EXPECT_EQ(OC_STACK_ERROR, OCInit(0, 0, (OCMode)10));
203 EXPECT_EQ(OC_STACK_ERROR, OCStop());
206 TEST(StackStart, StackStartSuccessClient)
208 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
209 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
210 EXPECT_EQ(OC_STACK_OK, OCStop());
213 TEST(StackStart, StackStartSuccessServer)
215 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
216 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
217 EXPECT_EQ(OC_STACK_OK, OCStop());
220 TEST(StackStart, StackStartSuccessClientServer)
222 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
223 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT_SERVER));
224 EXPECT_EQ(OC_STACK_OK, OCStop());
227 TEST(StackStart, StackStartSuccessiveInits)
229 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
230 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
231 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.2", 5683, OC_SERVER));
232 EXPECT_EQ(OC_STACK_OK, OCStop());
235 TEST(StackStart, SetPlatformInfoValid)
237 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
238 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
240 OCPlatformInfo info =
244 0, 0, 0, 0, 0, 0, 0, 0, 0
246 EXPECT_EQ(OC_STACK_OK, OCSetPlatformInfo(info));
247 EXPECT_EQ(OC_STACK_OK, OCStop());
250 TEST(StackStart, SetPlatformInfoWithClientMode)
252 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
253 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
255 OCPlatformInfo info =
259 0, 0, 0, 0, 0, 0, 0, 0, 0
261 EXPECT_EQ(OC_STACK_ERROR, OCSetPlatformInfo(info));
262 EXPECT_EQ(OC_STACK_OK, OCStop());
265 TEST(StackStart, SetPlatformInfoWithNoPlatformID)
267 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
268 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
270 OCPlatformInfo info =
274 0, 0, 0, 0, 0, 0, 0, 0, 0
277 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
278 EXPECT_EQ(OC_STACK_OK, OCStop());
281 TEST(StackStart, SetPlatformInfoWithNoManufacturerName)
283 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
284 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
286 OCPlatformInfo info =
289 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
292 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
293 EXPECT_EQ(OC_STACK_OK, OCStop());
296 TEST(StackStart, SetPlatformInfoWithZeroLengthManufacturerName)
298 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
299 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
301 OCPlatformInfo info =
304 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
306 info.manufacturerName = (char *) "";
308 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
309 EXPECT_EQ(OC_STACK_OK, OCStop());
312 TEST(StackStart, SetPlatformInfoWithTooLongManufacName)
314 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
315 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
317 OCPlatformInfo info =
320 gTooLongManufacturerName,
321 0, 0, 0, 0, 0, 0, 0, 0, 0
324 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
325 EXPECT_EQ(OC_STACK_OK, OCStop());
328 TEST(StackStart, SetPlatformInfoWithTooLongManufacURL)
330 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
331 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
332 OCPlatformInfo info =
337 0, 0, 0, 0, 0, 0, 0, 0
340 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
341 EXPECT_EQ(OC_STACK_OK, OCStop());
344 TEST(StackDiscovery, DISABLED_DoResourceDeviceDiscovery)
346 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
347 OCCallbackData cbData;
350 OIC_LOG(INFO, TAG, "Starting DoResourceDeviceDiscovery test ");
351 InitStack(OC_CLIENT);
353 /* Start a discovery query*/
354 char szQueryUri[64] = { 0 };
355 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
356 cbData.cb = asyncDoResourcesCallback;
357 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
359 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
369 EXPECT_EQ(OC_STACK_OK, OCStop());
372 TEST(StackStop, StackStopWithoutInit)
374 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
375 EXPECT_EQ(OC_STACK_ERROR, OCStop());
378 TEST(StackStop, StackStopRepeated)
380 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
381 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
382 EXPECT_EQ(OC_STACK_OK, OCStop());
383 EXPECT_EQ(OC_STACK_ERROR, OCStop());
386 TEST(StackResource, DISABLED_UpdateResourceNullURI)
388 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
389 OCCallbackData cbData;
392 OIC_LOG(INFO, TAG, "Starting UpdateResourceNullURI test");
393 InitStack(OC_CLIENT);
395 /* Start a discovery query*/
396 char szQueryUri[64] = { 0 };
397 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
398 cbData.cb = asyncDoResourcesCallback;
399 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
401 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
411 EXPECT_EQ(OC_STACK_OK, OCStop());
414 TEST(StackResource, CreateResourceBadParams)
416 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
417 OIC_LOG(INFO, TAG, "Starting CreateResourceBadParams test");
418 InitStack(OC_SERVER);
420 OCResourceHandle handle;
422 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(NULL, //&handle,
428 OC_DISCOVERABLE|OC_OBSERVABLE));
430 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
436 OC_DISCOVERABLE|OC_OBSERVABLE));
438 // Property bitmask out of range
439 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
445 128));// invalid bitmask for OCResourceProperty
447 EXPECT_EQ(OC_STACK_OK, OCStop());
450 TEST(StackResource, CreateResourceBadUri)
452 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
453 OIC_LOG(INFO, TAG, "Starting CreateResourceBadUri test");
454 InitStack(OC_SERVER);
456 const char *uri257 = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVW";
458 OCResourceHandle handle;
460 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
466 OC_DISCOVERABLE|OC_OBSERVABLE));
468 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
474 OC_DISCOVERABLE|OC_OBSERVABLE));
476 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
482 OC_DISCOVERABLE|OC_OBSERVABLE));
484 EXPECT_EQ(OC_STACK_OK, OCStop());
487 TEST(StackResource, CreateResourceSuccess)
489 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
490 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
491 InitStack(OC_SERVER);
493 OCResourceHandle handle;
494 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
500 OC_DISCOVERABLE|OC_OBSERVABLE));
501 const char *url = OCGetResourceUri(handle);
502 EXPECT_STREQ("/a/led", url);
504 EXPECT_EQ(OC_STACK_OK, OCStop());
507 TEST(StackResource, CreateResourceSuccessWithResourcePolicyPropNone)
509 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
510 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccessWithResourcePolicyPropNone test");
511 InitStack(OC_SERVER);
513 OCResourceHandle handle;
514 // the resource is non-discoverable & non-observable by the client.
515 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
521 OC_RES_PROP_NONE));// the resource is non-discoverable &
522 // non-observable by the client.
523 const char* url = OCGetResourceUri(handle);
524 EXPECT_STREQ("/a/led", url);
526 EXPECT_EQ(OC_STACK_OK, OCStop());
529 TEST(StackResource, CreateResourceWithClientStackMode)
531 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
532 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
533 InitStack(OC_CLIENT);
535 OCResourceHandle handle;
536 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
542 OC_DISCOVERABLE|OC_OBSERVABLE));
544 EXPECT_EQ(OC_STACK_OK, OCStop());
547 TEST(StackResource, CreateResourceFailDuplicateUri)
549 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
550 OIC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
551 InitStack(OC_SERVER);
553 OCResourceHandle handle;
554 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
560 OC_DISCOVERABLE|OC_OBSERVABLE));
561 const char *url = OCGetResourceUri(handle);
562 EXPECT_STREQ("/a/led", url);
564 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
570 OC_DISCOVERABLE|OC_OBSERVABLE));
572 EXPECT_EQ(OC_STACK_OK, OCStop());
575 TEST(StackResource, CreateResourceMultipleResources)
577 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
578 OIC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
579 InitStack(OC_SERVER);
581 OCResourceHandle handle1;
582 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
588 OC_DISCOVERABLE|OC_OBSERVABLE));
590 OCResourceHandle handle2;
591 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
597 OC_DISCOVERABLE|OC_OBSERVABLE));
598 OCResourceHandle handle3;
599 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
605 OC_DISCOVERABLE|OC_OBSERVABLE));
607 const char *url = OCGetResourceUri(handle1);
608 EXPECT_STREQ("/a/led1", url);
610 url = OCGetResourceUri(handle2);
611 EXPECT_STREQ("/a/led2", url);
613 url = OCGetResourceUri(handle3);
614 EXPECT_STREQ("/a/led3", url);
616 EXPECT_EQ(OC_STACK_OK, OCStop());
619 TEST(StackResource, CreateResourceBadResoureType)
621 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
622 OIC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
623 InitStack(OC_SERVER);
625 OCResourceHandle handle;
626 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
632 OC_DISCOVERABLE|OC_OBSERVABLE));
634 OCResourceHandle handle2;
635 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle2,
641 OC_DISCOVERABLE|OC_OBSERVABLE));
643 EXPECT_EQ(OC_STACK_OK, OCStop());
646 TEST(StackResource, CreateResourceGoodResourceType)
648 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
649 OIC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
650 InitStack(OC_SERVER);
652 OCResourceHandle handle;
653 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
659 OC_DISCOVERABLE|OC_OBSERVABLE));
661 EXPECT_EQ(OC_STACK_OK, OCStop());
664 TEST(StackResource, ResourceTypeName)
666 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
667 OIC_LOG(INFO, TAG, "Starting ResourceTypeName test");
668 InitStack(OC_SERVER);
670 OCResourceHandle handle;
671 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
677 OC_DISCOVERABLE|OC_OBSERVABLE));
679 uint8_t numResourceTypes;
680 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
681 EXPECT_EQ(1, numResourceTypes);
682 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
683 EXPECT_STREQ("core.led", resourceTypeName);
685 // try getting resource type names with an invalid index
686 resourceTypeName = OCGetResourceTypeName(handle, 1);
687 EXPECT_STREQ(NULL, resourceTypeName);
688 // try getting resource type names with an invalid index
689 resourceTypeName = OCGetResourceTypeName(handle, 10);
690 EXPECT_STREQ(NULL, resourceTypeName);
692 EXPECT_EQ(OC_STACK_OK, OCStop());
695 TEST(StackResource, ResourceTypeAttrRepresentation)
697 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
698 OIC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
699 InitStack(OC_SERVER);
701 OCResourceHandle handle;
702 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
708 OC_DISCOVERABLE|OC_OBSERVABLE));
710 uint8_t numResourceTypes;
711 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
712 EXPECT_EQ(1, numResourceTypes);
714 EXPECT_EQ(OC_STACK_OK, OCStop());
717 TEST(StackResource, ResourceTypeInterface)
719 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
720 OIC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
721 InitStack(OC_SERVER);
723 OCResourceHandle handle;
724 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
730 OC_DISCOVERABLE|OC_OBSERVABLE));
732 uint8_t numResourceInterfaces;
733 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
734 EXPECT_EQ(2, numResourceInterfaces);
735 const char *resourceInterfaceName1 = OCGetResourceInterfaceName(handle, 0);
736 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, resourceInterfaceName1);
737 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
738 EXPECT_STREQ("core.rw", resourceInterfaceName);
740 // try getting resource interface names with an invalid index
741 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
742 EXPECT_STREQ(NULL, resourceInterfaceName);
743 // try getting resource interface names with an invalid index
744 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
745 EXPECT_STREQ(NULL, resourceInterfaceName);
747 EXPECT_EQ(OC_STACK_OK, OCStop());
750 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
752 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
754 OIC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
756 InitStack(OC_SERVER);
758 OCResourceHandle handle;
759 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
765 OC_DISCOVERABLE|OC_OBSERVABLE));
766 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
767 OC_RSRVD_INTERFACE_DEFAULT));
768 uint8_t numResourceInterfaces;
769 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
770 EXPECT_EQ(2, numResourceInterfaces);
772 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
773 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
775 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
776 EXPECT_STREQ("core.rw", interfaceName_2);
778 EXPECT_EQ(OC_STACK_OK, OCStop());
781 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
783 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
785 OIC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
787 InitStack(OC_SERVER);
789 OCResourceHandle handle;
790 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
796 OC_DISCOVERABLE|OC_OBSERVABLE));
798 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
799 OC_RSRVD_INTERFACE_DEFAULT));
800 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
801 OC_RSRVD_INTERFACE_DEFAULT));
803 uint8_t numResourceInterfaces;
804 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
805 EXPECT_EQ(2, numResourceInterfaces);
807 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
808 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
810 EXPECT_EQ(OC_STACK_OK, OCStop());
813 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
815 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
817 OIC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
819 InitStack(OC_SERVER);
821 OCResourceHandle handle;
822 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
828 OC_DISCOVERABLE|OC_OBSERVABLE));
830 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
832 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
835 uint8_t numResourceInterfaces;
836 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
837 EXPECT_EQ(2, numResourceInterfaces);
839 EXPECT_EQ(OC_STACK_OK, OCStop());
842 TEST(StackResource, ResourceTypeInterfaceMethods)
844 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
845 OIC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
846 InitStack(OC_SERVER);
848 OCResourceHandle handle;
849 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
855 OC_DISCOVERABLE|OC_OBSERVABLE));
857 uint8_t numResourceInterfaces;
858 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
859 EXPECT_EQ(2, numResourceInterfaces);
861 EXPECT_EQ(OC_STACK_OK, OCStop());
864 TEST(StackResource, GetResourceProperties)
866 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
867 OIC_LOG(INFO, TAG, "Starting GetResourceProperties test");
868 InitStack(OC_SERVER);
870 OCResourceHandle handle;
871 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
877 OC_DISCOVERABLE|OC_OBSERVABLE));
879 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
880 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
882 EXPECT_EQ(OC_STACK_OK, OCStop());
885 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
887 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
888 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
889 InitStack(OC_SERVER);
890 uint8_t numResources = 0;
891 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
893 OCResourceHandle handle;
894 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
900 OC_DISCOVERABLE|OC_OBSERVABLE));
901 const char *url = OCGetResourceUri(handle);
902 EXPECT_STREQ("/a1/led", url);
904 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
905 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
906 uint8_t numExpectedResources = 0;
908 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
909 EXPECT_EQ(numExpectedResources, numResources);
911 EXPECT_EQ(OC_STACK_OK, OCStop());
914 TEST(StackResource, StackTestResourceDiscoverOneResource)
916 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
917 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
918 InitStack(OC_SERVER);
920 OCResourceHandle handle;
921 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
927 OC_DISCOVERABLE|OC_OBSERVABLE));
928 const char *url = OCGetResourceUri(handle);
929 EXPECT_STREQ("/a/led", url);
931 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
932 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
934 EXPECT_EQ(OC_STACK_OK, OCStop());
937 TEST(StackResource, StackTestResourceDiscoverManyResources)
939 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
940 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
941 InitStack(OC_SERVER);
943 OCResourceHandle handle1;
944 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
951 const char *url = OCGetResourceUri(handle1);
952 EXPECT_STREQ("/a/led1", url);
954 OCResourceHandle handle2;
955 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
961 OC_DISCOVERABLE|OC_OBSERVABLE));
962 url = OCGetResourceUri(handle2);
963 EXPECT_STREQ("/a/led2", url);
965 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
966 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
968 OCResourceHandle handle3;
969 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
975 OC_DISCOVERABLE|OC_OBSERVABLE));
976 url = OCGetResourceUri(handle3);
977 EXPECT_STREQ("/a/led3", url);
979 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
980 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
982 OCResourceHandle handle4;
983 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
990 url = OCGetResourceUri(handle4);
991 EXPECT_STREQ("/a/led4", url);
993 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
994 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
995 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
997 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
999 EXPECT_EQ(OC_STACK_OK, OCStop());
1002 TEST(StackBind, BindResourceTypeNameBad)
1004 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1005 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
1006 InitStack(OC_SERVER);
1008 OCResourceHandle handle;
1009 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1015 OC_DISCOVERABLE|OC_OBSERVABLE));
1017 uint8_t numResourceTypes;
1018 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1019 EXPECT_EQ(1, numResourceTypes);
1020 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1021 EXPECT_STREQ("core.led", resourceTypeName);
1023 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
1024 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.nameBad"));
1025 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.name bad"));
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, OCBindResourceTypeToResource(handle, "x.ReallyReallyBrightLED"));
1064 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1065 EXPECT_EQ(4, numResourceTypes);
1066 resourceTypeName = OCGetResourceTypeName(handle, 3);
1067 EXPECT_STREQ("x.ReallyReallyBrightLED", resourceTypeName);
1069 EXPECT_EQ(OC_STACK_OK, OCStop());
1072 TEST(StackBind, BindResourceTypeAttribRepGood)
1074 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1075 OIC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
1076 InitStack(OC_SERVER);
1078 OCResourceHandle handle;
1079 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1085 OC_DISCOVERABLE|OC_OBSERVABLE));
1087 uint8_t numResourceTypes;
1088 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1089 EXPECT_EQ(1, numResourceTypes);
1091 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1092 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1093 EXPECT_EQ(2, numResourceTypes);
1095 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1096 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1097 EXPECT_EQ(3, numResourceTypes);
1099 EXPECT_EQ(OC_STACK_OK, OCStop());
1103 TEST(StackBind, BindResourceInterfaceNameBad)
1105 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1106 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
1107 InitStack(OC_SERVER);
1109 OCResourceHandle handle;
1110 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1116 OC_DISCOVERABLE|OC_OBSERVABLE));
1118 uint8_t numResourceInterfaces;
1119 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1120 EXPECT_EQ(2, numResourceInterfaces);
1121 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1122 EXPECT_STREQ("core.rw", resourceInterfaceName);
1124 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
1126 EXPECT_EQ(OC_STACK_OK, OCStop());
1129 TEST(StackBind, BindResourceInterfaceNameGood)
1131 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1132 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
1133 InitStack(OC_SERVER);
1135 OCResourceHandle handle;
1136 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1142 OC_DISCOVERABLE|OC_OBSERVABLE));
1144 uint8_t numResourceInterfaces;
1145 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1146 EXPECT_EQ(2, numResourceInterfaces);
1147 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1148 EXPECT_STREQ("core.rw", resourceInterfaceName);
1150 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1152 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1153 EXPECT_EQ(3, numResourceInterfaces);
1154 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
1155 EXPECT_STREQ("core.r", resourceInterfaceName);
1157 EXPECT_EQ(OC_STACK_OK, OCStop());
1160 TEST(StackBind, BindResourceInterfaceMethodsBad)
1162 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1163 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
1164 InitStack(OC_SERVER);
1166 OCResourceHandle handle;
1167 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1173 OC_DISCOVERABLE|OC_OBSERVABLE));
1175 uint8_t numResourceInterfaces;
1176 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1177 EXPECT_EQ(2, numResourceInterfaces);
1179 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1181 EXPECT_EQ(OC_STACK_OK, OCStop());
1184 TEST(StackBind, BindResourceInterfaceMethodsGood)
1186 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1187 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
1188 InitStack(OC_SERVER);
1190 OCResourceHandle handle;
1191 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1197 OC_DISCOVERABLE|OC_OBSERVABLE));
1199 uint8_t numResourceInterfaces;
1200 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1201 EXPECT_EQ(2, numResourceInterfaces);
1203 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1205 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1206 EXPECT_EQ(3, numResourceInterfaces);
1208 EXPECT_EQ(OC_STACK_OK, OCStop());
1211 TEST(StackBind, BindContainedResourceBad)
1213 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1214 OIC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1215 InitStack(OC_SERVER);
1217 OCResourceHandle containerHandle;
1218 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1224 OC_DISCOVERABLE|OC_OBSERVABLE));
1226 OCResourceHandle handle0;
1227 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1233 OC_DISCOVERABLE|OC_OBSERVABLE));
1235 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1237 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1239 EXPECT_EQ(OC_STACK_OK, OCStop());
1242 TEST(StackBind, BindContainedResourceGood)
1244 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1245 OIC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1246 InitStack(OC_SERVER);
1248 uint8_t numResources = 0;
1249 uint8_t numExpectedResources = 0;
1251 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1253 OCResourceHandle containerHandle;
1254 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1260 OC_DISCOVERABLE|OC_OBSERVABLE));
1261 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1262 EXPECT_EQ(++numExpectedResources, numResources);
1264 OCResourceHandle handle0;
1265 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1271 OC_DISCOVERABLE|OC_OBSERVABLE));
1272 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1273 EXPECT_EQ(++numExpectedResources, numResources);
1275 OCResourceHandle handle1;
1276 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1282 OC_DISCOVERABLE|OC_OBSERVABLE));
1283 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1284 EXPECT_EQ(++numExpectedResources, numResources);
1286 OCResourceHandle handle2;
1287 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1293 OC_DISCOVERABLE|OC_OBSERVABLE));
1294 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1295 EXPECT_EQ(++numExpectedResources, numResources);
1297 OCResourceHandle handle3;
1298 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1304 OC_DISCOVERABLE|OC_OBSERVABLE));
1305 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1306 EXPECT_EQ(++numExpectedResources, numResources);
1308 OCResourceHandle handle4;
1309 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1315 OC_DISCOVERABLE|OC_OBSERVABLE));
1316 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1317 EXPECT_EQ(++numExpectedResources, numResources);
1319 OCResourceHandle handle5;
1320 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1326 OC_DISCOVERABLE|OC_OBSERVABLE));
1327 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1328 EXPECT_EQ(++numExpectedResources, numResources);
1331 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1332 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1333 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1334 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1335 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1336 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle5));
1338 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1339 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1340 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1341 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1342 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1343 EXPECT_EQ(handle5, OCGetResourceHandleFromCollection(containerHandle, 5));
1345 EXPECT_EQ(OC_STACK_OK, OCStop());
1349 TEST(StackBind, BindEntityHandlerBad)
1351 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1352 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1353 InitStack(OC_SERVER);
1355 OCResourceHandle handle;
1356 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1362 OC_DISCOVERABLE|OC_OBSERVABLE));
1364 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL, NULL));
1366 EXPECT_EQ(OC_STACK_OK, OCStop());
1369 TEST(StackBind, BindEntityHandlerGood)
1371 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1372 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1373 InitStack(OC_SERVER);
1375 OCResourceHandle handle;
1376 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1382 OC_DISCOVERABLE|OC_OBSERVABLE));
1384 OCEntityHandler myHandler = entityHandler;
1386 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler, NULL));
1388 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1390 EXPECT_EQ(OC_STACK_OK, OCStop());
1393 TEST(StackResourceAccess, GetResourceByIndex)
1395 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1396 OIC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1397 InitStack(OC_SERVER);
1399 uint8_t numResources = 0;
1400 uint8_t numExpectedResources = 0;
1401 uint8_t resourceIndex = 0;
1402 uint8_t prevResources = 0;
1403 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1404 prevResources = numExpectedResources;
1405 OCResourceHandle containerHandle;
1406 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1412 OC_DISCOVERABLE|OC_OBSERVABLE));
1413 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1414 EXPECT_EQ(++numExpectedResources, numResources);
1416 OCResourceHandle handle0;
1417 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1423 OC_DISCOVERABLE|OC_OBSERVABLE));
1424 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1425 EXPECT_EQ(++numExpectedResources, numResources);
1427 OCResourceHandle handle1;
1428 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1434 OC_DISCOVERABLE|OC_OBSERVABLE));
1435 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1436 EXPECT_EQ(++numExpectedResources, numResources);
1438 OCResourceHandle handle2;
1439 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1445 OC_DISCOVERABLE|OC_OBSERVABLE));
1446 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1447 EXPECT_EQ(++numExpectedResources, numResources);
1449 OCResourceHandle handle3;
1450 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1456 OC_DISCOVERABLE|OC_OBSERVABLE));
1457 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1458 EXPECT_EQ(++numExpectedResources, numResources);
1460 OCResourceHandle handle4;
1461 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1467 OC_DISCOVERABLE|OC_OBSERVABLE));
1468 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1469 EXPECT_EQ(++numExpectedResources, numResources);
1471 OCResourceHandle handle5;
1472 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1478 OC_DISCOVERABLE|OC_OBSERVABLE));
1479 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1480 EXPECT_EQ(++numExpectedResources, numResources);
1481 resourceIndex += prevResources;
1482 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1483 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1484 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1485 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1486 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1487 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1488 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1490 EXPECT_EQ(OC_STACK_OK, OCStop());
1493 TEST(StackResourceAccess, DeleteHeadResource)
1495 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1496 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1497 InitStack(OC_SERVER);
1499 uint8_t numResources = 0;
1500 uint8_t numExpectedResources = 0;
1502 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1504 OCResourceHandle handle0;
1505 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1511 OC_DISCOVERABLE|OC_OBSERVABLE));
1512 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1513 EXPECT_EQ(++numExpectedResources, numResources);
1515 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1516 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1517 EXPECT_EQ(--numExpectedResources, numResources);
1519 EXPECT_EQ(OC_STACK_OK, OCStop());
1522 TEST(StackResourceAccess, DeleteHeadResource2)
1524 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1525 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1526 InitStack(OC_SERVER);
1528 uint8_t numResources = 0;
1529 uint8_t numExpectedResources = 0;
1531 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1532 OCResourceHandle handle0;
1533 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1539 OC_DISCOVERABLE|OC_OBSERVABLE));
1540 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1541 EXPECT_EQ(++numExpectedResources, numResources);
1543 OCResourceHandle handle1;
1544 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1550 OC_DISCOVERABLE|OC_OBSERVABLE));
1551 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1552 EXPECT_EQ(++numExpectedResources, numResources);
1554 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1555 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1556 EXPECT_EQ(--numExpectedResources, numResources);
1558 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
1560 EXPECT_EQ(OC_STACK_OK, OCStop());
1564 TEST(StackResourceAccess, DeleteLastResource)
1566 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1567 OIC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1568 InitStack(OC_SERVER);
1570 uint8_t numResources = 0;
1571 uint8_t numExpectedResources = 0;
1573 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1575 OCResourceHandle handle0;
1576 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1582 OC_DISCOVERABLE|OC_OBSERVABLE));
1583 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1584 EXPECT_EQ(++numExpectedResources, numResources);
1586 OCResourceHandle handle1;
1587 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1593 OC_DISCOVERABLE|OC_OBSERVABLE));
1594 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1595 EXPECT_EQ(++numExpectedResources, numResources);
1597 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1598 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1599 EXPECT_EQ(--numExpectedResources, numResources);
1601 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
1603 OCResourceHandle handle2;
1604 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1610 OC_DISCOVERABLE|OC_OBSERVABLE));
1611 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1612 EXPECT_EQ(++numExpectedResources, numResources);
1614 EXPECT_EQ(OC_STACK_OK, OCStop());
1617 TEST(StackResourceAccess, DeleteMiddleResource)
1619 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1620 OIC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1621 InitStack(OC_SERVER);
1623 uint8_t numResources = 0;
1624 uint8_t numExpectedResources = 0;
1625 uint8_t resourceIndex = InitResourceIndex();
1627 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1628 resourceIndex = numExpectedResources;
1629 OCResourceHandle handle0;
1630 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1636 OC_DISCOVERABLE|OC_OBSERVABLE));
1637 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1638 EXPECT_EQ(++numExpectedResources, numResources);
1640 OCResourceHandle handle1;
1641 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1647 OC_DISCOVERABLE|OC_OBSERVABLE));
1648 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1649 EXPECT_EQ(++numExpectedResources, numResources);
1651 OCResourceHandle handle2;
1652 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1658 OC_DISCOVERABLE|OC_OBSERVABLE));
1659 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1660 EXPECT_EQ(++numExpectedResources, numResources);
1662 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1663 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1664 EXPECT_EQ(--numExpectedResources, numResources);
1666 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1667 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1669 // Make sure the resource elements are still correct
1670 uint8_t numResourceInterfaces;
1671 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1672 EXPECT_EQ(2, numResourceInterfaces);
1673 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 1);
1674 EXPECT_STREQ("core.rw", resourceInterfaceName);
1676 EXPECT_EQ(OC_STACK_OK, OCStop());
1679 TEST(PODTests, OCHeaderOption)
1681 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1684 TEST(PODTests, OCCallbackData)
1686 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1689 TEST(OCDoDirectPairingTests, Nullpeer)
1691 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, pmSel, &pinNumber, &resultCallback));
1694 TEST(OCDoDirectPairingTests, NullCallback)
1696 EXPECT_EQ(OC_STACK_INVALID_CALLBACK,OCDoDirectPairing(&peer, pmSel, &pinNumber, NULL));
1699 TEST(OCDoDirectPairingTests, NullpinNumber)
1701 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(&peer, pmSel, NULL, &resultCallback));
1704 TEST(StackResource, MultipleResourcesDiscovery)
1706 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1707 OIC_LOG(INFO, TAG, "Starting MultipleResourcesDiscovery test");
1708 InitStack(OC_SERVER);
1710 OCResourceHandle handle1;
1711 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1717 OC_DISCOVERABLE|OC_OBSERVABLE));
1719 OCResourceHandle handle2;
1720 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1726 OC_DISCOVERABLE|OC_OBSERVABLE));
1727 OCResourceHandle handle3;
1728 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1734 OC_DISCOVERABLE|OC_OBSERVABLE));
1735 /* Start a discovery query*/
1736 char szQueryUri[256] = "/oic/res?if=oic.if.ll";
1737 OCCallbackData cbData;
1738 cbData.cb = discoveryCallback;
1739 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
1743 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
1754 EXPECT_EQ(OC_STACK_OK, OCStop());