1 //******************************************************************
3 // Copyright 2014 Intel Mobile Communications GmbH All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
24 #include "ocpayload.h"
26 #include "ocstackinternal.h"
28 #include "oic_malloc.h"
31 #include "gtest/gtest.h"
32 #include <sys/types.h>
41 //-----------------------------------------------------------------------------
43 //-----------------------------------------------------------------------------
50 #include "gtest_helper.h"
54 namespace itst = iotivity::test;
56 #define DEFAULT_CONTEXT_VALUE 0x99
58 //-----------------------------------------------------------------------------
60 //-----------------------------------------------------------------------------
61 static const char TAG[] = "TestHarness";
63 char gDeviceUUID[] = "myDeviceUUID";
64 char gManufacturerName[] = "myName";
65 char gTooLongManufacturerName[] = "extremelylongmanufacturername";
66 char gManufacturerUrl[] = "www.foooooooooooooooo.baaaaaaaaaaaaar";
68 static char pinNumber;
69 static OCDPDev_t peer;
71 std::chrono::seconds const SHORT_TEST_TIMEOUT = std::chrono::seconds(5);
73 //-----------------------------------------------------------------------------
75 //-----------------------------------------------------------------------------
76 extern "C" OCStackApplicationResult asyncDoResourcesCallback(void* ctx,
77 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
79 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
81 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
83 if(ctx == (void*)DEFAULT_CONTEXT_VALUE) {
84 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
86 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
88 return OC_STACK_KEEP_TRANSACTION;
91 static void resultCallback(OCDPDev_t *UNUSED1, OCStackResult UNUSED2)
97 extern "C" OCStackApplicationResult discoveryCallback(void* ctx,
98 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
100 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
102 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
104 if(ctx == (void*)DEFAULT_CONTEXT_VALUE)
106 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
109 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
111 OCDiscoveryPayload *discoveryPayload = ((OCDiscoveryPayload *) clientResponse->payload);
112 EXPECT_TRUE(discoveryPayload != NULL);
113 OCResourcePayload *res = discoveryPayload->resources;
115 for (OCResourcePayload *res1 = discoveryPayload->resources; res1; res1 = res1->next)
120 EXPECT_EQ("/a/led1", res->uri);
122 EXPECT_EQ("/a/led2", res->uri);
124 EXPECT_EQ("/a/led3", res->uri);
126 EXPECT_TRUE(res == NULL);
128 return OC_STACK_KEEP_TRANSACTION;
131 //-----------------------------------------------------------------------------
133 //-----------------------------------------------------------------------------
134 OCEntityHandlerResult entityHandler(OCEntityHandlerFlag /*flag*/,
135 OCEntityHandlerRequest * /*entityHandlerRequest*/,
136 void* /*callbackParam*/)
138 OIC_LOG(INFO, TAG, "Entering entityHandler");
143 //-----------------------------------------------------------------------------
145 //-----------------------------------------------------------------------------
146 void InitStack(OCMode mode)
148 OIC_LOG(INFO, TAG, "Entering InitStack");
150 EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, mode));
151 OIC_LOG(INFO, TAG, "Leaving InitStack");
154 uint8_t InitNumExpectedResources()
157 // When presence is enabled, it is a resource and so is (currently) included
158 // in the returned resource count returned by the OCGetNumberOfResources API.
165 uint8_t InitResourceIndex()
168 // When presence is enabled, it is a resource and so is (currently) included
169 // in the returned resource count returned by the OCGetNumberOfResources API.
170 // The index of the presence resource is 0, so the first user app resource index
177 //-----------------------------------------------------------------------------
179 //-----------------------------------------------------------------------------
181 TEST(StackInit, StackInitNullAddr)
183 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
184 EXPECT_EQ(OC_STACK_OK, OCInit(0, 5683, OC_SERVER));
185 EXPECT_EQ(OC_STACK_OK, OCStop());
188 TEST(StackInit, StackInitNullPort)
190 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
191 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 0, OC_SERVER));
192 EXPECT_EQ(OC_STACK_OK, OCStop());
195 TEST(StackInit, StackInitNullAddrAndPort)
197 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
198 EXPECT_EQ(OC_STACK_OK, OCInit(0, 0, OC_SERVER));
199 EXPECT_EQ(OC_STACK_OK, OCStop());
202 TEST(StackInit, StackInitInvalidMode)
204 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
205 EXPECT_EQ(OC_STACK_ERROR, OCInit(0, 0, (OCMode)10));
206 EXPECT_EQ(OC_STACK_ERROR, OCStop());
209 TEST(StackStart, StackStartSuccessClient)
211 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
212 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
213 EXPECT_EQ(OC_STACK_OK, OCStop());
216 TEST(StackStart, StackStartSuccessServer)
218 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
219 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
220 EXPECT_EQ(OC_STACK_OK, OCStop());
223 TEST(StackStart, StackStartSuccessClientServer)
225 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
226 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT_SERVER));
227 EXPECT_EQ(OC_STACK_OK, OCStop());
230 TEST(StackStart, StackStartSuccessiveInits)
232 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
233 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
234 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.2", 5683, OC_SERVER));
235 EXPECT_EQ(OC_STACK_OK, OCStop());
238 TEST(StackStart, SetPlatformInfoValid)
240 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
241 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
243 OCPlatformInfo info =
247 0, 0, 0, 0, 0, 0, 0, 0, 0
249 EXPECT_EQ(OC_STACK_OK, OCSetPlatformInfo(info));
250 EXPECT_EQ(OC_STACK_OK, OCStop());
253 TEST(StackStart, SetPlatformInfoWithClientMode)
255 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
256 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
258 OCPlatformInfo info =
262 0, 0, 0, 0, 0, 0, 0, 0, 0
264 EXPECT_EQ(OC_STACK_ERROR, OCSetPlatformInfo(info));
265 EXPECT_EQ(OC_STACK_OK, OCStop());
268 TEST(StackStart, SetPlatformInfoWithNoPlatformID)
270 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
271 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
273 OCPlatformInfo info =
277 0, 0, 0, 0, 0, 0, 0, 0, 0
280 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
281 EXPECT_EQ(OC_STACK_OK, OCStop());
284 TEST(StackStart, SetPlatformInfoWithNoManufacturerName)
286 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
287 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
289 OCPlatformInfo info =
292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
295 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
296 EXPECT_EQ(OC_STACK_OK, OCStop());
299 TEST(StackStart, SetPlatformInfoWithZeroLengthManufacturerName)
301 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
302 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
304 OCPlatformInfo info =
307 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
309 info.manufacturerName = (char *) "";
311 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
312 EXPECT_EQ(OC_STACK_OK, OCStop());
315 TEST(StackStart, SetPlatformInfoWithTooLongManufacName)
317 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
318 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
320 OCPlatformInfo info =
323 gTooLongManufacturerName,
324 0, 0, 0, 0, 0, 0, 0, 0, 0
327 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
328 EXPECT_EQ(OC_STACK_OK, OCStop());
331 TEST(StackStart, SetPlatformInfoWithTooLongManufacURL)
333 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
334 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
335 OCPlatformInfo info =
340 0, 0, 0, 0, 0, 0, 0, 0
343 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
344 EXPECT_EQ(OC_STACK_OK, OCStop());
347 TEST(StackDiscovery, DISABLED_DoResourceDeviceDiscovery)
349 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
350 OCCallbackData cbData;
353 OIC_LOG(INFO, TAG, "Starting DoResourceDeviceDiscovery test ");
354 InitStack(OC_CLIENT);
356 /* Start a discovery query*/
357 char szQueryUri[64] = { 0 };
358 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
359 cbData.cb = asyncDoResourcesCallback;
360 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
362 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
372 EXPECT_EQ(OC_STACK_OK, OCStop());
375 TEST(StackStop, StackStopWithoutInit)
377 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
378 EXPECT_EQ(OC_STACK_ERROR, OCStop());
381 TEST(StackStop, StackStopRepeated)
383 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
384 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
385 EXPECT_EQ(OC_STACK_OK, OCStop());
386 EXPECT_EQ(OC_STACK_ERROR, OCStop());
389 TEST(StackResource, DISABLED_UpdateResourceNullURI)
391 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
392 OCCallbackData cbData;
395 OIC_LOG(INFO, TAG, "Starting UpdateResourceNullURI test");
396 InitStack(OC_CLIENT);
398 /* Start a discovery query*/
399 char szQueryUri[64] = { 0 };
400 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
401 cbData.cb = asyncDoResourcesCallback;
402 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
404 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
414 EXPECT_EQ(OC_STACK_OK, OCStop());
417 TEST(StackResource, CreateResourceBadParams)
419 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
420 OIC_LOG(INFO, TAG, "Starting CreateResourceBadParams test");
421 InitStack(OC_SERVER);
423 OCResourceHandle handle;
425 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(NULL, //&handle,
431 OC_DISCOVERABLE|OC_OBSERVABLE));
433 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
439 OC_DISCOVERABLE|OC_OBSERVABLE));
441 // Property bitmask out of range
442 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
448 128));// invalid bitmask for OCResourceProperty
450 EXPECT_EQ(OC_STACK_OK, OCStop());
453 TEST(StackResource, CreateResourceBadUri)
455 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
456 OIC_LOG(INFO, TAG, "Starting CreateResourceBadUri test");
457 InitStack(OC_SERVER);
459 const char *uri257 = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVW";
461 OCResourceHandle handle;
463 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
469 OC_DISCOVERABLE|OC_OBSERVABLE));
471 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
477 OC_DISCOVERABLE|OC_OBSERVABLE));
479 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
485 OC_DISCOVERABLE|OC_OBSERVABLE));
487 EXPECT_EQ(OC_STACK_OK, OCStop());
490 TEST(StackResource, CreateResourceSuccess)
492 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
493 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
494 InitStack(OC_SERVER);
496 OCResourceHandle handle;
497 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
503 OC_DISCOVERABLE|OC_OBSERVABLE));
504 const char *url = OCGetResourceUri(handle);
505 EXPECT_STREQ("/a/led", url);
507 EXPECT_EQ(OC_STACK_OK, OCStop());
510 TEST(StackResource, CreateResourceSuccessWithResourcePolicyPropNone)
512 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
513 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccessWithResourcePolicyPropNone test");
514 InitStack(OC_SERVER);
516 OCResourceHandle handle;
517 // the resource is non-discoverable & non-observable by the client.
518 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
524 OC_RES_PROP_NONE));// the resource is non-discoverable &
525 // non-observable by the client.
526 const char* url = OCGetResourceUri(handle);
527 EXPECT_STREQ("/a/led", url);
529 EXPECT_EQ(OC_STACK_OK, OCStop());
532 TEST(StackResource, CreateResourceWithClientStackMode)
534 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
535 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
536 InitStack(OC_CLIENT);
538 OCResourceHandle handle;
539 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
545 OC_DISCOVERABLE|OC_OBSERVABLE));
547 EXPECT_EQ(OC_STACK_OK, OCStop());
550 TEST(StackResource, CreateResourceFailDuplicateUri)
552 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
553 OIC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
554 InitStack(OC_SERVER);
556 OCResourceHandle handle;
557 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
563 OC_DISCOVERABLE|OC_OBSERVABLE));
564 const char *url = OCGetResourceUri(handle);
565 EXPECT_STREQ("/a/led", url);
567 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
573 OC_DISCOVERABLE|OC_OBSERVABLE));
575 EXPECT_EQ(OC_STACK_OK, OCStop());
578 TEST(StackResource, CreateResourceMultipleResources)
580 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
581 OIC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
582 InitStack(OC_SERVER);
584 OCResourceHandle handle1;
585 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
591 OC_DISCOVERABLE|OC_OBSERVABLE));
593 OCResourceHandle handle2;
594 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
600 OC_DISCOVERABLE|OC_OBSERVABLE));
601 OCResourceHandle handle3;
602 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
608 OC_DISCOVERABLE|OC_OBSERVABLE));
610 const char *url = OCGetResourceUri(handle1);
611 EXPECT_STREQ("/a/led1", url);
613 url = OCGetResourceUri(handle2);
614 EXPECT_STREQ("/a/led2", url);
616 url = OCGetResourceUri(handle3);
617 EXPECT_STREQ("/a/led3", url);
619 EXPECT_EQ(OC_STACK_OK, OCStop());
622 TEST(StackResource, CreateResourceBadResoureType)
624 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
625 OIC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
626 InitStack(OC_SERVER);
628 OCResourceHandle handle;
629 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
635 OC_DISCOVERABLE|OC_OBSERVABLE));
637 OCResourceHandle handle2;
638 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle2,
644 OC_DISCOVERABLE|OC_OBSERVABLE));
646 EXPECT_EQ(OC_STACK_OK, OCStop());
649 TEST(StackResource, CreateResourceGoodResourceType)
651 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
652 OIC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
653 InitStack(OC_SERVER);
655 OCResourceHandle handle;
656 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
662 OC_DISCOVERABLE|OC_OBSERVABLE));
664 EXPECT_EQ(OC_STACK_OK, OCStop());
667 TEST(StackResource, ResourceTypeName)
669 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
670 OIC_LOG(INFO, TAG, "Starting ResourceTypeName test");
671 InitStack(OC_SERVER);
673 OCResourceHandle handle;
674 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
680 OC_DISCOVERABLE|OC_OBSERVABLE));
682 uint8_t numResourceTypes;
683 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
684 EXPECT_EQ(1, numResourceTypes);
685 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
686 EXPECT_STREQ("core.led", resourceTypeName);
688 // try getting resource type names with an invalid index
689 resourceTypeName = OCGetResourceTypeName(handle, 1);
690 EXPECT_STREQ(NULL, resourceTypeName);
691 // try getting resource type names with an invalid index
692 resourceTypeName = OCGetResourceTypeName(handle, 10);
693 EXPECT_STREQ(NULL, resourceTypeName);
695 EXPECT_EQ(OC_STACK_OK, OCStop());
698 TEST(StackResource, ResourceTypeAttrRepresentation)
700 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
701 OIC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
702 InitStack(OC_SERVER);
704 OCResourceHandle handle;
705 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
711 OC_DISCOVERABLE|OC_OBSERVABLE));
713 uint8_t numResourceTypes;
714 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
715 EXPECT_EQ(1, numResourceTypes);
717 EXPECT_EQ(OC_STACK_OK, OCStop());
720 TEST(StackResource, ResourceTypeInterface)
722 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
723 OIC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
724 InitStack(OC_SERVER);
726 OCResourceHandle handle;
727 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
733 OC_DISCOVERABLE|OC_OBSERVABLE));
735 uint8_t numResourceInterfaces;
736 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
737 EXPECT_EQ(2, numResourceInterfaces);
738 const char *resourceInterfaceName1 = OCGetResourceInterfaceName(handle, 0);
739 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, resourceInterfaceName1);
740 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
741 EXPECT_STREQ("core.rw", resourceInterfaceName);
743 // try getting resource interface names with an invalid index
744 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
745 EXPECT_STREQ(NULL, resourceInterfaceName);
746 // try getting resource interface names with an invalid index
747 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
748 EXPECT_STREQ(NULL, resourceInterfaceName);
750 EXPECT_EQ(OC_STACK_OK, OCStop());
753 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
755 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
757 OIC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
759 InitStack(OC_SERVER);
761 OCResourceHandle handle;
762 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
768 OC_DISCOVERABLE|OC_OBSERVABLE));
769 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
770 OC_RSRVD_INTERFACE_DEFAULT));
771 uint8_t numResourceInterfaces;
772 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
773 EXPECT_EQ(2, numResourceInterfaces);
775 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
776 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
778 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
779 EXPECT_STREQ("core.rw", interfaceName_2);
781 EXPECT_EQ(OC_STACK_OK, OCStop());
784 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
786 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
788 OIC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
790 InitStack(OC_SERVER);
792 OCResourceHandle handle;
793 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
799 OC_DISCOVERABLE|OC_OBSERVABLE));
801 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
802 OC_RSRVD_INTERFACE_DEFAULT));
803 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
804 OC_RSRVD_INTERFACE_DEFAULT));
806 uint8_t numResourceInterfaces;
807 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
808 EXPECT_EQ(2, numResourceInterfaces);
810 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
811 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
813 EXPECT_EQ(OC_STACK_OK, OCStop());
816 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
818 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
820 OIC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
822 InitStack(OC_SERVER);
824 OCResourceHandle handle;
825 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
831 OC_DISCOVERABLE|OC_OBSERVABLE));
833 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
835 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
838 uint8_t numResourceInterfaces;
839 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
840 EXPECT_EQ(2, numResourceInterfaces);
842 EXPECT_EQ(OC_STACK_OK, OCStop());
845 TEST(StackResource, ResourceTypeInterfaceMethods)
847 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
848 OIC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
849 InitStack(OC_SERVER);
851 OCResourceHandle handle;
852 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
858 OC_DISCOVERABLE|OC_OBSERVABLE));
860 uint8_t numResourceInterfaces;
861 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
862 EXPECT_EQ(2, numResourceInterfaces);
864 EXPECT_EQ(OC_STACK_OK, OCStop());
867 TEST(StackResource, GetResourceProperties)
869 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
870 OIC_LOG(INFO, TAG, "Starting GetResourceProperties test");
871 InitStack(OC_SERVER);
873 OCResourceHandle handle;
874 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
880 OC_DISCOVERABLE|OC_OBSERVABLE));
882 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
883 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
885 EXPECT_EQ(OC_STACK_OK, OCStop());
888 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
890 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
891 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
892 InitStack(OC_SERVER);
893 uint8_t numResources = 0;
894 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
896 OCResourceHandle handle;
897 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
903 OC_DISCOVERABLE|OC_OBSERVABLE));
904 const char *url = OCGetResourceUri(handle);
905 EXPECT_STREQ("/a1/led", url);
907 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
908 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
909 uint8_t numExpectedResources = 0;
911 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
912 EXPECT_EQ(numExpectedResources, numResources);
914 EXPECT_EQ(OC_STACK_OK, OCStop());
917 TEST(StackResource, StackTestResourceDiscoverOneResource)
919 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
920 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
921 InitStack(OC_SERVER);
923 OCResourceHandle handle;
924 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
930 OC_DISCOVERABLE|OC_OBSERVABLE));
931 const char *url = OCGetResourceUri(handle);
932 EXPECT_STREQ("/a/led", url);
934 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
935 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
937 EXPECT_EQ(OC_STACK_OK, OCStop());
940 TEST(StackResource, StackTestResourceDiscoverManyResources)
942 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
943 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
944 InitStack(OC_SERVER);
946 OCResourceHandle handle1;
947 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
954 const char *url = OCGetResourceUri(handle1);
955 EXPECT_STREQ("/a/led1", url);
957 OCResourceHandle handle2;
958 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
964 OC_DISCOVERABLE|OC_OBSERVABLE));
965 url = OCGetResourceUri(handle2);
966 EXPECT_STREQ("/a/led2", url);
968 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
969 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
971 OCResourceHandle handle3;
972 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
978 OC_DISCOVERABLE|OC_OBSERVABLE));
979 url = OCGetResourceUri(handle3);
980 EXPECT_STREQ("/a/led3", url);
982 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
983 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
985 OCResourceHandle handle4;
986 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
993 url = OCGetResourceUri(handle4);
994 EXPECT_STREQ("/a/led4", url);
996 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
997 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
998 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
1000 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
1002 EXPECT_EQ(OC_STACK_OK, OCStop());
1005 TEST(StackBind, BindResourceTypeNameBad)
1007 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1008 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
1009 InitStack(OC_SERVER);
1011 OCResourceHandle handle;
1012 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1018 OC_DISCOVERABLE|OC_OBSERVABLE));
1020 uint8_t numResourceTypes;
1021 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1022 EXPECT_EQ(1, numResourceTypes);
1023 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1024 EXPECT_STREQ("core.led", resourceTypeName);
1026 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
1027 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.nameBad"));
1028 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.name bad"));
1030 EXPECT_EQ(OC_STACK_OK, OCStop());
1033 TEST(StackBind, BindResourceTypeNameGood)
1035 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1036 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
1037 InitStack(OC_SERVER);
1039 OCResourceHandle handle;
1040 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1046 OC_DISCOVERABLE|OC_OBSERVABLE));
1048 uint8_t numResourceTypes;
1049 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1050 EXPECT_EQ(1, numResourceTypes);
1051 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1052 EXPECT_STREQ("core.led", resourceTypeName);
1054 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1055 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1056 EXPECT_EQ(2, numResourceTypes);
1057 resourceTypeName = OCGetResourceTypeName(handle, 1);
1058 EXPECT_STREQ("core.brightled", resourceTypeName);
1060 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1061 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1062 EXPECT_EQ(3, numResourceTypes);
1063 resourceTypeName = OCGetResourceTypeName(handle, 2);
1064 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
1066 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "x.ReallyReallyBrightLED"));
1067 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1068 EXPECT_EQ(4, numResourceTypes);
1069 resourceTypeName = OCGetResourceTypeName(handle, 3);
1070 EXPECT_STREQ("x.ReallyReallyBrightLED", resourceTypeName);
1072 EXPECT_EQ(OC_STACK_OK, OCStop());
1075 TEST(StackBind, BindResourceTypeAttribRepGood)
1077 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1078 OIC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
1079 InitStack(OC_SERVER);
1081 OCResourceHandle handle;
1082 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1088 OC_DISCOVERABLE|OC_OBSERVABLE));
1090 uint8_t numResourceTypes;
1091 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1092 EXPECT_EQ(1, numResourceTypes);
1094 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1095 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1096 EXPECT_EQ(2, numResourceTypes);
1098 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1099 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1100 EXPECT_EQ(3, numResourceTypes);
1102 EXPECT_EQ(OC_STACK_OK, OCStop());
1106 TEST(StackBind, BindResourceInterfaceNameBad)
1108 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1109 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
1110 InitStack(OC_SERVER);
1112 OCResourceHandle handle;
1113 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1119 OC_DISCOVERABLE|OC_OBSERVABLE));
1121 uint8_t numResourceInterfaces;
1122 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1123 EXPECT_EQ(2, numResourceInterfaces);
1124 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1125 EXPECT_STREQ("core.rw", resourceInterfaceName);
1127 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
1129 EXPECT_EQ(OC_STACK_OK, OCStop());
1132 TEST(StackBind, BindResourceInterfaceNameGood)
1134 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1135 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
1136 InitStack(OC_SERVER);
1138 OCResourceHandle handle;
1139 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1145 OC_DISCOVERABLE|OC_OBSERVABLE));
1147 uint8_t numResourceInterfaces;
1148 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1149 EXPECT_EQ(2, numResourceInterfaces);
1150 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1151 EXPECT_STREQ("core.rw", resourceInterfaceName);
1153 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1155 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1156 EXPECT_EQ(3, numResourceInterfaces);
1157 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
1158 EXPECT_STREQ("core.r", resourceInterfaceName);
1160 EXPECT_EQ(OC_STACK_OK, OCStop());
1163 TEST(StackBind, BindResourceInterfaceMethodsBad)
1165 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1166 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
1167 InitStack(OC_SERVER);
1169 OCResourceHandle handle;
1170 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1176 OC_DISCOVERABLE|OC_OBSERVABLE));
1178 uint8_t numResourceInterfaces;
1179 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1180 EXPECT_EQ(2, numResourceInterfaces);
1182 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1184 EXPECT_EQ(OC_STACK_OK, OCStop());
1187 TEST(StackBind, BindResourceInterfaceMethodsGood)
1189 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1190 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
1191 InitStack(OC_SERVER);
1193 OCResourceHandle handle;
1194 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1200 OC_DISCOVERABLE|OC_OBSERVABLE));
1202 uint8_t numResourceInterfaces;
1203 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1204 EXPECT_EQ(2, numResourceInterfaces);
1206 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1208 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1209 EXPECT_EQ(3, numResourceInterfaces);
1211 EXPECT_EQ(OC_STACK_OK, OCStop());
1214 TEST(StackBind, BindContainedResourceBad)
1216 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1217 OIC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1218 InitStack(OC_SERVER);
1220 OCResourceHandle containerHandle;
1221 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1227 OC_DISCOVERABLE|OC_OBSERVABLE));
1229 OCResourceHandle handle0;
1230 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1236 OC_DISCOVERABLE|OC_OBSERVABLE));
1238 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1240 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1242 EXPECT_EQ(OC_STACK_OK, OCStop());
1245 TEST(StackBind, BindContainedResourceGood)
1247 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1248 OIC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1249 InitStack(OC_SERVER);
1251 uint8_t numResources = 0;
1252 uint8_t numExpectedResources = 0;
1254 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1256 OCResourceHandle containerHandle;
1257 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1263 OC_DISCOVERABLE|OC_OBSERVABLE));
1264 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1265 EXPECT_EQ(++numExpectedResources, numResources);
1267 OCResourceHandle handle0;
1268 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1274 OC_DISCOVERABLE|OC_OBSERVABLE));
1275 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1276 EXPECT_EQ(++numExpectedResources, numResources);
1278 OCResourceHandle handle1;
1279 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1285 OC_DISCOVERABLE|OC_OBSERVABLE));
1286 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1287 EXPECT_EQ(++numExpectedResources, numResources);
1289 OCResourceHandle handle2;
1290 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1296 OC_DISCOVERABLE|OC_OBSERVABLE));
1297 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1298 EXPECT_EQ(++numExpectedResources, numResources);
1300 OCResourceHandle handle3;
1301 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1307 OC_DISCOVERABLE|OC_OBSERVABLE));
1308 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1309 EXPECT_EQ(++numExpectedResources, numResources);
1311 OCResourceHandle handle4;
1312 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1318 OC_DISCOVERABLE|OC_OBSERVABLE));
1319 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1320 EXPECT_EQ(++numExpectedResources, numResources);
1322 OCResourceHandle handle5;
1323 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1329 OC_DISCOVERABLE|OC_OBSERVABLE));
1330 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1331 EXPECT_EQ(++numExpectedResources, numResources);
1334 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1335 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1336 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1337 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1338 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1339 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle5));
1341 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1342 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1343 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1344 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1345 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1346 EXPECT_EQ(handle5, OCGetResourceHandleFromCollection(containerHandle, 5));
1348 EXPECT_EQ(OC_STACK_OK, OCStop());
1352 TEST(StackBind, BindEntityHandlerBad)
1354 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1355 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1356 InitStack(OC_SERVER);
1358 OCResourceHandle handle;
1359 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1365 OC_DISCOVERABLE|OC_OBSERVABLE));
1367 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL, NULL));
1369 EXPECT_EQ(OC_STACK_OK, OCStop());
1372 TEST(StackBind, BindEntityHandlerGood)
1374 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1375 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1376 InitStack(OC_SERVER);
1378 OCResourceHandle handle;
1379 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1385 OC_DISCOVERABLE|OC_OBSERVABLE));
1387 OCEntityHandler myHandler = entityHandler;
1389 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler, NULL));
1391 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1393 EXPECT_EQ(OC_STACK_OK, OCStop());
1396 TEST(StackResourceAccess, GetResourceByIndex)
1398 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1399 OIC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1400 InitStack(OC_SERVER);
1402 uint8_t numResources = 0;
1403 uint8_t numExpectedResources = 0;
1404 uint8_t resourceIndex = 0;
1405 uint8_t prevResources = 0;
1406 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1407 prevResources = numExpectedResources;
1408 OCResourceHandle containerHandle;
1409 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1415 OC_DISCOVERABLE|OC_OBSERVABLE));
1416 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1417 EXPECT_EQ(++numExpectedResources, numResources);
1419 OCResourceHandle handle0;
1420 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1426 OC_DISCOVERABLE|OC_OBSERVABLE));
1427 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1428 EXPECT_EQ(++numExpectedResources, numResources);
1430 OCResourceHandle handle1;
1431 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1437 OC_DISCOVERABLE|OC_OBSERVABLE));
1438 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1439 EXPECT_EQ(++numExpectedResources, numResources);
1441 OCResourceHandle handle2;
1442 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1448 OC_DISCOVERABLE|OC_OBSERVABLE));
1449 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1450 EXPECT_EQ(++numExpectedResources, numResources);
1452 OCResourceHandle handle3;
1453 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1459 OC_DISCOVERABLE|OC_OBSERVABLE));
1460 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1461 EXPECT_EQ(++numExpectedResources, numResources);
1463 OCResourceHandle handle4;
1464 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1470 OC_DISCOVERABLE|OC_OBSERVABLE));
1471 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1472 EXPECT_EQ(++numExpectedResources, numResources);
1474 OCResourceHandle handle5;
1475 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1481 OC_DISCOVERABLE|OC_OBSERVABLE));
1482 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1483 EXPECT_EQ(++numExpectedResources, numResources);
1484 resourceIndex += prevResources;
1485 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1486 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1487 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1488 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1489 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1490 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1491 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1493 EXPECT_EQ(OC_STACK_OK, OCStop());
1496 TEST(StackResourceAccess, DeleteHeadResource)
1498 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1499 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1500 InitStack(OC_SERVER);
1502 uint8_t numResources = 0;
1503 uint8_t numExpectedResources = 0;
1505 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1507 OCResourceHandle handle0;
1508 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1514 OC_DISCOVERABLE|OC_OBSERVABLE));
1515 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1516 EXPECT_EQ(++numExpectedResources, numResources);
1518 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1519 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1520 EXPECT_EQ(--numExpectedResources, numResources);
1522 EXPECT_EQ(OC_STACK_OK, OCStop());
1525 TEST(StackResourceAccess, DeleteHeadResource2)
1527 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1528 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1529 InitStack(OC_SERVER);
1531 uint8_t numResources = 0;
1532 uint8_t numExpectedResources = 0;
1534 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1535 OCResourceHandle handle0;
1536 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1542 OC_DISCOVERABLE|OC_OBSERVABLE));
1543 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1544 EXPECT_EQ(++numExpectedResources, numResources);
1546 OCResourceHandle handle1;
1547 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1553 OC_DISCOVERABLE|OC_OBSERVABLE));
1554 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1555 EXPECT_EQ(++numExpectedResources, numResources);
1557 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1558 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1559 EXPECT_EQ(--numExpectedResources, numResources);
1561 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
1563 EXPECT_EQ(OC_STACK_OK, OCStop());
1567 TEST(StackResourceAccess, DeleteLastResource)
1569 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1570 OIC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1571 InitStack(OC_SERVER);
1573 uint8_t numResources = 0;
1574 uint8_t numExpectedResources = 0;
1576 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1578 OCResourceHandle handle0;
1579 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1585 OC_DISCOVERABLE|OC_OBSERVABLE));
1586 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1587 EXPECT_EQ(++numExpectedResources, numResources);
1589 OCResourceHandle handle1;
1590 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1596 OC_DISCOVERABLE|OC_OBSERVABLE));
1597 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1598 EXPECT_EQ(++numExpectedResources, numResources);
1600 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1601 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1602 EXPECT_EQ(--numExpectedResources, numResources);
1604 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
1606 OCResourceHandle handle2;
1607 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1613 OC_DISCOVERABLE|OC_OBSERVABLE));
1614 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1615 EXPECT_EQ(++numExpectedResources, numResources);
1617 EXPECT_EQ(OC_STACK_OK, OCStop());
1620 TEST(StackResourceAccess, DeleteMiddleResource)
1622 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1623 OIC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1624 InitStack(OC_SERVER);
1626 uint8_t numResources = 0;
1627 uint8_t numExpectedResources = 0;
1628 uint8_t resourceIndex = InitResourceIndex();
1630 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1631 resourceIndex = numExpectedResources;
1632 OCResourceHandle handle0;
1633 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1639 OC_DISCOVERABLE|OC_OBSERVABLE));
1640 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1641 EXPECT_EQ(++numExpectedResources, numResources);
1643 OCResourceHandle handle1;
1644 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1650 OC_DISCOVERABLE|OC_OBSERVABLE));
1651 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1652 EXPECT_EQ(++numExpectedResources, numResources);
1654 OCResourceHandle handle2;
1655 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1661 OC_DISCOVERABLE|OC_OBSERVABLE));
1662 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1663 EXPECT_EQ(++numExpectedResources, numResources);
1665 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1666 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1667 EXPECT_EQ(--numExpectedResources, numResources);
1669 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1670 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1672 // Make sure the resource elements are still correct
1673 uint8_t numResourceInterfaces;
1674 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1675 EXPECT_EQ(2, numResourceInterfaces);
1676 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 1);
1677 EXPECT_STREQ("core.rw", resourceInterfaceName);
1679 EXPECT_EQ(OC_STACK_OK, OCStop());
1682 // Visual Studio versions earlier than 2015 have bugs in is_pod and report the wrong answer.
1683 #if !defined(_MSC_VER) || (_MSC_VER >= 1900)
1684 TEST(PODTests, OCHeaderOption)
1686 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1689 TEST(PODTests, OCCallbackData)
1691 EXPECT_TRUE(std::is_pod<OCCallbackData>::value);
1695 TEST(OCDoDirectPairingTests, Nullpeer)
1697 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, pmSel, &pinNumber, &resultCallback));
1700 TEST(OCDoDirectPairingTests, NullCallback)
1702 EXPECT_EQ(OC_STACK_INVALID_CALLBACK,OCDoDirectPairing(&peer, pmSel, &pinNumber, NULL));
1705 TEST(OCDoDirectPairingTests, NullpinNumber)
1707 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(&peer, pmSel, NULL, &resultCallback));
1710 TEST(StackResource, MultipleResourcesDiscovery)
1712 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1713 OIC_LOG(INFO, TAG, "Starting MultipleResourcesDiscovery test");
1714 InitStack(OC_SERVER);
1716 OCResourceHandle handle1;
1717 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1723 OC_DISCOVERABLE|OC_OBSERVABLE));
1725 OCResourceHandle handle2;
1726 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1732 OC_DISCOVERABLE|OC_OBSERVABLE));
1733 OCResourceHandle handle3;
1734 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1740 OC_DISCOVERABLE|OC_OBSERVABLE));
1741 /* Start a discovery query*/
1742 char szQueryUri[256] = "/oic/res?if=oic.if.ll";
1743 OCCallbackData cbData;
1744 cbData.cb = discoveryCallback;
1745 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
1749 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
1760 EXPECT_EQ(OC_STACK_OK, OCStop());
1763 TEST(StackPayload, CloneByteString)
1765 uint8_t bytes[] = { 0, 1, 2, 3 };
1766 OCByteString byteString;
1767 byteString.bytes = bytes;
1768 byteString.len = sizeof(bytes);
1770 OCRepPayload *original = OCRepPayloadCreate();
1771 ASSERT_TRUE(original != NULL);
1772 EXPECT_TRUE(OCRepPayloadSetPropByteString(original, "name", byteString));
1774 OCRepPayload *clone = OCRepPayloadClone(original);
1775 ASSERT_TRUE(clone != NULL);
1777 OCRepPayloadDestroy(original);
1779 OCByteString cloneByteString;
1780 EXPECT_TRUE(OCRepPayloadGetPropByteString(clone, "name", &cloneByteString));
1781 ASSERT_TRUE(cloneByteString.bytes != NULL);
1782 EXPECT_EQ(sizeof(bytes), cloneByteString.len);
1783 EXPECT_TRUE(0 == memcmp(bytes, cloneByteString.bytes, sizeof(bytes)));
1784 OICFree(cloneByteString.bytes);
1786 OCRepPayloadDestroy(clone);