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_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
295 EXPECT_EQ(OC_STACK_OK, OCStop());
296 EXPECT_EQ(OC_STACK_ERROR, OCStop());
299 TEST(StackResource, DISABLED_UpdateResourceNullURI)
301 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
302 OCCallbackData cbData;
305 OC_LOG(INFO, TAG, "Starting UpdateResourceNullURI test");
306 InitStack(OC_CLIENT);
308 /* Start a discovery query*/
309 char szQueryUri[64] = { 0 };
310 strcpy(szQueryUri, OC_WELL_KNOWN_QUERY);
311 cbData.cb = asyncDoResourcesCallback;
312 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
314 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
324 EXPECT_EQ(OC_STACK_OK, OCStop());
327 TEST(StackResource, CreateResourceBadParams)
329 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
330 OC_LOG(INFO, TAG, "Starting CreateResourceBadParams test");
331 InitStack(OC_SERVER);
333 OCResourceHandle handle;
335 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(NULL, //&handle,
341 OC_DISCOVERABLE|OC_OBSERVABLE));
343 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
349 OC_DISCOVERABLE|OC_OBSERVABLE));
351 // Property bitmask out of range
352 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
358 128));// invalid bitmask for OCResourceProperty
360 EXPECT_EQ(OC_STACK_OK, OCStop());
363 TEST(StackResource, CreateResourceBadUri)
365 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
366 OC_LOG(INFO, TAG, "Starting CreateResourceBadUri test");
367 InitStack(OC_SERVER);
369 const char *uri65 = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL";
371 OCResourceHandle handle;
373 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
379 OC_DISCOVERABLE|OC_OBSERVABLE));
381 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
387 OC_DISCOVERABLE|OC_OBSERVABLE));
389 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
395 OC_DISCOVERABLE|OC_OBSERVABLE));
397 EXPECT_EQ(OC_STACK_OK, OCStop());
400 TEST(StackResource, CreateResourceSuccess)
402 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
403 OC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
404 InitStack(OC_SERVER);
406 OCResourceHandle handle;
407 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
413 OC_DISCOVERABLE|OC_OBSERVABLE));
414 const char *url = OCGetResourceUri(handle);
415 EXPECT_STREQ("/a/led", url);
417 EXPECT_EQ(OC_STACK_OK, OCStop());
420 TEST(StackResource, CreateResourceFailDuplicateUri)
422 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
423 OC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
424 InitStack(OC_SERVER);
426 OCResourceHandle handle;
427 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
433 OC_DISCOVERABLE|OC_OBSERVABLE));
434 const char *url = OCGetResourceUri(handle);
435 EXPECT_STREQ("/a/led", url);
437 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
443 OC_DISCOVERABLE|OC_OBSERVABLE));
445 EXPECT_EQ(OC_STACK_OK, OCStop());
448 TEST(StackResource, CreateResourceMultipleResources)
450 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
451 OC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
452 InitStack(OC_SERVER);
454 OCResourceHandle handle1;
455 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
461 OC_DISCOVERABLE|OC_OBSERVABLE));
463 OCResourceHandle handle2;
464 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
470 OC_DISCOVERABLE|OC_OBSERVABLE));
471 OCResourceHandle handle3;
472 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
478 OC_DISCOVERABLE|OC_OBSERVABLE));
480 const char *url = OCGetResourceUri(handle1);
481 EXPECT_STREQ("/a/led1", url);
483 url = OCGetResourceUri(handle2);
484 EXPECT_STREQ("/a/led2", url);
486 url = OCGetResourceUri(handle3);
487 EXPECT_STREQ("/a/led3", url);
489 EXPECT_EQ(OC_STACK_OK, OCStop());
492 TEST(StackResource, CreateResourceBadResoureType)
494 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
495 OC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
496 InitStack(OC_SERVER);
498 OCResourceHandle handle;
499 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
505 OC_DISCOVERABLE|OC_OBSERVABLE));
507 EXPECT_EQ(OC_STACK_OK, OCStop());
510 TEST(StackResource, CreateResourceGoodResourceType)
512 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
513 OC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
514 InitStack(OC_SERVER);
516 OCResourceHandle handle;
517 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
523 OC_DISCOVERABLE|OC_OBSERVABLE));
525 EXPECT_EQ(OC_STACK_OK, OCStop());
528 TEST(StackResource, ResourceTypeName)
530 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
531 OC_LOG(INFO, TAG, "Starting ResourceTypeName test");
532 InitStack(OC_SERVER);
534 OCResourceHandle handle;
535 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
541 OC_DISCOVERABLE|OC_OBSERVABLE));
543 uint8_t numResourceTypes;
544 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
545 EXPECT_EQ(1, numResourceTypes);
546 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
547 EXPECT_STREQ("core.led", resourceTypeName);
549 // try getting resource type names with an invalid index
550 resourceTypeName = OCGetResourceTypeName(handle, 1);
551 EXPECT_STREQ(NULL, resourceTypeName);
552 // try getting resource type names with an invalid index
553 resourceTypeName = OCGetResourceTypeName(handle, 10);
554 EXPECT_STREQ(NULL, resourceTypeName);
556 EXPECT_EQ(OC_STACK_OK, OCStop());
559 TEST(StackResource, ResourceTypeAttrRepresentation)
561 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
562 OC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
563 InitStack(OC_SERVER);
565 OCResourceHandle handle;
566 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
572 OC_DISCOVERABLE|OC_OBSERVABLE));
574 uint8_t numResourceTypes;
575 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
576 EXPECT_EQ(1, numResourceTypes);
578 EXPECT_EQ(OC_STACK_OK, OCStop());
581 TEST(StackResource, ResourceTypeInterface)
583 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
584 OC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
585 InitStack(OC_SERVER);
587 OCResourceHandle handle;
588 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
594 OC_DISCOVERABLE|OC_OBSERVABLE));
596 uint8_t numResourceInterfaces;
597 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
598 EXPECT_EQ(1, numResourceInterfaces);
599 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
600 EXPECT_STREQ("core.rw", resourceInterfaceName);
602 // try getting resource interface names with an invalid index
603 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
604 EXPECT_STREQ(NULL, resourceInterfaceName);
605 // try getting resource interface names with an invalid index
606 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
607 EXPECT_STREQ(NULL, resourceInterfaceName);
609 EXPECT_EQ(OC_STACK_OK, OCStop());
612 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
614 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
616 OC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
618 InitStack(OC_SERVER);
620 OCResourceHandle handle;
621 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
627 OC_DISCOVERABLE|OC_OBSERVABLE));
628 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
629 OC_RSRVD_INTERFACE_DEFAULT));
630 uint8_t numResourceInterfaces;
631 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
632 EXPECT_EQ(2, numResourceInterfaces);
634 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
635 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
637 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
638 EXPECT_STREQ("core.rw", interfaceName_2);
640 EXPECT_EQ(OC_STACK_OK, OCStop());
643 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
645 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
647 OC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
649 InitStack(OC_SERVER);
651 OCResourceHandle handle;
652 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
658 OC_DISCOVERABLE|OC_OBSERVABLE));
660 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
661 OC_RSRVD_INTERFACE_DEFAULT));
662 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
663 OC_RSRVD_INTERFACE_DEFAULT));
665 uint8_t numResourceInterfaces;
666 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
667 EXPECT_EQ(2, numResourceInterfaces);
669 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
670 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
672 EXPECT_EQ(OC_STACK_OK, OCStop());
675 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
677 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
679 OC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
681 InitStack(OC_SERVER);
683 OCResourceHandle handle;
684 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
690 OC_DISCOVERABLE|OC_OBSERVABLE));
692 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
694 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
697 uint8_t numResourceInterfaces;
698 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
699 EXPECT_EQ(1, numResourceInterfaces);
701 EXPECT_EQ(OC_STACK_OK, OCStop());
704 TEST(StackResource, ResourceTypeInterfaceMethods)
706 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
707 OC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
708 InitStack(OC_SERVER);
710 OCResourceHandle handle;
711 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
717 OC_DISCOVERABLE|OC_OBSERVABLE));
719 uint8_t numResourceInterfaces;
720 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
721 EXPECT_EQ(1, numResourceInterfaces);
723 EXPECT_EQ(OC_STACK_OK, OCStop());
726 TEST(StackResource, GetResourceProperties)
728 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
729 OC_LOG(INFO, TAG, "Starting GetResourceProperties test");
730 InitStack(OC_SERVER);
732 OCResourceHandle handle;
733 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
739 OC_DISCOVERABLE|OC_OBSERVABLE));
741 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
742 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
744 EXPECT_EQ(OC_STACK_OK, OCStop());
747 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
749 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
750 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
751 InitStack(OC_SERVER);
752 uint8_t numResources = 0;
753 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
755 OCResourceHandle handle;
756 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
762 OC_DISCOVERABLE|OC_OBSERVABLE));
763 const char *url = OCGetResourceUri(handle);
764 EXPECT_STREQ("/a1/led", url);
766 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
767 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
768 uint8_t numExpectedResources = 0;
770 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
771 EXPECT_EQ(numExpectedResources, numResources);
773 EXPECT_EQ(OC_STACK_OK, OCStop());
776 TEST(StackResource, StackTestResourceDiscoverOneResource)
778 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
779 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
780 InitStack(OC_SERVER);
782 OCResourceHandle handle;
783 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
789 OC_DISCOVERABLE|OC_OBSERVABLE));
790 const char *url = OCGetResourceUri(handle);
791 EXPECT_STREQ("/a/led", url);
793 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
794 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
796 EXPECT_EQ(OC_STACK_OK, OCStop());
799 TEST(StackResource, StackTestResourceDiscoverManyResources)
801 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
802 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
803 InitStack(OC_SERVER);
805 OCResourceHandle handle1;
806 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
813 const char *url = OCGetResourceUri(handle1);
814 EXPECT_STREQ("/a/led1", url);
816 OCResourceHandle handle2;
817 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
823 OC_DISCOVERABLE|OC_OBSERVABLE));
824 url = OCGetResourceUri(handle2);
825 EXPECT_STREQ("/a/led2", url);
827 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
828 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
830 OCResourceHandle handle3;
831 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
837 OC_DISCOVERABLE|OC_OBSERVABLE));
838 url = OCGetResourceUri(handle3);
839 EXPECT_STREQ("/a/led3", url);
841 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
842 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
844 OCResourceHandle handle4;
845 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
852 url = OCGetResourceUri(handle4);
853 EXPECT_STREQ("/a/led4", url);
855 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
856 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
857 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
859 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
861 EXPECT_EQ(OC_STACK_OK, OCStop());
864 TEST(StackBind, BindResourceTypeNameBad)
866 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
867 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
868 InitStack(OC_SERVER);
870 OCResourceHandle handle;
871 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
877 OC_DISCOVERABLE|OC_OBSERVABLE));
879 uint8_t numResourceTypes;
880 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
881 EXPECT_EQ(1, numResourceTypes);
882 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
883 EXPECT_STREQ("core.led", resourceTypeName);
885 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
887 EXPECT_EQ(OC_STACK_OK, OCStop());
890 TEST(StackBind, BindResourceTypeNameGood)
892 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
893 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
894 InitStack(OC_SERVER);
896 OCResourceHandle handle;
897 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
903 OC_DISCOVERABLE|OC_OBSERVABLE));
905 uint8_t numResourceTypes;
906 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
907 EXPECT_EQ(1, numResourceTypes);
908 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
909 EXPECT_STREQ("core.led", resourceTypeName);
911 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
912 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
913 EXPECT_EQ(2, numResourceTypes);
914 resourceTypeName = OCGetResourceTypeName(handle, 1);
915 EXPECT_STREQ("core.brightled", resourceTypeName);
917 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
918 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
919 EXPECT_EQ(3, numResourceTypes);
920 resourceTypeName = OCGetResourceTypeName(handle, 2);
921 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
923 EXPECT_EQ(OC_STACK_OK, OCStop());
926 TEST(StackBind, BindResourceTypeAttribRepGood)
928 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
929 OC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
930 InitStack(OC_SERVER);
932 OCResourceHandle handle;
933 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
939 OC_DISCOVERABLE|OC_OBSERVABLE));
941 uint8_t numResourceTypes;
942 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
943 EXPECT_EQ(1, numResourceTypes);
945 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
946 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
947 EXPECT_EQ(2, numResourceTypes);
949 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
950 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
951 EXPECT_EQ(3, numResourceTypes);
953 EXPECT_EQ(OC_STACK_OK, OCStop());
957 TEST(StackBind, BindResourceInterfaceNameBad)
959 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
960 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
961 InitStack(OC_SERVER);
963 OCResourceHandle handle;
964 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
970 OC_DISCOVERABLE|OC_OBSERVABLE));
972 uint8_t numResourceInterfaces;
973 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
974 EXPECT_EQ(1, numResourceInterfaces);
975 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
976 EXPECT_STREQ("core.rw", resourceInterfaceName);
978 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
980 EXPECT_EQ(OC_STACK_OK, OCStop());
983 TEST(StackBind, BindResourceInterfaceNameGood)
985 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
986 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
987 InitStack(OC_SERVER);
989 OCResourceHandle handle;
990 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
996 OC_DISCOVERABLE|OC_OBSERVABLE));
998 uint8_t numResourceInterfaces;
999 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1000 EXPECT_EQ(1, numResourceInterfaces);
1001 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
1002 EXPECT_STREQ("core.rw", resourceInterfaceName);
1004 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1006 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1007 EXPECT_EQ(2, numResourceInterfaces);
1008 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1009 EXPECT_STREQ("core.r", resourceInterfaceName);
1011 EXPECT_EQ(OC_STACK_OK, OCStop());
1014 TEST(StackBind, BindResourceInterfaceMethodsBad)
1016 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1017 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
1018 InitStack(OC_SERVER);
1020 OCResourceHandle handle;
1021 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1027 OC_DISCOVERABLE|OC_OBSERVABLE));
1029 uint8_t numResourceInterfaces;
1030 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1031 EXPECT_EQ(1, numResourceInterfaces);
1033 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1035 EXPECT_EQ(OC_STACK_OK, OCStop());
1038 TEST(StackBind, BindResourceInterfaceMethodsGood)
1040 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1041 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood 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);
1057 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1059 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1060 EXPECT_EQ(2, numResourceInterfaces);
1062 EXPECT_EQ(OC_STACK_OK, OCStop());
1065 TEST(StackBind, BindContainedResourceBad)
1067 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1068 OC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1069 InitStack(OC_SERVER);
1071 OCResourceHandle containerHandle;
1072 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1078 OC_DISCOVERABLE|OC_OBSERVABLE));
1080 OCResourceHandle handle0;
1081 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1087 OC_DISCOVERABLE|OC_OBSERVABLE));
1089 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1091 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1093 EXPECT_EQ(OC_STACK_OK, OCStop());
1096 TEST(StackBind, BindContainedResourceGood)
1098 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1099 OC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1100 InitStack(OC_SERVER);
1102 uint8_t numResources = 0;
1103 uint8_t numExpectedResources = 0;
1105 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1107 OCResourceHandle containerHandle;
1108 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1114 OC_DISCOVERABLE|OC_OBSERVABLE));
1115 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1116 EXPECT_EQ(++numExpectedResources, numResources);
1118 OCResourceHandle handle0;
1119 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1125 OC_DISCOVERABLE|OC_OBSERVABLE));
1126 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1127 EXPECT_EQ(++numExpectedResources, numResources);
1129 OCResourceHandle handle1;
1130 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1136 OC_DISCOVERABLE|OC_OBSERVABLE));
1137 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1138 EXPECT_EQ(++numExpectedResources, numResources);
1140 OCResourceHandle handle2;
1141 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1147 OC_DISCOVERABLE|OC_OBSERVABLE));
1148 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1149 EXPECT_EQ(++numExpectedResources, numResources);
1151 OCResourceHandle handle3;
1152 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1158 OC_DISCOVERABLE|OC_OBSERVABLE));
1159 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1160 EXPECT_EQ(++numExpectedResources, numResources);
1162 OCResourceHandle handle4;
1163 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1169 OC_DISCOVERABLE|OC_OBSERVABLE));
1170 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1171 EXPECT_EQ(++numExpectedResources, numResources);
1173 OCResourceHandle handle5;
1174 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1180 OC_DISCOVERABLE|OC_OBSERVABLE));
1181 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1182 EXPECT_EQ(++numExpectedResources, numResources);
1185 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1186 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1187 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1188 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1189 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1190 EXPECT_EQ(OC_STACK_ERROR, OCBindResource(containerHandle, handle5));
1192 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1193 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1194 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1195 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1196 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1198 EXPECT_EQ(NULL, OCGetResourceHandleFromCollection(containerHandle, 5));
1200 EXPECT_EQ(OC_STACK_OK, OCStop());
1204 TEST(StackBind, BindEntityHandlerBad)
1206 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1207 OC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1208 InitStack(OC_SERVER);
1210 OCResourceHandle handle;
1211 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1217 OC_DISCOVERABLE|OC_OBSERVABLE));
1219 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL, NULL));
1221 EXPECT_EQ(OC_STACK_OK, OCStop());
1224 TEST(StackBind, BindEntityHandlerGood)
1226 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1227 OC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1228 InitStack(OC_SERVER);
1230 OCResourceHandle handle;
1231 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1237 OC_DISCOVERABLE|OC_OBSERVABLE));
1239 OCEntityHandler myHandler = entityHandler;
1241 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler, NULL));
1243 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1245 EXPECT_EQ(OC_STACK_OK, OCStop());
1248 TEST(StackResourceAccess, GetResourceByIndex)
1250 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1251 OC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1252 InitStack(OC_SERVER);
1254 uint8_t numResources = 0;
1255 uint8_t numExpectedResources = 0;
1256 uint8_t resourceIndex = 0;
1257 uint8_t prevResources = 0;
1258 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1259 prevResources = numExpectedResources;
1260 OCResourceHandle containerHandle;
1261 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1267 OC_DISCOVERABLE|OC_OBSERVABLE));
1268 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1269 EXPECT_EQ(++numExpectedResources, numResources);
1271 OCResourceHandle handle0;
1272 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1278 OC_DISCOVERABLE|OC_OBSERVABLE));
1279 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1280 EXPECT_EQ(++numExpectedResources, numResources);
1282 OCResourceHandle handle1;
1283 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1289 OC_DISCOVERABLE|OC_OBSERVABLE));
1290 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1291 EXPECT_EQ(++numExpectedResources, numResources);
1293 OCResourceHandle handle2;
1294 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1300 OC_DISCOVERABLE|OC_OBSERVABLE));
1301 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1302 EXPECT_EQ(++numExpectedResources, numResources);
1304 OCResourceHandle handle3;
1305 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1311 OC_DISCOVERABLE|OC_OBSERVABLE));
1312 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1313 EXPECT_EQ(++numExpectedResources, numResources);
1315 OCResourceHandle handle4;
1316 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1322 OC_DISCOVERABLE|OC_OBSERVABLE));
1323 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1324 EXPECT_EQ(++numExpectedResources, numResources);
1326 OCResourceHandle handle5;
1327 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1333 OC_DISCOVERABLE|OC_OBSERVABLE));
1334 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1335 EXPECT_EQ(++numExpectedResources, numResources);
1336 resourceIndex += prevResources;
1337 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1338 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1339 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1340 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1341 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1342 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1343 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1345 EXPECT_EQ(OC_STACK_OK, OCStop());
1348 TEST(StackResourceAccess, DeleteHeadResource)
1350 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1351 OC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1352 InitStack(OC_SERVER);
1354 uint8_t numResources = 0;
1355 uint8_t numExpectedResources = 0;
1357 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1359 OCResourceHandle handle0;
1360 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1366 OC_DISCOVERABLE|OC_OBSERVABLE));
1367 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1368 EXPECT_EQ(++numExpectedResources, numResources);
1370 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1371 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1372 EXPECT_EQ(--numExpectedResources, numResources);
1374 EXPECT_EQ(OC_STACK_OK, OCStop());
1377 TEST(StackResourceAccess, DeleteHeadResource2)
1379 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1380 OC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1381 InitStack(OC_SERVER);
1383 uint8_t numResources = 0;
1384 uint8_t numExpectedResources = 0;
1386 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1387 OCResourceHandle handle0;
1388 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1394 OC_DISCOVERABLE|OC_OBSERVABLE));
1395 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1396 EXPECT_EQ(++numExpectedResources, numResources);
1398 OCResourceHandle handle1;
1399 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1405 OC_DISCOVERABLE|OC_OBSERVABLE));
1406 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1407 EXPECT_EQ(++numExpectedResources, numResources);
1409 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1410 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1411 EXPECT_EQ(--numExpectedResources, numResources);
1413 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
1415 EXPECT_EQ(OC_STACK_OK, OCStop());
1419 TEST(StackResourceAccess, DeleteLastResource)
1421 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1422 OC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1423 InitStack(OC_SERVER);
1425 uint8_t numResources = 0;
1426 uint8_t numExpectedResources = 0;
1428 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1430 OCResourceHandle handle0;
1431 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1437 OC_DISCOVERABLE|OC_OBSERVABLE));
1438 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1439 EXPECT_EQ(++numExpectedResources, numResources);
1441 OCResourceHandle handle1;
1442 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1448 OC_DISCOVERABLE|OC_OBSERVABLE));
1449 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1450 EXPECT_EQ(++numExpectedResources, numResources);
1452 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1453 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1454 EXPECT_EQ(--numExpectedResources, numResources);
1456 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
1458 OCResourceHandle handle2;
1459 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1465 OC_DISCOVERABLE|OC_OBSERVABLE));
1466 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1467 EXPECT_EQ(++numExpectedResources, numResources);
1469 EXPECT_EQ(OC_STACK_OK, OCStop());
1472 TEST(StackResourceAccess, DeleteMiddleResource)
1474 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1475 OC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1476 InitStack(OC_SERVER);
1478 uint8_t numResources = 0;
1479 uint8_t numExpectedResources = 0;
1480 uint8_t resourceIndex = InitResourceIndex();
1482 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1483 resourceIndex = numExpectedResources;
1484 OCResourceHandle handle0;
1485 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1491 OC_DISCOVERABLE|OC_OBSERVABLE));
1492 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1493 EXPECT_EQ(++numExpectedResources, numResources);
1495 OCResourceHandle handle1;
1496 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1502 OC_DISCOVERABLE|OC_OBSERVABLE));
1503 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1504 EXPECT_EQ(++numExpectedResources, numResources);
1506 OCResourceHandle handle2;
1507 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1513 OC_DISCOVERABLE|OC_OBSERVABLE));
1514 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1515 EXPECT_EQ(++numExpectedResources, numResources);
1517 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1518 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1519 EXPECT_EQ(--numExpectedResources, numResources);
1521 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1522 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1524 // Make sure the resource elements are still correct
1525 uint8_t numResourceInterfaces;
1526 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1527 EXPECT_EQ(1, numResourceInterfaces);
1528 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 0);
1529 EXPECT_STREQ("core.rw", resourceInterfaceName);
1531 EXPECT_EQ(OC_STACK_OK, OCStop());
1537 #endif // __cplusplus
1538 void parsePresencePayload(char* payload, uint32_t* seqNum,
1539 uint32_t* maxAge, OCPresenceTrigger* presenceTrigger, char** resType);
1542 #endif // __cplusplus
1544 TEST(StackPresence, ParsePresencePayload)
1546 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1547 OC_LOG(INFO, TAG, "Starting ParsePresencePayload test");
1550 uint32_t seqNum = 0, maxAge = 0;
1551 OCPresenceTrigger presenceTrigger = OC_PRESENCE_TRIGGER_CHANGE;
1552 char * resType = NULL;
1555 strncpy(payload, "{\"oic\":[{\"ttl\":99,\"non\":100,\"trg\":"
1556 "\"delete\",\"rt\":\"presence\"}]}", sizeof(payload));
1557 parsePresencePayload(payload, &seqNum, &maxAge,
1558 &presenceTrigger, &resType);
1559 EXPECT_TRUE(100 == seqNum);
1560 EXPECT_TRUE(99 == maxAge);
1561 EXPECT_TRUE(OC_PRESENCE_TRIGGER_DELETE == presenceTrigger);
1562 EXPECT_TRUE(NULL != resType);
1563 EXPECT_STREQ("presence", resType);
1566 presenceTrigger = OC_PRESENCE_TRIGGER_CHANGE;
1568 //Bad Scenario -- should not result in Seg Fault
1569 parsePresencePayload(payload, NULL, &maxAge, &presenceTrigger, &resType);
1572 seqNum = 0; maxAge = 0; resType = NULL;
1573 strncpy(payload, "{abracadabra}", sizeof(payload));
1574 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1575 EXPECT_TRUE(0 == seqNum);
1576 EXPECT_TRUE(0 == maxAge);
1577 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1578 EXPECT_TRUE(NULL == resType);
1579 EXPECT_EQ(NULL, resType);
1583 seqNum = 0; maxAge = 0; resType = NULL;
1584 strncpy(payload, "{\"oic\":[100]}", sizeof(payload));
1585 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1586 EXPECT_TRUE(0 == seqNum);
1587 EXPECT_TRUE(0 == maxAge);
1588 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1589 EXPECT_TRUE(NULL == resType);
1590 EXPECT_EQ(NULL, resType);
1594 seqNum = 0; maxAge = 0; resType = NULL;
1595 strncpy(payload, "{\"oic\":[]}", sizeof(payload));
1596 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1597 EXPECT_TRUE(0 == seqNum);
1598 EXPECT_TRUE(0 == maxAge);
1599 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1600 EXPECT_TRUE(NULL == resType);
1601 EXPECT_EQ(NULL, resType);
1605 strncpy(payload, "{:]}", sizeof(payload));
1606 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1607 EXPECT_TRUE(0 == seqNum);
1608 EXPECT_TRUE(0 == maxAge);
1609 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1610 EXPECT_TRUE(NULL == resType);
1611 EXPECT_EQ(NULL, resType);
1615 strncpy(payload, "{:[presence}", sizeof(payload));
1616 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1617 EXPECT_TRUE(0 == seqNum);
1618 EXPECT_TRUE(0 == maxAge);
1619 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1620 EXPECT_TRUE(NULL == resType);
1621 EXPECT_EQ(NULL, resType);
1625 TEST(PODTests, OCHeaderOption)
1627 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1630 TEST(PODTests, OCCallbackData)
1632 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);