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, SetPlatformInfoWithZeroLengthManufacturerName)
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 *) "";
230 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
231 EXPECT_EQ(OC_STACK_OK, OCStop());
234 TEST(StackStart, SetPlatformInfoWithTooLongManufacName)
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";
243 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
244 EXPECT_EQ(OC_STACK_OK, OCStop());
247 TEST(StackStart, SetPlatformInfoWithTooLongManufacURL)
249 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
250 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
252 OCPlatformInfo info = {};
253 info.platformID = (char *) "platform_id";
254 info.manufacturerName = (char *) "extremelylongmanufacturername";
255 info.manufacturerUrl = (char *)"www.foooooooooooooooo.baaaaaaaaaaaaar";
257 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCSetPlatformInfo(info));
258 EXPECT_EQ(OC_STACK_OK, OCStop());
262 TEST(StackDiscovery, DISABLED_DoResourceDeviceDiscovery)
264 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
265 OCCallbackData cbData;
268 OC_LOG(INFO, TAG, "Starting DoResourceDeviceDiscovery test ");
269 InitStack(OC_CLIENT);
271 /* Start a discovery query*/
272 char szQueryUri[64] = { 0 };
273 strcpy(szQueryUri, OC_WELL_KNOWN_QUERY);
274 cbData.cb = asyncDoResourcesCallback;
275 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
277 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
287 EXPECT_EQ(OC_STACK_OK, OCStop());
290 TEST(StackStop, StackStopWithoutInit)
292 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
293 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
294 EXPECT_EQ(OC_STACK_OK, OCStop());
295 EXPECT_EQ(OC_STACK_ERROR, OCStop());
298 TEST(StackResource, DISABLED_UpdateResourceNullURI)
300 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
301 OCCallbackData cbData;
304 OC_LOG(INFO, TAG, "Starting UpdateResourceNullURI test");
305 InitStack(OC_CLIENT);
307 /* Start a discovery query*/
308 char szQueryUri[64] = { 0 };
309 strcpy(szQueryUri, OC_WELL_KNOWN_QUERY);
310 cbData.cb = asyncDoResourcesCallback;
311 cbData.context = (void*)DEFAULT_CONTEXT_VALUE;
313 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle,
323 EXPECT_EQ(OC_STACK_OK, OCStop());
326 TEST(StackResource, CreateResourceBadParams)
328 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
329 OC_LOG(INFO, TAG, "Starting CreateResourceBadParams test");
330 InitStack(OC_SERVER);
332 OCResourceHandle handle;
334 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(NULL, //&handle,
339 OC_DISCOVERABLE|OC_OBSERVABLE));
341 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
346 OC_DISCOVERABLE|OC_OBSERVABLE));
348 // Property bitmask out of range
349 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
354 128));// invalid bitmask for OCResourceProperty
356 EXPECT_EQ(OC_STACK_OK, OCStop());
359 TEST(StackResource, CreateResourceBadUri)
361 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
362 OC_LOG(INFO, TAG, "Starting CreateResourceBadUri test");
363 InitStack(OC_SERVER);
365 const char *uri65 = "ABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKLMNOPQRSTUVWXYZABCDEFGHIJKL";
367 OCResourceHandle handle;
369 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
374 OC_DISCOVERABLE|OC_OBSERVABLE));
376 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
381 OC_DISCOVERABLE|OC_OBSERVABLE));
383 EXPECT_EQ(OC_STACK_INVALID_URI, OCCreateResource(&handle,
388 OC_DISCOVERABLE|OC_OBSERVABLE));
390 EXPECT_EQ(OC_STACK_OK, OCStop());
393 TEST(StackResource, CreateResourceSuccess)
395 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
396 OC_LOG(INFO, TAG, "Starting CreateResourceSuccess test");
397 InitStack(OC_SERVER);
399 OCResourceHandle handle;
400 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
405 OC_DISCOVERABLE|OC_OBSERVABLE));
406 const char *url = OCGetResourceUri(handle);
407 EXPECT_STREQ("/a/led", url);
409 EXPECT_EQ(OC_STACK_OK, OCStop());
412 TEST(StackResource, CreateResourceFailDuplicateUri)
414 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
415 OC_LOG(INFO, TAG, "Starting CreateResourceFailDuplicateUri test");
416 InitStack(OC_SERVER);
418 OCResourceHandle handle;
419 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
424 OC_DISCOVERABLE|OC_OBSERVABLE));
425 const char *url = OCGetResourceUri(handle);
426 EXPECT_STREQ("/a/led", url);
428 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
433 OC_DISCOVERABLE|OC_OBSERVABLE));
435 EXPECT_EQ(OC_STACK_OK, OCStop());
438 TEST(StackResource, CreateResourceMultipleResources)
440 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
441 OC_LOG(INFO, TAG, "Starting CreateResourceMultipleResources test");
442 InitStack(OC_SERVER);
444 OCResourceHandle handle1;
445 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
450 OC_DISCOVERABLE|OC_OBSERVABLE));
452 OCResourceHandle handle2;
453 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
458 OC_DISCOVERABLE|OC_OBSERVABLE));
459 OCResourceHandle handle3;
460 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
465 OC_DISCOVERABLE|OC_OBSERVABLE));
467 const char *url = OCGetResourceUri(handle1);
468 EXPECT_STREQ("/a/led1", url);
470 url = OCGetResourceUri(handle2);
471 EXPECT_STREQ("/a/led2", url);
473 url = OCGetResourceUri(handle3);
474 EXPECT_STREQ("/a/led3", url);
476 EXPECT_EQ(OC_STACK_OK, OCStop());
479 TEST(StackResource, CreateResourceBadResoureType)
481 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
482 OC_LOG(INFO, TAG, "Starting CreateResourceBadResoureType test");
483 InitStack(OC_SERVER);
485 OCResourceHandle handle;
486 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
491 OC_DISCOVERABLE|OC_OBSERVABLE));
493 EXPECT_EQ(OC_STACK_OK, OCStop());
496 TEST(StackResource, CreateResourceGoodResourceType)
498 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
499 OC_LOG(INFO, TAG, "Starting CreateResourceGoodResourceType test");
500 InitStack(OC_SERVER);
502 OCResourceHandle handle;
503 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
508 OC_DISCOVERABLE|OC_OBSERVABLE));
510 EXPECT_EQ(OC_STACK_OK, OCStop());
513 TEST(StackResource, ResourceTypeName)
515 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
516 OC_LOG(INFO, TAG, "Starting ResourceTypeName test");
517 InitStack(OC_SERVER);
519 OCResourceHandle handle;
520 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
525 OC_DISCOVERABLE|OC_OBSERVABLE));
527 uint8_t numResourceTypes;
528 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
529 EXPECT_EQ(1, numResourceTypes);
530 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
531 EXPECT_STREQ("core.led", resourceTypeName);
533 // try getting resource type names with an invalid index
534 resourceTypeName = OCGetResourceTypeName(handle, 1);
535 EXPECT_STREQ(NULL, resourceTypeName);
536 // try getting resource type names with an invalid index
537 resourceTypeName = OCGetResourceTypeName(handle, 10);
538 EXPECT_STREQ(NULL, resourceTypeName);
540 EXPECT_EQ(OC_STACK_OK, OCStop());
543 TEST(StackResource, ResourceTypeAttrRepresentation)
545 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
546 OC_LOG(INFO, TAG, "Starting ResourceTypeAttrRepresentation test");
547 InitStack(OC_SERVER);
549 OCResourceHandle handle;
550 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
555 OC_DISCOVERABLE|OC_OBSERVABLE));
557 uint8_t numResourceTypes;
558 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
559 EXPECT_EQ(1, numResourceTypes);
561 EXPECT_EQ(OC_STACK_OK, OCStop());
564 TEST(StackResource, ResourceTypeInterface)
566 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
567 OC_LOG(INFO, TAG, "Starting ResourceTypeInterface test");
568 InitStack(OC_SERVER);
570 OCResourceHandle handle;
571 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
576 OC_DISCOVERABLE|OC_OBSERVABLE));
578 uint8_t numResourceInterfaces;
579 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
580 EXPECT_EQ(1, numResourceInterfaces);
581 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
582 EXPECT_STREQ("core.rw", resourceInterfaceName);
584 // try getting resource interface names with an invalid index
585 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
586 EXPECT_STREQ(NULL, resourceInterfaceName);
587 // try getting resource interface names with an invalid index
588 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
589 EXPECT_STREQ(NULL, resourceInterfaceName);
591 EXPECT_EQ(OC_STACK_OK, OCStop());
594 TEST(StackResource, ResourceDefaultInterfaceAlwaysFirst)
596 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
598 OC_LOG(INFO, TAG, "Starting ResourceDefaultInterfaceAlwaysFirst test");
600 InitStack(OC_SERVER);
602 OCResourceHandle handle;
603 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
608 OC_DISCOVERABLE|OC_OBSERVABLE));
609 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
610 OC_RSRVD_INTERFACE_DEFAULT));
611 uint8_t numResourceInterfaces;
612 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
613 EXPECT_EQ(2, numResourceInterfaces);
615 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
616 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
618 const char*interfaceName_2 = OCGetResourceInterfaceName(handle, 1);
619 EXPECT_STREQ("core.rw", interfaceName_2);
621 EXPECT_EQ(OC_STACK_OK, OCStop());
624 TEST(StackResource, ResourceDuplicateDefaultInterfaces)
626 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
628 OC_LOG(INFO, TAG, "Starting ResourceDuplicateDefaultInterfaces test");
630 InitStack(OC_SERVER);
632 OCResourceHandle handle;
633 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
638 OC_DISCOVERABLE|OC_OBSERVABLE));
640 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
641 OC_RSRVD_INTERFACE_DEFAULT));
642 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
643 OC_RSRVD_INTERFACE_DEFAULT));
645 uint8_t numResourceInterfaces;
646 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
647 EXPECT_EQ(2, numResourceInterfaces);
649 const char *interfaceName_1 = OCGetResourceInterfaceName(handle, 0);
650 EXPECT_STREQ(OC_RSRVD_INTERFACE_DEFAULT, interfaceName_1);
652 EXPECT_EQ(OC_STACK_OK, OCStop());
655 TEST(StackResource, ResourceDuplicateNonDefaultInterfaces)
657 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
659 OC_LOG(INFO, TAG, "Starting ResourceDuplicateInterfaces test");
661 InitStack(OC_SERVER);
663 OCResourceHandle handle;
664 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
669 OC_DISCOVERABLE|OC_OBSERVABLE));
671 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
673 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle,
676 uint8_t numResourceInterfaces;
677 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
678 EXPECT_EQ(1, numResourceInterfaces);
680 EXPECT_EQ(OC_STACK_OK, OCStop());
683 TEST(StackResource, ResourceTypeInterfaceMethods)
685 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
686 OC_LOG(INFO, TAG, "Starting ResourceTypeInterfaceMethods test");
687 InitStack(OC_SERVER);
689 OCResourceHandle handle;
690 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
695 OC_DISCOVERABLE|OC_OBSERVABLE));
697 uint8_t numResourceInterfaces;
698 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
699 EXPECT_EQ(1, numResourceInterfaces);
701 EXPECT_EQ(OC_STACK_OK, OCStop());
704 TEST(StackResource, GetResourceProperties)
706 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
707 OC_LOG(INFO, TAG, "Starting GetResourceProperties test");
708 InitStack(OC_SERVER);
710 OCResourceHandle handle;
711 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
716 OC_DISCOVERABLE|OC_OBSERVABLE));
718 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
719 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
721 EXPECT_EQ(OC_STACK_OK, OCStop());
724 TEST(StackResource, StackTestResourceDiscoverOneResourceBad)
726 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
727 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResourceBad test");
728 InitStack(OC_SERVER);
729 uint8_t numResources = 0;
730 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
732 OCResourceHandle handle;
733 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
738 OC_DISCOVERABLE|OC_OBSERVABLE));
739 const char *url = OCGetResourceUri(handle);
740 EXPECT_STREQ("/a1/led", url);
742 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
743 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
744 uint8_t numExpectedResources = 0;
746 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
747 EXPECT_EQ(numExpectedResources, numResources);
749 EXPECT_EQ(OC_STACK_OK, OCStop());
752 TEST(StackResource, StackTestResourceDiscoverOneResource)
754 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
755 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverOneResource test");
756 InitStack(OC_SERVER);
758 OCResourceHandle handle;
759 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
764 OC_DISCOVERABLE|OC_OBSERVABLE));
765 const char *url = OCGetResourceUri(handle);
766 EXPECT_STREQ("/a/led", url);
768 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
769 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
771 EXPECT_EQ(OC_STACK_OK, OCStop());
774 TEST(StackResource, StackTestResourceDiscoverManyResources)
776 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
777 OC_LOG(INFO, TAG, "Starting StackTestResourceDiscoverManyResources test");
778 InitStack(OC_SERVER);
780 OCResourceHandle handle1;
781 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
787 const char *url = OCGetResourceUri(handle1);
788 EXPECT_STREQ("/a/led1", url);
790 OCResourceHandle handle2;
791 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
796 OC_DISCOVERABLE|OC_OBSERVABLE));
797 url = OCGetResourceUri(handle2);
798 EXPECT_STREQ("/a/led2", url);
800 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
801 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
803 OCResourceHandle handle3;
804 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
809 OC_DISCOVERABLE|OC_OBSERVABLE));
810 url = OCGetResourceUri(handle3);
811 EXPECT_STREQ("/a/led3", url);
813 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_LL));
814 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, OC_RSRVD_INTERFACE_BATCH));
816 OCResourceHandle handle4;
817 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
823 url = OCGetResourceUri(handle4);
824 EXPECT_STREQ("/a/led4", url);
826 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
827 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_LL));
828 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, OC_RSRVD_INTERFACE_BATCH));
830 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
832 EXPECT_EQ(OC_STACK_OK, OCStop());
835 TEST(StackBind, BindResourceTypeNameBad)
837 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
838 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameBad test");
839 InitStack(OC_SERVER);
841 OCResourceHandle handle;
842 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
847 OC_DISCOVERABLE|OC_OBSERVABLE));
849 uint8_t numResourceTypes;
850 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
851 EXPECT_EQ(1, numResourceTypes);
852 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
853 EXPECT_STREQ("core.led", resourceTypeName);
855 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
857 EXPECT_EQ(OC_STACK_OK, OCStop());
860 TEST(StackBind, BindResourceTypeNameGood)
862 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
863 OC_LOG(INFO, TAG, "Starting BindResourceTypeNameGood test");
864 InitStack(OC_SERVER);
866 OCResourceHandle handle;
867 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
872 OC_DISCOVERABLE|OC_OBSERVABLE));
874 uint8_t numResourceTypes;
875 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
876 EXPECT_EQ(1, numResourceTypes);
877 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
878 EXPECT_STREQ("core.led", resourceTypeName);
880 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
881 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
882 EXPECT_EQ(2, numResourceTypes);
883 resourceTypeName = OCGetResourceTypeName(handle, 1);
884 EXPECT_STREQ("core.brightled", resourceTypeName);
886 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
887 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
888 EXPECT_EQ(3, numResourceTypes);
889 resourceTypeName = OCGetResourceTypeName(handle, 2);
890 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
892 EXPECT_EQ(OC_STACK_OK, OCStop());
895 TEST(StackBind, BindResourceTypeAttribRepGood)
897 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
898 OC_LOG(INFO, TAG, "Starting BindResourceTypeAttribRepGood test");
899 InitStack(OC_SERVER);
901 OCResourceHandle handle;
902 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
907 OC_DISCOVERABLE|OC_OBSERVABLE));
909 uint8_t numResourceTypes;
910 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
911 EXPECT_EQ(1, numResourceTypes);
913 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
914 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
915 EXPECT_EQ(2, numResourceTypes);
917 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
918 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
919 EXPECT_EQ(3, numResourceTypes);
921 EXPECT_EQ(OC_STACK_OK, OCStop());
925 TEST(StackBind, BindResourceInterfaceNameBad)
927 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
928 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameBad test");
929 InitStack(OC_SERVER);
931 OCResourceHandle handle;
932 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
937 OC_DISCOVERABLE|OC_OBSERVABLE));
939 uint8_t numResourceInterfaces;
940 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
941 EXPECT_EQ(1, numResourceInterfaces);
942 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
943 EXPECT_STREQ("core.rw", resourceInterfaceName);
945 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
947 EXPECT_EQ(OC_STACK_OK, OCStop());
950 TEST(StackBind, BindResourceInterfaceNameGood)
952 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
953 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceNameGood test");
954 InitStack(OC_SERVER);
956 OCResourceHandle handle;
957 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
962 OC_DISCOVERABLE|OC_OBSERVABLE));
964 uint8_t numResourceInterfaces;
965 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
966 EXPECT_EQ(1, numResourceInterfaces);
967 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
968 EXPECT_STREQ("core.rw", resourceInterfaceName);
970 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
972 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
973 EXPECT_EQ(2, numResourceInterfaces);
974 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
975 EXPECT_STREQ("core.r", resourceInterfaceName);
977 EXPECT_EQ(OC_STACK_OK, OCStop());
980 TEST(StackBind, BindResourceInterfaceMethodsBad)
982 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
983 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsBad test");
984 InitStack(OC_SERVER);
986 OCResourceHandle handle;
987 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
992 OC_DISCOVERABLE|OC_OBSERVABLE));
994 uint8_t numResourceInterfaces;
995 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
996 EXPECT_EQ(1, numResourceInterfaces);
998 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
1000 EXPECT_EQ(OC_STACK_OK, OCStop());
1003 TEST(StackBind, BindResourceInterfaceMethodsGood)
1005 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1006 OC_LOG(INFO, TAG, "Starting BindResourceInterfaceMethodsGood test");
1007 InitStack(OC_SERVER);
1009 OCResourceHandle handle;
1010 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1015 OC_DISCOVERABLE|OC_OBSERVABLE));
1017 uint8_t numResourceInterfaces;
1018 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1019 EXPECT_EQ(1, numResourceInterfaces);
1021 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
1023 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
1024 EXPECT_EQ(2, numResourceInterfaces);
1026 EXPECT_EQ(OC_STACK_OK, OCStop());
1029 TEST(StackBind, BindContainedResourceBad)
1031 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1032 OC_LOG(INFO, TAG, "Starting BindContainedResourceBad test");
1033 InitStack(OC_SERVER);
1035 OCResourceHandle containerHandle;
1036 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1041 OC_DISCOVERABLE|OC_OBSERVABLE));
1043 OCResourceHandle handle0;
1044 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1049 OC_DISCOVERABLE|OC_OBSERVABLE));
1051 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
1053 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
1055 EXPECT_EQ(OC_STACK_OK, OCStop());
1058 TEST(StackBind, BindContainedResourceGood)
1060 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1061 OC_LOG(INFO, TAG, "Starting BindContainedResourceGood test");
1062 InitStack(OC_SERVER);
1064 uint8_t numResources = 0;
1065 uint8_t numExpectedResources = 0;
1067 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1069 OCResourceHandle containerHandle;
1070 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1075 OC_DISCOVERABLE|OC_OBSERVABLE));
1076 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1077 EXPECT_EQ(++numExpectedResources, numResources);
1079 OCResourceHandle handle0;
1080 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1085 OC_DISCOVERABLE|OC_OBSERVABLE));
1086 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1087 EXPECT_EQ(++numExpectedResources, numResources);
1089 OCResourceHandle handle1;
1090 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1095 OC_DISCOVERABLE|OC_OBSERVABLE));
1096 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1097 EXPECT_EQ(++numExpectedResources, numResources);
1099 OCResourceHandle handle2;
1100 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1105 OC_DISCOVERABLE|OC_OBSERVABLE));
1106 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1107 EXPECT_EQ(++numExpectedResources, numResources);
1109 OCResourceHandle handle3;
1110 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1115 OC_DISCOVERABLE|OC_OBSERVABLE));
1116 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1117 EXPECT_EQ(++numExpectedResources, numResources);
1119 OCResourceHandle handle4;
1120 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1125 OC_DISCOVERABLE|OC_OBSERVABLE));
1126 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1127 EXPECT_EQ(++numExpectedResources, numResources);
1129 OCResourceHandle handle5;
1130 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1135 OC_DISCOVERABLE|OC_OBSERVABLE));
1136 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1137 EXPECT_EQ(++numExpectedResources, numResources);
1140 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
1141 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
1142 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
1143 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
1144 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
1145 EXPECT_EQ(OC_STACK_ERROR, OCBindResource(containerHandle, handle5));
1147 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
1148 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
1149 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
1150 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
1151 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
1153 EXPECT_EQ(NULL, OCGetResourceHandleFromCollection(containerHandle, 5));
1155 EXPECT_EQ(OC_STACK_OK, OCStop());
1159 TEST(StackBind, BindEntityHandlerBad)
1161 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1162 OC_LOG(INFO, TAG, "Starting BindEntityHandlerBad test");
1163 InitStack(OC_SERVER);
1165 OCResourceHandle handle;
1166 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1171 OC_DISCOVERABLE|OC_OBSERVABLE));
1173 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL));
1175 EXPECT_EQ(OC_STACK_OK, OCStop());
1178 TEST(StackBind, BindEntityHandlerGood)
1180 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1181 OC_LOG(INFO, TAG, "Starting BindEntityHandlerGood test");
1182 InitStack(OC_SERVER);
1184 OCResourceHandle handle;
1185 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1190 OC_DISCOVERABLE|OC_OBSERVABLE));
1192 OCEntityHandler myHandler = entityHandler;
1194 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler));
1196 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1198 EXPECT_EQ(OC_STACK_OK, OCStop());
1201 TEST(StackResourceAccess, GetResourceByIndex)
1203 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1204 OC_LOG(INFO, TAG, "Starting GetResourceByIndex test");
1205 InitStack(OC_SERVER);
1207 uint8_t numResources = 0;
1208 uint8_t numExpectedResources = 0;
1209 uint8_t resourceIndex = 0;
1210 uint8_t prevResources = 0;
1211 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1212 prevResources = numExpectedResources;
1213 OCResourceHandle containerHandle;
1214 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
1219 OC_DISCOVERABLE|OC_OBSERVABLE));
1220 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1221 EXPECT_EQ(++numExpectedResources, numResources);
1223 OCResourceHandle handle0;
1224 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1229 OC_DISCOVERABLE|OC_OBSERVABLE));
1230 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1231 EXPECT_EQ(++numExpectedResources, numResources);
1233 OCResourceHandle handle1;
1234 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1239 OC_DISCOVERABLE|OC_OBSERVABLE));
1240 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1241 EXPECT_EQ(++numExpectedResources, numResources);
1243 OCResourceHandle handle2;
1244 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1249 OC_DISCOVERABLE|OC_OBSERVABLE));
1250 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1251 EXPECT_EQ(++numExpectedResources, numResources);
1253 OCResourceHandle handle3;
1254 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1259 OC_DISCOVERABLE|OC_OBSERVABLE));
1260 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1261 EXPECT_EQ(++numExpectedResources, numResources);
1263 OCResourceHandle handle4;
1264 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1269 OC_DISCOVERABLE|OC_OBSERVABLE));
1270 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1271 EXPECT_EQ(++numExpectedResources, numResources);
1273 OCResourceHandle handle5;
1274 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
1279 OC_DISCOVERABLE|OC_OBSERVABLE));
1280 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1281 EXPECT_EQ(++numExpectedResources, numResources);
1282 resourceIndex += prevResources;
1283 EXPECT_EQ(containerHandle, OCGetResourceHandle(resourceIndex));
1284 EXPECT_EQ(handle0, OCGetResourceHandle(++resourceIndex));
1285 EXPECT_EQ(handle1, OCGetResourceHandle(++resourceIndex));
1286 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1287 EXPECT_EQ(handle3, OCGetResourceHandle(++resourceIndex));
1288 EXPECT_EQ(handle4, OCGetResourceHandle(++resourceIndex));
1289 EXPECT_EQ(handle5, OCGetResourceHandle(++resourceIndex));
1291 EXPECT_EQ(OC_STACK_OK, OCStop());
1294 TEST(StackResourceAccess, DeleteHeadResource)
1296 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1297 OC_LOG(INFO, TAG, "Starting DeleteHeadResource test");
1298 InitStack(OC_SERVER);
1300 uint8_t numResources = 0;
1301 uint8_t numExpectedResources = 0;
1303 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1305 OCResourceHandle handle0;
1306 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1311 OC_DISCOVERABLE|OC_OBSERVABLE));
1312 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1313 EXPECT_EQ(++numExpectedResources, numResources);
1315 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1316 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1317 EXPECT_EQ(--numExpectedResources, numResources);
1319 EXPECT_EQ(OC_STACK_OK, OCStop());
1322 TEST(StackResourceAccess, DeleteHeadResource2)
1324 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1325 OC_LOG(INFO, TAG, "Starting DeleteHeadResource2 test");
1326 InitStack(OC_SERVER);
1328 uint8_t numResources = 0;
1329 uint8_t numExpectedResources = 0;
1331 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1332 OCResourceHandle handle0;
1333 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1338 OC_DISCOVERABLE|OC_OBSERVABLE));
1339 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1340 EXPECT_EQ(++numExpectedResources, numResources);
1342 OCResourceHandle handle1;
1343 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1348 OC_DISCOVERABLE|OC_OBSERVABLE));
1349 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1350 EXPECT_EQ(++numExpectedResources, numResources);
1352 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1353 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1354 EXPECT_EQ(--numExpectedResources, numResources);
1356 EXPECT_EQ(handle1, OCGetResourceHandle(numResources - 1));
1358 EXPECT_EQ(OC_STACK_OK, OCStop());
1362 TEST(StackResourceAccess, DeleteLastResource)
1364 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1365 OC_LOG(INFO, TAG, "Starting DeleteLastResource test");
1366 InitStack(OC_SERVER);
1368 uint8_t numResources = 0;
1369 uint8_t numExpectedResources = 0;
1371 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1373 OCResourceHandle handle0;
1374 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1379 OC_DISCOVERABLE|OC_OBSERVABLE));
1380 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1381 EXPECT_EQ(++numExpectedResources, numResources);
1383 OCResourceHandle handle1;
1384 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1389 OC_DISCOVERABLE|OC_OBSERVABLE));
1390 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1391 EXPECT_EQ(++numExpectedResources, numResources);
1393 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1394 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1395 EXPECT_EQ(--numExpectedResources, numResources);
1397 EXPECT_EQ(handle0, OCGetResourceHandle(numResources - 1));
1399 OCResourceHandle handle2;
1400 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1405 OC_DISCOVERABLE|OC_OBSERVABLE));
1406 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1407 EXPECT_EQ(++numExpectedResources, numResources);
1409 EXPECT_EQ(OC_STACK_OK, OCStop());
1412 TEST(StackResourceAccess, DeleteMiddleResource)
1414 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1415 OC_LOG(INFO, TAG, "Starting DeleteMiddleResource test");
1416 InitStack(OC_SERVER);
1418 uint8_t numResources = 0;
1419 uint8_t numExpectedResources = 0;
1420 uint8_t resourceIndex = InitResourceIndex();
1422 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numExpectedResources));
1423 resourceIndex = numExpectedResources;
1424 OCResourceHandle handle0;
1425 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1430 OC_DISCOVERABLE|OC_OBSERVABLE));
1431 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1432 EXPECT_EQ(++numExpectedResources, numResources);
1434 OCResourceHandle handle1;
1435 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1440 OC_DISCOVERABLE|OC_OBSERVABLE));
1441 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1442 EXPECT_EQ(++numExpectedResources, numResources);
1444 OCResourceHandle handle2;
1445 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1450 OC_DISCOVERABLE|OC_OBSERVABLE));
1451 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1452 EXPECT_EQ(++numExpectedResources, numResources);
1454 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1455 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1456 EXPECT_EQ(--numExpectedResources, numResources);
1458 EXPECT_EQ(handle0, OCGetResourceHandle(resourceIndex));
1459 EXPECT_EQ(handle2, OCGetResourceHandle(++resourceIndex));
1461 // Make sure the resource elements are still correct
1462 uint8_t numResourceInterfaces;
1463 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1464 EXPECT_EQ(1, numResourceInterfaces);
1465 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 0);
1466 EXPECT_STREQ("core.rw", resourceInterfaceName);
1468 EXPECT_EQ(OC_STACK_OK, OCStop());
1474 #endif // __cplusplus
1475 void parsePresencePayload(char* payload, uint32_t* seqNum,
1476 uint32_t* maxAge, OCPresenceTrigger* presenceTrigger, char** resType);
1479 #endif // __cplusplus
1481 TEST(StackPresence, ParsePresencePayload)
1483 itst::DeadmanTimer killSwitch(SHORT_TEST_TIMEOUT);
1484 OC_LOG(INFO, TAG, "Starting ParsePresencePayload test");
1487 uint32_t seqNum = 0, maxAge = 0;
1488 OCPresenceTrigger presenceTrigger = OC_PRESENCE_TRIGGER_CHANGE;
1489 char * resType = NULL;
1492 strncpy(payload, "{\"oic\":[{\"ttl\":99,\"non\":100,\"trg\":"
1493 "\"delete\",\"rt\":\"presence\"}]}", sizeof(payload));
1494 parsePresencePayload(payload, &seqNum, &maxAge,
1495 &presenceTrigger, &resType);
1496 EXPECT_TRUE(100 == seqNum);
1497 EXPECT_TRUE(99 == maxAge);
1498 EXPECT_TRUE(OC_PRESENCE_TRIGGER_DELETE == presenceTrigger);
1499 EXPECT_TRUE(NULL != resType);
1500 EXPECT_STREQ("presence", resType);
1503 presenceTrigger = OC_PRESENCE_TRIGGER_CHANGE;
1505 //Bad Scenario -- should not result in Seg Fault
1506 parsePresencePayload(payload, NULL, &maxAge, &presenceTrigger, &resType);
1509 seqNum = 0; maxAge = 0; resType = NULL;
1510 strncpy(payload, "{abracadabra}", sizeof(payload));
1511 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1512 EXPECT_TRUE(0 == seqNum);
1513 EXPECT_TRUE(0 == maxAge);
1514 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1515 EXPECT_TRUE(NULL == resType);
1516 EXPECT_EQ(NULL, resType);
1520 seqNum = 0; maxAge = 0; resType = NULL;
1521 strncpy(payload, "{\"oic\":[100]}", sizeof(payload));
1522 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1523 EXPECT_TRUE(0 == seqNum);
1524 EXPECT_TRUE(0 == maxAge);
1525 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1526 EXPECT_TRUE(NULL == resType);
1527 EXPECT_EQ(NULL, resType);
1531 seqNum = 0; maxAge = 0; resType = NULL;
1532 strncpy(payload, "{\"oic\":[]}", sizeof(payload));
1533 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1534 EXPECT_TRUE(0 == seqNum);
1535 EXPECT_TRUE(0 == maxAge);
1536 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1537 EXPECT_TRUE(NULL == resType);
1538 EXPECT_EQ(NULL, resType);
1542 strncpy(payload, "{:]}", sizeof(payload));
1543 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1544 EXPECT_TRUE(0 == seqNum);
1545 EXPECT_TRUE(0 == maxAge);
1546 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1547 EXPECT_TRUE(NULL == resType);
1548 EXPECT_EQ(NULL, resType);
1552 strncpy(payload, "{:[presence}", sizeof(payload));
1553 parsePresencePayload(payload, &seqNum, &maxAge, &presenceTrigger, &resType);
1554 EXPECT_TRUE(0 == seqNum);
1555 EXPECT_TRUE(0 == maxAge);
1556 EXPECT_TRUE(OC_PRESENCE_TRIGGER_CHANGE == presenceTrigger);
1557 EXPECT_TRUE(NULL == resType);
1558 EXPECT_EQ(NULL, resType);
1562 TEST(PODTests, OCHeaderOption)
1564 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);
1567 TEST(PODTests, OCCallbackData)
1569 EXPECT_TRUE(std::is_pod<OCHeaderOption>::value);