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, SetPlatformInfoWithClientMode)
209 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
210 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
212 OCPlatformInfo info =
216 0, 0, 0, 0, 0, 0, 0, 0, 0
218 EXPECT_EQ(OC_STACK_ERROR, OCSetPlatformInfo(info));
219 EXPECT_EQ(OC_STACK_OK, OCStop());
222 TEST(StackStart, SetPlatformInfoWithNoPlatformID)
224 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
225 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
227 OCPlatformInfo info =
231 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, SetPlatformInfoWithNoManufacturerName)
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
249 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
250 EXPECT_EQ(OC_STACK_OK, OCStop());
253 TEST(StackStart, SetPlatformInfoWithZeroLengthManufacturerName)
255 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
256 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
258 OCPlatformInfo info =
261 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
263 info.manufacturerName = (char *) "";
265 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
266 EXPECT_EQ(OC_STACK_OK, OCStop());
269 TEST(StackStart, SetPlatformInfoWithTooLongManufacName)
271 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
272 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
274 OCPlatformInfo info =
277 gTooLongManufacturerName,
278 0, 0, 0, 0, 0, 0, 0, 0, 0
281 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
282 EXPECT_EQ(OC_STACK_OK, OCStop());
285 TEST(StackStart, SetPlatformInfoWithTooLongManufacURL)
287 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
288 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
289 OCPlatformInfo info =
294 0, 0, 0, 0, 0, 0, 0, 0
297 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
298 EXPECT_EQ(OC_STACK_OK, OCStop());
301 TEST(StackDiscovery, DISABLED_DoResourceDeviceDiscovery)
303 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
304 OCCallbackData cbData;
307 OC_LOG(INFO, TAG, "Starting DoResourceDeviceDiscovery test ");
308 InitStack(OC_CLIENT);
310 /* Start a discovery query*/
311 char szQueryUri[64] = { 0 };
312 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
313 cbData.cb = asyncDoResourcesCallback;
314 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
316 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
326 EXPECT_EQ(OC_STACK_OK, OCStop());
329 TEST(StackStop, StackStopWithoutInit)
331 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
332 EXPECT_EQ(OC_STACK_ERROR, OCStop());
335 TEST(StackStop, StackStopRepeated)
337 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
338 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
339 EXPECT_EQ(OC_STACK_OK, OCStop());
340 EXPECT_EQ(OC_STACK_ERROR, OCStop());
343 TEST(StackResource, DISABLED_UpdateResourceNullURI)
345 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
346 OCCallbackData cbData;
349 OC_LOG(INFO, TAG, "Starting UpdateResourceNullURI test");
350 InitStack(OC_CLIENT);
352 /* Start a discovery query*/
353 char szQueryUri[64] = { 0 };
354 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
355 cbData.cb = asyncDoResourcesCallback;
356 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
358 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
368 EXPECT_EQ(OC_STACK_OK, OCStop());
371 TEST(StackResource, CreateResourceBadParams)
373 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
374 OC_LOG(INFO, TAG, "Starting CreateResourceBadParams test");
375 InitStack(OC_SERVER);
377 OCResourceHandle handle;
379 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(NULL, //&handle,
385 OC_DISCOVERABLE|OC_OBSERVABLE));
387 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
393 OC_DISCOVERABLE|OC_OBSERVABLE));
395 // Property bitmask out of range
396 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
402 128));// invalid bitmask for OCResourceProperty
404 EXPECT_EQ(OC_STACK_OK, OCStop());
407 TEST(StackResource, CreateResourceBadUri)
409 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
410 OC_LOG(INFO, TAG, "Starting CreateResourceBadUri test");
411 InitStack(OC_SERVER);
413 const char *uri65 = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL";
415 OCResourceHandle handle;
417 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
423 OC_DISCOVERABLE|OC_OBSERVABLE));
425 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
431 OC_DISCOVERABLE|OC_OBSERVABLE));
433 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
439 OC_DISCOVERABLE|OC_OBSERVABLE));
441 EXPECT_EQ(OC_STACK_OK, OCStop());
444 TEST(StackResource, CreateResourceSuccess)
446 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
447 OC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
448 InitStack(OC_SERVER);
450 OCResourceHandle handle;
451 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
457 OC_DISCOVERABLE|OC_OBSERVABLE));
458 const char *url = OCGetResourceUri(handle);
459 EXPECT_STREQ("/a/led", url);
461 EXPECT_EQ(OC_STACK_OK, OCStop());
464 TEST(StackResource, CreateResourceSuccessWithResourcePolicyPropNone)
466 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
467 OC_LOG(INFO, TAG, "Starting CreateResourceSuccessWithResourcePolicyPropNone test");
468 InitStack(OC_SERVER);
470 OCResourceHandle handle;
471 // the resource is non-discoverable & non-observable by the client.
472 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
478 OC_RES_PROP_NONE));// the resource is non-discoverable &
479 // non-observable by the client.
480 const char* url = OCGetResourceUri(handle);
481 EXPECT_STREQ("/a/led", url);
483 EXPECT_EQ(OC_STACK_OK, OCStop());
486 TEST(StackResource, CreateResourceWithClientStackMode)
488 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
489 OC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
490 InitStack(OC_CLIENT);
492 OCResourceHandle handle;
493 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
499 OC_DISCOVERABLE|OC_OBSERVABLE));
501 EXPECT_EQ(OC_STACK_OK, OCStop());
504 TEST(StackResource, CreateResourceFailDuplicateUri)
506 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
507 OC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
508 InitStack(OC_SERVER);
510 OCResourceHandle handle;
511 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
517 OC_DISCOVERABLE|OC_OBSERVABLE));
518 const char *url = OCGetResourceUri(handle);
519 EXPECT_STREQ("/a/led", url);
521 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
527 OC_DISCOVERABLE|OC_OBSERVABLE));
529 EXPECT_EQ(OC_STACK_OK, OCStop());
532 TEST(StackResource, CreateResourceMultipleResources)
534 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
535 OC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
536 InitStack(OC_SERVER);
538 OCResourceHandle handle1;
539 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
545 OC_DISCOVERABLE|OC_OBSERVABLE));
547 OCResourceHandle handle2;
548 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
554 OC_DISCOVERABLE|OC_OBSERVABLE));
555 OCResourceHandle handle3;
556 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
562 OC_DISCOVERABLE|OC_OBSERVABLE));
564 const char *url = OCGetResourceUri(handle1);
565 EXPECT_STREQ("/a/led1", url);
567 url = OCGetResourceUri(handle2);
568 EXPECT_STREQ("/a/led2", url);
570 url = OCGetResourceUri(handle3);
571 EXPECT_STREQ("/a/led3", url);
573 EXPECT_EQ(OC_STACK_OK, OCStop());
576 TEST(StackResource, CreateResourceBadResoureType)
578 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
579 OC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
580 InitStack(OC_SERVER);
582 OCResourceHandle handle;
583 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
589 OC_DISCOVERABLE|OC_OBSERVABLE));
591 OCResourceHandle handle2;
592 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle2,
598 OC_DISCOVERABLE|OC_OBSERVABLE));
600 EXPECT_EQ(OC_STACK_OK, OCStop());
603 TEST(StackResource, CreateResourceGoodResourceType)
605 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
606 OC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
607 InitStack(OC_SERVER);
609 OCResourceHandle handle;
610 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
616 OC_DISCOVERABLE|OC_OBSERVABLE));
618 EXPECT_EQ(OC_STACK_OK, OCStop());
621 TEST(StackResource, ResourceTypeName)
623 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
624 OC_LOG(INFO, TAG, "Starting ResourceTypeName test");
625 InitStack(OC_SERVER);
627 OCResourceHandle handle;
628 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
634 OC_DISCOVERABLE|OC_OBSERVABLE));
636 uint8_t numResourceTypes;
637 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
638 EXPECT_EQ(1, numResourceTypes);
639 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
640 EXPECT_STREQ("core.led", resourceTypeName);
642 // try getting resource type names with an invalid index
643 resourceTypeName = OCGetResourceTypeName(handle, 1);
644 EXPECT_STREQ(NULL, resourceTypeName);
645 // try getting resource type names with an invalid index
646 resourceTypeName = OCGetResourceTypeName(handle, 10);
647 EXPECT_STREQ(NULL, resourceTypeName);
649 EXPECT_EQ(OC_STACK_OK, OCStop());
652 TEST(StackResource, ResourceTypeAttrRepresentation)
654 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
655 OC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
656 InitStack(OC_SERVER);
658 OCResourceHandle handle;
659 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
665 OC_DISCOVERABLE|OC_OBSERVABLE));
667 uint8_t numResourceTypes;
668 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
669 EXPECT_EQ(1, numResourceTypes);
671 EXPECT_EQ(OC_STACK_OK, OCStop());
674 TEST(StackResource, ResourceTypeInterface)
676 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
677 OC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
678 InitStack(OC_SERVER);
680 OCResourceHandle handle;
681 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
687 OC_DISCOVERABLE|OC_OBSERVABLE));
689 uint8_t numResourceInterfaces;
690 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
691 EXPECT_EQ(1, numResourceInterfaces);
692 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
693 EXPECT_STREQ("core.rw", resourceInterfaceName);
695 // try getting resource interface names with an invalid index
696 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
697 EXPECT_STREQ(NULL, resourceInterfaceName);
698 // try getting resource interface names with an invalid index
699 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
700 EXPECT_STREQ(NULL, resourceInterfaceName);
702 EXPECT_EQ(OC_STACK_OK, OCStop());
705 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
707 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
709 OC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
711 InitStack(OC_SERVER);
713 OCResourceHandle handle;
714 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
720 OC_DISCOVERABLE|OC_OBSERVABLE));
721 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
722 OC_RSRVD_INTERFACE_DEFAULT));
723 uint8_t numResourceInterfaces;
724 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
725 EXPECT_EQ(2, numResourceInterfaces);
727 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
728 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
730 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
731 EXPECT_STREQ("core.rw", interfaceName_2);
733 EXPECT_EQ(OC_STACK_OK, OCStop());
736 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
738 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
740 OC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
742 InitStack(OC_SERVER);
744 OCResourceHandle handle;
745 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
751 OC_DISCOVERABLE|OC_OBSERVABLE));
753 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
754 OC_RSRVD_INTERFACE_DEFAULT));
755 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
756 OC_RSRVD_INTERFACE_DEFAULT));
758 uint8_t numResourceInterfaces;
759 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
760 EXPECT_EQ(2, numResourceInterfaces);
762 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
763 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
765 EXPECT_EQ(OC_STACK_OK, OCStop());
768 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
770 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
772 OC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
774 InitStack(OC_SERVER);
776 OCResourceHandle handle;
777 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
783 OC_DISCOVERABLE|OC_OBSERVABLE));
785 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
787 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
790 uint8_t numResourceInterfaces;
791 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
792 EXPECT_EQ(1, numResourceInterfaces);
794 EXPECT_EQ(OC_STACK_OK, OCStop());
797 TEST(StackResource, ResourceTypeInterfaceMethods)
799 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
800 OC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
801 InitStack(OC_SERVER);
803 OCResourceHandle handle;
804 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
810 OC_DISCOVERABLE|OC_OBSERVABLE));
812 uint8_t numResourceInterfaces;
813 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
814 EXPECT_EQ(1, numResourceInterfaces);
816 EXPECT_EQ(OC_STACK_OK, OCStop());
819 TEST(StackResource, GetResourceProperties)
821 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
822 OC_LOG(INFO, TAG, "Starting GetResourceProperties test");
823 InitStack(OC_SERVER);
825 OCResourceHandle handle;
826 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
832 OC_DISCOVERABLE|OC_OBSERVABLE));
834 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
835 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
837 EXPECT_EQ(OC_STACK_OK, OCStop());
840 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
842 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
843 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
844 InitStack(OC_SERVER);
845 uint8_t numResources = 0;
846 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
848 OCResourceHandle handle;
849 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
855 OC_DISCOVERABLE|OC_OBSERVABLE));
856 const char *url = OCGetResourceUri(handle);
857 EXPECT_STREQ("/a1/led", url);
859 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
860 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
861 uint8_t numExpectedResources = 0;
863 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
864 EXPECT_EQ(numExpectedResources, numResources);
866 EXPECT_EQ(OC_STACK_OK, OCStop());
869 TEST(StackResource, StackTestResourceDiscoverOneResource)
871 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
872 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
873 InitStack(OC_SERVER);
875 OCResourceHandle handle;
876 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
882 OC_DISCOVERABLE|OC_OBSERVABLE));
883 const char *url = OCGetResourceUri(handle);
884 EXPECT_STREQ("/a/led", url);
886 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
887 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
889 EXPECT_EQ(OC_STACK_OK, OCStop());
892 TEST(StackResource, StackTestResourceDiscoverManyResources)
894 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
895 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
896 InitStack(OC_SERVER);
898 OCResourceHandle handle1;
899 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
906 const char *url = OCGetResourceUri(handle1);
907 EXPECT_STREQ("/a/led1", url);
909 OCResourceHandle handle2;
910 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
916 OC_DISCOVERABLE|OC_OBSERVABLE));
917 url = OCGetResourceUri(handle2);
918 EXPECT_STREQ("/a/led2", url);
920 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
921 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
923 OCResourceHandle handle3;
924 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
930 OC_DISCOVERABLE|OC_OBSERVABLE));
931 url = OCGetResourceUri(handle3);
932 EXPECT_STREQ("/a/led3", url);
934 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
935 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
937 OCResourceHandle handle4;
938 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
945 url = OCGetResourceUri(handle4);
946 EXPECT_STREQ("/a/led4", url);
948 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
949 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
950 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
952 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
954 EXPECT_EQ(OC_STACK_OK, OCStop());
957 TEST(StackBind, BindResourceTypeNameBad)
959 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
960 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
961 InitStack(OC_SERVER);
963 OCResourceHandle handle;
964 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
970 OC_DISCOVERABLE|OC_OBSERVABLE));
972 uint8_t numResourceTypes;
973 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
974 EXPECT_EQ(1, numResourceTypes);
975 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
976 EXPECT_STREQ("core.led", resourceTypeName);
978 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
980 EXPECT_EQ(OC_STACK_OK, OCStop());
983 TEST(StackBind, BindResourceTypeNameGood)
985 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
986 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
987 InitStack(OC_SERVER);
989 OCResourceHandle handle;
990 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
996 OC_DISCOVERABLE|OC_OBSERVABLE));
998 uint8_t numResourceTypes;
999 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1000 EXPECT_EQ(1, numResourceTypes);
1001 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
1002 EXPECT_STREQ("core.led", resourceTypeName);
1004 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1005 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1006 EXPECT_EQ(2, numResourceTypes);
1007 resourceTypeName = OCGetResourceTypeName(handle, 1);
1008 EXPECT_STREQ("core.brightled", resourceTypeName);
1010 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1011 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1012 EXPECT_EQ(3, numResourceTypes);
1013 resourceTypeName = OCGetResourceTypeName(handle, 2);
1014 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
1016 EXPECT_EQ(OC_STACK_OK, OCStop());
1019 TEST(StackBind, BindResourceTypeAttribRepGood)
1021 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1022 OC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
1023 InitStack(OC_SERVER);
1025 OCResourceHandle handle;
1026 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1032 OC_DISCOVERABLE|OC_OBSERVABLE));
1034 uint8_t numResourceTypes;
1035 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1036 EXPECT_EQ(1, numResourceTypes);
1038 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1039 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1040 EXPECT_EQ(2, numResourceTypes);
1042 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1043 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1044 EXPECT_EQ(3, numResourceTypes);
1046 EXPECT_EQ(OC_STACK_OK, OCStop());
1050 TEST(StackBind, BindResourceInterfaceNameBad)
1052 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1053 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
1054 InitStack(OC_SERVER);
1056 OCResourceHandle handle;
1057 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1063 OC_DISCOVERABLE|OC_OBSERVABLE));
1065 uint8_t numResourceInterfaces;
1066 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1067 EXPECT_EQ(1, numResourceInterfaces);
1068 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
1069 EXPECT_STREQ("core.rw", resourceInterfaceName);
1071 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
1073 EXPECT_EQ(OC_STACK_OK, OCStop());
1076 TEST(StackBind, BindResourceInterfaceNameGood)
1078 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1079 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
1080 InitStack(OC_SERVER);
1082 OCResourceHandle handle;
1083 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1089 OC_DISCOVERABLE|OC_OBSERVABLE));
1091 uint8_t numResourceInterfaces;
1092 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1093 EXPECT_EQ(1, numResourceInterfaces);
1094 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
1095 EXPECT_STREQ("core.rw", resourceInterfaceName);
1097 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1099 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1100 EXPECT_EQ(2, numResourceInterfaces);
1101 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1102 EXPECT_STREQ("core.r", resourceInterfaceName);
1104 EXPECT_EQ(OC_STACK_OK, OCStop());
1107 TEST(StackBind, BindResourceInterfaceMethodsBad)
1109 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1110 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
1111 InitStack(OC_SERVER);
1113 OCResourceHandle handle;
1114 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1120 OC_DISCOVERABLE|OC_OBSERVABLE));
1122 uint8_t numResourceInterfaces;
1123 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1124 EXPECT_EQ(1, numResourceInterfaces);
1126 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1128 EXPECT_EQ(OC_STACK_OK, OCStop());
1131 TEST(StackBind, BindResourceInterfaceMethodsGood)
1133 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1134 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
1135 InitStack(OC_SERVER);
1137 OCResourceHandle handle;
1138 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1144 OC_DISCOVERABLE|OC_OBSERVABLE));
1146 uint8_t numResourceInterfaces;
1147 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1148 EXPECT_EQ(1, numResourceInterfaces);
1150 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1152 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1153 EXPECT_EQ(2, numResourceInterfaces);
1155 EXPECT_EQ(OC_STACK_OK, OCStop());
1158 TEST(StackBind, BindContainedResourceBad)
1160 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1161 OC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1162 InitStack(OC_SERVER);
1164 OCResourceHandle containerHandle;
1165 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1171 OC_DISCOVERABLE|OC_OBSERVABLE));
1173 OCResourceHandle handle0;
1174 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1180 OC_DISCOVERABLE|OC_OBSERVABLE));
1182 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1184 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1186 EXPECT_EQ(OC_STACK_OK, OCStop());
1189 TEST(StackBind, BindContainedResourceGood)
1191 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1192 OC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1193 InitStack(OC_SERVER);
1195 uint8_t numResources = 0;
1196 uint8_t numExpectedResources = 0;
1198 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1200 OCResourceHandle containerHandle;
1201 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1207 OC_DISCOVERABLE|OC_OBSERVABLE));
1208 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1209 EXPECT_EQ(++numExpectedResources, numResources);
1211 OCResourceHandle handle0;
1212 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1218 OC_DISCOVERABLE|OC_OBSERVABLE));
1219 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1220 EXPECT_EQ(++numExpectedResources, numResources);
1222 OCResourceHandle handle1;
1223 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1229 OC_DISCOVERABLE|OC_OBSERVABLE));
1230 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1231 EXPECT_EQ(++numExpectedResources, numResources);
1233 OCResourceHandle handle2;
1234 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1240 OC_DISCOVERABLE|OC_OBSERVABLE));
1241 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1242 EXPECT_EQ(++numExpectedResources, numResources);
1244 OCResourceHandle handle3;
1245 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1251 OC_DISCOVERABLE|OC_OBSERVABLE));
1252 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1253 EXPECT_EQ(++numExpectedResources, numResources);
1255 OCResourceHandle handle4;
1256 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1262 OC_DISCOVERABLE|OC_OBSERVABLE));
1263 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1264 EXPECT_EQ(++numExpectedResources, numResources);
1266 OCResourceHandle handle5;
1267 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1273 OC_DISCOVERABLE|OC_OBSERVABLE));
1274 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1275 EXPECT_EQ(++numExpectedResources, numResources);
1278 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1279 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1280 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1281 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1282 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1283 EXPECT_EQ(OC_STACK_ERROR, OCBindResource(containerHandle, handle5));
1285 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1286 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1287 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1288 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1289 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1291 EXPECT_EQ(NULL, OCGetResourceHandleFromCollection(containerHandle, 5));
1293 EXPECT_EQ(OC_STACK_OK, OCStop());
1297 TEST(StackBind, BindEntityHandlerBad)
1299 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1300 OC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1301 InitStack(OC_SERVER);
1303 OCResourceHandle handle;
1304 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1310 OC_DISCOVERABLE|OC_OBSERVABLE));
1312 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL, NULL));
1314 EXPECT_EQ(OC_STACK_OK, OCStop());
1317 TEST(StackBind, BindEntityHandlerGood)
1319 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1320 OC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1321 InitStack(OC_SERVER);
1323 OCResourceHandle handle;
1324 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1330 OC_DISCOVERABLE|OC_OBSERVABLE));
1332 OCEntityHandler myHandler = entityHandler;
1334 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler, NULL));
1336 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1338 EXPECT_EQ(OC_STACK_OK, OCStop());
1341 TEST(StackResourceAccess, GetResourceByIndex)
1343 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1344 OC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1345 InitStack(OC_SERVER);
1347 uint8_t numResources = 0;
1348 uint8_t numExpectedResources = 0;
1349 uint8_t resourceIndex = 0;
1350 uint8_t prevResources = 0;
1351 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1352 prevResources = numExpectedResources;
1353 OCResourceHandle containerHandle;
1354 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1360 OC_DISCOVERABLE|OC_OBSERVABLE));
1361 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1362 EXPECT_EQ(++numExpectedResources, numResources);
1364 OCResourceHandle handle0;
1365 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1371 OC_DISCOVERABLE|OC_OBSERVABLE));
1372 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1373 EXPECT_EQ(++numExpectedResources, numResources);
1375 OCResourceHandle handle1;
1376 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1382 OC_DISCOVERABLE|OC_OBSERVABLE));
1383 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1384 EXPECT_EQ(++numExpectedResources, numResources);
1386 OCResourceHandle handle2;
1387 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1393 OC_DISCOVERABLE|OC_OBSERVABLE));
1394 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1395 EXPECT_EQ(++numExpectedResources, numResources);
1397 OCResourceHandle handle3;
1398 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1404 OC_DISCOVERABLE|OC_OBSERVABLE));
1405 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1406 EXPECT_EQ(++numExpectedResources, numResources);
1408 OCResourceHandle handle4;
1409 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1415 OC_DISCOVERABLE|OC_OBSERVABLE));
1416 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1417 EXPECT_EQ(++numExpectedResources, numResources);
1419 OCResourceHandle handle5;
1420 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1426 OC_DISCOVERABLE|OC_OBSERVABLE));
1427 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1428 EXPECT_EQ(++numExpectedResources, numResources);
1429 resourceIndex += prevResources;
1430 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1431 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1432 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1433 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1434 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1435 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1436 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1438 EXPECT_EQ(OC_STACK_OK, OCStop());
1441 TEST(StackResourceAccess, DeleteHeadResource)
1443 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1444 OC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1445 InitStack(OC_SERVER);
1447 uint8_t numResources = 0;
1448 uint8_t numExpectedResources = 0;
1450 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1452 OCResourceHandle handle0;
1453 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1459 OC_DISCOVERABLE|OC_OBSERVABLE));
1460 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1461 EXPECT_EQ(++numExpectedResources, numResources);
1463 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1464 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1465 EXPECT_EQ(--numExpectedResources, numResources);
1467 EXPECT_EQ(OC_STACK_OK, OCStop());
1470 TEST(StackResourceAccess, DeleteHeadResource2)
1472 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1473 OC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1474 InitStack(OC_SERVER);
1476 uint8_t numResources = 0;
1477 uint8_t numExpectedResources = 0;
1479 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1480 OCResourceHandle handle0;
1481 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1487 OC_DISCOVERABLE|OC_OBSERVABLE));
1488 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1489 EXPECT_EQ(++numExpectedResources, numResources);
1491 OCResourceHandle handle1;
1492 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1498 OC_DISCOVERABLE|OC_OBSERVABLE));
1499 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1500 EXPECT_EQ(++numExpectedResources, numResources);
1502 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1503 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1504 EXPECT_EQ(--numExpectedResources, numResources);
1506 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
1508 EXPECT_EQ(OC_STACK_OK, OCStop());
1512 TEST(StackResourceAccess, DeleteLastResource)
1514 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1515 OC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1516 InitStack(OC_SERVER);
1518 uint8_t numResources = 0;
1519 uint8_t numExpectedResources = 0;
1521 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1523 OCResourceHandle handle0;
1524 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1530 OC_DISCOVERABLE|OC_OBSERVABLE));
1531 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1532 EXPECT_EQ(++numExpectedResources, numResources);
1534 OCResourceHandle handle1;
1535 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1541 OC_DISCOVERABLE|OC_OBSERVABLE));
1542 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1543 EXPECT_EQ(++numExpectedResources, numResources);
1545 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1546 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1547 EXPECT_EQ(--numExpectedResources, numResources);
1549 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
1551 OCResourceHandle handle2;
1552 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1558 OC_DISCOVERABLE|OC_OBSERVABLE));
1559 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1560 EXPECT_EQ(++numExpectedResources, numResources);
1562 EXPECT_EQ(OC_STACK_OK, OCStop());
1565 TEST(StackResourceAccess, DeleteMiddleResource)
1567 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1568 OC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1569 InitStack(OC_SERVER);
1571 uint8_t numResources = 0;
1572 uint8_t numExpectedResources = 0;
1573 uint8_t resourceIndex = InitResourceIndex();
1575 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1576 resourceIndex = numExpectedResources;
1577 OCResourceHandle handle0;
1578 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1584 OC_DISCOVERABLE|OC_OBSERVABLE));
1585 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1586 EXPECT_EQ(++numExpectedResources, numResources);
1588 OCResourceHandle handle1;
1589 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1595 OC_DISCOVERABLE|OC_OBSERVABLE));
1596 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1597 EXPECT_EQ(++numExpectedResources, numResources);
1599 OCResourceHandle handle2;
1600 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1606 OC_DISCOVERABLE|OC_OBSERVABLE));
1607 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1608 EXPECT_EQ(++numExpectedResources, numResources);
1610 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1611 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1612 EXPECT_EQ(--numExpectedResources, numResources);
1614 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1615 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1617 // Make sure the resource elements are still correct
1618 uint8_t numResourceInterfaces;
1619 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1620 EXPECT_EQ(1, numResourceInterfaces);
1621 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 0);
1622 EXPECT_STREQ("core.rw", resourceInterfaceName);
1624 EXPECT_EQ(OC_STACK_OK, OCStop());
1627 TEST(PODTests, OCHeaderOption)
1629 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1632 TEST(PODTests, OCCallbackData)
1634 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);