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)
84 OC_LOG(INFO, TAG, "Entering entityHandler");
89 //-----------------------------------------------------------------------------
91 //-----------------------------------------------------------------------------
92 void InitStack(OCMode mode)
94 OC_LOG(INFO, TAG, "Entering InitStack");
96 EXPECT_EQ(OC_STACK_OK, OCInit(NULL, 0, mode));
97 OC_LOG(INFO, TAG, "Leaving InitStack");
100 uint8_t InitNumExpectedResources()
103 // When presence is enabled, it is a resource and so is (currently) included
104 // in the returned resource count returned by the OCGetNumberOfResources API.
111 uint8_t InitResourceIndex()
114 // When presence is enabled, it is a resource and so is (currently) included
115 // in the returned resource count returned by the OCGetNumberOfResources API.
116 // The index of the presence resource is 0, so the first user app resource index
123 //-----------------------------------------------------------------------------
125 //-----------------------------------------------------------------------------
127 TEST(StackInit, StackInitNullAddr)
129 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
130 EXPECT_EQ(OC_STACK_OK, OCInit(0, 5683, OC_SERVER));
131 EXPECT_EQ(OC_STACK_OK, OCStop());
134 TEST(StackInit, StackInitNullPort)
136 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
137 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 0, OC_SERVER));
138 EXPECT_EQ(OC_STACK_OK, OCStop());
141 TEST(StackInit, StackInitNullAddrAndPort)
143 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
144 EXPECT_EQ(OC_STACK_OK, OCInit(0, 0, OC_SERVER));
145 EXPECT_EQ(OC_STACK_OK, OCStop());
148 TEST(StackInit, StackInitInvalidMode)
150 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
151 EXPECT_EQ(OC_STACK_ERROR, OCInit(0, 0, (OCMode)10));
152 EXPECT_EQ(OC_STACK_ERROR, OCStop());
155 TEST(StackStart, StackStartSuccessClient)
157 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
158 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
159 EXPECT_EQ(OC_STACK_OK, OCStop());
162 TEST(StackStart, StackStartSuccessServer)
164 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
165 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
166 EXPECT_EQ(OC_STACK_OK, OCStop());
169 TEST(StackStart, StackStartSuccessClientServer)
171 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
172 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT_SERVER));
173 EXPECT_EQ(OC_STACK_OK, OCStop());
176 TEST(StackStart, StackStartSuccessiveInits)
178 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
179 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
180 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.2", 5683, OC_SERVER));
181 EXPECT_EQ(OC_STACK_OK, OCStop());
184 TEST(StackStart, SetPlatformInfoValid)
186 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
187 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
189 OCPlatformInfo info = {};
190 info.platformID = (char *) "platform_id";
191 info.manufacturerName = (char *) "manufac_name";
193 EXPECT_EQ(OC_STACK_OK, OCSetPlatformInfo(info));
194 EXPECT_EQ(OC_STACK_OK, OCStop());
197 TEST(StackStart, SetPlatformInfoWithNoPlatformID)
199 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
200 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
202 OCPlatformInfo info = {};
203 info.manufacturerName = (char *) "manufac_name";
205 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
206 EXPECT_EQ(OC_STACK_OK, OCStop());
209 TEST(StackStart, SetPlatformInfoWithNoManufacturerName)
211 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
212 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
214 OCPlatformInfo info = {};
215 info.platformID = (char *) "platform_id";
217 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
218 EXPECT_EQ(OC_STACK_OK, OCStop());
221 TEST(StackStart, SetPlatformInfoWithTooLongManufacName)
223 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
224 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
226 OCPlatformInfo info = {};
227 info.platformID = (char *) "platform_id";
228 info.manufacturerName = (char *) "extremelylongmanufacturername";
230 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
231 EXPECT_EQ(OC_STACK_OK, OCStop());
234 TEST(StackStart, SetPlatformInfoWithTooLongManufacURL)
236 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
237 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
239 OCPlatformInfo info = {};
240 info.platformID = (char *) "platform_id";
241 info.manufacturerName = (char *) "extremelylongmanufacturername";
242 info.manufacturerUrl = (char *)"www.foooooooooooooooo.baaaaaaaaaaaaar";
244 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
245 EXPECT_EQ(OC_STACK_OK, OCStop());
249 TEST(StackDiscovery, DISABLED_DoResourceDeviceDiscovery)
251 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
252 OCCallbackData cbData;
255 OC_LOG(INFO, TAG, "Starting DoResourceDeviceDiscovery test ");
256 InitStack(OC_CLIENT);
258 /* Start a discovery query*/
259 char szQueryUri[64] = { 0 };
260 strcpy(szQueryUri, OC_WELL_KNOWN_QUERY);
261 cbData.cb = asyncDoResourcesCallback;
262 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
264 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
274 EXPECT_EQ(OC_STACK_OK, OCStop());
277 TEST(StackStop, StackStopWithoutInit)
279 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
280 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
281 EXPECT_EQ(OC_STACK_OK, OCStop());
282 EXPECT_EQ(OC_STACK_ERROR, OCStop());
285 TEST(StackResource, DISABLED_UpdateResourceNullURI)
287 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
288 OCCallbackData cbData;
291 OC_LOG(INFO, TAG, "Starting UpdateResourceNullURI test");
292 InitStack(OC_CLIENT);
294 /* Start a discovery query*/
295 char szQueryUri[64] = { 0 };
296 strcpy(szQueryUri, OC_WELL_KNOWN_QUERY);
297 cbData.cb = asyncDoResourcesCallback;
298 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
300 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
310 EXPECT_EQ(OC_STACK_OK, OCStop());
313 TEST(StackResource, CreateResourceBadParams)
315 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
316 OC_LOG(INFO, TAG, "Starting CreateResourceBadParams test");
317 InitStack(OC_SERVER);
319 OCResourceHandle handle;
321 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(NULL, //&handle,
326 OC_DISCOVERABLE|OC_OBSERVABLE));
328 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
333 OC_DISCOVERABLE|OC_OBSERVABLE));
335 // Property bitmask out of range
336 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
341 128));// invalid bitmask for OCResourceProperty
343 EXPECT_EQ(OC_STACK_OK, OCStop());
346 TEST(StackResource, CreateResourceBadUri)
348 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
349 OC_LOG(INFO, TAG, "Starting CreateResourceBadUri test");
350 InitStack(OC_SERVER);
352 const char *uri65 = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL";
354 OCResourceHandle handle;
356 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
361 OC_DISCOVERABLE|OC_OBSERVABLE));
363 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
368 OC_DISCOVERABLE|OC_OBSERVABLE));
370 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
375 OC_DISCOVERABLE|OC_OBSERVABLE));
377 EXPECT_EQ(OC_STACK_OK, OCStop());
380 TEST(StackResource, CreateResourceSuccess)
382 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
383 OC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
384 InitStack(OC_SERVER);
386 OCResourceHandle handle;
387 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
392 OC_DISCOVERABLE|OC_OBSERVABLE));
393 const char *url = OCGetResourceUri(handle);
394 EXPECT_STREQ("/a/led", url);
396 EXPECT_EQ(OC_STACK_OK, OCStop());
399 TEST(StackResource, CreateResourceFailDuplicateUri)
401 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
402 OC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
403 InitStack(OC_SERVER);
405 OCResourceHandle handle;
406 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
411 OC_DISCOVERABLE|OC_OBSERVABLE));
412 const char *url = OCGetResourceUri(handle);
413 EXPECT_STREQ("/a/led", url);
415 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
420 OC_DISCOVERABLE|OC_OBSERVABLE));
422 EXPECT_EQ(OC_STACK_OK, OCStop());
425 TEST(StackResource, CreateResourceMultipleResources)
427 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
428 OC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
429 InitStack(OC_SERVER);
431 OCResourceHandle handle1;
432 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
437 OC_DISCOVERABLE|OC_OBSERVABLE));
439 OCResourceHandle handle2;
440 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
445 OC_DISCOVERABLE|OC_OBSERVABLE));
446 OCResourceHandle handle3;
447 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
452 OC_DISCOVERABLE|OC_OBSERVABLE));
454 const char *url = OCGetResourceUri(handle1);
455 EXPECT_STREQ("/a/led1", url);
457 url = OCGetResourceUri(handle2);
458 EXPECT_STREQ("/a/led2", url);
460 url = OCGetResourceUri(handle3);
461 EXPECT_STREQ("/a/led3", url);
463 EXPECT_EQ(OC_STACK_OK, OCStop());
466 TEST(StackResource, CreateResourceBadResoureType)
468 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
469 OC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
470 InitStack(OC_SERVER);
472 OCResourceHandle handle;
473 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
478 OC_DISCOVERABLE|OC_OBSERVABLE));
480 EXPECT_EQ(OC_STACK_OK, OCStop());
483 TEST(StackResource, CreateResourceGoodResourceType)
485 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
486 OC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
487 InitStack(OC_SERVER);
489 OCResourceHandle handle;
490 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
495 OC_DISCOVERABLE|OC_OBSERVABLE));
497 EXPECT_EQ(OC_STACK_OK, OCStop());
500 TEST(StackResource, ResourceTypeName)
502 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
503 OC_LOG(INFO, TAG, "Starting ResourceTypeName test");
504 InitStack(OC_SERVER);
506 OCResourceHandle handle;
507 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
512 OC_DISCOVERABLE|OC_OBSERVABLE));
514 uint8_t numResourceTypes;
515 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
516 EXPECT_EQ(1, numResourceTypes);
517 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
518 EXPECT_STREQ("core.led", resourceTypeName);
520 // try getting resource type names with an invalid index
521 resourceTypeName = OCGetResourceTypeName(handle, 1);
522 EXPECT_STREQ(NULL, resourceTypeName);
523 // try getting resource type names with an invalid index
524 resourceTypeName = OCGetResourceTypeName(handle, 10);
525 EXPECT_STREQ(NULL, resourceTypeName);
527 EXPECT_EQ(OC_STACK_OK, OCStop());
530 TEST(StackResource, ResourceTypeAttrRepresentation)
532 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
533 OC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
534 InitStack(OC_SERVER);
536 OCResourceHandle handle;
537 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
542 OC_DISCOVERABLE|OC_OBSERVABLE));
544 uint8_t numResourceTypes;
545 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
546 EXPECT_EQ(1, numResourceTypes);
548 EXPECT_EQ(OC_STACK_OK, OCStop());
551 TEST(StackResource, ResourceTypeInterface)
553 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
554 OC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
555 InitStack(OC_SERVER);
557 OCResourceHandle handle;
558 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
563 OC_DISCOVERABLE|OC_OBSERVABLE));
565 uint8_t numResourceInterfaces;
566 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
567 EXPECT_EQ(1, numResourceInterfaces);
568 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
569 EXPECT_STREQ("core.rw", resourceInterfaceName);
571 // try getting resource interface names with an invalid index
572 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
573 EXPECT_STREQ(NULL, resourceInterfaceName);
574 // try getting resource interface names with an invalid index
575 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
576 EXPECT_STREQ(NULL, resourceInterfaceName);
578 EXPECT_EQ(OC_STACK_OK, OCStop());
581 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
583 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
585 OC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
587 InitStack(OC_SERVER);
589 OCResourceHandle handle;
590 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
595 OC_DISCOVERABLE|OC_OBSERVABLE));
596 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
597 OC_RSRVD_INTERFACE_DEFAULT));
598 uint8_t numResourceInterfaces;
599 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
600 EXPECT_EQ(2, numResourceInterfaces);
602 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
603 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
605 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
606 EXPECT_STREQ("core.rw", interfaceName_2);
608 EXPECT_EQ(OC_STACK_OK, OCStop());
611 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
613 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
615 OC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
617 InitStack(OC_SERVER);
619 OCResourceHandle handle;
620 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
625 OC_DISCOVERABLE|OC_OBSERVABLE));
627 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
628 OC_RSRVD_INTERFACE_DEFAULT));
629 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
630 OC_RSRVD_INTERFACE_DEFAULT));
632 uint8_t numResourceInterfaces;
633 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
634 EXPECT_EQ(2, numResourceInterfaces);
636 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
637 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
639 EXPECT_EQ(OC_STACK_OK, OCStop());
642 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
644 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
646 OC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
648 InitStack(OC_SERVER);
650 OCResourceHandle handle;
651 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
656 OC_DISCOVERABLE|OC_OBSERVABLE));
658 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
660 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
663 uint8_t numResourceInterfaces;
664 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
665 EXPECT_EQ(1, numResourceInterfaces);
667 EXPECT_EQ(OC_STACK_OK, OCStop());
670 TEST(StackResource, ResourceTypeInterfaceMethods)
672 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
673 OC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
674 InitStack(OC_SERVER);
676 OCResourceHandle handle;
677 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
682 OC_DISCOVERABLE|OC_OBSERVABLE));
684 uint8_t numResourceInterfaces;
685 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
686 EXPECT_EQ(1, numResourceInterfaces);
688 EXPECT_EQ(OC_STACK_OK, OCStop());
691 TEST(StackResource, GetResourceProperties)
693 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
694 OC_LOG(INFO, TAG, "Starting GetResourceProperties test");
695 InitStack(OC_SERVER);
697 OCResourceHandle handle;
698 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
703 OC_DISCOVERABLE|OC_OBSERVABLE));
705 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
706 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
708 EXPECT_EQ(OC_STACK_OK, OCStop());
711 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
713 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
714 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
715 InitStack(OC_SERVER);
716 uint8_t numResources = 0;
717 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
719 OCResourceHandle handle;
720 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
725 OC_DISCOVERABLE|OC_OBSERVABLE));
726 const char *url = OCGetResourceUri(handle);
727 EXPECT_STREQ("/a1/led", url);
729 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
730 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
731 uint8_t numExpectedResources = 0;
733 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
734 EXPECT_EQ(numExpectedResources, numResources);
736 EXPECT_EQ(OC_STACK_OK, OCStop());
739 TEST(StackResource, StackTestResourceDiscoverOneResource)
741 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
742 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
743 InitStack(OC_SERVER);
745 OCResourceHandle handle;
746 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
751 OC_DISCOVERABLE|OC_OBSERVABLE));
752 const char *url = OCGetResourceUri(handle);
753 EXPECT_STREQ("/a/led", url);
755 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
756 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
758 EXPECT_EQ(OC_STACK_OK, OCStop());
761 TEST(StackResource, StackTestResourceDiscoverManyResources)
763 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
764 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
765 InitStack(OC_SERVER);
767 OCResourceHandle handle1;
768 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
774 const char *url = OCGetResourceUri(handle1);
775 EXPECT_STREQ("/a/led1", url);
777 OCResourceHandle handle2;
778 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
783 OC_DISCOVERABLE|OC_OBSERVABLE));
784 url = OCGetResourceUri(handle2);
785 EXPECT_STREQ("/a/led2", url);
787 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
788 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
790 OCResourceHandle handle3;
791 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
796 OC_DISCOVERABLE|OC_OBSERVABLE));
797 url = OCGetResourceUri(handle3);
798 EXPECT_STREQ("/a/led3", url);
800 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
801 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
803 OCResourceHandle handle4;
804 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
810 url = OCGetResourceUri(handle4);
811 EXPECT_STREQ("/a/led4", url);
813 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
814 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
815 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
817 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
819 EXPECT_EQ(OC_STACK_OK, OCStop());
822 TEST(StackBind, BindResourceTypeNameBad)
824 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
825 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
826 InitStack(OC_SERVER);
828 OCResourceHandle handle;
829 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
834 OC_DISCOVERABLE|OC_OBSERVABLE));
836 uint8_t numResourceTypes;
837 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
838 EXPECT_EQ(1, numResourceTypes);
839 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
840 EXPECT_STREQ("core.led", resourceTypeName);
842 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
844 EXPECT_EQ(OC_STACK_OK, OCStop());
847 TEST(StackBind, BindResourceTypeNameGood)
849 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
850 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
851 InitStack(OC_SERVER);
853 OCResourceHandle handle;
854 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
859 OC_DISCOVERABLE|OC_OBSERVABLE));
861 uint8_t numResourceTypes;
862 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
863 EXPECT_EQ(1, numResourceTypes);
864 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
865 EXPECT_STREQ("core.led", resourceTypeName);
867 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
868 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
869 EXPECT_EQ(2, numResourceTypes);
870 resourceTypeName = OCGetResourceTypeName(handle, 1);
871 EXPECT_STREQ("core.brightled", resourceTypeName);
873 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
874 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
875 EXPECT_EQ(3, numResourceTypes);
876 resourceTypeName = OCGetResourceTypeName(handle, 2);
877 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
879 EXPECT_EQ(OC_STACK_OK, OCStop());
882 TEST(StackBind, BindResourceTypeAttribRepGood)
884 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
885 OC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
886 InitStack(OC_SERVER);
888 OCResourceHandle handle;
889 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
894 OC_DISCOVERABLE|OC_OBSERVABLE));
896 uint8_t numResourceTypes;
897 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
898 EXPECT_EQ(1, numResourceTypes);
900 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
901 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
902 EXPECT_EQ(2, numResourceTypes);
904 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
905 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
906 EXPECT_EQ(3, numResourceTypes);
908 EXPECT_EQ(OC_STACK_OK, OCStop());
912 TEST(StackBind, BindResourceInterfaceNameBad)
914 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
915 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
916 InitStack(OC_SERVER);
918 OCResourceHandle handle;
919 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
924 OC_DISCOVERABLE|OC_OBSERVABLE));
926 uint8_t numResourceInterfaces;
927 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
928 EXPECT_EQ(1, numResourceInterfaces);
929 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
930 EXPECT_STREQ("core.rw", resourceInterfaceName);
932 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
934 EXPECT_EQ(OC_STACK_OK, OCStop());
937 TEST(StackBind, BindResourceInterfaceNameGood)
939 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
940 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
941 InitStack(OC_SERVER);
943 OCResourceHandle handle;
944 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
949 OC_DISCOVERABLE|OC_OBSERVABLE));
951 uint8_t numResourceInterfaces;
952 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
953 EXPECT_EQ(1, numResourceInterfaces);
954 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
955 EXPECT_STREQ("core.rw", resourceInterfaceName);
957 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
959 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
960 EXPECT_EQ(2, numResourceInterfaces);
961 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
962 EXPECT_STREQ("core.r", resourceInterfaceName);
964 EXPECT_EQ(OC_STACK_OK, OCStop());
967 TEST(StackBind, BindResourceInterfaceMethodsBad)
969 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
970 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
971 InitStack(OC_SERVER);
973 OCResourceHandle handle;
974 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
979 OC_DISCOVERABLE|OC_OBSERVABLE));
981 uint8_t numResourceInterfaces;
982 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
983 EXPECT_EQ(1, numResourceInterfaces);
985 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
987 EXPECT_EQ(OC_STACK_OK, OCStop());
990 TEST(StackBind, BindResourceInterfaceMethodsGood)
992 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
993 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
994 InitStack(OC_SERVER);
996 OCResourceHandle handle;
997 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);
1008 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1010 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1011 EXPECT_EQ(2, numResourceInterfaces);
1013 EXPECT_EQ(OC_STACK_OK, OCStop());
1016 TEST(StackBind, BindContainedResourceBad)
1018 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1019 OC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1020 InitStack(OC_SERVER);
1022 OCResourceHandle containerHandle;
1023 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1028 OC_DISCOVERABLE|OC_OBSERVABLE));
1030 OCResourceHandle handle0;
1031 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1036 OC_DISCOVERABLE|OC_OBSERVABLE));
1038 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1040 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1042 EXPECT_EQ(OC_STACK_OK, OCStop());
1045 TEST(StackBind, BindContainedResourceGood)
1047 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1048 OC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1049 InitStack(OC_SERVER);
1051 uint8_t numResources = 0;
1052 uint8_t numExpectedResources = 0;
1054 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1056 OCResourceHandle containerHandle;
1057 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1062 OC_DISCOVERABLE|OC_OBSERVABLE));
1063 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1064 EXPECT_EQ(++numExpectedResources, numResources);
1066 OCResourceHandle handle0;
1067 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1072 OC_DISCOVERABLE|OC_OBSERVABLE));
1073 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1074 EXPECT_EQ(++numExpectedResources, numResources);
1076 OCResourceHandle handle1;
1077 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1082 OC_DISCOVERABLE|OC_OBSERVABLE));
1083 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1084 EXPECT_EQ(++numExpectedResources, numResources);
1086 OCResourceHandle handle2;
1087 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1092 OC_DISCOVERABLE|OC_OBSERVABLE));
1093 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1094 EXPECT_EQ(++numExpectedResources, numResources);
1096 OCResourceHandle handle3;
1097 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1102 OC_DISCOVERABLE|OC_OBSERVABLE));
1103 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1104 EXPECT_EQ(++numExpectedResources, numResources);
1106 OCResourceHandle handle4;
1107 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1112 OC_DISCOVERABLE|OC_OBSERVABLE));
1113 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1114 EXPECT_EQ(++numExpectedResources, numResources);
1116 OCResourceHandle handle5;
1117 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1122 OC_DISCOVERABLE|OC_OBSERVABLE));
1123 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1124 EXPECT_EQ(++numExpectedResources, numResources);
1127 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1128 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1129 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1130 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1131 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1132 EXPECT_EQ(OC_STACK_ERROR, OCBindResource(containerHandle, handle5));
1134 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1135 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1136 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1137 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1138 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1140 EXPECT_EQ(NULL, OCGetResourceHandleFromCollection(containerHandle, 5));
1142 EXPECT_EQ(OC_STACK_OK, OCStop());
1146 TEST(StackBind, BindEntityHandlerBad)
1148 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1149 OC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1150 InitStack(OC_SERVER);
1152 OCResourceHandle handle;
1153 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1158 OC_DISCOVERABLE|OC_OBSERVABLE));
1160 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL));
1162 EXPECT_EQ(OC_STACK_OK, OCStop());
1165 TEST(StackBind, BindEntityHandlerGood)
1167 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1168 OC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1169 InitStack(OC_SERVER);
1171 OCResourceHandle handle;
1172 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1177 OC_DISCOVERABLE|OC_OBSERVABLE));
1179 OCEntityHandler myHandler = entityHandler;
1181 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler));
1183 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1185 EXPECT_EQ(OC_STACK_OK, OCStop());
1188 TEST(StackResourceAccess, GetResourceByIndex)
1190 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1191 OC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1192 InitStack(OC_SERVER);
1194 uint8_t numResources = 0;
1195 uint8_t numExpectedResources = 0;
1196 uint8_t resourceIndex = 0;
1197 uint8_t prevResources = 0;
1198 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1199 prevResources = numExpectedResources;
1200 OCResourceHandle containerHandle;
1201 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1206 OC_DISCOVERABLE|OC_OBSERVABLE));
1207 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1208 EXPECT_EQ(++numExpectedResources, numResources);
1210 OCResourceHandle handle0;
1211 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1216 OC_DISCOVERABLE|OC_OBSERVABLE));
1217 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1218 EXPECT_EQ(++numExpectedResources, numResources);
1220 OCResourceHandle handle1;
1221 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1226 OC_DISCOVERABLE|OC_OBSERVABLE));
1227 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1228 EXPECT_EQ(++numExpectedResources, numResources);
1230 OCResourceHandle handle2;
1231 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1236 OC_DISCOVERABLE|OC_OBSERVABLE));
1237 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1238 EXPECT_EQ(++numExpectedResources, numResources);
1240 OCResourceHandle handle3;
1241 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1246 OC_DISCOVERABLE|OC_OBSERVABLE));
1247 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1248 EXPECT_EQ(++numExpectedResources, numResources);
1250 OCResourceHandle handle4;
1251 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1256 OC_DISCOVERABLE|OC_OBSERVABLE));
1257 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1258 EXPECT_EQ(++numExpectedResources, numResources);
1260 OCResourceHandle handle5;
1261 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1266 OC_DISCOVERABLE|OC_OBSERVABLE));
1267 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1268 EXPECT_EQ(++numExpectedResources, numResources);
1269 resourceIndex += prevResources;
1270 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1271 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1272 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1273 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1274 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1275 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1276 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1278 EXPECT_EQ(OC_STACK_OK, OCStop());
1281 TEST(StackResourceAccess, DeleteHeadResource)
1283 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1284 OC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1285 InitStack(OC_SERVER);
1287 uint8_t numResources = 0;
1288 uint8_t numExpectedResources = 0;
1290 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1292 OCResourceHandle handle0;
1293 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1298 OC_DISCOVERABLE|OC_OBSERVABLE));
1299 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1300 EXPECT_EQ(++numExpectedResources, numResources);
1302 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1303 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1304 EXPECT_EQ(--numExpectedResources, numResources);
1306 EXPECT_EQ(OC_STACK_OK, OCStop());
1309 TEST(StackResourceAccess, DeleteHeadResource2)
1311 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1312 OC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1313 InitStack(OC_SERVER);
1315 uint8_t numResources = 0;
1316 uint8_t numExpectedResources = 0;
1318 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1319 OCResourceHandle handle0;
1320 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1325 OC_DISCOVERABLE|OC_OBSERVABLE));
1326 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1327 EXPECT_EQ(++numExpectedResources, numResources);
1329 OCResourceHandle handle1;
1330 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1335 OC_DISCOVERABLE|OC_OBSERVABLE));
1336 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1337 EXPECT_EQ(++numExpectedResources, numResources);
1339 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1340 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1341 EXPECT_EQ(--numExpectedResources, numResources);
1343 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
1345 EXPECT_EQ(OC_STACK_OK, OCStop());
1349 TEST(StackResourceAccess, DeleteLastResource)
1351 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1352 OC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1353 InitStack(OC_SERVER);
1355 uint8_t numResources = 0;
1356 uint8_t numExpectedResources = 0;
1358 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1360 OCResourceHandle handle0;
1361 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 OCResourceHandle handle1;
1371 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1376 OC_DISCOVERABLE|OC_OBSERVABLE));
1377 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1378 EXPECT_EQ(++numExpectedResources, numResources);
1380 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1381 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1382 EXPECT_EQ(--numExpectedResources, numResources);
1384 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
1386 OCResourceHandle handle2;
1387 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1392 OC_DISCOVERABLE|OC_OBSERVABLE));
1393 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1394 EXPECT_EQ(++numExpectedResources, numResources);
1396 EXPECT_EQ(OC_STACK_OK, OCStop());
1399 TEST(StackResourceAccess, DeleteMiddleResource)
1401 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1402 OC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1403 InitStack(OC_SERVER);
1405 uint8_t numResources = 0;
1406 uint8_t numExpectedResources = 0;
1407 uint8_t resourceIndex = InitResourceIndex();
1409 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1410 resourceIndex = numExpectedResources;
1411 OCResourceHandle handle0;
1412 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1417 OC_DISCOVERABLE|OC_OBSERVABLE));
1418 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1419 EXPECT_EQ(++numExpectedResources, numResources);
1421 OCResourceHandle handle1;
1422 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1427 OC_DISCOVERABLE|OC_OBSERVABLE));
1428 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1429 EXPECT_EQ(++numExpectedResources, numResources);
1431 OCResourceHandle handle2;
1432 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1437 OC_DISCOVERABLE|OC_OBSERVABLE));
1438 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1439 EXPECT_EQ(++numExpectedResources, numResources);
1441 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1442 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1443 EXPECT_EQ(--numExpectedResources, numResources);
1445 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1446 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1448 // Make sure the resource elements are still correct
1449 uint8_t numResourceInterfaces;
1450 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1451 EXPECT_EQ(1, numResourceInterfaces);
1452 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 0);
1453 EXPECT_STREQ("core.rw", resourceInterfaceName);
1455 EXPECT_EQ(OC_STACK_OK, OCStop());
1461 #endif // __cplusplus
1462 void parsePresencePayload(char* payload, uint32_t* seqNum,
1463 uint32_t* maxAge, OCPresenceTrigger* presenceTrigger, char** resType);
1466 #endif // __cplusplus
1468 TEST(StackPresence, ParsePresencePayload)
1470 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1471 OC_LOG(INFO, TAG, "Starting ParsePresencePayload test");
1474 uint32_t seqNum = 0, maxAge = 0;
1475 OCPresenceTrigger presenceTrigger = OC_PRESENCE_TRIGGER_CHANGE;
1476 char * resType = NULL;
1479 strncpy(payload, "{\"oic\":[{\"ttl\":99,\"non\":100,\"trg\":"
1480 "\"delete\",\"rt\":\"presence\"}]}", sizeof(payload));
1481 parsePresencePayload(payload, &seqNum, &maxAge,
1482 &presenceTrigger, &resType);
1483 EXPECT_TRUE(100 == seqNum);
1484 EXPECT_TRUE(99 == maxAge);
1485 EXPECT_TRUE(OC_PRESENCE_TRIGGER_DELETE == presenceTrigger);
1486 EXPECT_TRUE(NULL != resType);
1487 EXPECT_STREQ("presence", resType);
1490 presenceTrigger = OC_PRESENCE_TRIGGER_CHANGE;
1492 //Bad Scenario -- should not result in Seg Fault
1493 parsePresencePayload(payload, NULL, &maxAge, &presenceTrigger, &resType);
1496 seqNum = 0; maxAge = 0; resType = NULL;
1497 strncpy(payload, "{abracadabra}", sizeof(payload));
1498 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1499 EXPECT_TRUE(0 == seqNum);
1500 EXPECT_TRUE(0 == maxAge);
1501 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1502 EXPECT_TRUE(NULL == resType);
1503 EXPECT_EQ(NULL, resType);
1507 seqNum = 0; maxAge = 0; resType = NULL;
1508 strncpy(payload, "{\"oic\":[100]}", sizeof(payload));
1509 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1510 EXPECT_TRUE(0 == seqNum);
1511 EXPECT_TRUE(0 == maxAge);
1512 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1513 EXPECT_TRUE(NULL == resType);
1514 EXPECT_EQ(NULL, resType);
1518 seqNum = 0; maxAge = 0; resType = NULL;
1519 strncpy(payload, "{\"oic\":[]}", sizeof(payload));
1520 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1521 EXPECT_TRUE(0 == seqNum);
1522 EXPECT_TRUE(0 == maxAge);
1523 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1524 EXPECT_TRUE(NULL == resType);
1525 EXPECT_EQ(NULL, resType);
1529 strncpy(payload, "{:]}", sizeof(payload));
1530 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1531 EXPECT_TRUE(0 == seqNum);
1532 EXPECT_TRUE(0 == maxAge);
1533 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1534 EXPECT_TRUE(NULL == resType);
1535 EXPECT_EQ(NULL, resType);
1539 strncpy(payload, "{:[presence}", sizeof(payload));
1540 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1541 EXPECT_TRUE(0 == seqNum);
1542 EXPECT_TRUE(0 == maxAge);
1543 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1544 EXPECT_TRUE(NULL == resType);
1545 EXPECT_EQ(NULL, resType);
1549 TEST(PODTests, OCHeaderOption)
1551 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1554 TEST(PODTests, OCCallbackData)
1556 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);