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,
378 OC_DISCOVERABLE|OC_OBSERVABLE));
380 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
385 OC_DISCOVERABLE|OC_OBSERVABLE));
387 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
392 OC_DISCOVERABLE|OC_OBSERVABLE));
394 EXPECT_EQ(OC_STACK_OK, OCStop());
397 TEST(StackResource, CreateResourceSuccess)
399 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
400 OC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
401 InitStack(OC_SERVER);
403 OCResourceHandle handle;
404 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
410 OC_DISCOVERABLE|OC_OBSERVABLE));
411 const char *url = OCGetResourceUri(handle);
412 EXPECT_STREQ("/a/led", url);
414 EXPECT_EQ(OC_STACK_OK, OCStop());
417 TEST(StackResource, CreateResourceFailDuplicateUri)
419 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
420 OC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
421 InitStack(OC_SERVER);
423 OCResourceHandle handle;
424 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
430 OC_DISCOVERABLE|OC_OBSERVABLE));
431 const char *url = OCGetResourceUri(handle);
432 EXPECT_STREQ("/a/led", url);
434 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
440 OC_DISCOVERABLE|OC_OBSERVABLE));
442 EXPECT_EQ(OC_STACK_OK, OCStop());
445 TEST(StackResource, CreateResourceMultipleResources)
447 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
448 OC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
449 InitStack(OC_SERVER);
451 OCResourceHandle handle1;
452 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
458 OC_DISCOVERABLE|OC_OBSERVABLE));
460 OCResourceHandle handle2;
461 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
467 OC_DISCOVERABLE|OC_OBSERVABLE));
468 OCResourceHandle handle3;
469 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
475 OC_DISCOVERABLE|OC_OBSERVABLE));
477 const char *url = OCGetResourceUri(handle1);
478 EXPECT_STREQ("/a/led1", url);
480 url = OCGetResourceUri(handle2);
481 EXPECT_STREQ("/a/led2", url);
483 url = OCGetResourceUri(handle3);
484 EXPECT_STREQ("/a/led3", url);
486 EXPECT_EQ(OC_STACK_OK, OCStop());
489 TEST(StackResource, CreateResourceBadResoureType)
491 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
492 OC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
493 InitStack(OC_SERVER);
495 OCResourceHandle handle;
496 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
502 OC_DISCOVERABLE|OC_OBSERVABLE));
504 EXPECT_EQ(OC_STACK_OK, OCStop());
507 TEST(StackResource, CreateResourceGoodResourceType)
509 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
510 OC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
511 InitStack(OC_SERVER);
513 OCResourceHandle handle;
514 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
520 OC_DISCOVERABLE|OC_OBSERVABLE));
522 EXPECT_EQ(OC_STACK_OK, OCStop());
525 TEST(StackResource, ResourceTypeName)
527 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
528 OC_LOG(INFO, TAG, "Starting ResourceTypeName test");
529 InitStack(OC_SERVER);
531 OCResourceHandle handle;
532 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
538 OC_DISCOVERABLE|OC_OBSERVABLE));
540 uint8_t numResourceTypes;
541 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
542 EXPECT_EQ(1, numResourceTypes);
543 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
544 EXPECT_STREQ("core.led", resourceTypeName);
546 // try getting resource type names with an invalid index
547 resourceTypeName = OCGetResourceTypeName(handle, 1);
548 EXPECT_STREQ(NULL, resourceTypeName);
549 // try getting resource type names with an invalid index
550 resourceTypeName = OCGetResourceTypeName(handle, 10);
551 EXPECT_STREQ(NULL, resourceTypeName);
553 EXPECT_EQ(OC_STACK_OK, OCStop());
556 TEST(StackResource, ResourceTypeAttrRepresentation)
558 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
559 OC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
560 InitStack(OC_SERVER);
562 OCResourceHandle handle;
563 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
569 OC_DISCOVERABLE|OC_OBSERVABLE));
571 uint8_t numResourceTypes;
572 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
573 EXPECT_EQ(1, numResourceTypes);
575 EXPECT_EQ(OC_STACK_OK, OCStop());
578 TEST(StackResource, ResourceTypeInterface)
580 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
581 OC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
582 InitStack(OC_SERVER);
584 OCResourceHandle handle;
585 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
591 OC_DISCOVERABLE|OC_OBSERVABLE));
593 uint8_t numResourceInterfaces;
594 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
595 EXPECT_EQ(1, numResourceInterfaces);
596 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
597 EXPECT_STREQ("core.rw", resourceInterfaceName);
599 // try getting resource interface names with an invalid index
600 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
601 EXPECT_STREQ(NULL, resourceInterfaceName);
602 // try getting resource interface names with an invalid index
603 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
604 EXPECT_STREQ(NULL, resourceInterfaceName);
606 EXPECT_EQ(OC_STACK_OK, OCStop());
609 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
611 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
613 OC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
615 InitStack(OC_SERVER);
617 OCResourceHandle handle;
618 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
624 OC_DISCOVERABLE|OC_OBSERVABLE));
625 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
626 OC_RSRVD_INTERFACE_DEFAULT));
627 uint8_t numResourceInterfaces;
628 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
629 EXPECT_EQ(2, numResourceInterfaces);
631 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
632 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
634 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
635 EXPECT_STREQ("core.rw", interfaceName_2);
637 EXPECT_EQ(OC_STACK_OK, OCStop());
640 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
642 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
644 OC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
646 InitStack(OC_SERVER);
648 OCResourceHandle handle;
649 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
655 OC_DISCOVERABLE|OC_OBSERVABLE));
657 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
658 OC_RSRVD_INTERFACE_DEFAULT));
659 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
660 OC_RSRVD_INTERFACE_DEFAULT));
662 uint8_t numResourceInterfaces;
663 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
664 EXPECT_EQ(2, numResourceInterfaces);
666 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
667 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
669 EXPECT_EQ(OC_STACK_OK, OCStop());
672 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
674 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
676 OC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
678 InitStack(OC_SERVER);
680 OCResourceHandle handle;
681 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
687 OC_DISCOVERABLE|OC_OBSERVABLE));
689 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
691 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
694 uint8_t numResourceInterfaces;
695 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
696 EXPECT_EQ(1, numResourceInterfaces);
698 EXPECT_EQ(OC_STACK_OK, OCStop());
701 TEST(StackResource, ResourceTypeInterfaceMethods)
703 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
704 OC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
705 InitStack(OC_SERVER);
707 OCResourceHandle handle;
708 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
714 OC_DISCOVERABLE|OC_OBSERVABLE));
716 uint8_t numResourceInterfaces;
717 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
718 EXPECT_EQ(1, numResourceInterfaces);
720 EXPECT_EQ(OC_STACK_OK, OCStop());
723 TEST(StackResource, GetResourceProperties)
725 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
726 OC_LOG(INFO, TAG, "Starting GetResourceProperties test");
727 InitStack(OC_SERVER);
729 OCResourceHandle handle;
730 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
736 OC_DISCOVERABLE|OC_OBSERVABLE));
738 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
739 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
741 EXPECT_EQ(OC_STACK_OK, OCStop());
744 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
746 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
747 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
748 InitStack(OC_SERVER);
749 uint8_t numResources = 0;
750 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
752 OCResourceHandle handle;
753 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
759 OC_DISCOVERABLE|OC_OBSERVABLE));
760 const char *url = OCGetResourceUri(handle);
761 EXPECT_STREQ("/a1/led", url);
763 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
764 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
765 uint8_t numExpectedResources = 0;
767 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
768 EXPECT_EQ(numExpectedResources, numResources);
770 EXPECT_EQ(OC_STACK_OK, OCStop());
773 TEST(StackResource, StackTestResourceDiscoverOneResource)
775 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
776 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
777 InitStack(OC_SERVER);
779 OCResourceHandle handle;
780 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
786 OC_DISCOVERABLE|OC_OBSERVABLE));
787 const char *url = OCGetResourceUri(handle);
788 EXPECT_STREQ("/a/led", url);
790 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
791 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
793 EXPECT_EQ(OC_STACK_OK, OCStop());
796 TEST(StackResource, StackTestResourceDiscoverManyResources)
798 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
799 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
800 InitStack(OC_SERVER);
802 OCResourceHandle handle1;
803 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
810 const char *url = OCGetResourceUri(handle1);
811 EXPECT_STREQ("/a/led1", url);
813 OCResourceHandle handle2;
814 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
820 OC_DISCOVERABLE|OC_OBSERVABLE));
821 url = OCGetResourceUri(handle2);
822 EXPECT_STREQ("/a/led2", url);
824 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
825 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
827 OCResourceHandle handle3;
828 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
834 OC_DISCOVERABLE|OC_OBSERVABLE));
835 url = OCGetResourceUri(handle3);
836 EXPECT_STREQ("/a/led3", url);
838 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
839 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
841 OCResourceHandle handle4;
842 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
849 url = OCGetResourceUri(handle4);
850 EXPECT_STREQ("/a/led4", url);
852 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
853 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
854 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
856 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
858 EXPECT_EQ(OC_STACK_OK, OCStop());
861 TEST(StackBind, BindResourceTypeNameBad)
863 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
864 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
865 InitStack(OC_SERVER);
867 OCResourceHandle handle;
868 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
874 OC_DISCOVERABLE|OC_OBSERVABLE));
876 uint8_t numResourceTypes;
877 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
878 EXPECT_EQ(1, numResourceTypes);
879 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
880 EXPECT_STREQ("core.led", resourceTypeName);
882 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
884 EXPECT_EQ(OC_STACK_OK, OCStop());
887 TEST(StackBind, BindResourceTypeNameGood)
889 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
890 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
891 InitStack(OC_SERVER);
893 OCResourceHandle handle;
894 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
900 OC_DISCOVERABLE|OC_OBSERVABLE));
902 uint8_t numResourceTypes;
903 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
904 EXPECT_EQ(1, numResourceTypes);
905 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
906 EXPECT_STREQ("core.led", resourceTypeName);
908 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
909 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
910 EXPECT_EQ(2, numResourceTypes);
911 resourceTypeName = OCGetResourceTypeName(handle, 1);
912 EXPECT_STREQ("core.brightled", resourceTypeName);
914 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
915 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
916 EXPECT_EQ(3, numResourceTypes);
917 resourceTypeName = OCGetResourceTypeName(handle, 2);
918 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
920 EXPECT_EQ(OC_STACK_OK, OCStop());
923 TEST(StackBind, BindResourceTypeAttribRepGood)
925 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
926 OC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
927 InitStack(OC_SERVER);
929 OCResourceHandle handle;
930 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
936 OC_DISCOVERABLE|OC_OBSERVABLE));
938 uint8_t numResourceTypes;
939 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
940 EXPECT_EQ(1, numResourceTypes);
942 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
943 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
944 EXPECT_EQ(2, numResourceTypes);
946 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
947 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
948 EXPECT_EQ(3, numResourceTypes);
950 EXPECT_EQ(OC_STACK_OK, OCStop());
954 TEST(StackBind, BindResourceInterfaceNameBad)
956 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
957 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
958 InitStack(OC_SERVER);
960 OCResourceHandle handle;
961 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
967 OC_DISCOVERABLE|OC_OBSERVABLE));
969 uint8_t numResourceInterfaces;
970 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
971 EXPECT_EQ(1, numResourceInterfaces);
972 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
973 EXPECT_STREQ("core.rw", resourceInterfaceName);
975 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
977 EXPECT_EQ(OC_STACK_OK, OCStop());
980 TEST(StackBind, BindResourceInterfaceNameGood)
982 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
983 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
984 InitStack(OC_SERVER);
986 OCResourceHandle handle;
987 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
993 OC_DISCOVERABLE|OC_OBSERVABLE));
995 uint8_t numResourceInterfaces;
996 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
997 EXPECT_EQ(1, numResourceInterfaces);
998 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
999 EXPECT_STREQ("core.rw", resourceInterfaceName);
1001 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1003 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1004 EXPECT_EQ(2, numResourceInterfaces);
1005 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
1006 EXPECT_STREQ("core.r", resourceInterfaceName);
1008 EXPECT_EQ(OC_STACK_OK, OCStop());
1011 TEST(StackBind, BindResourceInterfaceMethodsBad)
1013 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1014 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
1015 InitStack(OC_SERVER);
1017 OCResourceHandle handle;
1018 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1024 OC_DISCOVERABLE|OC_OBSERVABLE));
1026 uint8_t numResourceInterfaces;
1027 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1028 EXPECT_EQ(1, numResourceInterfaces);
1030 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1032 EXPECT_EQ(OC_STACK_OK, OCStop());
1035 TEST(StackBind, BindResourceInterfaceMethodsGood)
1037 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1038 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
1039 InitStack(OC_SERVER);
1041 OCResourceHandle handle;
1042 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1048 OC_DISCOVERABLE|OC_OBSERVABLE));
1050 uint8_t numResourceInterfaces;
1051 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1052 EXPECT_EQ(1, numResourceInterfaces);
1054 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1056 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1057 EXPECT_EQ(2, numResourceInterfaces);
1059 EXPECT_EQ(OC_STACK_OK, OCStop());
1062 TEST(StackBind, BindContainedResourceBad)
1064 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1065 OC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1066 InitStack(OC_SERVER);
1068 OCResourceHandle containerHandle;
1069 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1075 OC_DISCOVERABLE|OC_OBSERVABLE));
1077 OCResourceHandle handle0;
1078 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1084 OC_DISCOVERABLE|OC_OBSERVABLE));
1086 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1088 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1090 EXPECT_EQ(OC_STACK_OK, OCStop());
1093 TEST(StackBind, BindContainedResourceGood)
1095 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1096 OC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1097 InitStack(OC_SERVER);
1099 uint8_t numResources = 0;
1100 uint8_t numExpectedResources = 0;
1102 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1104 OCResourceHandle containerHandle;
1105 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1111 OC_DISCOVERABLE|OC_OBSERVABLE));
1112 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1113 EXPECT_EQ(++numExpectedResources, numResources);
1115 OCResourceHandle handle0;
1116 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1122 OC_DISCOVERABLE|OC_OBSERVABLE));
1123 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1124 EXPECT_EQ(++numExpectedResources, numResources);
1126 OCResourceHandle handle1;
1127 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1133 OC_DISCOVERABLE|OC_OBSERVABLE));
1134 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1135 EXPECT_EQ(++numExpectedResources, numResources);
1137 OCResourceHandle handle2;
1138 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1144 OC_DISCOVERABLE|OC_OBSERVABLE));
1145 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1146 EXPECT_EQ(++numExpectedResources, numResources);
1148 OCResourceHandle handle3;
1149 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1155 OC_DISCOVERABLE|OC_OBSERVABLE));
1156 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1157 EXPECT_EQ(++numExpectedResources, numResources);
1159 OCResourceHandle handle4;
1160 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1166 OC_DISCOVERABLE|OC_OBSERVABLE));
1167 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1168 EXPECT_EQ(++numExpectedResources, numResources);
1170 OCResourceHandle handle5;
1171 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1177 OC_DISCOVERABLE|OC_OBSERVABLE));
1178 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1179 EXPECT_EQ(++numExpectedResources, numResources);
1182 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1183 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1184 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1185 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1186 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1187 EXPECT_EQ(OC_STACK_ERROR, OCBindResource(containerHandle, handle5));
1189 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1190 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1191 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1192 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1193 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1195 EXPECT_EQ(NULL, OCGetResourceHandleFromCollection(containerHandle, 5));
1197 EXPECT_EQ(OC_STACK_OK, OCStop());
1201 TEST(StackBind, BindEntityHandlerBad)
1203 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1204 OC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1205 InitStack(OC_SERVER);
1207 OCResourceHandle handle;
1208 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1214 OC_DISCOVERABLE|OC_OBSERVABLE));
1216 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL, NULL));
1218 EXPECT_EQ(OC_STACK_OK, OCStop());
1221 TEST(StackBind, BindEntityHandlerGood)
1223 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1224 OC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1225 InitStack(OC_SERVER);
1227 OCResourceHandle handle;
1228 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1234 OC_DISCOVERABLE|OC_OBSERVABLE));
1236 OCEntityHandler myHandler = entityHandler;
1238 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler, NULL));
1240 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1242 EXPECT_EQ(OC_STACK_OK, OCStop());
1245 TEST(StackResourceAccess, GetResourceByIndex)
1247 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1248 OC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1249 InitStack(OC_SERVER);
1251 uint8_t numResources = 0;
1252 uint8_t numExpectedResources = 0;
1253 uint8_t resourceIndex = 0;
1254 uint8_t prevResources = 0;
1255 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1256 prevResources = numExpectedResources;
1257 OCResourceHandle containerHandle;
1258 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1264 OC_DISCOVERABLE|OC_OBSERVABLE));
1265 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1266 EXPECT_EQ(++numExpectedResources, numResources);
1268 OCResourceHandle handle0;
1269 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1275 OC_DISCOVERABLE|OC_OBSERVABLE));
1276 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1277 EXPECT_EQ(++numExpectedResources, numResources);
1279 OCResourceHandle handle1;
1280 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1286 OC_DISCOVERABLE|OC_OBSERVABLE));
1287 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1288 EXPECT_EQ(++numExpectedResources, numResources);
1290 OCResourceHandle handle2;
1291 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1297 OC_DISCOVERABLE|OC_OBSERVABLE));
1298 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1299 EXPECT_EQ(++numExpectedResources, numResources);
1301 OCResourceHandle handle3;
1302 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1308 OC_DISCOVERABLE|OC_OBSERVABLE));
1309 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1310 EXPECT_EQ(++numExpectedResources, numResources);
1312 OCResourceHandle handle4;
1313 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1319 OC_DISCOVERABLE|OC_OBSERVABLE));
1320 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1321 EXPECT_EQ(++numExpectedResources, numResources);
1323 OCResourceHandle handle5;
1324 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1330 OC_DISCOVERABLE|OC_OBSERVABLE));
1331 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1332 EXPECT_EQ(++numExpectedResources, numResources);
1333 resourceIndex += prevResources;
1334 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1335 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1336 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1337 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1338 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1339 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1340 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1342 EXPECT_EQ(OC_STACK_OK, OCStop());
1345 TEST(StackResourceAccess, DeleteHeadResource)
1347 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1348 OC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1349 InitStack(OC_SERVER);
1351 uint8_t numResources = 0;
1352 uint8_t numExpectedResources = 0;
1354 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1356 OCResourceHandle handle0;
1357 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1363 OC_DISCOVERABLE|OC_OBSERVABLE));
1364 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1365 EXPECT_EQ(++numExpectedResources, numResources);
1367 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1368 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1369 EXPECT_EQ(--numExpectedResources, numResources);
1371 EXPECT_EQ(OC_STACK_OK, OCStop());
1374 TEST(StackResourceAccess, DeleteHeadResource2)
1376 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1377 OC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1378 InitStack(OC_SERVER);
1380 uint8_t numResources = 0;
1381 uint8_t numExpectedResources = 0;
1383 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1384 OCResourceHandle handle0;
1385 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1391 OC_DISCOVERABLE|OC_OBSERVABLE));
1392 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1393 EXPECT_EQ(++numExpectedResources, numResources);
1395 OCResourceHandle handle1;
1396 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1402 OC_DISCOVERABLE|OC_OBSERVABLE));
1403 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1404 EXPECT_EQ(++numExpectedResources, numResources);
1406 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1407 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1408 EXPECT_EQ(--numExpectedResources, numResources);
1410 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
1412 EXPECT_EQ(OC_STACK_OK, OCStop());
1416 TEST(StackResourceAccess, DeleteLastResource)
1418 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1419 OC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1420 InitStack(OC_SERVER);
1422 uint8_t numResources = 0;
1423 uint8_t numExpectedResources = 0;
1425 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1427 OCResourceHandle handle0;
1428 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1434 OC_DISCOVERABLE|OC_OBSERVABLE));
1435 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1436 EXPECT_EQ(++numExpectedResources, numResources);
1438 OCResourceHandle handle1;
1439 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1445 OC_DISCOVERABLE|OC_OBSERVABLE));
1446 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1447 EXPECT_EQ(++numExpectedResources, numResources);
1449 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1450 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1451 EXPECT_EQ(--numExpectedResources, numResources);
1453 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
1455 OCResourceHandle handle2;
1456 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1462 OC_DISCOVERABLE|OC_OBSERVABLE));
1463 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1464 EXPECT_EQ(++numExpectedResources, numResources);
1466 EXPECT_EQ(OC_STACK_OK, OCStop());
1469 TEST(StackResourceAccess, DeleteMiddleResource)
1471 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1472 OC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1473 InitStack(OC_SERVER);
1475 uint8_t numResources = 0;
1476 uint8_t numExpectedResources = 0;
1477 uint8_t resourceIndex = InitResourceIndex();
1479 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1480 resourceIndex = numExpectedResources;
1481 OCResourceHandle handle0;
1482 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1488 OC_DISCOVERABLE|OC_OBSERVABLE));
1489 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1490 EXPECT_EQ(++numExpectedResources, numResources);
1492 OCResourceHandle handle1;
1493 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1499 OC_DISCOVERABLE|OC_OBSERVABLE));
1500 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1501 EXPECT_EQ(++numExpectedResources, numResources);
1503 OCResourceHandle handle2;
1504 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1510 OC_DISCOVERABLE|OC_OBSERVABLE));
1511 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1512 EXPECT_EQ(++numExpectedResources, numResources);
1514 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1515 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1516 EXPECT_EQ(--numExpectedResources, numResources);
1518 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1519 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1521 // Make sure the resource elements are still correct
1522 uint8_t numResourceInterfaces;
1523 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1524 EXPECT_EQ(1, numResourceInterfaces);
1525 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 0);
1526 EXPECT_STREQ("core.rw", resourceInterfaceName);
1528 EXPECT_EQ(OC_STACK_OK, OCStop());
1534 #endif // __cplusplus
1535 void parsePresencePayload(char* payload, uint32_t* seqNum,
1536 uint32_t* maxAge, OCPresenceTrigger* presenceTrigger, char** resType);
1539 #endif // __cplusplus
1541 TEST(StackPresence, ParsePresencePayload)
1543 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1544 OC_LOG(INFO, TAG, "Starting ParsePresencePayload test");
1547 uint32_t seqNum = 0, maxAge = 0;
1548 OCPresenceTrigger presenceTrigger = OC_PRESENCE_TRIGGER_CHANGE;
1549 char * resType = NULL;
1552 strncpy(payload, "{\"oic\":[{\"ttl\":99,\"non\":100,\"trg\":"
1553 "\"delete\",\"rt\":\"presence\"}]}", sizeof(payload));
1554 parsePresencePayload(payload, &seqNum, &maxAge,
1555 &presenceTrigger, &resType);
1556 EXPECT_TRUE(100 == seqNum);
1557 EXPECT_TRUE(99 == maxAge);
1558 EXPECT_TRUE(OC_PRESENCE_TRIGGER_DELETE == presenceTrigger);
1559 EXPECT_TRUE(NULL != resType);
1560 EXPECT_STREQ("presence", resType);
1563 presenceTrigger = OC_PRESENCE_TRIGGER_CHANGE;
1565 //Bad Scenario -- should not result in Seg Fault
1566 parsePresencePayload(payload, NULL, &maxAge, &presenceTrigger, &resType);
1569 seqNum = 0; maxAge = 0; resType = NULL;
1570 strncpy(payload, "{abracadabra}", sizeof(payload));
1571 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1572 EXPECT_TRUE(0 == seqNum);
1573 EXPECT_TRUE(0 == maxAge);
1574 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1575 EXPECT_TRUE(NULL == resType);
1576 EXPECT_EQ(NULL, resType);
1580 seqNum = 0; maxAge = 0; resType = NULL;
1581 strncpy(payload, "{\"oic\":[100]}", sizeof(payload));
1582 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1583 EXPECT_TRUE(0 == seqNum);
1584 EXPECT_TRUE(0 == maxAge);
1585 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1586 EXPECT_TRUE(NULL == resType);
1587 EXPECT_EQ(NULL, resType);
1591 seqNum = 0; maxAge = 0; resType = NULL;
1592 strncpy(payload, "{\"oic\":[]}", sizeof(payload));
1593 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1594 EXPECT_TRUE(0 == seqNum);
1595 EXPECT_TRUE(0 == maxAge);
1596 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1597 EXPECT_TRUE(NULL == resType);
1598 EXPECT_EQ(NULL, resType);
1602 strncpy(payload, "{:]}", sizeof(payload));
1603 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1604 EXPECT_TRUE(0 == seqNum);
1605 EXPECT_TRUE(0 == maxAge);
1606 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1607 EXPECT_TRUE(NULL == resType);
1608 EXPECT_EQ(NULL, resType);
1612 strncpy(payload, "{:[presence}", sizeof(payload));
1613 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1614 EXPECT_TRUE(0 == seqNum);
1615 EXPECT_TRUE(0 == maxAge);
1616 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1617 EXPECT_TRUE(NULL == resType);
1618 EXPECT_EQ(NULL, resType);
1622 TEST(PODTests, OCHeaderOption)
1624 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1627 TEST(PODTests, OCCallbackData)
1629 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);