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);
717 OCResourceHandle handle;
718 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
723 OC_DISCOVERABLE|OC_OBSERVABLE));
724 const char *url = OCGetResourceUri(handle);
725 EXPECT_STREQ("/a1/led", url);
727 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
728 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
729 uint8_t numResources = 0;
730 uint8_t numExpectedResources = InitNumExpectedResources();
732 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
733 EXPECT_EQ(numExpectedResources, numResources);
735 EXPECT_EQ(OC_STACK_OK, OCStop());
738 TEST(StackResource, StackTestResourceDiscoverOneResource)
740 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
741 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
742 InitStack(OC_SERVER);
744 OCResourceHandle handle;
745 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
750 OC_DISCOVERABLE|OC_OBSERVABLE));
751 const char *url = OCGetResourceUri(handle);
752 EXPECT_STREQ("/a/led", url);
754 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
755 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
757 EXPECT_EQ(OC_STACK_OK, OCStop());
760 TEST(StackResource, StackTestResourceDiscoverManyResources)
762 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
763 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
764 InitStack(OC_SERVER);
766 OCResourceHandle handle1;
767 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
773 const char *url = OCGetResourceUri(handle1);
774 EXPECT_STREQ("/a/led1", url);
776 OCResourceHandle handle2;
777 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
782 OC_DISCOVERABLE|OC_OBSERVABLE));
783 url = OCGetResourceUri(handle2);
784 EXPECT_STREQ("/a/led2", url);
786 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
787 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
789 OCResourceHandle handle3;
790 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
795 OC_DISCOVERABLE|OC_OBSERVABLE));
796 url = OCGetResourceUri(handle3);
797 EXPECT_STREQ("/a/led3", url);
799 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
800 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
802 OCResourceHandle handle4;
803 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
809 url = OCGetResourceUri(handle4);
810 EXPECT_STREQ("/a/led4", url);
812 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
813 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
814 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
816 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
818 EXPECT_EQ(OC_STACK_OK, OCStop());
821 TEST(StackBind, BindResourceTypeNameBad)
823 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
824 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
825 InitStack(OC_SERVER);
827 OCResourceHandle handle;
828 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
833 OC_DISCOVERABLE|OC_OBSERVABLE));
835 uint8_t numResourceTypes;
836 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
837 EXPECT_EQ(1, numResourceTypes);
838 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
839 EXPECT_STREQ("core.led", resourceTypeName);
841 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
843 EXPECT_EQ(OC_STACK_OK, OCStop());
846 TEST(StackBind, BindResourceTypeNameGood)
848 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
849 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
850 InitStack(OC_SERVER);
852 OCResourceHandle handle;
853 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
858 OC_DISCOVERABLE|OC_OBSERVABLE));
860 uint8_t numResourceTypes;
861 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
862 EXPECT_EQ(1, numResourceTypes);
863 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
864 EXPECT_STREQ("core.led", resourceTypeName);
866 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
867 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
868 EXPECT_EQ(2, numResourceTypes);
869 resourceTypeName = OCGetResourceTypeName(handle, 1);
870 EXPECT_STREQ("core.brightled", resourceTypeName);
872 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
873 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
874 EXPECT_EQ(3, numResourceTypes);
875 resourceTypeName = OCGetResourceTypeName(handle, 2);
876 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
878 EXPECT_EQ(OC_STACK_OK, OCStop());
881 TEST(StackBind, BindResourceTypeAttribRepGood)
883 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
884 OC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
885 InitStack(OC_SERVER);
887 OCResourceHandle handle;
888 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
893 OC_DISCOVERABLE|OC_OBSERVABLE));
895 uint8_t numResourceTypes;
896 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
897 EXPECT_EQ(1, numResourceTypes);
899 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
900 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
901 EXPECT_EQ(2, numResourceTypes);
903 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
904 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
905 EXPECT_EQ(3, numResourceTypes);
907 EXPECT_EQ(OC_STACK_OK, OCStop());
911 TEST(StackBind, BindResourceInterfaceNameBad)
913 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
914 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
915 InitStack(OC_SERVER);
917 OCResourceHandle handle;
918 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
923 OC_DISCOVERABLE|OC_OBSERVABLE));
925 uint8_t numResourceInterfaces;
926 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
927 EXPECT_EQ(1, numResourceInterfaces);
928 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
929 EXPECT_STREQ("core.rw", resourceInterfaceName);
931 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
933 EXPECT_EQ(OC_STACK_OK, OCStop());
936 TEST(StackBind, BindResourceInterfaceNameGood)
938 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
939 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
940 InitStack(OC_SERVER);
942 OCResourceHandle handle;
943 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
948 OC_DISCOVERABLE|OC_OBSERVABLE));
950 uint8_t numResourceInterfaces;
951 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
952 EXPECT_EQ(1, numResourceInterfaces);
953 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
954 EXPECT_STREQ("core.rw", resourceInterfaceName);
956 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
958 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
959 EXPECT_EQ(2, numResourceInterfaces);
960 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
961 EXPECT_STREQ("core.r", resourceInterfaceName);
963 EXPECT_EQ(OC_STACK_OK, OCStop());
966 TEST(StackBind, BindResourceInterfaceMethodsBad)
968 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
969 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
970 InitStack(OC_SERVER);
972 OCResourceHandle handle;
973 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
978 OC_DISCOVERABLE|OC_OBSERVABLE));
980 uint8_t numResourceInterfaces;
981 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
982 EXPECT_EQ(1, numResourceInterfaces);
984 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
986 EXPECT_EQ(OC_STACK_OK, OCStop());
989 TEST(StackBind, BindResourceInterfaceMethodsGood)
991 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
992 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
993 InitStack(OC_SERVER);
995 OCResourceHandle handle;
996 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1001 OC_DISCOVERABLE|OC_OBSERVABLE));
1003 uint8_t numResourceInterfaces;
1004 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1005 EXPECT_EQ(1, numResourceInterfaces);
1007 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1009 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1010 EXPECT_EQ(2, numResourceInterfaces);
1012 EXPECT_EQ(OC_STACK_OK, OCStop());
1015 TEST(StackBind, BindContainedResourceBad)
1017 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1018 OC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1019 InitStack(OC_SERVER);
1021 OCResourceHandle containerHandle;
1022 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1027 OC_DISCOVERABLE|OC_OBSERVABLE));
1029 OCResourceHandle handle0;
1030 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1035 OC_DISCOVERABLE|OC_OBSERVABLE));
1037 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1039 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1041 EXPECT_EQ(OC_STACK_OK, OCStop());
1044 TEST(StackBind, BindContainedResourceGood)
1046 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1047 OC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1048 InitStack(OC_SERVER);
1050 uint8_t numResources = 0;
1051 uint8_t numExpectedResources = InitNumExpectedResources();
1053 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1054 EXPECT_EQ(numExpectedResources, numResources);
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 = InitNumExpectedResources();
1196 uint8_t resourceIndex = InitResourceIndex();
1198 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1199 EXPECT_EQ(numExpectedResources, numResources);
1201 OCResourceHandle containerHandle;
1202 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1207 OC_DISCOVERABLE|OC_OBSERVABLE));
1208 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1209 EXPECT_EQ(++numExpectedResources, numResources);
1211 OCResourceHandle handle0;
1212 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1217 OC_DISCOVERABLE|OC_OBSERVABLE));
1218 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1219 EXPECT_EQ(++numExpectedResources, numResources);
1221 OCResourceHandle handle1;
1222 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1227 OC_DISCOVERABLE|OC_OBSERVABLE));
1228 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1229 EXPECT_EQ(++numExpectedResources, numResources);
1231 OCResourceHandle handle2;
1232 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1237 OC_DISCOVERABLE|OC_OBSERVABLE));
1238 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1239 EXPECT_EQ(++numExpectedResources, numResources);
1241 OCResourceHandle handle3;
1242 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1247 OC_DISCOVERABLE|OC_OBSERVABLE));
1248 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1249 EXPECT_EQ(++numExpectedResources, numResources);
1251 OCResourceHandle handle4;
1252 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1257 OC_DISCOVERABLE|OC_OBSERVABLE));
1258 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1259 EXPECT_EQ(++numExpectedResources, numResources);
1261 OCResourceHandle handle5;
1262 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1267 OC_DISCOVERABLE|OC_OBSERVABLE));
1268 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1269 EXPECT_EQ(++numExpectedResources, numResources);
1271 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1272 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1273 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1274 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1275 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1276 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1277 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1279 EXPECT_EQ(OC_STACK_OK, OCStop());
1282 TEST(StackResourceAccess, DeleteHeadResource)
1284 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1285 OC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1286 InitStack(OC_SERVER);
1288 uint8_t numResources = 0;
1289 uint8_t numExpectedResources = InitNumExpectedResources();
1291 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1292 EXPECT_EQ(numExpectedResources, numResources);
1294 OCResourceHandle handle0;
1295 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1300 OC_DISCOVERABLE|OC_OBSERVABLE));
1301 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1302 EXPECT_EQ(++numExpectedResources, numResources);
1304 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1305 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1306 EXPECT_EQ(--numExpectedResources, numResources);
1308 EXPECT_EQ(OC_STACK_OK, OCStop());
1311 TEST(StackResourceAccess, DeleteHeadResource2)
1313 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1314 OC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1315 InitStack(OC_SERVER);
1317 uint8_t numResources = 0;
1318 uint8_t numExpectedResources = InitNumExpectedResources();
1319 uint8_t resourceIndex = InitResourceIndex();
1321 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1322 EXPECT_EQ(numExpectedResources, numResources);
1324 OCResourceHandle handle0;
1325 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1330 OC_DISCOVERABLE|OC_OBSERVABLE));
1331 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1332 EXPECT_EQ(++numExpectedResources, numResources);
1334 OCResourceHandle handle1;
1335 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1340 OC_DISCOVERABLE|OC_OBSERVABLE));
1341 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1342 EXPECT_EQ(++numExpectedResources, numResources);
1344 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1345 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1346 EXPECT_EQ(--numExpectedResources, numResources);
1348 EXPECT_EQ(handle1, OCGetResourceHandle(resourceIndex));
1350 EXPECT_EQ(OC_STACK_OK, OCStop());
1354 TEST(StackResourceAccess, DeleteLastResource)
1356 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1357 OC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1358 InitStack(OC_SERVER);
1360 uint8_t numResources = 0;
1361 uint8_t numExpectedResources = InitNumExpectedResources();
1362 uint8_t resourceIndex = InitResourceIndex();
1364 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1365 EXPECT_EQ(numExpectedResources, numResources);
1367 OCResourceHandle handle0;
1368 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1373 OC_DISCOVERABLE|OC_OBSERVABLE));
1374 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1375 EXPECT_EQ(++numExpectedResources, numResources);
1377 OCResourceHandle handle1;
1378 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1383 OC_DISCOVERABLE|OC_OBSERVABLE));
1384 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1385 EXPECT_EQ(++numExpectedResources, numResources);
1387 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1388 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1389 EXPECT_EQ(--numExpectedResources, numResources);
1391 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1393 OCResourceHandle handle2;
1394 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1399 OC_DISCOVERABLE|OC_OBSERVABLE));
1400 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1401 EXPECT_EQ(++numExpectedResources, numResources);
1403 EXPECT_EQ(OC_STACK_OK, OCStop());
1406 TEST(StackResourceAccess, DeleteMiddleResource)
1408 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1409 OC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1410 InitStack(OC_SERVER);
1412 uint8_t numResources = 0;
1413 uint8_t numExpectedResources = InitNumExpectedResources();
1414 uint8_t resourceIndex = InitResourceIndex();
1416 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1417 EXPECT_EQ(numExpectedResources, numResources);
1419 OCResourceHandle handle0;
1420 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1425 OC_DISCOVERABLE|OC_OBSERVABLE));
1426 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1427 EXPECT_EQ(++numExpectedResources, numResources);
1429 OCResourceHandle handle1;
1430 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1435 OC_DISCOVERABLE|OC_OBSERVABLE));
1436 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1437 EXPECT_EQ(++numExpectedResources, numResources);
1439 OCResourceHandle handle2;
1440 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
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(resourceIndex));
1454 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1456 // Make sure the resource elements are still correct
1457 uint8_t numResourceInterfaces;
1458 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1459 EXPECT_EQ(1, numResourceInterfaces);
1460 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 0);
1461 EXPECT_STREQ("core.rw", resourceInterfaceName);
1463 EXPECT_EQ(OC_STACK_OK, OCStop());
1469 #endif // __cplusplus
1470 void parsePresencePayload(char* payload, uint32_t* seqNum,
1471 uint32_t* maxAge, OCPresenceTrigger* presenceTrigger, char** resType);
1474 #endif // __cplusplus
1476 TEST(StackPresence, ParsePresencePayload)
1478 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1479 OC_LOG(INFO, TAG, "Starting ParsePresencePayload test");
1482 uint32_t seqNum = 0, maxAge = 0;
1483 OCPresenceTrigger presenceTrigger = OC_PRESENCE_TRIGGER_CHANGE;
1484 char * resType = NULL;
1487 strncpy(payload, "{\"oic\":[{\"ttl\":99,\"non\":100,\"trg\":"
1488 "\"delete\",\"rt\":\"presence\"}]}", sizeof(payload));
1489 parsePresencePayload(payload, &seqNum, &maxAge,
1490 &presenceTrigger, &resType);
1491 EXPECT_TRUE(100 == seqNum);
1492 EXPECT_TRUE(99 == maxAge);
1493 EXPECT_TRUE(OC_PRESENCE_TRIGGER_DELETE == presenceTrigger);
1494 EXPECT_TRUE(NULL != resType);
1495 EXPECT_STREQ("presence", resType);
1498 presenceTrigger = OC_PRESENCE_TRIGGER_CHANGE;
1500 //Bad Scenario -- should not result in Seg Fault
1501 parsePresencePayload(payload, NULL, &maxAge, &presenceTrigger, &resType);
1504 seqNum = 0; maxAge = 0; resType = NULL;
1505 strncpy(payload, "{abracadabra}", sizeof(payload));
1506 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1507 EXPECT_TRUE(0 == seqNum);
1508 EXPECT_TRUE(0 == maxAge);
1509 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1510 EXPECT_TRUE(NULL == resType);
1511 EXPECT_EQ(NULL, resType);
1515 seqNum = 0; maxAge = 0; resType = NULL;
1516 strncpy(payload, "{\"oic\":[100]}", sizeof(payload));
1517 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1518 EXPECT_TRUE(0 == seqNum);
1519 EXPECT_TRUE(0 == maxAge);
1520 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1521 EXPECT_TRUE(NULL == resType);
1522 EXPECT_EQ(NULL, resType);
1526 seqNum = 0; maxAge = 0; resType = NULL;
1527 strncpy(payload, "{\"oic\":[]}", sizeof(payload));
1528 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1529 EXPECT_TRUE(0 == seqNum);
1530 EXPECT_TRUE(0 == maxAge);
1531 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1532 EXPECT_TRUE(NULL == resType);
1533 EXPECT_EQ(NULL, resType);
1537 strncpy(payload, "{:]}", sizeof(payload));
1538 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1539 EXPECT_TRUE(0 == seqNum);
1540 EXPECT_TRUE(0 == maxAge);
1541 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1542 EXPECT_TRUE(NULL == resType);
1543 EXPECT_EQ(NULL, resType);
1547 strncpy(payload, "{:[presence}", sizeof(payload));
1548 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1549 EXPECT_TRUE(0 == seqNum);
1550 EXPECT_TRUE(0 == maxAge);
1551 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1552 EXPECT_TRUE(NULL == resType);
1553 EXPECT_EQ(NULL, resType);
1557 TEST(PODTests, OCHeaderOption)
1559 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1562 TEST(PODTests, OCCallbackData)
1564 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);