1 //******************************************************************
3 // Copyright 2014 Intel Mobile Communications GmbH All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
11 // http://www.apache.org/licenses/LICENSE-2.0
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
25 #include "ocstackinternal.h"
27 #include "oic_malloc.h"
30 #include "gtest/gtest.h"
31 #include <sys/types.h>
38 //-----------------------------------------------------------------------------
40 //-----------------------------------------------------------------------------
47 #include "gtest_helper.h"
51 namespace itst = iotivity::test;
53 #define DEFAULT_CONTEXT_VALUE 0x99
55 //-----------------------------------------------------------------------------
57 //-----------------------------------------------------------------------------
58 static const char TAG[] = "TestHarness";
60 char gDeviceUUID[] = "myDeviceUUID";
61 char gManufacturerName[] = "myName";
62 char gTooLongManufacturerName[] = "extremelylongmanufacturername";
63 char gManufacturerUrl[] = "www.foooooooooooooooo.baaaaaaaaaaaaar";
65 std::chrono::seconds const SHORT_TEST_TIMEOUT = std::chrono::seconds(5);
67 //-----------------------------------------------------------------------------
69 //-----------------------------------------------------------------------------
70 extern "C" OCStackApplicationResult asyncDoResourcesCallback(void* ctx,
71 OCDoHandle /*handle*/, OCClientResponse * clientResponse)
73 OC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
75 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
77 if(ctx == (void*)DEFAULT_CONTEXT_VALUE) {
78 OC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
80 OC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
82 return OC_STACK_KEEP_TRANSACTION;
85 //-----------------------------------------------------------------------------
87 //-----------------------------------------------------------------------------
88 OCEntityHandlerResult entityHandler(OCEntityHandlerFlag /*flag*/,
89 OCEntityHandlerRequest * /*entityHandlerRequest*/,
90 void* /*callbackParam*/)
92 OC_LOG(INFO, TAG, "Entering entityHandler");
97 //-----------------------------------------------------------------------------
99 //-----------------------------------------------------------------------------
100 void InitStack(OCMode mode)
102 OC_LOG(INFO, TAG, "Entering InitStack");
104 EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, mode));
105 OC_LOG(INFO, TAG, "Leaving InitStack");
108 uint8_t InitNumExpectedResources()
111 // When presence is enabled, it is a resource and so is (currently) included
112 // in the returned resource count returned by the OCGetNumberOfResources API.
119 uint8_t InitResourceIndex()
122 // When presence is enabled, it is a resource and so is (currently) included
123 // in the returned resource count returned by the OCGetNumberOfResources API.
124 // The index of the presence resource is 0, so the first user app resource index
131 //-----------------------------------------------------------------------------
133 //-----------------------------------------------------------------------------
135 TEST(StackInit, StackInitNullAddr)
137 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
138 EXPECT_EQ(OC_STACK_OK, OCInit(0, 5683, OC_SERVER));
139 EXPECT_EQ(OC_STACK_OK, OCStop());
142 TEST(StackInit, StackInitNullPort)
144 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
145 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 0, OC_SERVER));
146 EXPECT_EQ(OC_STACK_OK, OCStop());
149 TEST(StackInit, StackInitNullAddrAndPort)
151 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
152 EXPECT_EQ(OC_STACK_OK, OCInit(0, 0, OC_SERVER));
153 EXPECT_EQ(OC_STACK_OK, OCStop());
156 TEST(StackInit, StackInitInvalidMode)
158 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
159 EXPECT_EQ(OC_STACK_ERROR, OCInit(0, 0, (OCMode)10));
160 EXPECT_EQ(OC_STACK_ERROR, OCStop());
163 TEST(StackStart, StackStartSuccessClient)
165 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
166 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
167 EXPECT_EQ(OC_STACK_OK, OCStop());
170 TEST(StackStart, StackStartSuccessServer)
172 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
173 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
174 EXPECT_EQ(OC_STACK_OK, OCStop());
177 TEST(StackStart, StackStartSuccessClientServer)
179 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
180 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT_SERVER));
181 EXPECT_EQ(OC_STACK_OK, OCStop());
184 TEST(StackStart, StackStartSuccessiveInits)
186 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
187 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
188 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.2", 5683, OC_SERVER));
189 EXPECT_EQ(OC_STACK_OK, OCStop());
192 TEST(StackStart, SetPlatformInfoValid)
194 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
195 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
197 OCPlatformInfo info =
201 0, 0, 0, 0, 0, 0, 0, 0, 0
203 EXPECT_EQ(OC_STACK_OK, OCSetPlatformInfo(info));
204 EXPECT_EQ(OC_STACK_OK, OCStop());
207 TEST(StackStart, SetPlatformInfoWithNoPlatformID)
209 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
210 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
212 OCPlatformInfo info =
216 0, 0, 0, 0, 0, 0, 0, 0, 0
219 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
220 EXPECT_EQ(OC_STACK_OK, OCStop());
223 TEST(StackStart, SetPlatformInfoWithNoManufacturerName)
225 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
226 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
228 OCPlatformInfo info =
231 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
234 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
235 EXPECT_EQ(OC_STACK_OK, OCStop());
238 TEST(StackStart, SetPlatformInfoWithZeroLengthManufacturerName)
240 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
241 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
243 OCPlatformInfo info =
246 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
248 info.manufacturerName = (char *) "";
250 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
251 EXPECT_EQ(OC_STACK_OK, OCStop());
254 TEST(StackStart, SetPlatformInfoWithTooLongManufacName)
256 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
257 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
259 OCPlatformInfo info =
262 gTooLongManufacturerName,
263 0, 0, 0, 0, 0, 0, 0, 0, 0
266 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
267 EXPECT_EQ(OC_STACK_OK, OCStop());
270 TEST(StackStart, SetPlatformInfoWithTooLongManufacURL)
272 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
273 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
274 OCPlatformInfo info =
279 0, 0, 0, 0, 0, 0, 0, 0
282 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
283 EXPECT_EQ(OC_STACK_OK, OCStop());
286 TEST(StackDiscovery, DISABLED_DoResourceDeviceDiscovery)
288 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
289 OCCallbackData cbData;
292 OC_LOG(INFO, TAG, "Starting DoResourceDeviceDiscovery test ");
293 InitStack(OC_CLIENT);
295 /* Start a discovery query*/
296 char szQueryUri[64] = { 0 };
297 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
298 cbData.cb = asyncDoResourcesCallback;
299 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
301 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
311 EXPECT_EQ(OC_STACK_OK, OCStop());
314 TEST(StackStop, StackStopWithoutInit)
316 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
317 EXPECT_EQ(OC_STACK_ERROR, OCStop());
320 TEST(StackStop, StackStopRepeated)
322 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
323 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
324 EXPECT_EQ(OC_STACK_OK, OCStop());
325 EXPECT_EQ(OC_STACK_ERROR, OCStop());
328 TEST(StackResource, DISABLED_UpdateResourceNullURI)
330 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
331 OCCallbackData cbData;
334 OC_LOG(INFO, TAG, "Starting UpdateResourceNullURI test");
335 InitStack(OC_CLIENT);
337 /* Start a discovery query*/
338 char szQueryUri[64] = { 0 };
339 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
340 cbData.cb = asyncDoResourcesCallback;
341 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
343 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
353 EXPECT_EQ(OC_STACK_OK, OCStop());
356 TEST(StackResource, CreateResourceBadParams)
358 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
359 OC_LOG(INFO, TAG, "Starting CreateResourceBadParams test");
360 InitStack(OC_SERVER);
362 OCResourceHandle handle;
364 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(NULL, //&handle,
370 OC_DISCOVERABLE|OC_OBSERVABLE));
372 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
378 OC_DISCOVERABLE|OC_OBSERVABLE));
380 // Property bitmask out of range
381 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
387 128));// invalid bitmask for OCResourceProperty
389 EXPECT_EQ(OC_STACK_OK, OCStop());
392 TEST(StackResource, CreateResourceBadUri)
394 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
395 OC_LOG(INFO, TAG, "Starting CreateResourceBadUri test");
396 InitStack(OC_SERVER);
398 const char *uri65 = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL";
400 OCResourceHandle handle;
402 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
408 OC_DISCOVERABLE|OC_OBSERVABLE));
410 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
416 OC_DISCOVERABLE|OC_OBSERVABLE));
418 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
424 OC_DISCOVERABLE|OC_OBSERVABLE));
426 EXPECT_EQ(OC_STACK_OK, OCStop());
429 TEST(StackResource, CreateResourceSuccess)
431 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
432 OC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
433 InitStack(OC_SERVER);
435 OCResourceHandle handle;
436 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
442 OC_DISCOVERABLE|OC_OBSERVABLE));
443 const char *url = OCGetResourceUri(handle);
444 EXPECT_STREQ("/a/led", url);
446 EXPECT_EQ(OC_STACK_OK, OCStop());
449 TEST(StackResource, CreateResourceSuccessWithResourcePolicyPropNone)
451 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
452 OC_LOG(INFO, TAG, "Starting CreateResourceSuccessWithResourcePolicyPropNone test");
453 InitStack(OC_SERVER);
455 OCResourceHandle handle;
456 // the resource is non-discoverable & non-observable by the client.
457 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
463 OC_RES_PROP_NONE));// the resource is non-discoverable &
464 // non-observable by the client.
465 const char* url = OCGetResourceUri(handle);
466 EXPECT_STREQ("/a/led", url);
468 EXPECT_EQ(OC_STACK_OK, OCStop());
471 TEST(StackResource, CreateResourceWithClientStackMode)
473 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
474 OC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
475 InitStack(OC_CLIENT);
477 OCResourceHandle handle;
478 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
484 OC_DISCOVERABLE|OC_OBSERVABLE));
486 EXPECT_EQ(OC_STACK_OK, OCStop());
489 TEST(StackResource, CreateResourceFailDuplicateUri)
491 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
492 OC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
493 InitStack(OC_SERVER);
495 OCResourceHandle handle;
496 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
502 OC_DISCOVERABLE|OC_OBSERVABLE));
503 const char *url = OCGetResourceUri(handle);
504 EXPECT_STREQ("/a/led", url);
506 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
512 OC_DISCOVERABLE|OC_OBSERVABLE));
514 EXPECT_EQ(OC_STACK_OK, OCStop());
517 TEST(StackResource, CreateResourceMultipleResources)
519 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
520 OC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
521 InitStack(OC_SERVER);
523 OCResourceHandle handle1;
524 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
530 OC_DISCOVERABLE|OC_OBSERVABLE));
532 OCResourceHandle handle2;
533 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
539 OC_DISCOVERABLE|OC_OBSERVABLE));
540 OCResourceHandle handle3;
541 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
547 OC_DISCOVERABLE|OC_OBSERVABLE));
549 const char *url = OCGetResourceUri(handle1);
550 EXPECT_STREQ("/a/led1", url);
552 url = OCGetResourceUri(handle2);
553 EXPECT_STREQ("/a/led2", url);
555 url = OCGetResourceUri(handle3);
556 EXPECT_STREQ("/a/led3", url);
558 EXPECT_EQ(OC_STACK_OK, OCStop());
561 TEST(StackResource, CreateResourceBadResoureType)
563 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
564 OC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
565 InitStack(OC_SERVER);
567 OCResourceHandle handle;
568 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
574 OC_DISCOVERABLE|OC_OBSERVABLE));
576 OCResourceHandle handle2;
577 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle2,
583 OC_DISCOVERABLE|OC_OBSERVABLE));
585 EXPECT_EQ(OC_STACK_OK, OCStop());
588 TEST(StackResource, CreateResourceGoodResourceType)
590 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
591 OC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
592 InitStack(OC_SERVER);
594 OCResourceHandle handle;
595 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
601 OC_DISCOVERABLE|OC_OBSERVABLE));
603 EXPECT_EQ(OC_STACK_OK, OCStop());
606 TEST(StackResource, ResourceTypeName)
608 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
609 OC_LOG(INFO, TAG, "Starting ResourceTypeName test");
610 InitStack(OC_SERVER);
612 OCResourceHandle handle;
613 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
619 OC_DISCOVERABLE|OC_OBSERVABLE));
621 uint8_t numResourceTypes;
622 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
623 EXPECT_EQ(1, numResourceTypes);
624 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
625 EXPECT_STREQ("core.led", resourceTypeName);
627 // try getting resource type names with an invalid index
628 resourceTypeName = OCGetResourceTypeName(handle, 1);
629 EXPECT_STREQ(NULL, resourceTypeName);
630 // try getting resource type names with an invalid index
631 resourceTypeName = OCGetResourceTypeName(handle, 10);
632 EXPECT_STREQ(NULL, resourceTypeName);
634 EXPECT_EQ(OC_STACK_OK, OCStop());
637 TEST(StackResource, ResourceTypeAttrRepresentation)
639 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
640 OC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
641 InitStack(OC_SERVER);
643 OCResourceHandle handle;
644 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
650 OC_DISCOVERABLE|OC_OBSERVABLE));
652 uint8_t numResourceTypes;
653 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
654 EXPECT_EQ(1, numResourceTypes);
656 EXPECT_EQ(OC_STACK_OK, OCStop());
659 TEST(StackResource, ResourceTypeInterface)
661 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
662 OC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
663 InitStack(OC_SERVER);
665 OCResourceHandle handle;
666 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
672 OC_DISCOVERABLE|OC_OBSERVABLE));
674 uint8_t numResourceInterfaces;
675 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
676 EXPECT_EQ(1, numResourceInterfaces);
677 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
678 EXPECT_STREQ("core.rw", resourceInterfaceName);
680 // try getting resource interface names with an invalid index
681 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
682 EXPECT_STREQ(NULL, resourceInterfaceName);
683 // try getting resource interface names with an invalid index
684 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
685 EXPECT_STREQ(NULL, resourceInterfaceName);
687 EXPECT_EQ(OC_STACK_OK, OCStop());
690 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
692 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
694 OC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
696 InitStack(OC_SERVER);
698 OCResourceHandle handle;
699 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
705 OC_DISCOVERABLE|OC_OBSERVABLE));
706 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
707 OC_RSRVD_INTERFACE_DEFAULT));
708 uint8_t numResourceInterfaces;
709 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
710 EXPECT_EQ(2, numResourceInterfaces);
712 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
713 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
715 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
716 EXPECT_STREQ("core.rw", interfaceName_2);
718 EXPECT_EQ(OC_STACK_OK, OCStop());
721 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
723 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
725 OC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
727 InitStack(OC_SERVER);
729 OCResourceHandle handle;
730 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
736 OC_DISCOVERABLE|OC_OBSERVABLE));
738 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
739 OC_RSRVD_INTERFACE_DEFAULT));
740 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
741 OC_RSRVD_INTERFACE_DEFAULT));
743 uint8_t numResourceInterfaces;
744 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
745 EXPECT_EQ(2, numResourceInterfaces);
747 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
748 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
750 EXPECT_EQ(OC_STACK_OK, OCStop());
753 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
755 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
757 OC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
759 InitStack(OC_SERVER);
761 OCResourceHandle handle;
762 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
768 OC_DISCOVERABLE|OC_OBSERVABLE));
770 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
772 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
775 uint8_t numResourceInterfaces;
776 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
777 EXPECT_EQ(1, numResourceInterfaces);
779 EXPECT_EQ(OC_STACK_OK, OCStop());
782 TEST(StackResource, ResourceTypeInterfaceMethods)
784 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
785 OC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
786 InitStack(OC_SERVER);
788 OCResourceHandle handle;
789 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
795 OC_DISCOVERABLE|OC_OBSERVABLE));
797 uint8_t numResourceInterfaces;
798 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
799 EXPECT_EQ(1, numResourceInterfaces);
801 EXPECT_EQ(OC_STACK_OK, OCStop());
804 TEST(StackResource, GetResourceProperties)
806 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
807 OC_LOG(INFO, TAG, "Starting GetResourceProperties test");
808 InitStack(OC_SERVER);
810 OCResourceHandle handle;
811 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
817 OC_DISCOVERABLE|OC_OBSERVABLE));
819 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
820 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
822 EXPECT_EQ(OC_STACK_OK, OCStop());
825 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
827 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
828 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
829 InitStack(OC_SERVER);
830 uint8_t numResources = 0;
831 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
833 OCResourceHandle handle;
834 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
840 OC_DISCOVERABLE|OC_OBSERVABLE));
841 const char *url = OCGetResourceUri(handle);
842 EXPECT_STREQ("/a1/led", url);
844 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
845 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
846 uint8_t numExpectedResources = 0;
848 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
849 EXPECT_EQ(numExpectedResources, numResources);
851 EXPECT_EQ(OC_STACK_OK, OCStop());
854 TEST(StackResource, StackTestResourceDiscoverOneResource)
856 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
857 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
858 InitStack(OC_SERVER);
860 OCResourceHandle handle;
861 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
867 OC_DISCOVERABLE|OC_OBSERVABLE));
868 const char *url = OCGetResourceUri(handle);
869 EXPECT_STREQ("/a/led", url);
871 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
872 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
874 EXPECT_EQ(OC_STACK_OK, OCStop());
877 TEST(StackResource, StackTestResourceDiscoverManyResources)
879 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
880 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
881 InitStack(OC_SERVER);
883 OCResourceHandle handle1;
884 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
891 const char *url = OCGetResourceUri(handle1);
892 EXPECT_STREQ("/a/led1", url);
894 OCResourceHandle handle2;
895 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
901 OC_DISCOVERABLE|OC_OBSERVABLE));
902 url = OCGetResourceUri(handle2);
903 EXPECT_STREQ("/a/led2", url);
905 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
906 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
908 OCResourceHandle handle3;
909 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
915 OC_DISCOVERABLE|OC_OBSERVABLE));
916 url = OCGetResourceUri(handle3);
917 EXPECT_STREQ("/a/led3", url);
919 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
920 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
922 OCResourceHandle handle4;
923 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
930 url = OCGetResourceUri(handle4);
931 EXPECT_STREQ("/a/led4", url);
933 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
934 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
935 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
937 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
939 EXPECT_EQ(OC_STACK_OK, OCStop());
942 TEST(StackBind, BindResourceTypeNameBad)
944 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
945 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
946 InitStack(OC_SERVER);
948 OCResourceHandle handle;
949 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
955 OC_DISCOVERABLE|OC_OBSERVABLE));
957 uint8_t numResourceTypes;
958 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
959 EXPECT_EQ(1, numResourceTypes);
960 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
961 EXPECT_STREQ("core.led", resourceTypeName);
963 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
965 EXPECT_EQ(OC_STACK_OK, OCStop());
968 TEST(StackBind, BindResourceTypeNameGood)
970 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
971 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
972 InitStack(OC_SERVER);
974 OCResourceHandle handle;
975 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
981 OC_DISCOVERABLE|OC_OBSERVABLE));
983 uint8_t numResourceTypes;
984 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
985 EXPECT_EQ(1, numResourceTypes);
986 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
987 EXPECT_STREQ("core.led", resourceTypeName);
989 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
990 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
991 EXPECT_EQ(2, numResourceTypes);
992 resourceTypeName = OCGetResourceTypeName(handle, 1);
993 EXPECT_STREQ("core.brightled", resourceTypeName);
995 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
996 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
997 EXPECT_EQ(3, numResourceTypes);
998 resourceTypeName = OCGetResourceTypeName(handle, 2);
999 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
1001 EXPECT_EQ(OC_STACK_OK, OCStop());
1004 TEST(StackBind, BindResourceTypeAttribRepGood)
1006 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1007 OC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
1008 InitStack(OC_SERVER);
1010 OCResourceHandle handle;
1011 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1017 OC_DISCOVERABLE|OC_OBSERVABLE));
1019 uint8_t numResourceTypes;
1020 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1021 EXPECT_EQ(1, numResourceTypes);
1023 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1024 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1025 EXPECT_EQ(2, numResourceTypes);
1027 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1028 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1029 EXPECT_EQ(3, numResourceTypes);
1031 EXPECT_EQ(OC_STACK_OK, OCStop());
1035 TEST(StackBind, BindResourceInterfaceNameBad)
1037 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1038 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
1039 InitStack(OC_SERVER);
1041 OCResourceHandle handle;
1042 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1048 OC_DISCOVERABLE|OC_OBSERVABLE));
1050 uint8_t numResourceInterfaces;
1051 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1052 EXPECT_EQ(1, numResourceInterfaces);
1053 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
1054 EXPECT_STREQ("core.rw", resourceInterfaceName);
1056 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
1058 EXPECT_EQ(OC_STACK_OK, OCStop());
1061 TEST(StackBind, BindResourceInterfaceNameGood)
1063 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1064 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
1065 InitStack(OC_SERVER);
1067 OCResourceHandle handle;
1068 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1074 OC_DISCOVERABLE|OC_OBSERVABLE));
1076 uint8_t numResourceInterfaces;
1077 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1078 EXPECT_EQ(1, numResourceInterfaces);
1079 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
1080 EXPECT_STREQ("core.rw", resourceInterfaceName);
1082 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1084 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1085 EXPECT_EQ(2, numResourceInterfaces);
1086 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1087 EXPECT_STREQ("core.r", resourceInterfaceName);
1089 EXPECT_EQ(OC_STACK_OK, OCStop());
1092 TEST(StackBind, BindResourceInterfaceMethodsBad)
1094 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1095 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
1096 InitStack(OC_SERVER);
1098 OCResourceHandle handle;
1099 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1105 OC_DISCOVERABLE|OC_OBSERVABLE));
1107 uint8_t numResourceInterfaces;
1108 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1109 EXPECT_EQ(1, numResourceInterfaces);
1111 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1113 EXPECT_EQ(OC_STACK_OK, OCStop());
1116 TEST(StackBind, BindResourceInterfaceMethodsGood)
1118 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1119 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
1120 InitStack(OC_SERVER);
1122 OCResourceHandle handle;
1123 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1129 OC_DISCOVERABLE|OC_OBSERVABLE));
1131 uint8_t numResourceInterfaces;
1132 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1133 EXPECT_EQ(1, numResourceInterfaces);
1135 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1137 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1138 EXPECT_EQ(2, numResourceInterfaces);
1140 EXPECT_EQ(OC_STACK_OK, OCStop());
1143 TEST(StackBind, BindContainedResourceBad)
1145 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1146 OC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1147 InitStack(OC_SERVER);
1149 OCResourceHandle containerHandle;
1150 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1156 OC_DISCOVERABLE|OC_OBSERVABLE));
1158 OCResourceHandle handle0;
1159 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1165 OC_DISCOVERABLE|OC_OBSERVABLE));
1167 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1169 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1171 EXPECT_EQ(OC_STACK_OK, OCStop());
1174 TEST(StackBind, BindContainedResourceGood)
1176 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1177 OC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1178 InitStack(OC_SERVER);
1180 uint8_t numResources = 0;
1181 uint8_t numExpectedResources = 0;
1183 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1185 OCResourceHandle containerHandle;
1186 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1192 OC_DISCOVERABLE|OC_OBSERVABLE));
1193 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1194 EXPECT_EQ(++numExpectedResources, numResources);
1196 OCResourceHandle handle0;
1197 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 OCResourceHandle handle1;
1208 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1214 OC_DISCOVERABLE|OC_OBSERVABLE));
1215 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1216 EXPECT_EQ(++numExpectedResources, numResources);
1218 OCResourceHandle handle2;
1219 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1225 OC_DISCOVERABLE|OC_OBSERVABLE));
1226 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1227 EXPECT_EQ(++numExpectedResources, numResources);
1229 OCResourceHandle handle3;
1230 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1236 OC_DISCOVERABLE|OC_OBSERVABLE));
1237 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1238 EXPECT_EQ(++numExpectedResources, numResources);
1240 OCResourceHandle handle4;
1241 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1247 OC_DISCOVERABLE|OC_OBSERVABLE));
1248 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1249 EXPECT_EQ(++numExpectedResources, numResources);
1251 OCResourceHandle handle5;
1252 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1258 OC_DISCOVERABLE|OC_OBSERVABLE));
1259 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1260 EXPECT_EQ(++numExpectedResources, numResources);
1263 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1264 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1265 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1266 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1267 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1268 EXPECT_EQ(OC_STACK_ERROR, OCBindResource(containerHandle, handle5));
1270 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1271 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1272 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1273 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1274 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1276 EXPECT_EQ(NULL, OCGetResourceHandleFromCollection(containerHandle, 5));
1278 EXPECT_EQ(OC_STACK_OK, OCStop());
1282 TEST(StackBind, BindEntityHandlerBad)
1284 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1285 OC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1286 InitStack(OC_SERVER);
1288 OCResourceHandle handle;
1289 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1295 OC_DISCOVERABLE|OC_OBSERVABLE));
1297 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL, NULL));
1299 EXPECT_EQ(OC_STACK_OK, OCStop());
1302 TEST(StackBind, BindEntityHandlerGood)
1304 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1305 OC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1306 InitStack(OC_SERVER);
1308 OCResourceHandle handle;
1309 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1315 OC_DISCOVERABLE|OC_OBSERVABLE));
1317 OCEntityHandler myHandler = entityHandler;
1319 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler, NULL));
1321 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1323 EXPECT_EQ(OC_STACK_OK, OCStop());
1326 TEST(StackResourceAccess, GetResourceByIndex)
1328 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1329 OC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1330 InitStack(OC_SERVER);
1332 uint8_t numResources = 0;
1333 uint8_t numExpectedResources = 0;
1334 uint8_t resourceIndex = 0;
1335 uint8_t prevResources = 0;
1336 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1337 prevResources = numExpectedResources;
1338 OCResourceHandle containerHandle;
1339 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1345 OC_DISCOVERABLE|OC_OBSERVABLE));
1346 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1347 EXPECT_EQ(++numExpectedResources, numResources);
1349 OCResourceHandle handle0;
1350 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1356 OC_DISCOVERABLE|OC_OBSERVABLE));
1357 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1358 EXPECT_EQ(++numExpectedResources, numResources);
1360 OCResourceHandle handle1;
1361 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1367 OC_DISCOVERABLE|OC_OBSERVABLE));
1368 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1369 EXPECT_EQ(++numExpectedResources, numResources);
1371 OCResourceHandle handle2;
1372 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1378 OC_DISCOVERABLE|OC_OBSERVABLE));
1379 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1380 EXPECT_EQ(++numExpectedResources, numResources);
1382 OCResourceHandle handle3;
1383 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1389 OC_DISCOVERABLE|OC_OBSERVABLE));
1390 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1391 EXPECT_EQ(++numExpectedResources, numResources);
1393 OCResourceHandle handle4;
1394 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1400 OC_DISCOVERABLE|OC_OBSERVABLE));
1401 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1402 EXPECT_EQ(++numExpectedResources, numResources);
1404 OCResourceHandle handle5;
1405 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1411 OC_DISCOVERABLE|OC_OBSERVABLE));
1412 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1413 EXPECT_EQ(++numExpectedResources, numResources);
1414 resourceIndex += prevResources;
1415 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1416 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1417 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1418 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1419 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1420 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1421 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1423 EXPECT_EQ(OC_STACK_OK, OCStop());
1426 TEST(StackResourceAccess, DeleteHeadResource)
1428 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1429 OC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1430 InitStack(OC_SERVER);
1432 uint8_t numResources = 0;
1433 uint8_t numExpectedResources = 0;
1435 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1437 OCResourceHandle handle0;
1438 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1444 OC_DISCOVERABLE|OC_OBSERVABLE));
1445 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1446 EXPECT_EQ(++numExpectedResources, numResources);
1448 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1449 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1450 EXPECT_EQ(--numExpectedResources, numResources);
1452 EXPECT_EQ(OC_STACK_OK, OCStop());
1455 TEST(StackResourceAccess, DeleteHeadResource2)
1457 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1458 OC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1459 InitStack(OC_SERVER);
1461 uint8_t numResources = 0;
1462 uint8_t numExpectedResources = 0;
1464 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1465 OCResourceHandle handle0;
1466 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1472 OC_DISCOVERABLE|OC_OBSERVABLE));
1473 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1474 EXPECT_EQ(++numExpectedResources, numResources);
1476 OCResourceHandle handle1;
1477 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1483 OC_DISCOVERABLE|OC_OBSERVABLE));
1484 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1485 EXPECT_EQ(++numExpectedResources, numResources);
1487 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1488 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1489 EXPECT_EQ(--numExpectedResources, numResources);
1491 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
1493 EXPECT_EQ(OC_STACK_OK, OCStop());
1497 TEST(StackResourceAccess, DeleteLastResource)
1499 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1500 OC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1501 InitStack(OC_SERVER);
1503 uint8_t numResources = 0;
1504 uint8_t numExpectedResources = 0;
1506 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1508 OCResourceHandle handle0;
1509 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1515 OC_DISCOVERABLE|OC_OBSERVABLE));
1516 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1517 EXPECT_EQ(++numExpectedResources, numResources);
1519 OCResourceHandle handle1;
1520 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1526 OC_DISCOVERABLE|OC_OBSERVABLE));
1527 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1528 EXPECT_EQ(++numExpectedResources, numResources);
1530 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1531 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1532 EXPECT_EQ(--numExpectedResources, numResources);
1534 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
1536 OCResourceHandle handle2;
1537 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1543 OC_DISCOVERABLE|OC_OBSERVABLE));
1544 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1545 EXPECT_EQ(++numExpectedResources, numResources);
1547 EXPECT_EQ(OC_STACK_OK, OCStop());
1550 TEST(StackResourceAccess, DeleteMiddleResource)
1552 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1553 OC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1554 InitStack(OC_SERVER);
1556 uint8_t numResources = 0;
1557 uint8_t numExpectedResources = 0;
1558 uint8_t resourceIndex = InitResourceIndex();
1560 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1561 resourceIndex = numExpectedResources;
1562 OCResourceHandle handle0;
1563 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1569 OC_DISCOVERABLE|OC_OBSERVABLE));
1570 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1571 EXPECT_EQ(++numExpectedResources, numResources);
1573 OCResourceHandle handle1;
1574 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1580 OC_DISCOVERABLE|OC_OBSERVABLE));
1581 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1582 EXPECT_EQ(++numExpectedResources, numResources);
1584 OCResourceHandle handle2;
1585 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1591 OC_DISCOVERABLE|OC_OBSERVABLE));
1592 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1593 EXPECT_EQ(++numExpectedResources, numResources);
1595 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1596 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1597 EXPECT_EQ(--numExpectedResources, numResources);
1599 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1600 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1602 // Make sure the resource elements are still correct
1603 uint8_t numResourceInterfaces;
1604 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1605 EXPECT_EQ(1, numResourceInterfaces);
1606 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 0);
1607 EXPECT_STREQ("core.rw", resourceInterfaceName);
1609 EXPECT_EQ(OC_STACK_OK, OCStop());
1612 TEST(PODTests, OCHeaderOption)
1614 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1617 TEST(PODTests, OCCallbackData)
1619 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);