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 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
29 #include "gtest/gtest.h"
30 #include <sys/types.h>
37 //-----------------------------------------------------------------------------
39 //-----------------------------------------------------------------------------
46 #include "gtest_helper.h"
50 namespace itst = iotivity::test;
52 #define DEFAULT_CONTEXT_VALUE 0x99
54 //-----------------------------------------------------------------------------
56 //-----------------------------------------------------------------------------
57 static const char TAG[] = "TestHarness";
59 std::chrono::seconds const SHORT_TEST_TIMEOUT = std::chrono::seconds(5);
61 //-----------------------------------------------------------------------------
63 //-----------------------------------------------------------------------------
64 extern "C" OCStackApplicationResult asyncDoResourcesCallback(void* ctx, OCDoHandle handle, OCClientResponse * clientResponse)
66 OC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
68 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
70 if(ctx == (void*)DEFAULT_CONTEXT_VALUE) {
71 OC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
73 OC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
75 return OC_STACK_KEEP_TRANSACTION;
78 //-----------------------------------------------------------------------------
80 //-----------------------------------------------------------------------------
81 OCEntityHandlerResult entityHandler(OCEntityHandlerFlag flag, OCEntityHandlerRequest * entityHandlerRequest)
83 OC_LOG(INFO, TAG, "Entering entityHandler");
88 //-----------------------------------------------------------------------------
90 //-----------------------------------------------------------------------------
91 void InitStack(OCMode mode)
93 OC_LOG(INFO, TAG, "Entering InitStack");
95 EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, mode));
96 OC_LOG(INFO, TAG, "Leaving InitStack");
99 uint8_t InitNumExpectedResources()
102 // When presence is enabled, it is a resource and so is (currently) included
103 // in the returned resource count returned by the OCGetNumberOfResources API.
110 uint8_t InitResourceIndex()
113 // When presence is enabled, it is a resource and so is (currently) included
114 // in the returned resource count returned by the OCGetNumberOfResources API.
115 // The index of the presence resource is 0, so the first user app resource index
122 //-----------------------------------------------------------------------------
124 //-----------------------------------------------------------------------------
126 TEST(StackInit, StackInitNullAddr)
128 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
129 EXPECT_EQ(OC_STACK_OK, OCInit(0, 5683, OC_SERVER));
130 EXPECT_EQ(OC_STACK_OK, OCStop());
133 TEST(StackInit, StackInitNullPort)
135 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
136 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 0, OC_SERVER));
137 EXPECT_EQ(OC_STACK_OK, OCStop());
140 TEST(StackInit, StackInitNullAddrAndPort)
142 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
143 EXPECT_EQ(OC_STACK_OK, OCInit(0, 0, OC_SERVER));
144 EXPECT_EQ(OC_STACK_OK, OCStop());
147 TEST(StackInit, StackInitInvalidMode)
149 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
150 EXPECT_EQ(OC_STACK_ERROR, OCInit(0, 0, (OCMode)10));
151 EXPECT_EQ(OC_STACK_ERROR, OCStop());
154 TEST(StackStart, StackStartSuccessClient)
156 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
157 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
158 EXPECT_EQ(OC_STACK_OK, OCStop());
161 TEST(StackStart, StackStartSuccessServer)
163 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
164 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
165 EXPECT_EQ(OC_STACK_OK, OCStop());
168 TEST(StackStart, StackStartSuccessClientServer)
170 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
171 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT_SERVER));
172 EXPECT_EQ(OC_STACK_OK, OCStop());
175 TEST(StackStart, StackStartSuccessiveInits)
177 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
178 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
179 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.2", 5683, OC_SERVER));
180 EXPECT_EQ(OC_STACK_OK, OCStop());
183 TEST(StackDiscovery, DISABLED_DoResourceDeviceDiscovery)
185 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
186 OCCallbackData cbData;
189 OC_LOG(INFO, TAG, "Starting DoResourceDeviceDiscovery test ");
190 InitStack(OC_CLIENT);
192 /* Start a discovery query*/
193 char szQueryUri[64] = { 0 };
194 strcpy(szQueryUri, OC_WELL_KNOWN_QUERY);
195 cbData.cb = asyncDoResourcesCallback;
196 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
198 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
208 EXPECT_EQ(OC_STACK_OK, OCStop());
211 TEST(StackStop, StackStopWithoutInit)
213 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
214 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
215 EXPECT_EQ(OC_STACK_OK, OCStop());
216 EXPECT_EQ(OC_STACK_ERROR, OCStop());
219 TEST(StackResource, DISABLED_UpdateResourceNullURI)
221 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
222 OCCallbackData cbData;
225 OC_LOG(INFO, TAG, "Starting UpdateResourceNullURI test");
226 InitStack(OC_CLIENT);
228 /* Start a discovery query*/
229 char szQueryUri[64] = { 0 };
230 strcpy(szQueryUri, OC_WELL_KNOWN_QUERY);
231 cbData.cb = asyncDoResourcesCallback;
232 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
234 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
244 EXPECT_EQ(OC_STACK_OK, OCStop());
247 TEST(StackResource, CreateResourceBadParams)
249 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
250 OC_LOG(INFO, TAG, "Starting CreateResourceBadParams test");
251 InitStack(OC_SERVER);
253 OCResourceHandle handle;
255 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(NULL, //&handle,
260 OC_DISCOVERABLE|OC_OBSERVABLE));
262 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
267 OC_DISCOVERABLE|OC_OBSERVABLE));
269 // Property bitmask out of range
270 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
275 128));// invalid bitmask for OCResourceProperty
277 EXPECT_EQ(OC_STACK_OK, OCStop());
281 TEST(StackResource, CreateResourceSuccess)
283 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
284 OC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
285 InitStack(OC_SERVER);
287 OCResourceHandle handle;
288 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
293 OC_DISCOVERABLE|OC_OBSERVABLE));
294 const char *url = OCGetResourceUri(handle);
295 EXPECT_STREQ("/a/led", url);
297 EXPECT_EQ(OC_STACK_OK, OCStop());
300 TEST(StackResource, CreateResourceFailDuplicateUri)
302 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
303 OC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
304 InitStack(OC_SERVER);
306 OCResourceHandle handle;
307 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
312 OC_DISCOVERABLE|OC_OBSERVABLE));
313 const char *url = OCGetResourceUri(handle);
314 EXPECT_STREQ("/a/led", url);
316 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
321 OC_DISCOVERABLE|OC_OBSERVABLE));
323 EXPECT_EQ(OC_STACK_OK, OCStop());
326 TEST(StackResource, CreateResourceMultipleResources)
328 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
329 OC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
330 InitStack(OC_SERVER);
332 OCResourceHandle handle1;
333 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
338 OC_DISCOVERABLE|OC_OBSERVABLE));
340 OCResourceHandle handle2;
341 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
346 OC_DISCOVERABLE|OC_OBSERVABLE));
347 OCResourceHandle handle3;
348 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
353 OC_DISCOVERABLE|OC_OBSERVABLE));
355 const char *url = OCGetResourceUri(handle1);
356 EXPECT_STREQ("/a/led1", url);
358 url = OCGetResourceUri(handle2);
359 EXPECT_STREQ("/a/led2", url);
361 url = OCGetResourceUri(handle3);
362 EXPECT_STREQ("/a/led3", url);
364 EXPECT_EQ(OC_STACK_OK, OCStop());
367 TEST(StackResource, CreateResourceBadResoureType)
369 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
370 OC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
371 InitStack(OC_SERVER);
373 OCResourceHandle handle;
374 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
379 OC_DISCOVERABLE|OC_OBSERVABLE));
381 EXPECT_EQ(OC_STACK_OK, OCStop());
384 TEST(StackResource, CreateResourceGoodResourceType)
386 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
387 OC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
388 InitStack(OC_SERVER);
390 OCResourceHandle handle;
391 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
396 OC_DISCOVERABLE|OC_OBSERVABLE));
398 EXPECT_EQ(OC_STACK_OK, OCStop());
401 TEST(StackResource, ResourceTypeName)
403 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
404 OC_LOG(INFO, TAG, "Starting ResourceTypeName test");
405 InitStack(OC_SERVER);
407 OCResourceHandle handle;
408 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
413 OC_DISCOVERABLE|OC_OBSERVABLE));
415 uint8_t numResourceTypes;
416 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
417 EXPECT_EQ(1, numResourceTypes);
418 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
419 EXPECT_STREQ("core.led", resourceTypeName);
421 // try getting resource type names with an invalid index
422 resourceTypeName = OCGetResourceTypeName(handle, 1);
423 EXPECT_STREQ(NULL, resourceTypeName);
424 // try getting resource type names with an invalid index
425 resourceTypeName = OCGetResourceTypeName(handle, 10);
426 EXPECT_STREQ(NULL, resourceTypeName);
428 EXPECT_EQ(OC_STACK_OK, OCStop());
431 TEST(StackResource, ResourceTypeAttrRepresentation)
433 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
434 OC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
435 InitStack(OC_SERVER);
437 OCResourceHandle handle;
438 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
443 OC_DISCOVERABLE|OC_OBSERVABLE));
445 uint8_t numResourceTypes;
446 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
447 EXPECT_EQ(1, numResourceTypes);
449 EXPECT_EQ(OC_STACK_OK, OCStop());
452 TEST(StackResource, ResourceTypeInterface)
454 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
455 OC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
456 InitStack(OC_SERVER);
458 OCResourceHandle handle;
459 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
464 OC_DISCOVERABLE|OC_OBSERVABLE));
466 uint8_t numResourceInterfaces;
467 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
468 EXPECT_EQ(1, numResourceInterfaces);
469 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
470 EXPECT_STREQ("core.rw", resourceInterfaceName);
472 // try getting resource interface names with an invalid index
473 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
474 EXPECT_STREQ(NULL, resourceInterfaceName);
475 // try getting resource interface names with an invalid index
476 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
477 EXPECT_STREQ(NULL, resourceInterfaceName);
479 EXPECT_EQ(OC_STACK_OK, OCStop());
482 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
484 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
486 const char * OC_RSRVD_INTERFACE_DEFAULT = "oc.mi.def";
487 OC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
489 InitStack(OC_SERVER);
491 OCResourceHandle handle;
492 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
497 OC_DISCOVERABLE|OC_OBSERVABLE));
498 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
499 OC_RSRVD_INTERFACE_DEFAULT));
500 uint8_t numResourceInterfaces;
501 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
502 EXPECT_EQ(2, numResourceInterfaces);
504 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
505 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
507 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
508 EXPECT_STREQ("core.rw", interfaceName_2);
510 EXPECT_EQ(OC_STACK_OK, OCStop());
513 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
515 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
517 const char * OC_RSRVD_INTERFACE_DEFAULT = "oc.mi.def";
518 OC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
520 InitStack(OC_SERVER);
522 OCResourceHandle handle;
523 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
528 OC_DISCOVERABLE|OC_OBSERVABLE));
530 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
531 OC_RSRVD_INTERFACE_DEFAULT));
532 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
533 OC_RSRVD_INTERFACE_DEFAULT));
535 uint8_t numResourceInterfaces;
536 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
537 EXPECT_EQ(2, numResourceInterfaces);
539 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
540 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
542 EXPECT_EQ(OC_STACK_OK, OCStop());
545 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
547 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
549 OC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
551 InitStack(OC_SERVER);
553 OCResourceHandle handle;
554 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
559 OC_DISCOVERABLE|OC_OBSERVABLE));
561 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
563 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
566 uint8_t numResourceInterfaces;
567 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
568 EXPECT_EQ(1, numResourceInterfaces);
570 EXPECT_EQ(OC_STACK_OK, OCStop());
573 TEST(StackResource, ResourceTypeInterfaceMethods)
575 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
576 OC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
577 InitStack(OC_SERVER);
579 OCResourceHandle handle;
580 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
585 OC_DISCOVERABLE|OC_OBSERVABLE));
587 uint8_t numResourceInterfaces;
588 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
589 EXPECT_EQ(1, numResourceInterfaces);
591 EXPECT_EQ(OC_STACK_OK, OCStop());
594 TEST(StackResource, GetResourceProperties)
596 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
597 OC_LOG(INFO, TAG, "Starting GetResourceProperties test");
598 InitStack(OC_SERVER);
600 OCResourceHandle handle;
601 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
606 OC_DISCOVERABLE|OC_OBSERVABLE));
608 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
609 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
611 EXPECT_EQ(OC_STACK_OK, OCStop());
614 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
616 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
617 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
618 InitStack(OC_SERVER);
620 OCResourceHandle handle;
621 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
626 OC_DISCOVERABLE|OC_OBSERVABLE));
627 const char *url = OCGetResourceUri(handle);
628 EXPECT_STREQ("/a1/led", url);
630 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
631 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
632 uint8_t numResources = 0;
633 uint8_t numExpectedResources = InitNumExpectedResources();
635 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
636 EXPECT_EQ(numExpectedResources, numResources);
638 EXPECT_EQ(OC_STACK_OK, OCStop());
641 TEST(StackResource, StackTestResourceDiscoverOneResource)
643 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
644 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
645 InitStack(OC_SERVER);
647 OCResourceHandle handle;
648 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
653 OC_DISCOVERABLE|OC_OBSERVABLE));
654 const char *url = OCGetResourceUri(handle);
655 EXPECT_STREQ("/a/led", url);
657 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
658 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
660 EXPECT_EQ(OC_STACK_OK, OCStop());
663 TEST(StackResource, StackTestResourceDiscoverManyResources)
665 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
666 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
667 InitStack(OC_SERVER);
669 OCResourceHandle handle1;
670 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
676 const char *url = OCGetResourceUri(handle1);
677 EXPECT_STREQ("/a/led1", url);
679 OCResourceHandle handle2;
680 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
685 OC_DISCOVERABLE|OC_OBSERVABLE));
686 url = OCGetResourceUri(handle2);
687 EXPECT_STREQ("/a/led2", url);
689 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
690 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
692 OCResourceHandle handle3;
693 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
698 OC_DISCOVERABLE|OC_OBSERVABLE));
699 url = OCGetResourceUri(handle3);
700 EXPECT_STREQ("/a/led3", url);
702 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
703 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
705 OCResourceHandle handle4;
706 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
712 url = OCGetResourceUri(handle4);
713 EXPECT_STREQ("/a/led4", url);
715 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
716 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
717 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
719 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
721 EXPECT_EQ(OC_STACK_OK, OCStop());
724 TEST(StackBind, BindResourceTypeNameBad)
726 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
727 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
728 InitStack(OC_SERVER);
730 OCResourceHandle handle;
731 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
736 OC_DISCOVERABLE|OC_OBSERVABLE));
738 uint8_t numResourceTypes;
739 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
740 EXPECT_EQ(1, numResourceTypes);
741 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
742 EXPECT_STREQ("core.led", resourceTypeName);
744 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
746 EXPECT_EQ(OC_STACK_OK, OCStop());
749 TEST(StackBind, BindResourceTypeNameGood)
751 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
752 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
753 InitStack(OC_SERVER);
755 OCResourceHandle handle;
756 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
761 OC_DISCOVERABLE|OC_OBSERVABLE));
763 uint8_t numResourceTypes;
764 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
765 EXPECT_EQ(1, numResourceTypes);
766 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
767 EXPECT_STREQ("core.led", resourceTypeName);
769 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
770 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
771 EXPECT_EQ(2, numResourceTypes);
772 resourceTypeName = OCGetResourceTypeName(handle, 1);
773 EXPECT_STREQ("core.brightled", resourceTypeName);
775 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
776 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
777 EXPECT_EQ(3, numResourceTypes);
778 resourceTypeName = OCGetResourceTypeName(handle, 2);
779 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
781 EXPECT_EQ(OC_STACK_OK, OCStop());
784 TEST(StackBind, BindResourceTypeAttribRepGood)
786 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
787 OC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
788 InitStack(OC_SERVER);
790 OCResourceHandle handle;
791 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
796 OC_DISCOVERABLE|OC_OBSERVABLE));
798 uint8_t numResourceTypes;
799 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
800 EXPECT_EQ(1, numResourceTypes);
802 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
803 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
804 EXPECT_EQ(2, numResourceTypes);
806 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
807 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
808 EXPECT_EQ(3, numResourceTypes);
810 EXPECT_EQ(OC_STACK_OK, OCStop());
814 TEST(StackBind, BindResourceInterfaceNameBad)
816 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
817 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
818 InitStack(OC_SERVER);
820 OCResourceHandle handle;
821 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
826 OC_DISCOVERABLE|OC_OBSERVABLE));
828 uint8_t numResourceInterfaces;
829 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
830 EXPECT_EQ(1, numResourceInterfaces);
831 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
832 EXPECT_STREQ("core.rw", resourceInterfaceName);
834 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
836 EXPECT_EQ(OC_STACK_OK, OCStop());
839 TEST(StackBind, BindResourceInterfaceNameGood)
841 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
842 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
843 InitStack(OC_SERVER);
845 OCResourceHandle handle;
846 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
851 OC_DISCOVERABLE|OC_OBSERVABLE));
853 uint8_t numResourceInterfaces;
854 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
855 EXPECT_EQ(1, numResourceInterfaces);
856 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
857 EXPECT_STREQ("core.rw", resourceInterfaceName);
859 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
861 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
862 EXPECT_EQ(2, numResourceInterfaces);
863 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
864 EXPECT_STREQ("core.r", resourceInterfaceName);
866 EXPECT_EQ(OC_STACK_OK, OCStop());
869 TEST(StackBind, BindResourceInterfaceMethodsBad)
871 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
872 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
873 InitStack(OC_SERVER);
875 OCResourceHandle handle;
876 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
881 OC_DISCOVERABLE|OC_OBSERVABLE));
883 uint8_t numResourceInterfaces;
884 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
885 EXPECT_EQ(1, numResourceInterfaces);
887 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
889 EXPECT_EQ(OC_STACK_OK, OCStop());
892 TEST(StackBind, BindResourceInterfaceMethodsGood)
894 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
895 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
896 InitStack(OC_SERVER);
898 OCResourceHandle handle;
899 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
904 OC_DISCOVERABLE|OC_OBSERVABLE));
906 uint8_t numResourceInterfaces;
907 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
908 EXPECT_EQ(1, numResourceInterfaces);
910 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
912 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
913 EXPECT_EQ(2, numResourceInterfaces);
915 EXPECT_EQ(OC_STACK_OK, OCStop());
918 TEST(StackBind, BindContainedResourceBad)
920 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
921 OC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
922 InitStack(OC_SERVER);
924 OCResourceHandle containerHandle;
925 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
930 OC_DISCOVERABLE|OC_OBSERVABLE));
932 OCResourceHandle handle0;
933 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
938 OC_DISCOVERABLE|OC_OBSERVABLE));
940 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
942 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
944 EXPECT_EQ(OC_STACK_OK, OCStop());
947 TEST(StackBind, BindContainedResourceGood)
949 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
950 OC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
951 InitStack(OC_SERVER);
953 uint8_t numResources = 0;
954 uint8_t numExpectedResources = InitNumExpectedResources();
956 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
957 EXPECT_EQ(numExpectedResources, numResources);
959 OCResourceHandle containerHandle;
960 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
965 OC_DISCOVERABLE|OC_OBSERVABLE));
966 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
967 EXPECT_EQ(++numExpectedResources, numResources);
969 OCResourceHandle handle0;
970 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
975 OC_DISCOVERABLE|OC_OBSERVABLE));
976 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
977 EXPECT_EQ(++numExpectedResources, numResources);
979 OCResourceHandle handle1;
980 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
985 OC_DISCOVERABLE|OC_OBSERVABLE));
986 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
987 EXPECT_EQ(++numExpectedResources, numResources);
989 OCResourceHandle handle2;
990 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
995 OC_DISCOVERABLE|OC_OBSERVABLE));
996 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
997 EXPECT_EQ(++numExpectedResources, numResources);
999 OCResourceHandle handle3;
1000 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1005 OC_DISCOVERABLE|OC_OBSERVABLE));
1006 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1007 EXPECT_EQ(++numExpectedResources, numResources);
1009 OCResourceHandle handle4;
1010 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1015 OC_DISCOVERABLE|OC_OBSERVABLE));
1016 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1017 EXPECT_EQ(++numExpectedResources, numResources);
1019 OCResourceHandle handle5;
1020 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1025 OC_DISCOVERABLE|OC_OBSERVABLE));
1026 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1027 EXPECT_EQ(++numExpectedResources, numResources);
1030 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1031 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1032 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1033 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1034 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1035 EXPECT_EQ(OC_STACK_ERROR, OCBindResource(containerHandle, handle5));
1037 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1038 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1039 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1040 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1041 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1043 EXPECT_EQ(NULL, OCGetResourceHandleFromCollection(containerHandle, 5));
1045 EXPECT_EQ(OC_STACK_OK, OCStop());
1049 TEST(StackBind, BindEntityHandlerBad)
1051 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1052 OC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1053 InitStack(OC_SERVER);
1055 OCResourceHandle handle;
1056 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1061 OC_DISCOVERABLE|OC_OBSERVABLE));
1063 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL));
1065 EXPECT_EQ(OC_STACK_OK, OCStop());
1068 TEST(StackBind, BindEntityHandlerGood)
1070 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1071 OC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1072 InitStack(OC_SERVER);
1074 OCResourceHandle handle;
1075 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1080 OC_DISCOVERABLE|OC_OBSERVABLE));
1082 OCEntityHandler myHandler = entityHandler;
1084 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler));
1086 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1088 EXPECT_EQ(OC_STACK_OK, OCStop());
1091 TEST(StackResourceAccess, GetResourceByIndex)
1093 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1094 OC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1095 InitStack(OC_SERVER);
1097 uint8_t numResources = 0;
1098 uint8_t numExpectedResources = InitNumExpectedResources();
1099 uint8_t resourceIndex = InitResourceIndex();
1101 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1102 EXPECT_EQ(numExpectedResources, numResources);
1104 OCResourceHandle containerHandle;
1105 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1110 OC_DISCOVERABLE|OC_OBSERVABLE));
1111 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1112 EXPECT_EQ(++numExpectedResources, numResources);
1114 OCResourceHandle handle0;
1115 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1120 OC_DISCOVERABLE|OC_OBSERVABLE));
1121 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1122 EXPECT_EQ(++numExpectedResources, numResources);
1124 OCResourceHandle handle1;
1125 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1130 OC_DISCOVERABLE|OC_OBSERVABLE));
1131 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1132 EXPECT_EQ(++numExpectedResources, numResources);
1134 OCResourceHandle handle2;
1135 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1140 OC_DISCOVERABLE|OC_OBSERVABLE));
1141 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1142 EXPECT_EQ(++numExpectedResources, numResources);
1144 OCResourceHandle handle3;
1145 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1150 OC_DISCOVERABLE|OC_OBSERVABLE));
1151 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1152 EXPECT_EQ(++numExpectedResources, numResources);
1154 OCResourceHandle handle4;
1155 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1160 OC_DISCOVERABLE|OC_OBSERVABLE));
1161 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1162 EXPECT_EQ(++numExpectedResources, numResources);
1164 OCResourceHandle handle5;
1165 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1170 OC_DISCOVERABLE|OC_OBSERVABLE));
1171 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1172 EXPECT_EQ(++numExpectedResources, numResources);
1174 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1175 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1176 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1177 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1178 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1179 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1180 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1182 EXPECT_EQ(OC_STACK_OK, OCStop());
1185 TEST(StackResourceAccess, DeleteHeadResource)
1187 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1188 OC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1189 InitStack(OC_SERVER);
1191 uint8_t numResources = 0;
1192 uint8_t numExpectedResources = InitNumExpectedResources();
1194 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1195 EXPECT_EQ(numExpectedResources, numResources);
1197 OCResourceHandle handle0;
1198 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1203 OC_DISCOVERABLE|OC_OBSERVABLE));
1204 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1205 EXPECT_EQ(++numExpectedResources, numResources);
1207 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1208 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1209 EXPECT_EQ(--numExpectedResources, numResources);
1211 EXPECT_EQ(OC_STACK_OK, OCStop());
1214 TEST(StackResourceAccess, DeleteHeadResource2)
1216 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1217 OC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1218 InitStack(OC_SERVER);
1220 uint8_t numResources = 0;
1221 uint8_t numExpectedResources = InitNumExpectedResources();
1222 uint8_t resourceIndex = InitResourceIndex();
1224 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1225 EXPECT_EQ(numExpectedResources, numResources);
1227 OCResourceHandle handle0;
1228 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1233 OC_DISCOVERABLE|OC_OBSERVABLE));
1234 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1235 EXPECT_EQ(++numExpectedResources, numResources);
1237 OCResourceHandle handle1;
1238 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1243 OC_DISCOVERABLE|OC_OBSERVABLE));
1244 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1245 EXPECT_EQ(++numExpectedResources, numResources);
1247 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1248 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1249 EXPECT_EQ(--numExpectedResources, numResources);
1251 EXPECT_EQ(handle1, OCGetResourceHandle(resourceIndex));
1253 EXPECT_EQ(OC_STACK_OK, OCStop());
1257 TEST(StackResourceAccess, DeleteLastResource)
1259 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1260 OC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1261 InitStack(OC_SERVER);
1263 uint8_t numResources = 0;
1264 uint8_t numExpectedResources = InitNumExpectedResources();
1265 uint8_t resourceIndex = InitResourceIndex();
1267 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1268 EXPECT_EQ(numExpectedResources, numResources);
1270 OCResourceHandle handle0;
1271 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1276 OC_DISCOVERABLE|OC_OBSERVABLE));
1277 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1278 EXPECT_EQ(++numExpectedResources, numResources);
1280 OCResourceHandle handle1;
1281 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1286 OC_DISCOVERABLE|OC_OBSERVABLE));
1287 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1288 EXPECT_EQ(++numExpectedResources, numResources);
1290 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1291 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1292 EXPECT_EQ(--numExpectedResources, numResources);
1294 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1296 OCResourceHandle handle2;
1297 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1302 OC_DISCOVERABLE|OC_OBSERVABLE));
1303 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1304 EXPECT_EQ(++numExpectedResources, numResources);
1306 EXPECT_EQ(OC_STACK_OK, OCStop());
1309 TEST(StackResourceAccess, DeleteMiddleResource)
1311 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1312 OC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1313 InitStack(OC_SERVER);
1315 uint8_t numResources = 0;
1316 uint8_t numExpectedResources = InitNumExpectedResources();
1317 uint8_t resourceIndex = InitResourceIndex();
1319 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1320 EXPECT_EQ(numExpectedResources, numResources);
1322 OCResourceHandle handle0;
1323 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1328 OC_DISCOVERABLE|OC_OBSERVABLE));
1329 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1330 EXPECT_EQ(++numExpectedResources, numResources);
1332 OCResourceHandle handle1;
1333 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1338 OC_DISCOVERABLE|OC_OBSERVABLE));
1339 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1340 EXPECT_EQ(++numExpectedResources, numResources);
1342 OCResourceHandle handle2;
1343 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1348 OC_DISCOVERABLE|OC_OBSERVABLE));
1349 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1350 EXPECT_EQ(++numExpectedResources, numResources);
1352 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1353 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1354 EXPECT_EQ(--numExpectedResources, numResources);
1356 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1357 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1359 // Make sure the resource elements are still correct
1360 uint8_t numResourceInterfaces;
1361 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1362 EXPECT_EQ(1, numResourceInterfaces);
1363 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 0);
1364 EXPECT_STREQ("core.rw", resourceInterfaceName);
1366 EXPECT_EQ(OC_STACK_OK, OCStop());
1372 #endif // __cplusplus
1373 void parsePresencePayload(char* payload, uint32_t* seqNum, uint32_t* maxAge, char** resType);
1376 #endif // __cplusplus
1378 TEST(StackPresence, ParsePresencePayload)
1380 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1381 OC_LOG(INFO, TAG, "Starting ParsePresencePayload test");
1384 uint32_t seqNum = 0, maxAge = 0;
1385 char * resType = NULL;
1388 strncpy(payload, "{\"oc\":[100:99:presence]}", sizeof(payload));
1389 parsePresencePayload(payload, &seqNum, &maxAge, &resType);
1390 EXPECT_TRUE(100 == seqNum);
1391 EXPECT_TRUE(99 == maxAge);
1392 EXPECT_STREQ("presence", resType);
1395 //Bad Scenario -- should not result in Seg Fault
1396 parsePresencePayload(payload, NULL, &maxAge, &resType);
1399 seqNum = 0; maxAge = 0; resType = NULL;
1400 strncpy(payload, "{abracadabra}", sizeof(payload));
1401 parsePresencePayload(payload, &seqNum, &maxAge, &resType);
1402 EXPECT_TRUE(0 == seqNum);
1403 EXPECT_TRUE(0 == maxAge);
1404 EXPECT_EQ(NULL, resType);
1408 seqNum = 0; maxAge = 0; resType = NULL;
1409 strncpy(payload, "{\"oc\":[100]}", sizeof(payload));
1410 parsePresencePayload(payload, &seqNum, &maxAge, &resType);
1411 EXPECT_TRUE(100 == seqNum);
1412 EXPECT_TRUE(0 == maxAge);
1413 EXPECT_EQ(NULL, resType);
1417 seqNum = 0; maxAge = 0; resType = NULL;
1418 strncpy(payload, "{\"oc\":[]}", sizeof(payload));
1419 parsePresencePayload(payload, &seqNum, &maxAge, &resType);
1420 EXPECT_TRUE(0 == seqNum);
1421 EXPECT_TRUE(0 == maxAge);
1422 EXPECT_EQ(NULL, resType);
1426 strncpy(payload, "{:]}", sizeof(payload));
1427 parsePresencePayload(payload, &seqNum, &maxAge, &resType);
1428 EXPECT_TRUE(0 == seqNum);
1429 EXPECT_TRUE(0 == maxAge);
1430 EXPECT_EQ(NULL, resType);
1434 strncpy(payload, "{:[presence}", sizeof(payload));
1435 parsePresencePayload(payload, &seqNum, &maxAge, &resType);
1436 EXPECT_TRUE(0 == seqNum);
1437 EXPECT_TRUE(0 == maxAge);
1438 EXPECT_EQ(NULL, resType);