1 //******************************************************************
3 // Copyright 2014 Intel Mobile Communications GmbH All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
24 #include "ocpayload.h"
26 #include "ocstackinternal.h"
28 #include "oic_malloc.h"
31 #include "gtest/gtest.h"
32 #include <sys/types.h>
41 //-----------------------------------------------------------------------------
43 //-----------------------------------------------------------------------------
50 #include "gtest_helper.h"
54 namespace itst = iotivity::test;
56 #define DEFAULT_CONTEXT_VALUE 0x99
58 //-----------------------------------------------------------------------------
60 //-----------------------------------------------------------------------------
61 static const char TAG[] = "TestHarness";
63 char gDeviceUUID[] = "myDeviceUUID";
64 char gManufacturerName[] = "myName";
65 char gTooLongManufacturerName[] = "extremelylongmanufacturername";
66 char gManufacturerUrl[] = "www.foooooooooooooooo.baaaaaaaaaaaaar";
68 static char pinNumber;
69 static OCDPDev_t peer;
71 std::chrono::seconds const SHORT_TEST_TIMEOUT = std::chrono::seconds(5);
73 //-----------------------------------------------------------------------------
75 //-----------------------------------------------------------------------------
76 extern "C" OCStackApplicationResult asyncDoResourcesCallback(void* ctx,
77 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
79 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
81 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
83 if(ctx == (void*)DEFAULT_CONTEXT_VALUE) {
84 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
86 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
88 return OC_STACK_KEEP_TRANSACTION;
91 static void resultCallback(void *UNUSED1, OCDPDev_t *UNUSED2, OCStackResult UNUSED3)
98 extern "C" OCStackApplicationResult discoveryCallback(void* ctx,
99 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
101 OIC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
103 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
105 if(ctx == (void*)DEFAULT_CONTEXT_VALUE)
107 OIC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
110 OIC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
112 OCDiscoveryPayload *discoveryPayload = ((OCDiscoveryPayload *) clientResponse->payload);
113 EXPECT_TRUE(discoveryPayload != NULL);
114 OCResourcePayload *res = discoveryPayload->resources;
116 for (OCResourcePayload *res1 = discoveryPayload->resources; res1; res1 = res1->next)
121 EXPECT_EQ("/a/led1", res->uri);
123 EXPECT_EQ("/a/led2", res->uri);
125 EXPECT_EQ("/a/led3", res->uri);
127 EXPECT_TRUE(res == NULL);
129 return OC_STACK_KEEP_TRANSACTION;
132 //-----------------------------------------------------------------------------
134 //-----------------------------------------------------------------------------
135 OCEntityHandlerResult entityHandler(OCEntityHandlerFlag /*flag*/,
136 OCEntityHandlerRequest * /*entityHandlerRequest*/,
137 void* /*callbackParam*/)
139 OIC_LOG(INFO, TAG, "Entering entityHandler");
144 //-----------------------------------------------------------------------------
146 //-----------------------------------------------------------------------------
147 void InitStack(OCMode mode)
149 OIC_LOG(INFO, TAG, "Entering InitStack");
151 EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, mode));
152 OIC_LOG(INFO, TAG, "Leaving InitStack");
155 uint8_t InitNumExpectedResources()
158 // When presence is enabled, it is a resource and so is (currently) included
159 // in the returned resource count returned by the OCGetNumberOfResources API.
166 uint8_t InitResourceIndex()
169 // When presence is enabled, it is a resource and so is (currently) included
170 // in the returned resource count returned by the OCGetNumberOfResources API.
171 // The index of the presence resource is 0, so the first user app resource index
178 //-----------------------------------------------------------------------------
180 //-----------------------------------------------------------------------------
182 TEST(StackInit, StackInitNullAddr)
184 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
185 EXPECT_EQ(OC_STACK_OK, OCInit(0, 5683, OC_SERVER));
186 EXPECT_EQ(OC_STACK_OK, OCStop());
189 TEST(StackInit, StackInitNullPort)
191 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
192 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 0, OC_SERVER));
193 EXPECT_EQ(OC_STACK_OK, OCStop());
196 TEST(StackInit, StackInitNullAddrAndPort)
198 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
199 EXPECT_EQ(OC_STACK_OK, OCInit(0, 0, OC_SERVER));
200 EXPECT_EQ(OC_STACK_OK, OCStop());
203 TEST(StackInit, StackInitInvalidMode)
205 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
206 EXPECT_EQ(OC_STACK_ERROR, OCInit(0, 0, (OCMode)10));
207 EXPECT_EQ(OC_STACK_ERROR, OCStop());
210 TEST(StackStart, StackStartSuccessClient)
212 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
213 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
214 EXPECT_EQ(OC_STACK_OK, OCStop());
217 TEST(StackStart, StackStartSuccessServer)
219 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
220 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
221 EXPECT_EQ(OC_STACK_OK, OCStop());
224 TEST(StackStart, StackStartSuccessClientServer)
226 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
227 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT_SERVER));
228 EXPECT_EQ(OC_STACK_OK, OCStop());
231 TEST(StackStart, StackStartSuccessServerThenClient)
233 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
234 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
235 EXPECT_EQ(OC_STACK_OK, OCStop());
236 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
237 EXPECT_EQ(OC_STACK_OK, OCStop());
240 TEST(StackStart, StackStartSuccessClientThenServer)
242 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
243 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
244 EXPECT_EQ(OC_STACK_OK, OCStop());
245 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
246 EXPECT_EQ(OC_STACK_OK, OCStop());
249 TEST(StackStart, StackStartSuccessiveInits)
251 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
252 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
253 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.2", 5683, OC_SERVER));
254 EXPECT_EQ(OC_STACK_OK, OCStop());
257 TEST(StackStart, SetPlatformInfoValid)
259 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
260 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
262 OCPlatformInfo info =
266 0, 0, 0, 0, 0, 0, 0, 0, 0
268 EXPECT_EQ(OC_STACK_OK, OCSetPlatformInfo(info));
269 EXPECT_EQ(OC_STACK_OK, OCStop());
272 TEST(StackStart, SetPlatformInfoWithClientMode)
274 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
275 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
277 OCPlatformInfo info =
281 0, 0, 0, 0, 0, 0, 0, 0, 0
283 EXPECT_EQ(OC_STACK_ERROR, OCSetPlatformInfo(info));
284 EXPECT_EQ(OC_STACK_OK, OCStop());
287 TEST(StackStart, SetPlatformInfoWithNoPlatformID)
289 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
290 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
292 OCPlatformInfo info =
296 0, 0, 0, 0, 0, 0, 0, 0, 0
299 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
300 EXPECT_EQ(OC_STACK_OK, OCStop());
303 TEST(StackStart, SetPlatformInfoWithNoManufacturerName)
305 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
306 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
308 OCPlatformInfo info =
311 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
314 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
315 EXPECT_EQ(OC_STACK_OK, OCStop());
318 TEST(StackStart, SetPlatformInfoWithZeroLengthManufacturerName)
320 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
321 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
323 OCPlatformInfo info =
326 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
328 info.manufacturerName = (char *) "";
330 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
331 EXPECT_EQ(OC_STACK_OK, OCStop());
334 TEST(StackStart, SetPlatformInfoWithTooLongManufacName)
336 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
337 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
339 OCPlatformInfo info =
342 gTooLongManufacturerName,
343 0, 0, 0, 0, 0, 0, 0, 0, 0
346 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
347 EXPECT_EQ(OC_STACK_OK, OCStop());
350 TEST(StackStart, SetPlatformInfoWithTooLongManufacURL)
352 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
353 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
354 OCPlatformInfo info =
359 0, 0, 0, 0, 0, 0, 0, 0
362 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
363 EXPECT_EQ(OC_STACK_OK, OCStop());
366 TEST(StackDiscovery, DISABLED_DoResourceDeviceDiscovery)
368 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
369 OCCallbackData cbData;
372 OIC_LOG(INFO, TAG, "Starting DoResourceDeviceDiscovery test ");
373 InitStack(OC_CLIENT);
375 /* Start a discovery query*/
376 char szQueryUri[64] = { 0 };
377 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
378 cbData.cb = asyncDoResourcesCallback;
379 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
381 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
391 EXPECT_EQ(OC_STACK_OK, OCStop());
394 TEST(StackStop, StackStopWithoutInit)
396 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
397 EXPECT_EQ(OC_STACK_ERROR, OCStop());
400 TEST(StackStop, StackStopRepeated)
402 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
403 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
404 EXPECT_EQ(OC_STACK_OK, OCStop());
405 EXPECT_EQ(OC_STACK_ERROR, OCStop());
408 TEST(StackResource, DISABLED_UpdateResourceNullURI)
410 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
411 OCCallbackData cbData;
414 OIC_LOG(INFO, TAG, "Starting UpdateResourceNullURI test");
415 InitStack(OC_CLIENT);
417 /* Start a discovery query*/
418 char szQueryUri[64] = { 0 };
419 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
420 cbData.cb = asyncDoResourcesCallback;
421 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
423 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
433 EXPECT_EQ(OC_STACK_OK, OCStop());
436 TEST(StackResource, CreateResourceBadParams)
438 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
439 OIC_LOG(INFO, TAG, "Starting CreateResourceBadParams test");
440 InitStack(OC_SERVER);
442 OCResourceHandle handle;
444 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(NULL, //&handle,
450 OC_DISCOVERABLE|OC_OBSERVABLE));
452 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
458 OC_DISCOVERABLE|OC_OBSERVABLE));
460 // Property bitmask out of range
461 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
467 128));// invalid bitmask for OCResourceProperty
469 EXPECT_EQ(OC_STACK_OK, OCStop());
472 TEST(StackResource, CreateResourceBadUri)
474 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
475 OIC_LOG(INFO, TAG, "Starting CreateResourceBadUri test");
476 InitStack(OC_SERVER);
478 const char *uri257 = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVW";
480 OCResourceHandle handle;
482 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
488 OC_DISCOVERABLE|OC_OBSERVABLE));
490 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
496 OC_DISCOVERABLE|OC_OBSERVABLE));
498 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
504 OC_DISCOVERABLE|OC_OBSERVABLE));
506 EXPECT_EQ(OC_STACK_OK, OCStop());
509 TEST(StackResource, CreateResourceSuccess)
511 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
512 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
513 InitStack(OC_SERVER);
515 OCResourceHandle handle;
516 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
522 OC_DISCOVERABLE|OC_OBSERVABLE));
523 const char *url = OCGetResourceUri(handle);
524 EXPECT_STREQ("/a/led", url);
526 EXPECT_EQ(OC_STACK_OK, OCStop());
529 TEST(StackResource, CreateResourceSuccessWithResourcePolicyPropNone)
531 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
532 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccessWithResourcePolicyPropNone test");
533 InitStack(OC_SERVER);
535 OCResourceHandle handle;
536 // the resource is non-discoverable & non-observable by the client.
537 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
543 OC_RES_PROP_NONE));// the resource is non-discoverable &
544 // non-observable by the client.
545 const char* url = OCGetResourceUri(handle);
546 EXPECT_STREQ("/a/led", url);
548 EXPECT_EQ(OC_STACK_OK, OCStop());
551 TEST(StackResource, CreateResourceWithClientStackMode)
553 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
554 OIC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
555 InitStack(OC_CLIENT);
557 OCResourceHandle handle;
558 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
564 OC_DISCOVERABLE|OC_OBSERVABLE));
566 EXPECT_EQ(OC_STACK_OK, OCStop());
569 TEST(StackResource, CreateResourceFailDuplicateUri)
571 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
572 OIC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
573 InitStack(OC_SERVER);
575 OCResourceHandle handle;
576 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
582 OC_DISCOVERABLE|OC_OBSERVABLE));
583 const char *url = OCGetResourceUri(handle);
584 EXPECT_STREQ("/a/led", url);
586 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
592 OC_DISCOVERABLE|OC_OBSERVABLE));
594 EXPECT_EQ(OC_STACK_OK, OCStop());
597 TEST(StackResource, CreateResourceMultipleResources)
599 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
600 OIC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
601 InitStack(OC_SERVER);
603 OCResourceHandle handle1;
604 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
610 OC_DISCOVERABLE|OC_OBSERVABLE));
612 OCResourceHandle handle2;
613 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
619 OC_DISCOVERABLE|OC_OBSERVABLE));
620 OCResourceHandle handle3;
621 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
627 OC_DISCOVERABLE|OC_OBSERVABLE));
629 const char *url = OCGetResourceUri(handle1);
630 EXPECT_STREQ("/a/led1", url);
632 url = OCGetResourceUri(handle2);
633 EXPECT_STREQ("/a/led2", url);
635 url = OCGetResourceUri(handle3);
636 EXPECT_STREQ("/a/led3", url);
638 EXPECT_EQ(OC_STACK_OK, OCStop());
641 TEST(StackResource, CreateResourceBadResoureType)
643 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
644 OIC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
645 InitStack(OC_SERVER);
647 OCResourceHandle handle;
648 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
654 OC_DISCOVERABLE|OC_OBSERVABLE));
656 OCResourceHandle handle2;
657 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle2,
663 OC_DISCOVERABLE|OC_OBSERVABLE));
665 EXPECT_EQ(OC_STACK_OK, OCStop());
668 TEST(StackResource, CreateResourceGoodResourceType)
670 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
671 OIC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
672 InitStack(OC_SERVER);
674 OCResourceHandle handle;
675 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
681 OC_DISCOVERABLE|OC_OBSERVABLE));
683 EXPECT_EQ(OC_STACK_OK, OCStop());
686 TEST(StackResource, ResourceTypeName)
688 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
689 OIC_LOG(INFO, TAG, "Starting ResourceTypeName test");
690 InitStack(OC_SERVER);
692 OCResourceHandle handle;
693 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
699 OC_DISCOVERABLE|OC_OBSERVABLE));
701 uint8_t numResourceTypes;
702 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
703 EXPECT_EQ(1, numResourceTypes);
704 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
705 EXPECT_STREQ("core.led", resourceTypeName);
707 // try getting resource type names with an invalid index
708 resourceTypeName = OCGetResourceTypeName(handle, 1);
709 EXPECT_STREQ(NULL, resourceTypeName);
710 // try getting resource type names with an invalid index
711 resourceTypeName = OCGetResourceTypeName(handle, 10);
712 EXPECT_STREQ(NULL, resourceTypeName);
714 EXPECT_EQ(OC_STACK_OK, OCStop());
717 TEST(StackResource, ResourceTypeAttrRepresentation)
719 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
720 OIC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
721 InitStack(OC_SERVER);
723 OCResourceHandle handle;
724 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
730 OC_DISCOVERABLE|OC_OBSERVABLE));
732 uint8_t numResourceTypes;
733 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
734 EXPECT_EQ(1, numResourceTypes);
736 EXPECT_EQ(OC_STACK_OK, OCStop());
739 TEST(StackResource, ResourceTypeInterface)
741 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
742 OIC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
743 InitStack(OC_SERVER);
745 OCResourceHandle handle;
746 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
752 OC_DISCOVERABLE|OC_OBSERVABLE));
754 uint8_t numResourceInterfaces;
755 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
756 EXPECT_EQ(2, numResourceInterfaces);
757 const char *resourceInterfaceName1 = OCGetResourceInterfaceName(handle, 0);
758 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, resourceInterfaceName1);
759 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
760 EXPECT_STREQ("core.rw", resourceInterfaceName);
762 // try getting resource interface names with an invalid index
763 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
764 EXPECT_STREQ(NULL, resourceInterfaceName);
765 // try getting resource interface names with an invalid index
766 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
767 EXPECT_STREQ(NULL, resourceInterfaceName);
769 EXPECT_EQ(OC_STACK_OK, OCStop());
772 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
774 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
776 OIC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
778 InitStack(OC_SERVER);
780 OCResourceHandle handle;
781 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
787 OC_DISCOVERABLE|OC_OBSERVABLE));
788 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
789 OC_RSRVD_INTERFACE_DEFAULT));
790 uint8_t numResourceInterfaces;
791 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
792 EXPECT_EQ(2, numResourceInterfaces);
794 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
795 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
797 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
798 EXPECT_STREQ("core.rw", interfaceName_2);
800 EXPECT_EQ(OC_STACK_OK, OCStop());
803 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
805 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
807 OIC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
809 InitStack(OC_SERVER);
811 OCResourceHandle handle;
812 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
818 OC_DISCOVERABLE|OC_OBSERVABLE));
820 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
821 OC_RSRVD_INTERFACE_DEFAULT));
822 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
823 OC_RSRVD_INTERFACE_DEFAULT));
825 uint8_t numResourceInterfaces;
826 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
827 EXPECT_EQ(2, numResourceInterfaces);
829 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
830 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
832 EXPECT_EQ(OC_STACK_OK, OCStop());
835 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
837 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
839 OIC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
841 InitStack(OC_SERVER);
843 OCResourceHandle handle;
844 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
850 OC_DISCOVERABLE|OC_OBSERVABLE));
852 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
854 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
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, ResourceTypeInterfaceMethods)
866 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
867 OIC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
868 InitStack(OC_SERVER);
870 OCResourceHandle handle;
871 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
877 OC_DISCOVERABLE|OC_OBSERVABLE));
879 uint8_t numResourceInterfaces;
880 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
881 EXPECT_EQ(2, numResourceInterfaces);
883 EXPECT_EQ(OC_STACK_OK, OCStop());
886 TEST(StackResource, GetResourceProperties)
888 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
889 OIC_LOG(INFO, TAG, "Starting GetResourceProperties test");
890 InitStack(OC_SERVER);
892 OCResourceHandle handle;
893 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
899 OC_DISCOVERABLE|OC_OBSERVABLE));
901 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
902 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
904 EXPECT_EQ(OC_STACK_OK, OCStop());
907 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
909 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
910 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
911 InitStack(OC_SERVER);
912 uint8_t numResources = 0;
913 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
915 OCResourceHandle handle;
916 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
922 OC_DISCOVERABLE|OC_OBSERVABLE));
923 const char *url = OCGetResourceUri(handle);
924 EXPECT_STREQ("/a1/led", url);
926 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
927 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
928 uint8_t numExpectedResources = 0;
930 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
931 EXPECT_EQ(numExpectedResources, numResources);
933 EXPECT_EQ(OC_STACK_OK, OCStop());
936 TEST(StackResource, StackTestResourceDiscoverOneResource)
938 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
939 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
940 InitStack(OC_SERVER);
942 OCResourceHandle handle;
943 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
949 OC_DISCOVERABLE|OC_OBSERVABLE));
950 const char *url = OCGetResourceUri(handle);
951 EXPECT_STREQ("/a/led", url);
953 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
954 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
956 EXPECT_EQ(OC_STACK_OK, OCStop());
959 TEST(StackResource, StackTestResourceDiscoverManyResources)
961 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
962 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
963 InitStack(OC_SERVER);
965 OCResourceHandle handle1;
966 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
973 const char *url = OCGetResourceUri(handle1);
974 EXPECT_STREQ("/a/led1", url);
976 OCResourceHandle handle2;
977 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
983 OC_DISCOVERABLE|OC_OBSERVABLE));
984 url = OCGetResourceUri(handle2);
985 EXPECT_STREQ("/a/led2", url);
987 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
988 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
990 OCResourceHandle handle3;
991 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
997 OC_DISCOVERABLE|OC_OBSERVABLE));
998 url = OCGetResourceUri(handle3);
999 EXPECT_STREQ("/a/led3", url);
1001 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
1002 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
1004 OCResourceHandle handle4;
1005 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1012 url = OCGetResourceUri(handle4);
1013 EXPECT_STREQ("/a/led4", url);
1015 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
1016 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
1017 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
1019 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
1021 EXPECT_EQ(OC_STACK_OK, OCStop());
1024 TEST(StackBind, BindResourceTypeNameBad)
1026 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1027 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
1028 InitStack(OC_SERVER);
1030 OCResourceHandle handle;
1031 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1037 OC_DISCOVERABLE|OC_OBSERVABLE));
1039 uint8_t numResourceTypes;
1040 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1041 EXPECT_EQ(1, numResourceTypes);
1042 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1043 EXPECT_STREQ("core.led", resourceTypeName);
1045 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
1046 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.nameBad"));
1047 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.name bad"));
1049 EXPECT_EQ(OC_STACK_OK, OCStop());
1052 TEST(StackBind, BindResourceTypeNameGood)
1054 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1055 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
1056 InitStack(OC_SERVER);
1058 OCResourceHandle handle;
1059 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1065 OC_DISCOVERABLE|OC_OBSERVABLE));
1067 uint8_t numResourceTypes;
1068 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1069 EXPECT_EQ(1, numResourceTypes);
1070 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1071 EXPECT_STREQ("core.led", resourceTypeName);
1073 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1074 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1075 EXPECT_EQ(2, numResourceTypes);
1076 resourceTypeName = OCGetResourceTypeName(handle, 1);
1077 EXPECT_STREQ("core.brightled", resourceTypeName);
1079 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1080 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1081 EXPECT_EQ(3, numResourceTypes);
1082 resourceTypeName = OCGetResourceTypeName(handle, 2);
1083 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
1085 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "x.ReallyReallyBrightLED"));
1086 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1087 EXPECT_EQ(4, numResourceTypes);
1088 resourceTypeName = OCGetResourceTypeName(handle, 3);
1089 EXPECT_STREQ("x.ReallyReallyBrightLED", resourceTypeName);
1091 EXPECT_EQ(OC_STACK_OK, OCStop());
1094 TEST(StackBind, BindResourceTypeAttribRepGood)
1096 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1097 OIC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
1098 InitStack(OC_SERVER);
1100 OCResourceHandle handle;
1101 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1107 OC_DISCOVERABLE|OC_OBSERVABLE));
1109 uint8_t numResourceTypes;
1110 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1111 EXPECT_EQ(1, numResourceTypes);
1113 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1114 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1115 EXPECT_EQ(2, numResourceTypes);
1117 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1118 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1119 EXPECT_EQ(3, numResourceTypes);
1121 EXPECT_EQ(OC_STACK_OK, OCStop());
1125 TEST(StackBind, BindResourceInterfaceNameBad)
1127 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1128 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
1129 InitStack(OC_SERVER);
1131 OCResourceHandle handle;
1132 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1138 OC_DISCOVERABLE|OC_OBSERVABLE));
1140 uint8_t numResourceInterfaces;
1141 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1142 EXPECT_EQ(2, numResourceInterfaces);
1143 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1144 EXPECT_STREQ("core.rw", resourceInterfaceName);
1146 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
1148 EXPECT_EQ(OC_STACK_OK, OCStop());
1151 TEST(StackBind, BindResourceInterfaceNameGood)
1153 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1154 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
1155 InitStack(OC_SERVER);
1157 OCResourceHandle handle;
1158 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1164 OC_DISCOVERABLE|OC_OBSERVABLE));
1166 uint8_t numResourceInterfaces;
1167 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1168 EXPECT_EQ(2, numResourceInterfaces);
1169 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1170 EXPECT_STREQ("core.rw", resourceInterfaceName);
1172 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1174 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1175 EXPECT_EQ(3, numResourceInterfaces);
1176 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
1177 EXPECT_STREQ("core.r", resourceInterfaceName);
1179 EXPECT_EQ(OC_STACK_OK, OCStop());
1182 TEST(StackBind, BindResourceInterfaceMethodsBad)
1184 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1185 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
1186 InitStack(OC_SERVER);
1188 OCResourceHandle handle;
1189 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1195 OC_DISCOVERABLE|OC_OBSERVABLE));
1197 uint8_t numResourceInterfaces;
1198 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1199 EXPECT_EQ(2, numResourceInterfaces);
1201 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1203 EXPECT_EQ(OC_STACK_OK, OCStop());
1206 TEST(StackBind, BindResourceInterfaceMethodsGood)
1208 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1209 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
1210 InitStack(OC_SERVER);
1212 OCResourceHandle handle;
1213 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1219 OC_DISCOVERABLE|OC_OBSERVABLE));
1221 uint8_t numResourceInterfaces;
1222 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1223 EXPECT_EQ(2, numResourceInterfaces);
1225 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1227 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1228 EXPECT_EQ(3, numResourceInterfaces);
1230 EXPECT_EQ(OC_STACK_OK, OCStop());
1233 TEST(StackBind, BindContainedResourceBad)
1235 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1236 OIC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1237 InitStack(OC_SERVER);
1239 OCResourceHandle containerHandle;
1240 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1246 OC_DISCOVERABLE|OC_OBSERVABLE));
1248 OCResourceHandle handle0;
1249 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1255 OC_DISCOVERABLE|OC_OBSERVABLE));
1257 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1259 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1261 EXPECT_EQ(OC_STACK_OK, OCStop());
1264 TEST(StackBind, BindContainedResourceGood)
1266 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1267 OIC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1268 InitStack(OC_SERVER);
1270 uint8_t numResources = 0;
1271 uint8_t numExpectedResources = 0;
1273 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1275 OCResourceHandle containerHandle;
1276 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1282 OC_DISCOVERABLE|OC_OBSERVABLE));
1283 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1284 EXPECT_EQ(++numExpectedResources, numResources);
1286 OCResourceHandle handle0;
1287 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1293 OC_DISCOVERABLE|OC_OBSERVABLE));
1294 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1295 EXPECT_EQ(++numExpectedResources, numResources);
1297 OCResourceHandle handle1;
1298 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1304 OC_DISCOVERABLE|OC_OBSERVABLE));
1305 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1306 EXPECT_EQ(++numExpectedResources, numResources);
1308 OCResourceHandle handle2;
1309 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1315 OC_DISCOVERABLE|OC_OBSERVABLE));
1316 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1317 EXPECT_EQ(++numExpectedResources, numResources);
1319 OCResourceHandle handle3;
1320 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1326 OC_DISCOVERABLE|OC_OBSERVABLE));
1327 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1328 EXPECT_EQ(++numExpectedResources, numResources);
1330 OCResourceHandle handle4;
1331 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1337 OC_DISCOVERABLE|OC_OBSERVABLE));
1338 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1339 EXPECT_EQ(++numExpectedResources, numResources);
1341 OCResourceHandle handle5;
1342 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1348 OC_DISCOVERABLE|OC_OBSERVABLE));
1349 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1350 EXPECT_EQ(++numExpectedResources, numResources);
1353 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1354 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1355 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1356 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1357 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1358 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle5));
1360 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1361 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1362 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1363 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1364 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1365 EXPECT_EQ(handle5, OCGetResourceHandleFromCollection(containerHandle, 5));
1367 EXPECT_EQ(OC_STACK_OK, OCStop());
1371 TEST(StackBind, BindEntityHandlerBad)
1373 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1374 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1375 InitStack(OC_SERVER);
1377 OCResourceHandle handle;
1378 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1384 OC_DISCOVERABLE|OC_OBSERVABLE));
1386 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL, NULL));
1388 EXPECT_EQ(OC_STACK_OK, OCStop());
1391 TEST(StackBind, BindEntityHandlerGood)
1393 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1394 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1395 InitStack(OC_SERVER);
1397 OCResourceHandle handle;
1398 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1404 OC_DISCOVERABLE|OC_OBSERVABLE));
1406 OCEntityHandler myHandler = entityHandler;
1408 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler, NULL));
1410 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1412 EXPECT_EQ(OC_STACK_OK, OCStop());
1415 TEST(StackResourceAccess, GetResourceByIndex)
1417 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1418 OIC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1419 InitStack(OC_SERVER);
1421 uint8_t numResources = 0;
1422 uint8_t numExpectedResources = 0;
1423 uint8_t resourceIndex = 0;
1424 uint8_t prevResources = 0;
1425 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1426 prevResources = numExpectedResources;
1427 OCResourceHandle containerHandle;
1428 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1434 OC_DISCOVERABLE|OC_OBSERVABLE));
1435 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1436 EXPECT_EQ(++numExpectedResources, numResources);
1438 OCResourceHandle handle0;
1439 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1445 OC_DISCOVERABLE|OC_OBSERVABLE));
1446 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1447 EXPECT_EQ(++numExpectedResources, numResources);
1449 OCResourceHandle handle1;
1450 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1456 OC_DISCOVERABLE|OC_OBSERVABLE));
1457 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1458 EXPECT_EQ(++numExpectedResources, numResources);
1460 OCResourceHandle handle2;
1461 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1467 OC_DISCOVERABLE|OC_OBSERVABLE));
1468 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1469 EXPECT_EQ(++numExpectedResources, numResources);
1471 OCResourceHandle handle3;
1472 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1478 OC_DISCOVERABLE|OC_OBSERVABLE));
1479 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1480 EXPECT_EQ(++numExpectedResources, numResources);
1482 OCResourceHandle handle4;
1483 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1489 OC_DISCOVERABLE|OC_OBSERVABLE));
1490 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1491 EXPECT_EQ(++numExpectedResources, numResources);
1493 OCResourceHandle handle5;
1494 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1500 OC_DISCOVERABLE|OC_OBSERVABLE));
1501 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1502 EXPECT_EQ(++numExpectedResources, numResources);
1503 resourceIndex += prevResources;
1504 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1505 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1506 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1507 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1508 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1509 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1510 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1512 EXPECT_EQ(OC_STACK_OK, OCStop());
1515 TEST(StackResourceAccess, DeleteHeadResource)
1517 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1518 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1519 InitStack(OC_SERVER);
1521 uint8_t numResources = 0;
1522 uint8_t numExpectedResources = 0;
1524 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 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1538 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1539 EXPECT_EQ(--numExpectedResources, numResources);
1541 EXPECT_EQ(OC_STACK_OK, OCStop());
1544 TEST(StackResourceAccess, DeleteHeadResource2)
1546 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1547 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1548 InitStack(OC_SERVER);
1550 uint8_t numResources = 0;
1551 uint8_t numExpectedResources = 0;
1553 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1554 OCResourceHandle handle0;
1555 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1561 OC_DISCOVERABLE|OC_OBSERVABLE));
1562 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1563 EXPECT_EQ(++numExpectedResources, numResources);
1565 OCResourceHandle handle1;
1566 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1572 OC_DISCOVERABLE|OC_OBSERVABLE));
1573 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1574 EXPECT_EQ(++numExpectedResources, numResources);
1576 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1577 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1578 EXPECT_EQ(--numExpectedResources, numResources);
1580 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
1582 EXPECT_EQ(OC_STACK_OK, OCStop());
1586 TEST(StackResourceAccess, DeleteLastResource)
1588 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1589 OIC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1590 InitStack(OC_SERVER);
1592 uint8_t numResources = 0;
1593 uint8_t numExpectedResources = 0;
1595 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1597 OCResourceHandle handle0;
1598 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1604 OC_DISCOVERABLE|OC_OBSERVABLE));
1605 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1606 EXPECT_EQ(++numExpectedResources, numResources);
1608 OCResourceHandle handle1;
1609 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1615 OC_DISCOVERABLE|OC_OBSERVABLE));
1616 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1617 EXPECT_EQ(++numExpectedResources, numResources);
1619 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1620 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1621 EXPECT_EQ(--numExpectedResources, numResources);
1623 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
1625 OCResourceHandle handle2;
1626 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1632 OC_DISCOVERABLE|OC_OBSERVABLE));
1633 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1634 EXPECT_EQ(++numExpectedResources, numResources);
1636 EXPECT_EQ(OC_STACK_OK, OCStop());
1639 TEST(StackResourceAccess, DeleteMiddleResource)
1641 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1642 OIC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1643 InitStack(OC_SERVER);
1645 uint8_t numResources = 0;
1646 uint8_t numExpectedResources = 0;
1647 uint8_t resourceIndex = InitResourceIndex();
1649 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1650 resourceIndex = numExpectedResources;
1651 OCResourceHandle handle0;
1652 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1658 OC_DISCOVERABLE|OC_OBSERVABLE));
1659 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1660 EXPECT_EQ(++numExpectedResources, numResources);
1662 OCResourceHandle handle1;
1663 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1669 OC_DISCOVERABLE|OC_OBSERVABLE));
1670 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1671 EXPECT_EQ(++numExpectedResources, numResources);
1673 OCResourceHandle handle2;
1674 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1680 OC_DISCOVERABLE|OC_OBSERVABLE));
1681 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1682 EXPECT_EQ(++numExpectedResources, numResources);
1684 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1685 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1686 EXPECT_EQ(--numExpectedResources, numResources);
1688 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1689 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1691 // Make sure the resource elements are still correct
1692 uint8_t numResourceInterfaces;
1693 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1694 EXPECT_EQ(2, numResourceInterfaces);
1695 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 1);
1696 EXPECT_STREQ("core.rw", resourceInterfaceName);
1698 EXPECT_EQ(OC_STACK_OK, OCStop());
1701 // Visual Studio versions earlier than 2015 have bugs in is_pod and report the wrong answer.
1702 #if !defined(_MSC_VER) || (_MSC_VER >= 1900)
1703 TEST(PODTests, OCHeaderOption)
1705 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1708 TEST(PODTests, OCCallbackData)
1710 EXPECT_TRUE(std::is_pod<OCCallbackData>::value);
1714 TEST(OCDoDirectPairingTests, Nullpeer)
1716 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, NULL, pmSel, &pinNumber, &resultCallback));
1719 TEST(OCDoDirectPairingTests, NullCallback)
1721 EXPECT_EQ(OC_STACK_INVALID_CALLBACK,OCDoDirectPairing(NULL, &peer, pmSel, &pinNumber, NULL));
1724 TEST(OCDoDirectPairingTests, NullpinNumber)
1726 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, &peer, pmSel, NULL, &resultCallback));
1729 TEST(StackResource, MultipleResourcesDiscovery)
1731 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1732 OIC_LOG(INFO, TAG, "Starting MultipleResourcesDiscovery test");
1733 InitStack(OC_SERVER);
1735 OCResourceHandle handle1;
1736 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1742 OC_DISCOVERABLE|OC_OBSERVABLE));
1744 OCResourceHandle handle2;
1745 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1751 OC_DISCOVERABLE|OC_OBSERVABLE));
1752 OCResourceHandle handle3;
1753 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1759 OC_DISCOVERABLE|OC_OBSERVABLE));
1760 /* Start a discovery query*/
1761 char szQueryUri[256] = "/oic/res?if=oic.if.ll";
1762 OCCallbackData cbData;
1763 cbData.cb = discoveryCallback;
1764 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
1768 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
1779 EXPECT_EQ(OC_STACK_OK, OCStop());
1782 TEST(StackPayload, CloneByteString)
1784 uint8_t bytes[] = { 0, 1, 2, 3 };
1785 OCByteString byteString;
1786 byteString.bytes = bytes;
1787 byteString.len = sizeof(bytes);
1789 OCRepPayload *original = OCRepPayloadCreate();
1790 ASSERT_TRUE(original != NULL);
1791 EXPECT_TRUE(OCRepPayloadSetPropByteString(original, "name", byteString));
1793 OCRepPayload *clone = OCRepPayloadClone(original);
1794 ASSERT_TRUE(clone != NULL);
1796 OCRepPayloadDestroy(original);
1798 OCByteString cloneByteString;
1799 EXPECT_TRUE(OCRepPayloadGetPropByteString(clone, "name", &cloneByteString));
1800 ASSERT_TRUE(cloneByteString.bytes != NULL);
1801 EXPECT_EQ(sizeof(bytes), cloneByteString.len);
1802 EXPECT_TRUE(0 == memcmp(bytes, cloneByteString.bytes, sizeof(bytes)));
1803 OICFree(cloneByteString.bytes);
1805 OCRepPayloadDestroy(clone);
1808 TEST(StackUri, Rfc6874_Noop_1)
1810 char validIPv6Address[] = "FF01:0:0:0:0:0:0:FB";
1811 char bytes[100] = {0};
1812 strncpy(bytes, validIPv6Address, sizeof(bytes));
1814 OCStackResult result = encodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
1816 // No % sign, should do nothing
1817 EXPECT_STREQ(bytes, validIPv6Address);
1818 EXPECT_EQ(OC_STACK_OK, result);
1821 TEST(StackUri, Rfc6874_Noop_2)
1823 char validIPv6Address[] = "3812:a61::4:1";
1824 char bytes[100] = {0};
1826 OCStackResult result = encodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
1828 // No % sign, should do nothing
1829 EXPECT_STREQ(bytes, validIPv6Address);
1830 EXPECT_EQ(OC_STACK_OK, result);
1833 TEST(StackUri, Rfc6874_WithEncoding)
1835 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%wlan0";
1836 char validIPv6AddressEncoded[] = "fe80::dafe:e3ff:fe00:ebfa%25wlan0";
1837 char bytes[100] = "";
1838 strncpy(bytes, validIPv6Address, sizeof(bytes));
1840 OCStackResult result = encodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
1842 // Encoding should have occured
1843 EXPECT_STREQ(bytes, validIPv6AddressEncoded);
1844 EXPECT_EQ(OC_STACK_OK, result);
1847 TEST(StackUri, Rfc6874_WithEncoding_ExtraPercent)
1849 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%%wlan0";
1850 char bytes[100] = {0};
1852 OCStackResult result = encodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
1854 // Encoding should have failed due to extra '%' character
1855 EXPECT_STREQ(bytes, "");
1856 EXPECT_EQ(OC_STACK_ERROR, result);
1859 TEST(StackUri, Rfc6874_AlreadyEncoded)
1861 char validIPv6AddressEncoded[] = "fe80::dafe:e3ff:fe00:ebfa%25wlan0";
1862 char bytes[100] = {0};
1864 OCStackResult result = encodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6AddressEncoded);
1866 // Encoding should have failed due to extra '%' character
1867 EXPECT_STREQ(bytes, "");
1868 EXPECT_EQ(OC_STACK_ERROR, result);
1871 TEST(StackUri, Rfc6874_NoOverflow)
1873 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%wlan0";
1874 char addrBuffer[100];
1875 char bytes[100] = {0};
1876 memset(addrBuffer, sizeof(addrBuffer), '_');
1878 // Just enough room to encode
1879 addrBuffer[sizeof(addrBuffer) - sizeof(validIPv6Address) - 3] = '\0';
1880 strcat(addrBuffer, validIPv6Address);
1882 OCStackResult result = encodeAddressForRFC6874(bytes, sizeof(bytes), addrBuffer);
1884 // Encoding should have succeeded
1885 EXPECT_EQ(OC_STACK_OK, result);
1888 TEST(StackUri, Rfc6874_NoOverflow_2)
1890 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%wlan0";
1891 char addrBuffer[100];
1892 char bytes[100] = {0};
1893 memset(addrBuffer, sizeof(addrBuffer), '_');
1895 // Not enough room to encode
1896 addrBuffer[sizeof(addrBuffer) - sizeof(validIPv6Address) - 1] = '\0';
1897 strcat(addrBuffer, validIPv6Address);
1899 OCStackResult result = encodeAddressForRFC6874(bytes, sizeof(bytes), addrBuffer);
1901 // Encoding should have failed due to output size limitations
1902 EXPECT_STREQ(bytes, "");
1903 EXPECT_EQ(OC_STACK_ERROR, result);