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[MAX_QUERY_LENGTH] = { 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[MAX_QUERY_LENGTH] = { 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 255));// 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));
902 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE|OC_MQ_PUBLISHER, OCGetResourceProperties(handle));
904 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
906 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
908 EXPECT_EQ(OC_STACK_OK, OCStop());
911 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
913 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
914 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
915 InitStack(OC_SERVER);
916 uint8_t numResources = 0;
917 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
919 OCResourceHandle handle;
920 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
926 OC_DISCOVERABLE|OC_OBSERVABLE));
927 const char *url = OCGetResourceUri(handle);
928 EXPECT_STREQ("/a1/led", url);
930 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
931 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
932 uint8_t numExpectedResources = 0;
934 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
935 EXPECT_EQ(numExpectedResources, numResources);
937 EXPECT_EQ(OC_STACK_OK, OCStop());
940 TEST(StackResource, StackTestResourceDiscoverOneResource)
942 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
943 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
944 InitStack(OC_SERVER);
946 OCResourceHandle handle;
947 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
953 OC_DISCOVERABLE|OC_OBSERVABLE));
954 const char *url = OCGetResourceUri(handle);
955 EXPECT_STREQ("/a/led", url);
957 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
958 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
960 EXPECT_EQ(OC_STACK_OK, OCStop());
963 TEST(StackResource, StackTestResourceDiscoverManyResources)
965 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
966 OIC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
967 InitStack(OC_SERVER);
969 OCResourceHandle handle1;
970 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
977 const char *url = OCGetResourceUri(handle1);
978 EXPECT_STREQ("/a/led1", url);
980 OCResourceHandle handle2;
981 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
987 OC_DISCOVERABLE|OC_OBSERVABLE));
988 url = OCGetResourceUri(handle2);
989 EXPECT_STREQ("/a/led2", url);
991 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
992 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
994 OCResourceHandle handle3;
995 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1001 OC_DISCOVERABLE|OC_OBSERVABLE));
1002 url = OCGetResourceUri(handle3);
1003 EXPECT_STREQ("/a/led3", url);
1005 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
1006 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
1008 OCResourceHandle handle4;
1009 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1016 url = OCGetResourceUri(handle4);
1017 EXPECT_STREQ("/a/led4", url);
1019 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
1020 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
1021 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
1023 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
1025 EXPECT_EQ(OC_STACK_OK, OCStop());
1028 TEST(StackBind, BindResourceTypeNameBad)
1030 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1031 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
1032 InitStack(OC_SERVER);
1034 OCResourceHandle handle;
1035 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1041 OC_DISCOVERABLE|OC_OBSERVABLE));
1043 uint8_t numResourceTypes;
1044 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1045 EXPECT_EQ(1, numResourceTypes);
1046 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1047 EXPECT_STREQ("core.led", resourceTypeName);
1049 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
1050 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.nameBad"));
1051 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, "core.name bad"));
1053 EXPECT_EQ(OC_STACK_OK, OCStop());
1056 TEST(StackBind, BindResourceTypeNameGood)
1058 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1059 OIC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
1060 InitStack(OC_SERVER);
1062 OCResourceHandle handle;
1063 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1069 OC_DISCOVERABLE|OC_OBSERVABLE));
1071 uint8_t numResourceTypes;
1072 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1073 EXPECT_EQ(1, numResourceTypes);
1074 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1075 EXPECT_STREQ("core.led", resourceTypeName);
1077 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1078 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1079 EXPECT_EQ(2, numResourceTypes);
1080 resourceTypeName = OCGetResourceTypeName(handle, 1);
1081 EXPECT_STREQ("core.brightled", resourceTypeName);
1083 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1084 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1085 EXPECT_EQ(3, numResourceTypes);
1086 resourceTypeName = OCGetResourceTypeName(handle, 2);
1087 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
1089 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "x.ReallyReallyBrightLED"));
1090 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1091 EXPECT_EQ(4, numResourceTypes);
1092 resourceTypeName = OCGetResourceTypeName(handle, 3);
1093 EXPECT_STREQ("x.ReallyReallyBrightLED", resourceTypeName);
1095 EXPECT_EQ(OC_STACK_OK, OCStop());
1098 TEST(StackBind, BindResourceTypeAttribRepGood)
1100 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1101 OIC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
1102 InitStack(OC_SERVER);
1104 OCResourceHandle handle;
1105 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1111 OC_DISCOVERABLE|OC_OBSERVABLE));
1113 uint8_t numResourceTypes;
1114 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1115 EXPECT_EQ(1, numResourceTypes);
1117 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1118 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1119 EXPECT_EQ(2, numResourceTypes);
1121 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1122 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1123 EXPECT_EQ(3, numResourceTypes);
1125 EXPECT_EQ(OC_STACK_OK, OCStop());
1129 TEST(StackBind, BindResourceInterfaceNameBad)
1131 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1132 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
1133 InitStack(OC_SERVER);
1135 OCResourceHandle handle;
1136 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1142 OC_DISCOVERABLE|OC_OBSERVABLE));
1144 uint8_t numResourceInterfaces;
1145 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1146 EXPECT_EQ(2, numResourceInterfaces);
1147 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1148 EXPECT_STREQ("core.rw", resourceInterfaceName);
1150 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
1152 EXPECT_EQ(OC_STACK_OK, OCStop());
1155 TEST(StackBind, BindResourceInterfaceNameGood)
1157 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1158 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
1159 InitStack(OC_SERVER);
1161 OCResourceHandle handle;
1162 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1168 OC_DISCOVERABLE|OC_OBSERVABLE));
1170 uint8_t numResourceInterfaces;
1171 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1172 EXPECT_EQ(2, numResourceInterfaces);
1173 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1174 EXPECT_STREQ("core.rw", resourceInterfaceName);
1176 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1178 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1179 EXPECT_EQ(3, numResourceInterfaces);
1180 resourceInterfaceName = OCGetResourceInterfaceName(handle, 2);
1181 EXPECT_STREQ("core.r", resourceInterfaceName);
1183 EXPECT_EQ(OC_STACK_OK, OCStop());
1186 TEST(StackBind, BindResourceInterfaceMethodsBad)
1188 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1189 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
1190 InitStack(OC_SERVER);
1192 OCResourceHandle handle;
1193 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1199 OC_DISCOVERABLE|OC_OBSERVABLE));
1201 uint8_t numResourceInterfaces;
1202 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1203 EXPECT_EQ(2, numResourceInterfaces);
1205 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1207 EXPECT_EQ(OC_STACK_OK, OCStop());
1210 TEST(StackBind, BindResourceInterfaceMethodsGood)
1212 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1213 OIC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
1214 InitStack(OC_SERVER);
1216 OCResourceHandle handle;
1217 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1223 OC_DISCOVERABLE|OC_OBSERVABLE));
1225 uint8_t numResourceInterfaces;
1226 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1227 EXPECT_EQ(2, numResourceInterfaces);
1229 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1231 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1232 EXPECT_EQ(3, numResourceInterfaces);
1234 EXPECT_EQ(OC_STACK_OK, OCStop());
1237 TEST(StackBind, BindContainedResourceBad)
1239 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1240 OIC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1241 InitStack(OC_SERVER);
1243 OCResourceHandle containerHandle;
1244 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1250 OC_DISCOVERABLE|OC_OBSERVABLE));
1252 OCResourceHandle handle0;
1253 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1259 OC_DISCOVERABLE|OC_OBSERVABLE));
1261 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1263 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1265 EXPECT_EQ(OC_STACK_OK, OCStop());
1268 TEST(StackBind, BindContainedResourceGood)
1270 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1271 OIC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1272 InitStack(OC_SERVER);
1274 uint8_t numResources = 0;
1275 uint8_t numExpectedResources = 0;
1277 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1279 OCResourceHandle containerHandle;
1280 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1286 OC_DISCOVERABLE|OC_OBSERVABLE));
1287 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1288 EXPECT_EQ(++numExpectedResources, numResources);
1290 OCResourceHandle handle0;
1291 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1297 OC_DISCOVERABLE|OC_OBSERVABLE));
1298 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1299 EXPECT_EQ(++numExpectedResources, numResources);
1301 OCResourceHandle handle1;
1302 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1308 OC_DISCOVERABLE|OC_OBSERVABLE));
1309 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1310 EXPECT_EQ(++numExpectedResources, numResources);
1312 OCResourceHandle handle2;
1313 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1319 OC_DISCOVERABLE|OC_OBSERVABLE));
1320 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1321 EXPECT_EQ(++numExpectedResources, numResources);
1323 OCResourceHandle handle3;
1324 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1330 OC_DISCOVERABLE|OC_OBSERVABLE));
1331 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1332 EXPECT_EQ(++numExpectedResources, numResources);
1334 OCResourceHandle handle4;
1335 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1341 OC_DISCOVERABLE|OC_OBSERVABLE));
1342 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1343 EXPECT_EQ(++numExpectedResources, numResources);
1345 OCResourceHandle handle5;
1346 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1352 OC_DISCOVERABLE|OC_OBSERVABLE));
1353 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1354 EXPECT_EQ(++numExpectedResources, numResources);
1357 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1358 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1359 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1360 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1361 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1362 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle5));
1364 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1365 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1366 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1367 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1368 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1369 EXPECT_EQ(handle5, OCGetResourceHandleFromCollection(containerHandle, 5));
1371 EXPECT_EQ(OC_STACK_OK, OCStop());
1375 TEST(StackBind, BindEntityHandlerBad)
1377 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1378 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1379 InitStack(OC_SERVER);
1381 OCResourceHandle handle;
1382 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1388 OC_DISCOVERABLE|OC_OBSERVABLE));
1390 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL, NULL));
1392 EXPECT_EQ(OC_STACK_OK, OCStop());
1395 TEST(StackBind, BindEntityHandlerGood)
1397 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1398 OIC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1399 InitStack(OC_SERVER);
1401 OCResourceHandle handle;
1402 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1408 OC_DISCOVERABLE|OC_OBSERVABLE));
1410 OCEntityHandler myHandler = entityHandler;
1412 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler, NULL));
1414 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1416 EXPECT_EQ(OC_STACK_OK, OCStop());
1419 TEST(StackResourceAccess, GetResourceByIndex)
1421 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1422 OIC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1423 InitStack(OC_SERVER);
1425 uint8_t numResources = 0;
1426 uint8_t numExpectedResources = 0;
1427 uint8_t resourceIndex = 0;
1428 uint8_t prevResources = 0;
1429 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1430 prevResources = numExpectedResources;
1431 OCResourceHandle containerHandle;
1432 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1438 OC_DISCOVERABLE|OC_OBSERVABLE));
1439 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1440 EXPECT_EQ(++numExpectedResources, numResources);
1442 OCResourceHandle handle0;
1443 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1449 OC_DISCOVERABLE|OC_OBSERVABLE));
1450 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1451 EXPECT_EQ(++numExpectedResources, numResources);
1453 OCResourceHandle handle1;
1454 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1460 OC_DISCOVERABLE|OC_OBSERVABLE));
1461 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1462 EXPECT_EQ(++numExpectedResources, numResources);
1464 OCResourceHandle handle2;
1465 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1471 OC_DISCOVERABLE|OC_OBSERVABLE));
1472 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1473 EXPECT_EQ(++numExpectedResources, numResources);
1475 OCResourceHandle handle3;
1476 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1482 OC_DISCOVERABLE|OC_OBSERVABLE));
1483 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1484 EXPECT_EQ(++numExpectedResources, numResources);
1486 OCResourceHandle handle4;
1487 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1493 OC_DISCOVERABLE|OC_OBSERVABLE));
1494 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1495 EXPECT_EQ(++numExpectedResources, numResources);
1497 OCResourceHandle handle5;
1498 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1504 OC_DISCOVERABLE|OC_OBSERVABLE));
1505 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1506 EXPECT_EQ(++numExpectedResources, numResources);
1507 resourceIndex += prevResources;
1508 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1509 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1510 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1511 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1512 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1513 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1514 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1516 EXPECT_EQ(OC_STACK_OK, OCStop());
1519 TEST(StackResourceAccess, DeleteHeadResource)
1521 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1522 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1523 InitStack(OC_SERVER);
1525 uint8_t numResources = 0;
1526 uint8_t numExpectedResources = 0;
1528 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1530 OCResourceHandle handle0;
1531 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1537 OC_DISCOVERABLE|OC_OBSERVABLE));
1538 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1539 EXPECT_EQ(++numExpectedResources, numResources);
1541 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1542 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1543 EXPECT_EQ(--numExpectedResources, numResources);
1545 EXPECT_EQ(OC_STACK_OK, OCStop());
1548 TEST(StackResourceAccess, DeleteHeadResource2)
1550 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1551 OIC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1552 InitStack(OC_SERVER);
1554 uint8_t numResources = 0;
1555 uint8_t numExpectedResources = 0;
1557 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1558 OCResourceHandle handle0;
1559 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1565 OC_DISCOVERABLE|OC_OBSERVABLE));
1566 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1567 EXPECT_EQ(++numExpectedResources, numResources);
1569 OCResourceHandle handle1;
1570 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1576 OC_DISCOVERABLE|OC_OBSERVABLE));
1577 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1578 EXPECT_EQ(++numExpectedResources, numResources);
1580 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1581 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1582 EXPECT_EQ(--numExpectedResources, numResources);
1584 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
1586 EXPECT_EQ(OC_STACK_OK, OCStop());
1590 TEST(StackResourceAccess, DeleteLastResource)
1592 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1593 OIC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1594 InitStack(OC_SERVER);
1596 uint8_t numResources = 0;
1597 uint8_t numExpectedResources = 0;
1599 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1601 OCResourceHandle handle0;
1602 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1608 OC_DISCOVERABLE|OC_OBSERVABLE));
1609 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1610 EXPECT_EQ(++numExpectedResources, numResources);
1612 OCResourceHandle handle1;
1613 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1619 OC_DISCOVERABLE|OC_OBSERVABLE));
1620 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1621 EXPECT_EQ(++numExpectedResources, numResources);
1623 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1624 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1625 EXPECT_EQ(--numExpectedResources, numResources);
1627 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
1629 OCResourceHandle handle2;
1630 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1636 OC_DISCOVERABLE|OC_OBSERVABLE));
1637 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1638 EXPECT_EQ(++numExpectedResources, numResources);
1640 EXPECT_EQ(OC_STACK_OK, OCStop());
1643 TEST(StackResourceAccess, DeleteMiddleResource)
1645 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1646 OIC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1647 InitStack(OC_SERVER);
1649 uint8_t numResources = 0;
1650 uint8_t numExpectedResources = 0;
1651 uint8_t resourceIndex = InitResourceIndex();
1653 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1654 resourceIndex = numExpectedResources;
1655 OCResourceHandle handle0;
1656 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1662 OC_DISCOVERABLE|OC_OBSERVABLE));
1663 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1664 EXPECT_EQ(++numExpectedResources, numResources);
1666 OCResourceHandle handle1;
1667 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1673 OC_DISCOVERABLE|OC_OBSERVABLE));
1674 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1675 EXPECT_EQ(++numExpectedResources, numResources);
1677 OCResourceHandle handle2;
1678 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1684 OC_DISCOVERABLE|OC_OBSERVABLE));
1685 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1686 EXPECT_EQ(++numExpectedResources, numResources);
1688 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1689 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1690 EXPECT_EQ(--numExpectedResources, numResources);
1692 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1693 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1695 // Make sure the resource elements are still correct
1696 uint8_t numResourceInterfaces;
1697 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1698 EXPECT_EQ(2, numResourceInterfaces);
1699 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 1);
1700 EXPECT_STREQ("core.rw", resourceInterfaceName);
1702 EXPECT_EQ(OC_STACK_OK, OCStop());
1705 // Visual Studio versions earlier than 2015 have bugs in is_pod and report the wrong answer.
1706 #if !defined(_MSC_VER) || (_MSC_VER >= 1900)
1707 TEST(PODTests, OCHeaderOption)
1709 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1712 TEST(PODTests, OCCallbackData)
1714 EXPECT_TRUE(std::is_pod<OCCallbackData>::value);
1718 TEST(OCDoDirectPairingTests, Nullpeer)
1720 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, NULL, pmSel, &pinNumber, &resultCallback));
1723 TEST(OCDoDirectPairingTests, NullCallback)
1725 EXPECT_EQ(OC_STACK_INVALID_CALLBACK,OCDoDirectPairing(NULL, &peer, pmSel, &pinNumber, NULL));
1728 TEST(OCDoDirectPairingTests, NullpinNumber)
1730 EXPECT_EQ(OC_STACK_INVALID_PARAM,OCDoDirectPairing(NULL, &peer, pmSel, NULL, &resultCallback));
1733 TEST(StackResource, MultipleResourcesDiscovery)
1735 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1736 OIC_LOG(INFO, TAG, "Starting MultipleResourcesDiscovery test");
1737 InitStack(OC_SERVER);
1739 OCResourceHandle handle1;
1740 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1746 OC_DISCOVERABLE|OC_OBSERVABLE));
1748 OCResourceHandle handle2;
1749 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1755 OC_DISCOVERABLE|OC_OBSERVABLE));
1756 OCResourceHandle handle3;
1757 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1763 OC_DISCOVERABLE|OC_OBSERVABLE));
1764 /* Start a discovery query*/
1765 char szQueryUri[MAX_QUERY_LENGTH] = "/oic/res?if=oic.if.ll";
1766 OCCallbackData cbData;
1767 cbData.cb = discoveryCallback;
1768 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
1772 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
1783 EXPECT_EQ(OC_STACK_OK, OCStop());
1786 TEST(StackPayload, CloneByteString)
1788 uint8_t bytes[] = { 0, 1, 2, 3 };
1789 OCByteString byteString;
1790 byteString.bytes = bytes;
1791 byteString.len = sizeof(bytes);
1793 OCRepPayload *original = OCRepPayloadCreate();
1794 ASSERT_TRUE(original != NULL);
1795 EXPECT_TRUE(OCRepPayloadSetPropByteString(original, "name", byteString));
1797 OCRepPayload *clone = OCRepPayloadClone(original);
1798 ASSERT_TRUE(clone != NULL);
1800 OCRepPayloadDestroy(original);
1802 OCByteString cloneByteString;
1803 EXPECT_TRUE(OCRepPayloadGetPropByteString(clone, "name", &cloneByteString));
1804 ASSERT_TRUE(cloneByteString.bytes != NULL);
1805 EXPECT_EQ(sizeof(bytes), cloneByteString.len);
1806 EXPECT_TRUE(0 == memcmp(bytes, cloneByteString.bytes, sizeof(bytes)));
1807 OICFree(cloneByteString.bytes);
1809 OCRepPayloadDestroy(clone);
1812 TEST(StackUri, Rfc6874_Noop_1)
1814 char validIPv6Address[] = "FF01:0:0:0:0:0:0:FB";
1815 char bytes[100] = {0};
1816 strncpy(bytes, validIPv6Address, sizeof(bytes));
1818 OCStackResult result = encodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
1820 // No % sign, should do nothing
1821 EXPECT_STREQ(bytes, validIPv6Address);
1822 EXPECT_EQ(OC_STACK_OK, result);
1825 TEST(StackUri, Rfc6874_Noop_2)
1827 char validIPv6Address[] = "3812:a61::4:1";
1828 char bytes[100] = {0};
1830 OCStackResult result = encodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
1832 // No % sign, should do nothing
1833 EXPECT_STREQ(bytes, validIPv6Address);
1834 EXPECT_EQ(OC_STACK_OK, result);
1837 TEST(StackUri, Rfc6874_WithEncoding)
1839 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%wlan0";
1840 char validIPv6AddressEncoded[] = "fe80::dafe:e3ff:fe00:ebfa%25wlan0";
1841 char bytes[100] = "";
1842 strncpy(bytes, validIPv6Address, sizeof(bytes));
1844 OCStackResult result = encodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
1846 // Encoding should have occured
1847 EXPECT_STREQ(bytes, validIPv6AddressEncoded);
1848 EXPECT_EQ(OC_STACK_OK, result);
1851 TEST(StackUri, Rfc6874_WithEncoding_ExtraPercent)
1853 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%%wlan0";
1854 char bytes[100] = {0};
1856 OCStackResult result = encodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6Address);
1858 // Encoding should have failed due to extra '%' character
1859 EXPECT_STREQ(bytes, "");
1860 EXPECT_EQ(OC_STACK_ERROR, result);
1863 TEST(StackUri, Rfc6874_AlreadyEncoded)
1865 char validIPv6AddressEncoded[] = "fe80::dafe:e3ff:fe00:ebfa%25wlan0";
1866 char bytes[100] = {0};
1868 OCStackResult result = encodeAddressForRFC6874(bytes, sizeof(bytes), validIPv6AddressEncoded);
1870 // Encoding should have failed due to extra '%' character
1871 EXPECT_STREQ(bytes, "");
1872 EXPECT_EQ(OC_STACK_ERROR, result);
1875 TEST(StackUri, Rfc6874_NoOverflow)
1877 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%wlan0";
1878 char addrBuffer[100];
1879 char bytes[100] = {0};
1880 memset(addrBuffer, sizeof(addrBuffer), '_');
1882 // Just enough room to encode
1883 addrBuffer[sizeof(addrBuffer) - sizeof(validIPv6Address) - 3] = '\0';
1884 strcat(addrBuffer, validIPv6Address);
1886 OCStackResult result = encodeAddressForRFC6874(bytes, sizeof(bytes), addrBuffer);
1888 // Encoding should have succeeded
1889 EXPECT_EQ(OC_STACK_OK, result);
1892 TEST(StackUri, Rfc6874_NoOverflow_2)
1894 char validIPv6Address[] = "fe80::dafe:e3ff:fe00:ebfa%wlan0";
1895 char addrBuffer[100];
1896 char bytes[100] = {0};
1897 memset(addrBuffer, sizeof(addrBuffer), '_');
1899 // Not enough room to encode
1900 addrBuffer[sizeof(addrBuffer) - sizeof(validIPv6Address) - 1] = '\0';
1901 strcat(addrBuffer, validIPv6Address);
1903 OCStackResult result = encodeAddressForRFC6874(bytes, sizeof(bytes), addrBuffer);
1905 // Encoding should have failed due to output size limitations
1906 EXPECT_STREQ(bytes, "");
1907 EXPECT_EQ(OC_STACK_ERROR, result);