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_WELL_KNOWN_QUERY);
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_WELL_KNOWN_QUERY);
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, CreateResourceFailDuplicateUri)
428 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
429 OC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
430 InitStack(OC_SERVER);
432 OCResourceHandle handle;
433 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
439 OC_DISCOVERABLE|OC_OBSERVABLE));
440 const char *url = OCGetResourceUri(handle);
441 EXPECT_STREQ("/a/led", url);
443 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
449 OC_DISCOVERABLE|OC_OBSERVABLE));
451 EXPECT_EQ(OC_STACK_OK, OCStop());
454 TEST(StackResource, CreateResourceMultipleResources)
456 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
457 OC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
458 InitStack(OC_SERVER);
460 OCResourceHandle handle1;
461 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
467 OC_DISCOVERABLE|OC_OBSERVABLE));
469 OCResourceHandle handle2;
470 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
476 OC_DISCOVERABLE|OC_OBSERVABLE));
477 OCResourceHandle handle3;
478 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
484 OC_DISCOVERABLE|OC_OBSERVABLE));
486 const char *url = OCGetResourceUri(handle1);
487 EXPECT_STREQ("/a/led1", url);
489 url = OCGetResourceUri(handle2);
490 EXPECT_STREQ("/a/led2", url);
492 url = OCGetResourceUri(handle3);
493 EXPECT_STREQ("/a/led3", url);
495 EXPECT_EQ(OC_STACK_OK, OCStop());
498 TEST(StackResource, CreateResourceBadResoureType)
500 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
501 OC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
502 InitStack(OC_SERVER);
504 OCResourceHandle handle;
505 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
511 OC_DISCOVERABLE|OC_OBSERVABLE));
513 EXPECT_EQ(OC_STACK_OK, OCStop());
516 TEST(StackResource, CreateResourceGoodResourceType)
518 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
519 OC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
520 InitStack(OC_SERVER);
522 OCResourceHandle handle;
523 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
529 OC_DISCOVERABLE|OC_OBSERVABLE));
531 EXPECT_EQ(OC_STACK_OK, OCStop());
534 TEST(StackResource, ResourceTypeName)
536 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
537 OC_LOG(INFO, TAG, "Starting ResourceTypeName test");
538 InitStack(OC_SERVER);
540 OCResourceHandle handle;
541 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
547 OC_DISCOVERABLE|OC_OBSERVABLE));
549 uint8_t numResourceTypes;
550 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
551 EXPECT_EQ(1, numResourceTypes);
552 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
553 EXPECT_STREQ("core.led", resourceTypeName);
555 // try getting resource type names with an invalid index
556 resourceTypeName = OCGetResourceTypeName(handle, 1);
557 EXPECT_STREQ(NULL, resourceTypeName);
558 // try getting resource type names with an invalid index
559 resourceTypeName = OCGetResourceTypeName(handle, 10);
560 EXPECT_STREQ(NULL, resourceTypeName);
562 EXPECT_EQ(OC_STACK_OK, OCStop());
565 TEST(StackResource, ResourceTypeAttrRepresentation)
567 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
568 OC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
569 InitStack(OC_SERVER);
571 OCResourceHandle handle;
572 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
578 OC_DISCOVERABLE|OC_OBSERVABLE));
580 uint8_t numResourceTypes;
581 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
582 EXPECT_EQ(1, numResourceTypes);
584 EXPECT_EQ(OC_STACK_OK, OCStop());
587 TEST(StackResource, ResourceTypeInterface)
589 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
590 OC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
591 InitStack(OC_SERVER);
593 OCResourceHandle handle;
594 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
600 OC_DISCOVERABLE|OC_OBSERVABLE));
602 uint8_t numResourceInterfaces;
603 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
604 EXPECT_EQ(1, numResourceInterfaces);
605 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
606 EXPECT_STREQ("core.rw", resourceInterfaceName);
608 // try getting resource interface names with an invalid index
609 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
610 EXPECT_STREQ(NULL, resourceInterfaceName);
611 // try getting resource interface names with an invalid index
612 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
613 EXPECT_STREQ(NULL, resourceInterfaceName);
615 EXPECT_EQ(OC_STACK_OK, OCStop());
618 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
620 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
622 OC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
624 InitStack(OC_SERVER);
626 OCResourceHandle handle;
627 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
633 OC_DISCOVERABLE|OC_OBSERVABLE));
634 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
635 OC_RSRVD_INTERFACE_DEFAULT));
636 uint8_t numResourceInterfaces;
637 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
638 EXPECT_EQ(2, numResourceInterfaces);
640 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
641 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
643 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
644 EXPECT_STREQ("core.rw", interfaceName_2);
646 EXPECT_EQ(OC_STACK_OK, OCStop());
649 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
651 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
653 OC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
655 InitStack(OC_SERVER);
657 OCResourceHandle handle;
658 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
664 OC_DISCOVERABLE|OC_OBSERVABLE));
666 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
667 OC_RSRVD_INTERFACE_DEFAULT));
668 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
669 OC_RSRVD_INTERFACE_DEFAULT));
671 uint8_t numResourceInterfaces;
672 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
673 EXPECT_EQ(2, numResourceInterfaces);
675 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
676 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
678 EXPECT_EQ(OC_STACK_OK, OCStop());
681 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
683 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
685 OC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
687 InitStack(OC_SERVER);
689 OCResourceHandle handle;
690 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
696 OC_DISCOVERABLE|OC_OBSERVABLE));
698 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
700 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
703 uint8_t numResourceInterfaces;
704 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
705 EXPECT_EQ(1, numResourceInterfaces);
707 EXPECT_EQ(OC_STACK_OK, OCStop());
710 TEST(StackResource, ResourceTypeInterfaceMethods)
712 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
713 OC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
714 InitStack(OC_SERVER);
716 OCResourceHandle handle;
717 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
723 OC_DISCOVERABLE|OC_OBSERVABLE));
725 uint8_t numResourceInterfaces;
726 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
727 EXPECT_EQ(1, numResourceInterfaces);
729 EXPECT_EQ(OC_STACK_OK, OCStop());
732 TEST(StackResource, GetResourceProperties)
734 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
735 OC_LOG(INFO, TAG, "Starting GetResourceProperties 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_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
748 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
750 EXPECT_EQ(OC_STACK_OK, OCStop());
753 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
755 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
756 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
757 InitStack(OC_SERVER);
758 uint8_t numResources = 0;
759 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
761 OCResourceHandle handle;
762 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
768 OC_DISCOVERABLE|OC_OBSERVABLE));
769 const char *url = OCGetResourceUri(handle);
770 EXPECT_STREQ("/a1/led", url);
772 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
773 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
774 uint8_t numExpectedResources = 0;
776 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
777 EXPECT_EQ(numExpectedResources, numResources);
779 EXPECT_EQ(OC_STACK_OK, OCStop());
782 TEST(StackResource, StackTestResourceDiscoverOneResource)
784 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
785 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
786 InitStack(OC_SERVER);
788 OCResourceHandle handle;
789 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
795 OC_DISCOVERABLE|OC_OBSERVABLE));
796 const char *url = OCGetResourceUri(handle);
797 EXPECT_STREQ("/a/led", url);
799 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
800 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
802 EXPECT_EQ(OC_STACK_OK, OCStop());
805 TEST(StackResource, StackTestResourceDiscoverManyResources)
807 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
808 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
809 InitStack(OC_SERVER);
811 OCResourceHandle handle1;
812 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
819 const char *url = OCGetResourceUri(handle1);
820 EXPECT_STREQ("/a/led1", url);
822 OCResourceHandle handle2;
823 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
829 OC_DISCOVERABLE|OC_OBSERVABLE));
830 url = OCGetResourceUri(handle2);
831 EXPECT_STREQ("/a/led2", url);
833 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
834 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
836 OCResourceHandle handle3;
837 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
843 OC_DISCOVERABLE|OC_OBSERVABLE));
844 url = OCGetResourceUri(handle3);
845 EXPECT_STREQ("/a/led3", url);
847 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
848 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
850 OCResourceHandle handle4;
851 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
858 url = OCGetResourceUri(handle4);
859 EXPECT_STREQ("/a/led4", url);
861 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
862 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
863 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
865 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
867 EXPECT_EQ(OC_STACK_OK, OCStop());
870 TEST(StackBind, BindResourceTypeNameBad)
872 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
873 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
874 InitStack(OC_SERVER);
876 OCResourceHandle handle;
877 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
883 OC_DISCOVERABLE|OC_OBSERVABLE));
885 uint8_t numResourceTypes;
886 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
887 EXPECT_EQ(1, numResourceTypes);
888 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
889 EXPECT_STREQ("core.led", resourceTypeName);
891 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
893 EXPECT_EQ(OC_STACK_OK, OCStop());
896 TEST(StackBind, BindResourceTypeNameGood)
898 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
899 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
900 InitStack(OC_SERVER);
902 OCResourceHandle handle;
903 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
909 OC_DISCOVERABLE|OC_OBSERVABLE));
911 uint8_t numResourceTypes;
912 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
913 EXPECT_EQ(1, numResourceTypes);
914 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
915 EXPECT_STREQ("core.led", resourceTypeName);
917 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
918 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
919 EXPECT_EQ(2, numResourceTypes);
920 resourceTypeName = OCGetResourceTypeName(handle, 1);
921 EXPECT_STREQ("core.brightled", resourceTypeName);
923 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
924 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
925 EXPECT_EQ(3, numResourceTypes);
926 resourceTypeName = OCGetResourceTypeName(handle, 2);
927 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
929 EXPECT_EQ(OC_STACK_OK, OCStop());
932 TEST(StackBind, BindResourceTypeAttribRepGood)
934 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
935 OC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
936 InitStack(OC_SERVER);
938 OCResourceHandle handle;
939 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
945 OC_DISCOVERABLE|OC_OBSERVABLE));
947 uint8_t numResourceTypes;
948 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
949 EXPECT_EQ(1, numResourceTypes);
951 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
952 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
953 EXPECT_EQ(2, numResourceTypes);
955 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
956 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
957 EXPECT_EQ(3, numResourceTypes);
959 EXPECT_EQ(OC_STACK_OK, OCStop());
963 TEST(StackBind, BindResourceInterfaceNameBad)
965 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
966 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
967 InitStack(OC_SERVER);
969 OCResourceHandle handle;
970 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
976 OC_DISCOVERABLE|OC_OBSERVABLE));
978 uint8_t numResourceInterfaces;
979 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
980 EXPECT_EQ(1, numResourceInterfaces);
981 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
982 EXPECT_STREQ("core.rw", resourceInterfaceName);
984 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
986 EXPECT_EQ(OC_STACK_OK, OCStop());
989 TEST(StackBind, BindResourceInterfaceNameGood)
991 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
992 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
993 InitStack(OC_SERVER);
995 OCResourceHandle handle;
996 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1002 OC_DISCOVERABLE|OC_OBSERVABLE));
1004 uint8_t numResourceInterfaces;
1005 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1006 EXPECT_EQ(1, numResourceInterfaces);
1007 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
1008 EXPECT_STREQ("core.rw", resourceInterfaceName);
1010 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1012 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1013 EXPECT_EQ(2, numResourceInterfaces);
1014 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1015 EXPECT_STREQ("core.r", resourceInterfaceName);
1017 EXPECT_EQ(OC_STACK_OK, OCStop());
1020 TEST(StackBind, BindResourceInterfaceMethodsBad)
1022 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1023 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
1024 InitStack(OC_SERVER);
1026 OCResourceHandle handle;
1027 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1033 OC_DISCOVERABLE|OC_OBSERVABLE));
1035 uint8_t numResourceInterfaces;
1036 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1037 EXPECT_EQ(1, numResourceInterfaces);
1039 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1041 EXPECT_EQ(OC_STACK_OK, OCStop());
1044 TEST(StackBind, BindResourceInterfaceMethodsGood)
1046 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1047 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
1048 InitStack(OC_SERVER);
1050 OCResourceHandle handle;
1051 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1057 OC_DISCOVERABLE|OC_OBSERVABLE));
1059 uint8_t numResourceInterfaces;
1060 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1061 EXPECT_EQ(1, numResourceInterfaces);
1063 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1065 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1066 EXPECT_EQ(2, numResourceInterfaces);
1068 EXPECT_EQ(OC_STACK_OK, OCStop());
1071 TEST(StackBind, BindContainedResourceBad)
1073 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1074 OC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1075 InitStack(OC_SERVER);
1077 OCResourceHandle containerHandle;
1078 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1084 OC_DISCOVERABLE|OC_OBSERVABLE));
1086 OCResourceHandle handle0;
1087 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1093 OC_DISCOVERABLE|OC_OBSERVABLE));
1095 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1097 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1099 EXPECT_EQ(OC_STACK_OK, OCStop());
1102 TEST(StackBind, BindContainedResourceGood)
1104 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1105 OC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1106 InitStack(OC_SERVER);
1108 uint8_t numResources = 0;
1109 uint8_t numExpectedResources = 0;
1111 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1113 OCResourceHandle containerHandle;
1114 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1120 OC_DISCOVERABLE|OC_OBSERVABLE));
1121 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1122 EXPECT_EQ(++numExpectedResources, numResources);
1124 OCResourceHandle handle0;
1125 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1131 OC_DISCOVERABLE|OC_OBSERVABLE));
1132 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1133 EXPECT_EQ(++numExpectedResources, numResources);
1135 OCResourceHandle handle1;
1136 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1142 OC_DISCOVERABLE|OC_OBSERVABLE));
1143 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1144 EXPECT_EQ(++numExpectedResources, numResources);
1146 OCResourceHandle handle2;
1147 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1153 OC_DISCOVERABLE|OC_OBSERVABLE));
1154 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1155 EXPECT_EQ(++numExpectedResources, numResources);
1157 OCResourceHandle handle3;
1158 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1164 OC_DISCOVERABLE|OC_OBSERVABLE));
1165 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1166 EXPECT_EQ(++numExpectedResources, numResources);
1168 OCResourceHandle handle4;
1169 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1175 OC_DISCOVERABLE|OC_OBSERVABLE));
1176 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1177 EXPECT_EQ(++numExpectedResources, numResources);
1179 OCResourceHandle handle5;
1180 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1186 OC_DISCOVERABLE|OC_OBSERVABLE));
1187 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1188 EXPECT_EQ(++numExpectedResources, numResources);
1191 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1192 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1193 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1194 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1195 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1196 EXPECT_EQ(OC_STACK_ERROR, OCBindResource(containerHandle, handle5));
1198 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1199 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1200 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1201 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1202 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1204 EXPECT_EQ(NULL, OCGetResourceHandleFromCollection(containerHandle, 5));
1206 EXPECT_EQ(OC_STACK_OK, OCStop());
1210 TEST(StackBind, BindEntityHandlerBad)
1212 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1213 OC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1214 InitStack(OC_SERVER);
1216 OCResourceHandle handle;
1217 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1223 OC_DISCOVERABLE|OC_OBSERVABLE));
1225 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL, NULL));
1227 EXPECT_EQ(OC_STACK_OK, OCStop());
1230 TEST(StackBind, BindEntityHandlerGood)
1232 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1233 OC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1234 InitStack(OC_SERVER);
1236 OCResourceHandle handle;
1237 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1243 OC_DISCOVERABLE|OC_OBSERVABLE));
1245 OCEntityHandler myHandler = entityHandler;
1247 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler, NULL));
1249 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1251 EXPECT_EQ(OC_STACK_OK, OCStop());
1254 TEST(StackResourceAccess, GetResourceByIndex)
1256 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1257 OC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1258 InitStack(OC_SERVER);
1260 uint8_t numResources = 0;
1261 uint8_t numExpectedResources = 0;
1262 uint8_t resourceIndex = 0;
1263 uint8_t prevResources = 0;
1264 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1265 prevResources = numExpectedResources;
1266 OCResourceHandle containerHandle;
1267 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1273 OC_DISCOVERABLE|OC_OBSERVABLE));
1274 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1275 EXPECT_EQ(++numExpectedResources, numResources);
1277 OCResourceHandle handle0;
1278 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1284 OC_DISCOVERABLE|OC_OBSERVABLE));
1285 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1286 EXPECT_EQ(++numExpectedResources, numResources);
1288 OCResourceHandle handle1;
1289 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1295 OC_DISCOVERABLE|OC_OBSERVABLE));
1296 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1297 EXPECT_EQ(++numExpectedResources, numResources);
1299 OCResourceHandle handle2;
1300 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1306 OC_DISCOVERABLE|OC_OBSERVABLE));
1307 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1308 EXPECT_EQ(++numExpectedResources, numResources);
1310 OCResourceHandle handle3;
1311 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1317 OC_DISCOVERABLE|OC_OBSERVABLE));
1318 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1319 EXPECT_EQ(++numExpectedResources, numResources);
1321 OCResourceHandle handle4;
1322 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1328 OC_DISCOVERABLE|OC_OBSERVABLE));
1329 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1330 EXPECT_EQ(++numExpectedResources, numResources);
1332 OCResourceHandle handle5;
1333 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1339 OC_DISCOVERABLE|OC_OBSERVABLE));
1340 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1341 EXPECT_EQ(++numExpectedResources, numResources);
1342 resourceIndex += prevResources;
1343 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1344 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1345 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1346 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1347 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1348 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1349 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1351 EXPECT_EQ(OC_STACK_OK, OCStop());
1354 TEST(StackResourceAccess, DeleteHeadResource)
1356 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1357 OC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1358 InitStack(OC_SERVER);
1360 uint8_t numResources = 0;
1361 uint8_t numExpectedResources = 0;
1363 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1365 OCResourceHandle handle0;
1366 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1372 OC_DISCOVERABLE|OC_OBSERVABLE));
1373 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1374 EXPECT_EQ(++numExpectedResources, numResources);
1376 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1377 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1378 EXPECT_EQ(--numExpectedResources, numResources);
1380 EXPECT_EQ(OC_STACK_OK, OCStop());
1383 TEST(StackResourceAccess, DeleteHeadResource2)
1385 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1386 OC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1387 InitStack(OC_SERVER);
1389 uint8_t numResources = 0;
1390 uint8_t numExpectedResources = 0;
1392 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1393 OCResourceHandle handle0;
1394 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1400 OC_DISCOVERABLE|OC_OBSERVABLE));
1401 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1402 EXPECT_EQ(++numExpectedResources, numResources);
1404 OCResourceHandle handle1;
1405 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1411 OC_DISCOVERABLE|OC_OBSERVABLE));
1412 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1413 EXPECT_EQ(++numExpectedResources, numResources);
1415 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1416 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1417 EXPECT_EQ(--numExpectedResources, numResources);
1419 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
1421 EXPECT_EQ(OC_STACK_OK, OCStop());
1425 TEST(StackResourceAccess, DeleteLastResource)
1427 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1428 OC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1429 InitStack(OC_SERVER);
1431 uint8_t numResources = 0;
1432 uint8_t numExpectedResources = 0;
1434 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1436 OCResourceHandle handle0;
1437 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1443 OC_DISCOVERABLE|OC_OBSERVABLE));
1444 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1445 EXPECT_EQ(++numExpectedResources, numResources);
1447 OCResourceHandle handle1;
1448 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1454 OC_DISCOVERABLE|OC_OBSERVABLE));
1455 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1456 EXPECT_EQ(++numExpectedResources, numResources);
1458 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1459 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1460 EXPECT_EQ(--numExpectedResources, numResources);
1462 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
1464 OCResourceHandle handle2;
1465 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1471 OC_DISCOVERABLE|OC_OBSERVABLE));
1472 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1473 EXPECT_EQ(++numExpectedResources, numResources);
1475 EXPECT_EQ(OC_STACK_OK, OCStop());
1478 TEST(StackResourceAccess, DeleteMiddleResource)
1480 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1481 OC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1482 InitStack(OC_SERVER);
1484 uint8_t numResources = 0;
1485 uint8_t numExpectedResources = 0;
1486 uint8_t resourceIndex = InitResourceIndex();
1488 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1489 resourceIndex = numExpectedResources;
1490 OCResourceHandle handle0;
1491 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1497 OC_DISCOVERABLE|OC_OBSERVABLE));
1498 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1499 EXPECT_EQ(++numExpectedResources, numResources);
1501 OCResourceHandle handle1;
1502 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1508 OC_DISCOVERABLE|OC_OBSERVABLE));
1509 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1510 EXPECT_EQ(++numExpectedResources, numResources);
1512 OCResourceHandle handle2;
1513 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1519 OC_DISCOVERABLE|OC_OBSERVABLE));
1520 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1521 EXPECT_EQ(++numExpectedResources, numResources);
1523 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1524 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1525 EXPECT_EQ(--numExpectedResources, numResources);
1527 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1528 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1530 // Make sure the resource elements are still correct
1531 uint8_t numResourceInterfaces;
1532 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1533 EXPECT_EQ(1, numResourceInterfaces);
1534 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 0);
1535 EXPECT_STREQ("core.rw", resourceInterfaceName);
1537 EXPECT_EQ(OC_STACK_OK, OCStop());
1543 #endif // __cplusplus
1544 void parsePresencePayload(char* payload, uint32_t* seqNum,
1545 uint32_t* maxAge, OCPresenceTrigger* presenceTrigger, char** resType);
1548 #endif // __cplusplus
1550 TEST(StackPresence, ParsePresencePayload)
1552 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1553 OC_LOG(INFO, TAG, "Starting ParsePresencePayload test");
1556 uint32_t seqNum = 0, maxAge = 0;
1557 OCPresenceTrigger presenceTrigger = OC_PRESENCE_TRIGGER_CHANGE;
1558 char * resType = NULL;
1561 strncpy(payload, "{\"oic\":[{\"ttl\":99,\"non\":100,\"trg\":"
1562 "\"delete\",\"rt\":\"presence\"}]}", sizeof(payload));
1563 parsePresencePayload(payload, &seqNum, &maxAge,
1564 &presenceTrigger, &resType);
1565 EXPECT_TRUE(100 == seqNum);
1566 EXPECT_TRUE(99 == maxAge);
1567 EXPECT_TRUE(OC_PRESENCE_TRIGGER_DELETE == presenceTrigger);
1568 EXPECT_TRUE(NULL != resType);
1569 EXPECT_STREQ("presence", resType);
1572 presenceTrigger = OC_PRESENCE_TRIGGER_CHANGE;
1574 //Bad Scenario -- should not result in Seg Fault
1575 parsePresencePayload(payload, NULL, &maxAge, &presenceTrigger, &resType);
1578 seqNum = 0; maxAge = 0; resType = NULL;
1579 strncpy(payload, "{abracadabra}", sizeof(payload));
1580 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1581 EXPECT_TRUE(0 == seqNum);
1582 EXPECT_TRUE(0 == maxAge);
1583 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1584 EXPECT_TRUE(NULL == resType);
1585 EXPECT_EQ(NULL, resType);
1589 seqNum = 0; maxAge = 0; resType = NULL;
1590 strncpy(payload, "{\"oic\":[100]}", sizeof(payload));
1591 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1592 EXPECT_TRUE(0 == seqNum);
1593 EXPECT_TRUE(0 == maxAge);
1594 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1595 EXPECT_TRUE(NULL == resType);
1596 EXPECT_EQ(NULL, resType);
1600 seqNum = 0; maxAge = 0; resType = NULL;
1601 strncpy(payload, "{\"oic\":[]}", sizeof(payload));
1602 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1603 EXPECT_TRUE(0 == seqNum);
1604 EXPECT_TRUE(0 == maxAge);
1605 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1606 EXPECT_TRUE(NULL == resType);
1607 EXPECT_EQ(NULL, resType);
1611 strncpy(payload, "{:]}", sizeof(payload));
1612 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1613 EXPECT_TRUE(0 == seqNum);
1614 EXPECT_TRUE(0 == maxAge);
1615 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1616 EXPECT_TRUE(NULL == resType);
1617 EXPECT_EQ(NULL, resType);
1621 strncpy(payload, "{:[presence}", sizeof(payload));
1622 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1623 EXPECT_TRUE(0 == seqNum);
1624 EXPECT_TRUE(0 == maxAge);
1625 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1626 EXPECT_TRUE(NULL == resType);
1627 EXPECT_EQ(NULL, resType);
1631 TEST(PODTests, OCHeaderOption)
1633 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1636 TEST(PODTests, OCCallbackData)
1638 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);