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 std::chrono::seconds const SHORT_TEST_TIMEOUT = std::chrono::seconds(5);
62 //-----------------------------------------------------------------------------
64 //-----------------------------------------------------------------------------
65 extern "C" OCStackApplicationResult asyncDoResourcesCallback(void* ctx, OCDoHandle handle, OCClientResponse * clientResponse)
67 OC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
69 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
71 if(ctx == (void*)DEFAULT_CONTEXT_VALUE) {
72 OC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
74 OC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
76 return OC_STACK_KEEP_TRANSACTION;
79 //-----------------------------------------------------------------------------
81 //-----------------------------------------------------------------------------
82 OCEntityHandlerResult entityHandler(OCEntityHandlerFlag flag, OCEntityHandlerRequest * entityHandlerRequest,
85 OC_LOG(INFO, TAG, "Entering entityHandler");
90 //-----------------------------------------------------------------------------
92 //-----------------------------------------------------------------------------
93 void InitStack(OCMode mode)
95 OC_LOG(INFO, TAG, "Entering InitStack");
97 EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, mode));
98 OC_LOG(INFO, TAG, "Leaving InitStack");
101 uint8_t InitNumExpectedResources()
104 // When presence is enabled, it is a resource and so is (currently) included
105 // in the returned resource count returned by the OCGetNumberOfResources API.
112 uint8_t InitResourceIndex()
115 // When presence is enabled, it is a resource and so is (currently) included
116 // in the returned resource count returned by the OCGetNumberOfResources API.
117 // The index of the presence resource is 0, so the first user app resource index
124 //-----------------------------------------------------------------------------
126 //-----------------------------------------------------------------------------
128 TEST(StackInit, StackInitNullAddr)
130 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
131 EXPECT_EQ(OC_STACK_OK, OCInit(0, 5683, OC_SERVER));
132 EXPECT_EQ(OC_STACK_OK, OCStop());
135 TEST(StackInit, StackInitNullPort)
137 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
138 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 0, OC_SERVER));
139 EXPECT_EQ(OC_STACK_OK, OCStop());
142 TEST(StackInit, StackInitNullAddrAndPort)
144 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
145 EXPECT_EQ(OC_STACK_OK, OCInit(0, 0, OC_SERVER));
146 EXPECT_EQ(OC_STACK_OK, OCStop());
149 TEST(StackInit, StackInitInvalidMode)
151 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
152 EXPECT_EQ(OC_STACK_ERROR, OCInit(0, 0, (OCMode)10));
153 EXPECT_EQ(OC_STACK_ERROR, OCStop());
156 TEST(StackStart, StackStartSuccessClient)
158 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
159 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
160 EXPECT_EQ(OC_STACK_OK, OCStop());
163 TEST(StackStart, StackStartSuccessServer)
165 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
166 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
167 EXPECT_EQ(OC_STACK_OK, OCStop());
170 TEST(StackStart, StackStartSuccessClientServer)
172 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
173 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT_SERVER));
174 EXPECT_EQ(OC_STACK_OK, OCStop());
177 TEST(StackStart, StackStartSuccessiveInits)
179 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
180 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
181 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.2", 5683, OC_SERVER));
182 EXPECT_EQ(OC_STACK_OK, OCStop());
185 TEST(StackStart, SetPlatformInfoValid)
187 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
188 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
190 OCPlatformInfo info = {};
191 info.platformID = (char *) "platform_id";
192 info.manufacturerName = (char *) "manufac_name";
194 EXPECT_EQ(OC_STACK_OK, OCSetPlatformInfo(info));
195 EXPECT_EQ(OC_STACK_OK, OCStop());
198 TEST(StackStart, SetPlatformInfoWithNoPlatformID)
200 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
201 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
203 OCPlatformInfo info = {};
204 info.manufacturerName = (char *) "manufac_name";
206 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
207 EXPECT_EQ(OC_STACK_OK, OCStop());
210 TEST(StackStart, SetPlatformInfoWithNoManufacturerName)
212 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
213 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
215 OCPlatformInfo info = {};
216 info.platformID = (char *) "platform_id";
218 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
219 EXPECT_EQ(OC_STACK_OK, OCStop());
222 TEST(StackStart, SetPlatformInfoWithZeroLengthManufacturerName)
224 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
225 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
227 OCPlatformInfo info = {};
228 info.platformID = (char *) "platform_id";
229 info.manufacturerName = (char *) "";
231 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
232 EXPECT_EQ(OC_STACK_OK, OCStop());
235 TEST(StackStart, SetPlatformInfoWithTooLongManufacName)
237 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
238 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
240 OCPlatformInfo info = {};
241 info.platformID = (char *) "platform_id";
242 info.manufacturerName = (char *) "extremelylongmanufacturername";
244 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
245 EXPECT_EQ(OC_STACK_OK, OCStop());
248 TEST(StackStart, SetPlatformInfoWithTooLongManufacURL)
250 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
251 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
253 OCPlatformInfo info = {};
254 info.platformID = (char *) "platform_id";
255 info.manufacturerName = (char *) "extremelylongmanufacturername";
256 info.manufacturerUrl = (char *)"www.foooooooooooooooo.baaaaaaaaaaaaar";
258 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
259 EXPECT_EQ(OC_STACK_OK, OCStop());
263 TEST(StackDiscovery, DISABLED_DoResourceDeviceDiscovery)
265 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
266 OCCallbackData cbData;
269 OC_LOG(INFO, TAG, "Starting DoResourceDeviceDiscovery test ");
270 InitStack(OC_CLIENT);
272 /* Start a discovery query*/
273 char szQueryUri[64] = { 0 };
274 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
275 cbData.cb = asyncDoResourcesCallback;
276 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
278 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
288 EXPECT_EQ(OC_STACK_OK, OCStop());
291 TEST(StackStop, StackStopWithoutInit)
293 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
294 EXPECT_EQ(OC_STACK_ERROR, OCStop());
297 TEST(StackStop, StackStopRepeated)
299 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
300 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
301 EXPECT_EQ(OC_STACK_OK, OCStop());
302 EXPECT_EQ(OC_STACK_ERROR, OCStop());
305 TEST(StackResource, DISABLED_UpdateResourceNullURI)
307 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
308 OCCallbackData cbData;
311 OC_LOG(INFO, TAG, "Starting UpdateResourceNullURI test");
312 InitStack(OC_CLIENT);
314 /* Start a discovery query*/
315 char szQueryUri[64] = { 0 };
316 strcpy(szQueryUri, OC_RSRVD_WELL_KNOWN_URI);
317 cbData.cb = asyncDoResourcesCallback;
318 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
320 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
330 EXPECT_EQ(OC_STACK_OK, OCStop());
333 TEST(StackResource, CreateResourceBadParams)
335 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
336 OC_LOG(INFO, TAG, "Starting CreateResourceBadParams test");
337 InitStack(OC_SERVER);
339 OCResourceHandle handle;
341 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(NULL, //&handle,
347 OC_DISCOVERABLE|OC_OBSERVABLE));
349 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
355 OC_DISCOVERABLE|OC_OBSERVABLE));
357 // Property bitmask out of range
358 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
364 128));// invalid bitmask for OCResourceProperty
366 EXPECT_EQ(OC_STACK_OK, OCStop());
369 TEST(StackResource, CreateResourceBadUri)
371 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
372 OC_LOG(INFO, TAG, "Starting CreateResourceBadUri test");
373 InitStack(OC_SERVER);
375 const char *uri65 = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL";
377 OCResourceHandle handle;
379 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
385 OC_DISCOVERABLE|OC_OBSERVABLE));
387 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
393 OC_DISCOVERABLE|OC_OBSERVABLE));
395 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
401 OC_DISCOVERABLE|OC_OBSERVABLE));
403 EXPECT_EQ(OC_STACK_OK, OCStop());
406 TEST(StackResource, CreateResourceSuccess)
408 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
409 OC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
410 InitStack(OC_SERVER);
412 OCResourceHandle handle;
413 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
419 OC_DISCOVERABLE|OC_OBSERVABLE));
420 const char *url = OCGetResourceUri(handle);
421 EXPECT_STREQ("/a/led", url);
423 EXPECT_EQ(OC_STACK_OK, OCStop());
426 TEST(StackResource, CreateResourceSuccessWithResourcePolicyPropNone)
428 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
429 OC_LOG(INFO, TAG, "Starting CreateResourceSuccessWithResourcePolicyPropNone test");
430 InitStack(OC_SERVER);
432 OCResourceHandle handle;
433 // the resource is non-discoverable & non-observable by the client.
434 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
440 OC_RES_PROP_NONE));// the resource is non-discoverable &
441 // non-observable by the client.
442 const char* url = OCGetResourceUri(handle);
443 EXPECT_STREQ("/a/led", url);
445 EXPECT_EQ(OC_STACK_OK, OCStop());
448 TEST(StackResource, CreateResourceWithClientStackMode)
450 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
451 OC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
452 InitStack(OC_CLIENT);
454 OCResourceHandle handle;
455 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
461 OC_DISCOVERABLE|OC_OBSERVABLE));
463 EXPECT_EQ(OC_STACK_OK, OCStop());
466 TEST(StackResource, CreateResourceFailDuplicateUri)
468 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
469 OC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
470 InitStack(OC_SERVER);
472 OCResourceHandle handle;
473 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
479 OC_DISCOVERABLE|OC_OBSERVABLE));
480 const char *url = OCGetResourceUri(handle);
481 EXPECT_STREQ("/a/led", url);
483 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
489 OC_DISCOVERABLE|OC_OBSERVABLE));
491 EXPECT_EQ(OC_STACK_OK, OCStop());
494 TEST(StackResource, CreateResourceMultipleResources)
496 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
497 OC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
498 InitStack(OC_SERVER);
500 OCResourceHandle handle1;
501 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
507 OC_DISCOVERABLE|OC_OBSERVABLE));
509 OCResourceHandle handle2;
510 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
516 OC_DISCOVERABLE|OC_OBSERVABLE));
517 OCResourceHandle handle3;
518 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
524 OC_DISCOVERABLE|OC_OBSERVABLE));
526 const char *url = OCGetResourceUri(handle1);
527 EXPECT_STREQ("/a/led1", url);
529 url = OCGetResourceUri(handle2);
530 EXPECT_STREQ("/a/led2", url);
532 url = OCGetResourceUri(handle3);
533 EXPECT_STREQ("/a/led3", url);
535 EXPECT_EQ(OC_STACK_OK, OCStop());
538 TEST(StackResource, CreateResourceBadResoureType)
540 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
541 OC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
542 InitStack(OC_SERVER);
544 OCResourceHandle handle;
545 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
551 OC_DISCOVERABLE|OC_OBSERVABLE));
553 OCResourceHandle handle2;
554 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle2,
560 OC_DISCOVERABLE|OC_OBSERVABLE));
562 EXPECT_EQ(OC_STACK_OK, OCStop());
565 TEST(StackResource, CreateResourceGoodResourceType)
567 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
568 OC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
569 InitStack(OC_SERVER);
571 OCResourceHandle handle;
572 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
578 OC_DISCOVERABLE|OC_OBSERVABLE));
580 EXPECT_EQ(OC_STACK_OK, OCStop());
583 TEST(StackResource, ResourceTypeName)
585 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
586 OC_LOG(INFO, TAG, "Starting ResourceTypeName test");
587 InitStack(OC_SERVER);
589 OCResourceHandle handle;
590 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
596 OC_DISCOVERABLE|OC_OBSERVABLE));
598 uint8_t numResourceTypes;
599 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
600 EXPECT_EQ(1, numResourceTypes);
601 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
602 EXPECT_STREQ("core.led", resourceTypeName);
604 // try getting resource type names with an invalid index
605 resourceTypeName = OCGetResourceTypeName(handle, 1);
606 EXPECT_STREQ(NULL, resourceTypeName);
607 // try getting resource type names with an invalid index
608 resourceTypeName = OCGetResourceTypeName(handle, 10);
609 EXPECT_STREQ(NULL, resourceTypeName);
611 EXPECT_EQ(OC_STACK_OK, OCStop());
614 TEST(StackResource, ResourceTypeAttrRepresentation)
616 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
617 OC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
618 InitStack(OC_SERVER);
620 OCResourceHandle handle;
621 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
627 OC_DISCOVERABLE|OC_OBSERVABLE));
629 uint8_t numResourceTypes;
630 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
631 EXPECT_EQ(1, numResourceTypes);
633 EXPECT_EQ(OC_STACK_OK, OCStop());
636 TEST(StackResource, ResourceTypeInterface)
638 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
639 OC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
640 InitStack(OC_SERVER);
642 OCResourceHandle handle;
643 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
649 OC_DISCOVERABLE|OC_OBSERVABLE));
651 uint8_t numResourceInterfaces;
652 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
653 EXPECT_EQ(1, numResourceInterfaces);
654 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
655 EXPECT_STREQ("core.rw", resourceInterfaceName);
657 // try getting resource interface names with an invalid index
658 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
659 EXPECT_STREQ(NULL, resourceInterfaceName);
660 // try getting resource interface names with an invalid index
661 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
662 EXPECT_STREQ(NULL, resourceInterfaceName);
664 EXPECT_EQ(OC_STACK_OK, OCStop());
667 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
669 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
671 OC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
673 InitStack(OC_SERVER);
675 OCResourceHandle handle;
676 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
682 OC_DISCOVERABLE|OC_OBSERVABLE));
683 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
684 OC_RSRVD_INTERFACE_DEFAULT));
685 uint8_t numResourceInterfaces;
686 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
687 EXPECT_EQ(2, numResourceInterfaces);
689 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
690 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
692 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
693 EXPECT_STREQ("core.rw", interfaceName_2);
695 EXPECT_EQ(OC_STACK_OK, OCStop());
698 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
700 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
702 OC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
704 InitStack(OC_SERVER);
706 OCResourceHandle handle;
707 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
713 OC_DISCOVERABLE|OC_OBSERVABLE));
715 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
716 OC_RSRVD_INTERFACE_DEFAULT));
717 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
718 OC_RSRVD_INTERFACE_DEFAULT));
720 uint8_t numResourceInterfaces;
721 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
722 EXPECT_EQ(2, numResourceInterfaces);
724 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
725 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
727 EXPECT_EQ(OC_STACK_OK, OCStop());
730 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
732 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
734 OC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
736 InitStack(OC_SERVER);
738 OCResourceHandle handle;
739 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
745 OC_DISCOVERABLE|OC_OBSERVABLE));
747 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
749 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
752 uint8_t numResourceInterfaces;
753 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
754 EXPECT_EQ(1, numResourceInterfaces);
756 EXPECT_EQ(OC_STACK_OK, OCStop());
759 TEST(StackResource, ResourceTypeInterfaceMethods)
761 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
762 OC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
763 InitStack(OC_SERVER);
765 OCResourceHandle handle;
766 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
772 OC_DISCOVERABLE|OC_OBSERVABLE));
774 uint8_t numResourceInterfaces;
775 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
776 EXPECT_EQ(1, numResourceInterfaces);
778 EXPECT_EQ(OC_STACK_OK, OCStop());
781 TEST(StackResource, GetResourceProperties)
783 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
784 OC_LOG(INFO, TAG, "Starting GetResourceProperties test");
785 InitStack(OC_SERVER);
787 OCResourceHandle handle;
788 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
794 OC_DISCOVERABLE|OC_OBSERVABLE));
796 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
797 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
799 EXPECT_EQ(OC_STACK_OK, OCStop());
802 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
804 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
805 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
806 InitStack(OC_SERVER);
807 uint8_t numResources = 0;
808 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
810 OCResourceHandle handle;
811 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
817 OC_DISCOVERABLE|OC_OBSERVABLE));
818 const char *url = OCGetResourceUri(handle);
819 EXPECT_STREQ("/a1/led", url);
821 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
822 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
823 uint8_t numExpectedResources = 0;
825 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
826 EXPECT_EQ(numExpectedResources, numResources);
828 EXPECT_EQ(OC_STACK_OK, OCStop());
831 TEST(StackResource, StackTestResourceDiscoverOneResource)
833 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
834 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
835 InitStack(OC_SERVER);
837 OCResourceHandle handle;
838 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
844 OC_DISCOVERABLE|OC_OBSERVABLE));
845 const char *url = OCGetResourceUri(handle);
846 EXPECT_STREQ("/a/led", url);
848 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
849 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
851 EXPECT_EQ(OC_STACK_OK, OCStop());
854 TEST(StackResource, StackTestResourceDiscoverManyResources)
856 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
857 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
858 InitStack(OC_SERVER);
860 OCResourceHandle handle1;
861 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
868 const char *url = OCGetResourceUri(handle1);
869 EXPECT_STREQ("/a/led1", url);
871 OCResourceHandle handle2;
872 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
878 OC_DISCOVERABLE|OC_OBSERVABLE));
879 url = OCGetResourceUri(handle2);
880 EXPECT_STREQ("/a/led2", url);
882 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
883 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
885 OCResourceHandle handle3;
886 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
892 OC_DISCOVERABLE|OC_OBSERVABLE));
893 url = OCGetResourceUri(handle3);
894 EXPECT_STREQ("/a/led3", url);
896 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
897 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
899 OCResourceHandle handle4;
900 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
907 url = OCGetResourceUri(handle4);
908 EXPECT_STREQ("/a/led4", url);
910 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
911 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
912 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
914 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
916 EXPECT_EQ(OC_STACK_OK, OCStop());
919 TEST(StackBind, BindResourceTypeNameBad)
921 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
922 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
923 InitStack(OC_SERVER);
925 OCResourceHandle handle;
926 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
932 OC_DISCOVERABLE|OC_OBSERVABLE));
934 uint8_t numResourceTypes;
935 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
936 EXPECT_EQ(1, numResourceTypes);
937 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
938 EXPECT_STREQ("core.led", resourceTypeName);
940 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
942 EXPECT_EQ(OC_STACK_OK, OCStop());
945 TEST(StackBind, BindResourceTypeNameGood)
947 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
948 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
949 InitStack(OC_SERVER);
951 OCResourceHandle handle;
952 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
958 OC_DISCOVERABLE|OC_OBSERVABLE));
960 uint8_t numResourceTypes;
961 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
962 EXPECT_EQ(1, numResourceTypes);
963 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
964 EXPECT_STREQ("core.led", resourceTypeName);
966 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
967 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
968 EXPECT_EQ(2, numResourceTypes);
969 resourceTypeName = OCGetResourceTypeName(handle, 1);
970 EXPECT_STREQ("core.brightled", resourceTypeName);
972 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
973 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
974 EXPECT_EQ(3, numResourceTypes);
975 resourceTypeName = OCGetResourceTypeName(handle, 2);
976 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
978 EXPECT_EQ(OC_STACK_OK, OCStop());
981 TEST(StackBind, BindResourceTypeAttribRepGood)
983 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
984 OC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
985 InitStack(OC_SERVER);
987 OCResourceHandle handle;
988 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
994 OC_DISCOVERABLE|OC_OBSERVABLE));
996 uint8_t numResourceTypes;
997 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
998 EXPECT_EQ(1, numResourceTypes);
1000 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
1001 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1002 EXPECT_EQ(2, numResourceTypes);
1004 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
1005 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
1006 EXPECT_EQ(3, numResourceTypes);
1008 EXPECT_EQ(OC_STACK_OK, OCStop());
1012 TEST(StackBind, BindResourceInterfaceNameBad)
1014 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1015 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
1016 InitStack(OC_SERVER);
1018 OCResourceHandle handle;
1019 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1025 OC_DISCOVERABLE|OC_OBSERVABLE));
1027 uint8_t numResourceInterfaces;
1028 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1029 EXPECT_EQ(1, numResourceInterfaces);
1030 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
1031 EXPECT_STREQ("core.rw", resourceInterfaceName);
1033 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
1035 EXPECT_EQ(OC_STACK_OK, OCStop());
1038 TEST(StackBind, BindResourceInterfaceNameGood)
1040 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1041 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
1042 InitStack(OC_SERVER);
1044 OCResourceHandle handle;
1045 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1051 OC_DISCOVERABLE|OC_OBSERVABLE));
1053 uint8_t numResourceInterfaces;
1054 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1055 EXPECT_EQ(1, numResourceInterfaces);
1056 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
1057 EXPECT_STREQ("core.rw", resourceInterfaceName);
1059 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1061 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1062 EXPECT_EQ(2, numResourceInterfaces);
1063 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1064 EXPECT_STREQ("core.r", resourceInterfaceName);
1066 EXPECT_EQ(OC_STACK_OK, OCStop());
1069 TEST(StackBind, BindResourceInterfaceMethodsBad)
1071 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1072 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
1073 InitStack(OC_SERVER);
1075 OCResourceHandle handle;
1076 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1082 OC_DISCOVERABLE|OC_OBSERVABLE));
1084 uint8_t numResourceInterfaces;
1085 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1086 EXPECT_EQ(1, numResourceInterfaces);
1088 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1090 EXPECT_EQ(OC_STACK_OK, OCStop());
1093 TEST(StackBind, BindResourceInterfaceMethodsGood)
1095 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1096 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
1097 InitStack(OC_SERVER);
1099 OCResourceHandle handle;
1100 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1106 OC_DISCOVERABLE|OC_OBSERVABLE));
1108 uint8_t numResourceInterfaces;
1109 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1110 EXPECT_EQ(1, numResourceInterfaces);
1112 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1114 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1115 EXPECT_EQ(2, numResourceInterfaces);
1117 EXPECT_EQ(OC_STACK_OK, OCStop());
1120 TEST(StackBind, BindContainedResourceBad)
1122 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1123 OC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1124 InitStack(OC_SERVER);
1126 OCResourceHandle containerHandle;
1127 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1133 OC_DISCOVERABLE|OC_OBSERVABLE));
1135 OCResourceHandle handle0;
1136 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1142 OC_DISCOVERABLE|OC_OBSERVABLE));
1144 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1146 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1148 EXPECT_EQ(OC_STACK_OK, OCStop());
1151 TEST(StackBind, BindContainedResourceGood)
1153 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1154 OC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1155 InitStack(OC_SERVER);
1157 uint8_t numResources = 0;
1158 uint8_t numExpectedResources = 0;
1160 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1162 OCResourceHandle containerHandle;
1163 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1169 OC_DISCOVERABLE|OC_OBSERVABLE));
1170 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1171 EXPECT_EQ(++numExpectedResources, numResources);
1173 OCResourceHandle handle0;
1174 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1180 OC_DISCOVERABLE|OC_OBSERVABLE));
1181 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1182 EXPECT_EQ(++numExpectedResources, numResources);
1184 OCResourceHandle handle1;
1185 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1191 OC_DISCOVERABLE|OC_OBSERVABLE));
1192 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1193 EXPECT_EQ(++numExpectedResources, numResources);
1195 OCResourceHandle handle2;
1196 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1202 OC_DISCOVERABLE|OC_OBSERVABLE));
1203 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1204 EXPECT_EQ(++numExpectedResources, numResources);
1206 OCResourceHandle handle3;
1207 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1213 OC_DISCOVERABLE|OC_OBSERVABLE));
1214 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1215 EXPECT_EQ(++numExpectedResources, numResources);
1217 OCResourceHandle handle4;
1218 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1224 OC_DISCOVERABLE|OC_OBSERVABLE));
1225 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1226 EXPECT_EQ(++numExpectedResources, numResources);
1228 OCResourceHandle handle5;
1229 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1235 OC_DISCOVERABLE|OC_OBSERVABLE));
1236 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1237 EXPECT_EQ(++numExpectedResources, numResources);
1240 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1241 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1242 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1243 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1244 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1245 EXPECT_EQ(OC_STACK_ERROR, OCBindResource(containerHandle, handle5));
1247 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1248 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1249 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1250 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1251 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1253 EXPECT_EQ(NULL, OCGetResourceHandleFromCollection(containerHandle, 5));
1255 EXPECT_EQ(OC_STACK_OK, OCStop());
1259 TEST(StackBind, BindEntityHandlerBad)
1261 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1262 OC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1263 InitStack(OC_SERVER);
1265 OCResourceHandle handle;
1266 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1272 OC_DISCOVERABLE|OC_OBSERVABLE));
1274 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL, NULL));
1276 EXPECT_EQ(OC_STACK_OK, OCStop());
1279 TEST(StackBind, BindEntityHandlerGood)
1281 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1282 OC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1283 InitStack(OC_SERVER);
1285 OCResourceHandle handle;
1286 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1292 OC_DISCOVERABLE|OC_OBSERVABLE));
1294 OCEntityHandler myHandler = entityHandler;
1296 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler, NULL));
1298 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1300 EXPECT_EQ(OC_STACK_OK, OCStop());
1303 TEST(StackResourceAccess, GetResourceByIndex)
1305 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1306 OC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1307 InitStack(OC_SERVER);
1309 uint8_t numResources = 0;
1310 uint8_t numExpectedResources = 0;
1311 uint8_t resourceIndex = 0;
1312 uint8_t prevResources = 0;
1313 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1314 prevResources = numExpectedResources;
1315 OCResourceHandle containerHandle;
1316 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1322 OC_DISCOVERABLE|OC_OBSERVABLE));
1323 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1324 EXPECT_EQ(++numExpectedResources, numResources);
1326 OCResourceHandle handle0;
1327 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1333 OC_DISCOVERABLE|OC_OBSERVABLE));
1334 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1335 EXPECT_EQ(++numExpectedResources, numResources);
1337 OCResourceHandle handle1;
1338 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1344 OC_DISCOVERABLE|OC_OBSERVABLE));
1345 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1346 EXPECT_EQ(++numExpectedResources, numResources);
1348 OCResourceHandle handle2;
1349 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1355 OC_DISCOVERABLE|OC_OBSERVABLE));
1356 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1357 EXPECT_EQ(++numExpectedResources, numResources);
1359 OCResourceHandle handle3;
1360 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1366 OC_DISCOVERABLE|OC_OBSERVABLE));
1367 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1368 EXPECT_EQ(++numExpectedResources, numResources);
1370 OCResourceHandle handle4;
1371 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1377 OC_DISCOVERABLE|OC_OBSERVABLE));
1378 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1379 EXPECT_EQ(++numExpectedResources, numResources);
1381 OCResourceHandle handle5;
1382 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1388 OC_DISCOVERABLE|OC_OBSERVABLE));
1389 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1390 EXPECT_EQ(++numExpectedResources, numResources);
1391 resourceIndex += prevResources;
1392 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1393 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1394 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1395 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1396 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1397 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1398 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1400 EXPECT_EQ(OC_STACK_OK, OCStop());
1403 TEST(StackResourceAccess, DeleteHeadResource)
1405 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1406 OC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1407 InitStack(OC_SERVER);
1409 uint8_t numResources = 0;
1410 uint8_t numExpectedResources = 0;
1412 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1414 OCResourceHandle handle0;
1415 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1421 OC_DISCOVERABLE|OC_OBSERVABLE));
1422 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1423 EXPECT_EQ(++numExpectedResources, numResources);
1425 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1426 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1427 EXPECT_EQ(--numExpectedResources, numResources);
1429 EXPECT_EQ(OC_STACK_OK, OCStop());
1432 TEST(StackResourceAccess, DeleteHeadResource2)
1434 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1435 OC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1436 InitStack(OC_SERVER);
1438 uint8_t numResources = 0;
1439 uint8_t numExpectedResources = 0;
1441 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1442 OCResourceHandle handle0;
1443 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1449 OC_DISCOVERABLE|OC_OBSERVABLE));
1450 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1451 EXPECT_EQ(++numExpectedResources, numResources);
1453 OCResourceHandle handle1;
1454 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1460 OC_DISCOVERABLE|OC_OBSERVABLE));
1461 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1462 EXPECT_EQ(++numExpectedResources, numResources);
1464 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1465 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1466 EXPECT_EQ(--numExpectedResources, numResources);
1468 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
1470 EXPECT_EQ(OC_STACK_OK, OCStop());
1474 TEST(StackResourceAccess, DeleteLastResource)
1476 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1477 OC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1478 InitStack(OC_SERVER);
1480 uint8_t numResources = 0;
1481 uint8_t numExpectedResources = 0;
1483 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1485 OCResourceHandle handle0;
1486 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1492 OC_DISCOVERABLE|OC_OBSERVABLE));
1493 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1494 EXPECT_EQ(++numExpectedResources, numResources);
1496 OCResourceHandle handle1;
1497 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1503 OC_DISCOVERABLE|OC_OBSERVABLE));
1504 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1505 EXPECT_EQ(++numExpectedResources, numResources);
1507 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1508 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1509 EXPECT_EQ(--numExpectedResources, numResources);
1511 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
1513 OCResourceHandle handle2;
1514 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1520 OC_DISCOVERABLE|OC_OBSERVABLE));
1521 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1522 EXPECT_EQ(++numExpectedResources, numResources);
1524 EXPECT_EQ(OC_STACK_OK, OCStop());
1527 TEST(StackResourceAccess, DeleteMiddleResource)
1529 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1530 OC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1531 InitStack(OC_SERVER);
1533 uint8_t numResources = 0;
1534 uint8_t numExpectedResources = 0;
1535 uint8_t resourceIndex = InitResourceIndex();
1537 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1538 resourceIndex = numExpectedResources;
1539 OCResourceHandle handle0;
1540 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1546 OC_DISCOVERABLE|OC_OBSERVABLE));
1547 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1548 EXPECT_EQ(++numExpectedResources, numResources);
1550 OCResourceHandle handle1;
1551 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1557 OC_DISCOVERABLE|OC_OBSERVABLE));
1558 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1559 EXPECT_EQ(++numExpectedResources, numResources);
1561 OCResourceHandle handle2;
1562 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1568 OC_DISCOVERABLE|OC_OBSERVABLE));
1569 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1570 EXPECT_EQ(++numExpectedResources, numResources);
1572 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1573 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1574 EXPECT_EQ(--numExpectedResources, numResources);
1576 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1577 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1579 // Make sure the resource elements are still correct
1580 uint8_t numResourceInterfaces;
1581 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1582 EXPECT_EQ(1, numResourceInterfaces);
1583 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 0);
1584 EXPECT_STREQ("core.rw", resourceInterfaceName);
1586 EXPECT_EQ(OC_STACK_OK, OCStop());
1589 TEST(PODTests, OCHeaderOption)
1591 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1594 TEST(PODTests, OCCallbackData)
1596 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);