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 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
24 #include "ocstackinternal.h"
28 #include "gtest/gtest.h"
29 #include <sys/types.h>
36 //-----------------------------------------------------------------------------
38 //-----------------------------------------------------------------------------
47 //-----------------------------------------------------------------------------
49 //-----------------------------------------------------------------------------
50 static const char TAG[] = "TestHarness";
52 //-----------------------------------------------------------------------------
54 //-----------------------------------------------------------------------------
55 extern "C" OCStackApplicationResult asyncDoResourcesCallback(void* ctx, OCDoHandle handle, OCClientResponse * clientResponse) {
56 OC_LOG(INFO, TAG, "Entering asyncDoResourcesCallback");
58 EXPECT_EQ(OC_STACK_OK, clientResponse->result);
60 if(ctx == (void*)CTX_VAL) {
61 OC_LOG_V(INFO, TAG, "Callback Context recvd successfully");
63 OC_LOG_V(INFO, TAG, "result = %d", clientResponse->result);
65 return OC_STACK_KEEP_TRANSACTION;
69 //-----------------------------------------------------------------------------
71 //-----------------------------------------------------------------------------
73 TEST(StackTest, StackInitNullAddr) {
74 EXPECT_EQ(OC_STACK_OK, OCInit(0, 5683, OC_SERVER));
75 EXPECT_EQ(OC_STACK_OK, OCStop());
78 TEST(StackTest, StackInitNullPort) {
79 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 0, OC_SERVER));
80 EXPECT_EQ(OC_STACK_OK, OCStop());
83 TEST(StackTest, StackInitNullAddrAndPort) {
84 EXPECT_EQ(OC_STACK_OK, OCInit(0, 0, OC_SERVER));
85 EXPECT_EQ(OC_STACK_OK, OCStop());
88 TEST(StackTest, StackInitInvalidMode) {
89 EXPECT_EQ(OC_STACK_ERROR, OCInit(0, 0, (OCMode)10));
90 EXPECT_EQ(OC_STACK_ERROR, OCStop());
93 TEST(StackTest, StackStartSuccessClient) {
94 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
95 EXPECT_EQ(OC_STACK_OK, OCStop());
98 TEST(StackTest, StackStartSuccessServer) {
99 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
100 EXPECT_EQ(OC_STACK_OK, OCStop());
103 TEST(StackTest, StackStartSuccessClientServer) {
104 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT_SERVER));
105 EXPECT_EQ(OC_STACK_OK, OCStop());
108 TEST(StackTest, StackStartSuccessiveInits) {
109 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_SERVER));
110 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.2", 5683, OC_SERVER));
111 EXPECT_EQ(OC_STACK_OK, OCStop());
114 TEST(StackTest, DoResourceDeviceDiscovery) {
116 uint16_t port = USE_RANDOM_PORT;
117 uint8_t ifname[] = "eth0";
118 OCCallbackData cbData;
121 /*Get Ip address on defined interface and initialize coap on it with random port number
122 * this port number will be used as a source port in all coap communications*/
123 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
124 OC_LOG_V(INFO, TAG, "Starting DoResourceDeviceDiscovery test on address %s",addr);
126 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_CLIENT));
127 /* Start a discovery query*/
128 char szQueryUri[64] = { 0 };
129 strcpy(szQueryUri, OC_WELL_KNOWN_QUERY);
130 cbData.cb = asyncDoResourcesCallback;
131 cbData.context = (void*)CTX_VAL;
133 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, OC_NON_CONFIRMABLE, &cbData), NULL, 0);
134 //EXPECT_EQ(OC_STACK_OK, OCUpdateResources(SERVICE_URI));
135 EXPECT_EQ(OC_STACK_OK, OCStop());
138 TEST(StackTest, StackStopWithoutInit) {
139 EXPECT_EQ(OC_STACK_OK, OCInit("127.0.0.1", 5683, OC_CLIENT));
140 EXPECT_EQ(OC_STACK_OK, OCStop());
141 EXPECT_EQ(OC_STACK_ERROR, OCStop());
144 TEST(StackTest, UpdateResourceNullURI) {
146 uint16_t port = USE_RANDOM_PORT;
147 uint8_t ifname[] = "eth0";
148 OCCallbackData cbData;
151 /*Get Ip address on defined interface and initialize coap on it with random port number
152 * this port number will be used as a source port in all coap communications*/
153 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
154 OC_LOG_V(INFO, TAG, "Starting UpdateResourceNullURI test on address %s",addr);
156 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_CLIENT));
157 /* Start a discovery query*/
158 char szQueryUri[64] = { 0 };
159 strcpy(szQueryUri, OC_WELL_KNOWN_QUERY);
160 cbData.cb = asyncDoResourcesCallback;
161 cbData.context = (void*)CTX_VAL;
163 EXPECT_EQ(OC_STACK_OK, OCDoResource(&handle, OC_REST_GET, szQueryUri, 0, 0, OC_NON_CONFIRMABLE, &cbData), NULL, 0);
164 //EXPECT_EQ(OC_STACK_INVALID_URI, OCUpdateResources(0));
165 EXPECT_EQ(OC_STACK_OK, OCStop());
168 TEST(StackTest, CreateResourceBadParams) {
170 uint16_t port = USE_RANDOM_PORT;
171 uint8_t ifname[] = "eth0";
173 /*Get Ip address on defined interface and initialize coap on it with random port number
174 * this port number will be used as a source port in all coap communications*/
175 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
177 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
178 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
180 OCResourceHandle handle;
182 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(NULL, //&handle,
187 OC_DISCOVERABLE|OC_OBSERVABLE));
189 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
194 OC_DISCOVERABLE|OC_OBSERVABLE));
196 // Property bitmask out of range
197 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
202 16));//OC_DISCOVERABLE|OC_OBSERVABLE));
204 EXPECT_EQ(OC_STACK_OK, OCStop());
208 TEST(StackTest, CreateResourceSuccess) {
210 uint16_t port = USE_RANDOM_PORT;
211 uint8_t ifname[] = "eth0";
213 /*Get Ip address on defined interface and initialize coap on it with random port number
214 * this port number will be used as a source port in all coap communications*/
215 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
217 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
218 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
220 OCResourceHandle handle;
221 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
226 OC_DISCOVERABLE|OC_OBSERVABLE));
227 const char *url = OCGetResourceUri(handle);
228 EXPECT_STREQ("/a/led", url);
230 EXPECT_EQ(OC_STACK_OK, OCStop());
233 TEST(StackTest, CreateResourceFailDuplicateUri) {
235 uint16_t port = USE_RANDOM_PORT;
236 uint8_t ifname[] = "eth0";
238 /*Get Ip address on defined interface and initialize coap on it with random port number
239 * this port number will be used as a source port in all coap communications*/
240 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
242 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
243 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
245 OCResourceHandle handle;
246 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
251 OC_DISCOVERABLE|OC_OBSERVABLE));
252 const char *url = OCGetResourceUri(handle);
253 EXPECT_STREQ("/a/led", url);
255 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
260 OC_DISCOVERABLE|OC_OBSERVABLE));
262 EXPECT_EQ(OC_STACK_OK, OCStop());
265 TEST(StackTest, CreateResourceMultipleResources) {
267 uint16_t port = USE_RANDOM_PORT;
268 uint8_t ifname[] = "eth0";
270 /*Get Ip address on defined interface and initialize coap on it with random port number
271 * this port number will be used as a source port in all coap communications*/
272 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
274 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
275 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
277 OCResourceHandle handle1;
278 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
283 OC_DISCOVERABLE|OC_OBSERVABLE));
285 OCResourceHandle handle2;
286 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
291 OC_DISCOVERABLE|OC_OBSERVABLE));
292 OCResourceHandle handle3;
293 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
298 OC_DISCOVERABLE|OC_OBSERVABLE));
300 const char *url = OCGetResourceUri(handle1);
301 EXPECT_STREQ("/a/led1", url);
303 url = OCGetResourceUri(handle2);
304 EXPECT_STREQ("/a/led2", url);
306 url = OCGetResourceUri(handle3);
307 EXPECT_STREQ("/a/led3", url);
309 EXPECT_EQ(OC_STACK_OK, OCStop());
312 TEST(StackTest, CreateResourceBadResoureType) {
314 uint16_t port = USE_RANDOM_PORT;
315 uint8_t ifname[] = "eth0";
317 /*Get Ip address on defined interface and initialize coap on it with random port number
318 * this port number will be used as a source port in all coap communications*/
319 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
321 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
322 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
324 OCResourceHandle handle;
325 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCCreateResource(&handle,
330 OC_DISCOVERABLE|OC_OBSERVABLE));
332 EXPECT_EQ(OC_STACK_OK, OCStop());
335 TEST(StackTest, CreateResourceGoodResourceType) {
337 uint16_t port = USE_RANDOM_PORT;
338 uint8_t ifname[] = "eth0";
340 /*Get Ip address on defined interface and initialize coap on it with random port number
341 * this port number will be used as a source port in all coap communications*/
342 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
344 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
345 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
347 OCResourceHandle handle;
348 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
353 OC_DISCOVERABLE|OC_OBSERVABLE));
355 EXPECT_EQ(OC_STACK_OK, OCStop());
358 TEST(StackTest, ResourceTypeName) {
360 uint16_t port = USE_RANDOM_PORT;
361 uint8_t ifname[] = "eth0";
363 /*Get Ip address on defined interface and initialize coap on it with random port number
364 * this port number will be used as a source port in all coap communications*/
365 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
367 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
368 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
370 OCResourceHandle handle;
371 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
376 OC_DISCOVERABLE|OC_OBSERVABLE));
378 uint8_t numResourceTypes;
379 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
380 EXPECT_EQ(1, numResourceTypes);
381 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
382 EXPECT_STREQ("core.led", resourceTypeName);
384 // try getting resource type names with an invalid index
385 resourceTypeName = OCGetResourceTypeName(handle, 1);
386 EXPECT_STREQ(NULL, resourceTypeName);
387 // try getting resource type names with an invalid index
388 resourceTypeName = OCGetResourceTypeName(handle, 10);
389 EXPECT_STREQ(NULL, resourceTypeName);
391 EXPECT_EQ(OC_STACK_OK, OCStop());
394 TEST(StackTest, BindResourceTypeNameBad) {
396 uint16_t port = USE_RANDOM_PORT;
397 uint8_t ifname[] = "eth0";
399 /*Get Ip address on defined interface and initialize coap on it with random port number
400 * this port number will be used as a source port in all coap communications*/
401 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
403 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
404 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
406 OCResourceHandle handle;
407 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
412 OC_DISCOVERABLE|OC_OBSERVABLE));
414 uint8_t numResourceTypes;
415 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
416 EXPECT_EQ(1, numResourceTypes);
417 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
418 EXPECT_STREQ("core.led", resourceTypeName);
420 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceTypeToResource(handle, NULL));
422 EXPECT_EQ(OC_STACK_OK, OCStop());
425 TEST(StackTest, BindResourceTypeNameGood) {
427 uint16_t port = USE_RANDOM_PORT;
428 uint8_t ifname[] = "eth0";
430 /*Get Ip address on defined interface and initialize coap on it with random port number
431 * this port number will be used as a source port in all coap communications*/
432 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
434 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
435 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
437 OCResourceHandle handle;
438 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
443 OC_DISCOVERABLE|OC_OBSERVABLE));
445 uint8_t numResourceTypes;
446 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
447 EXPECT_EQ(1, numResourceTypes);
448 const char *resourceTypeName = OCGetResourceTypeName(handle, 0);
449 EXPECT_STREQ("core.led", resourceTypeName);
451 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
452 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
453 EXPECT_EQ(2, numResourceTypes);
454 resourceTypeName = OCGetResourceTypeName(handle, 1);
455 EXPECT_STREQ("core.brightled", resourceTypeName);
457 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
458 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
459 EXPECT_EQ(3, numResourceTypes);
460 resourceTypeName = OCGetResourceTypeName(handle, 2);
461 EXPECT_STREQ("core.reallybrightled", resourceTypeName);
463 EXPECT_EQ(OC_STACK_OK, OCStop());
466 TEST(StackTest, ResourceTypeAttrRepresentation) {
468 uint16_t port = USE_RANDOM_PORT;
469 uint8_t ifname[] = "eth0";
471 /*Get Ip address on defined interface and initialize coap on it with random port number
472 * this port number will be used as a source port in all coap communications*/
473 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
475 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
476 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
478 OCResourceHandle handle;
479 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
484 OC_DISCOVERABLE|OC_OBSERVABLE));
486 uint8_t numResourceTypes;
487 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
488 EXPECT_EQ(1, numResourceTypes);
490 EXPECT_EQ(OC_STACK_OK, OCStop());
493 TEST(StackTest, BindResourceTypeAttribRepGood) {
495 uint16_t port = USE_RANDOM_PORT;
496 uint8_t ifname[] = "eth0";
498 /*Get Ip address on defined interface and initialize coap on it with random port number
499 * this port number will be used as a source port in all coap communications*/
500 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
502 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
503 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
505 OCResourceHandle handle;
506 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
511 OC_DISCOVERABLE|OC_OBSERVABLE));
513 uint8_t numResourceTypes;
514 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
515 EXPECT_EQ(1, numResourceTypes);
517 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.brightled"));
518 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
519 EXPECT_EQ(2, numResourceTypes);
521 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle, "core.reallybrightled"));
522 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceTypes(handle, &numResourceTypes));
523 EXPECT_EQ(3, numResourceTypes);
525 EXPECT_EQ(OC_STACK_OK, OCStop());
528 TEST(StackTest, ResourceTypeInterface) {
530 uint16_t port = USE_RANDOM_PORT;
531 uint8_t ifname[] = "eth0";
533 /*Get Ip address on defined interface and initialize coap on it with random port number
534 * this port number will be used as a source port in all coap communications*/
535 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
537 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
538 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
540 OCResourceHandle handle;
541 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
546 OC_DISCOVERABLE|OC_OBSERVABLE));
548 uint8_t numResourceInterfaces;
549 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
550 EXPECT_EQ(1, numResourceInterfaces);
551 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
552 EXPECT_STREQ("core.rw", resourceInterfaceName);
554 // try getting resource interface names with an invalid index
555 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
556 EXPECT_STREQ(NULL, resourceInterfaceName);
557 // try getting resource interface names with an invalid index
558 resourceInterfaceName = OCGetResourceInterfaceName(handle, 10);
559 EXPECT_STREQ(NULL, resourceInterfaceName);
561 EXPECT_EQ(OC_STACK_OK, OCStop());
564 TEST(StackTest, BindResourceInterfaceNameBad) {
566 uint16_t port = USE_RANDOM_PORT;
567 uint8_t ifname[] = "eth0";
569 /*Get Ip address on defined interface and initialize coap on it with random port number
570 * this port number will be used as a source port in all coap communications*/
571 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
573 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
574 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
576 OCResourceHandle handle;
577 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
582 OC_DISCOVERABLE|OC_OBSERVABLE));
584 uint8_t numResourceInterfaces;
585 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
586 EXPECT_EQ(1, numResourceInterfaces);
587 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
588 EXPECT_STREQ("core.rw", resourceInterfaceName);
590 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, NULL));
592 EXPECT_EQ(OC_STACK_OK, OCStop());
595 TEST(StackTest, BindResourceInterfaceNameGood) {
597 uint16_t port = USE_RANDOM_PORT;
598 uint8_t ifname[] = "eth0";
600 /*Get Ip address on defined interface and initialize coap on it with random port number
601 * this port number will be used as a source port in all coap communications*/
602 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
604 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
605 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
607 OCResourceHandle handle;
608 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
613 OC_DISCOVERABLE|OC_OBSERVABLE));
615 uint8_t numResourceInterfaces;
616 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
617 EXPECT_EQ(1, numResourceInterfaces);
618 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle, 0);
619 EXPECT_STREQ("core.rw", resourceInterfaceName);
621 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
623 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
624 EXPECT_EQ(2, numResourceInterfaces);
625 resourceInterfaceName = OCGetResourceInterfaceName(handle, 1);
626 EXPECT_STREQ("core.r", resourceInterfaceName);
628 EXPECT_EQ(OC_STACK_OK, OCStop());
631 TEST(StackTest, ResourceTypeInterfaceMethods) {
633 uint16_t port = USE_RANDOM_PORT;
634 uint8_t ifname[] = "eth0";
636 /*Get Ip address on defined interface and initialize coap on it with random port number
637 * this port number will be used as a source port in all coap communications*/
638 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
640 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
641 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
643 OCResourceHandle handle;
644 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
649 OC_DISCOVERABLE|OC_OBSERVABLE));
651 uint8_t numResourceInterfaces;
652 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
653 EXPECT_EQ(1, numResourceInterfaces);
655 EXPECT_EQ(OC_STACK_OK, OCStop());
658 TEST(StackTest, BindResourceInterfaceMethodsBad) {
660 uint16_t port = USE_RANDOM_PORT;
661 uint8_t ifname[] = "eth0";
663 /*Get Ip address on defined interface and initialize coap on it with random port number
664 * this port number will be used as a source port in all coap communications*/
665 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
667 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
668 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
670 OCResourceHandle handle;
671 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
676 OC_DISCOVERABLE|OC_OBSERVABLE));
678 uint8_t numResourceInterfaces;
679 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
680 EXPECT_EQ(1, numResourceInterfaces);
682 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceInterfaceToResource(handle, 0));
684 EXPECT_EQ(OC_STACK_OK, OCStop());
687 TEST(StackTest, BindResourceInterfaceMethodsGood) {
689 uint16_t port = USE_RANDOM_PORT;
690 uint8_t ifname[] = "eth0";
692 /*Get Ip address on defined interface and initialize coap on it with random port number
693 * this port number will be used as a source port in all coap communications*/
694 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
696 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
697 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
699 OCResourceHandle handle;
700 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
705 OC_DISCOVERABLE|OC_OBSERVABLE));
707 uint8_t numResourceInterfaces;
708 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
709 EXPECT_EQ(1, numResourceInterfaces);
711 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle, "core.r"));
713 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle, &numResourceInterfaces));
714 EXPECT_EQ(2, numResourceInterfaces);
716 EXPECT_EQ(OC_STACK_OK, OCStop());
719 TEST(StackTest, BindContainedResourceBad) {
721 uint16_t port = USE_RANDOM_PORT;
722 uint8_t ifname[] = "eth0";
724 /*Get Ip address on defined interface and initialize coap on it with random port number
725 * this port number will be used as a source port in all coap communications*/
726 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
728 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
729 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
731 OCResourceHandle containerHandle;
732 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
737 OC_DISCOVERABLE|OC_OBSERVABLE));
739 OCResourceHandle handle0;
740 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
745 OC_DISCOVERABLE|OC_OBSERVABLE));
747 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResource(containerHandle, containerHandle));
749 EXPECT_EQ(OC_STACK_ERROR, OCBindResource((OCResourceHandle) 0, handle0));
751 EXPECT_EQ(OC_STACK_OK, OCStop());
754 TEST(StackTest, BindContainedResourceGood) {
756 uint16_t port = USE_RANDOM_PORT;
757 uint8_t ifname[] = "eth0";
759 /*Get Ip address on defined interface and initialize coap on it with random port number
760 * this port number will be used as a source port in all coap communications*/
761 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
763 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
764 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
766 uint8_t numResources = 0;
767 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
768 EXPECT_EQ(0, numResources);
770 OCResourceHandle containerHandle;
771 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
776 OC_DISCOVERABLE|OC_OBSERVABLE));
777 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
778 EXPECT_EQ(1, numResources);
780 OCResourceHandle handle0;
781 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
786 OC_DISCOVERABLE|OC_OBSERVABLE));
787 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
788 EXPECT_EQ(2, numResources);
790 OCResourceHandle handle1;
791 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
796 OC_DISCOVERABLE|OC_OBSERVABLE));
797 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
798 EXPECT_EQ(3, numResources);
800 OCResourceHandle handle2;
801 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
806 OC_DISCOVERABLE|OC_OBSERVABLE));
807 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
808 EXPECT_EQ(4, numResources);
810 OCResourceHandle handle3;
811 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
816 OC_DISCOVERABLE|OC_OBSERVABLE));
817 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
818 EXPECT_EQ(5, numResources);
820 OCResourceHandle handle4;
821 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
826 OC_DISCOVERABLE|OC_OBSERVABLE));
827 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
828 EXPECT_EQ(6, numResources);
830 OCResourceHandle handle5;
831 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
836 OC_DISCOVERABLE|OC_OBSERVABLE));
837 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
838 EXPECT_EQ(7, numResources);
841 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle0));
842 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle1));
843 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle2));
844 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle3));
845 EXPECT_EQ(OC_STACK_OK, OCBindResource(containerHandle, handle4));
846 EXPECT_EQ(OC_STACK_ERROR, OCBindResource(containerHandle, handle5));
848 EXPECT_EQ(handle0, OCGetResourceHandleFromCollection(containerHandle, 0));
849 EXPECT_EQ(handle1, OCGetResourceHandleFromCollection(containerHandle, 1));
850 EXPECT_EQ(handle2, OCGetResourceHandleFromCollection(containerHandle, 2));
851 EXPECT_EQ(handle3, OCGetResourceHandleFromCollection(containerHandle, 3));
852 EXPECT_EQ(handle4, OCGetResourceHandleFromCollection(containerHandle, 4));
854 EXPECT_EQ(NULL, OCGetResourceHandleFromCollection(containerHandle, 5));
856 EXPECT_EQ(OC_STACK_OK, OCStop());
859 TEST(StackTest, GetResourceByIndex) {
861 uint16_t port = USE_RANDOM_PORT;
862 uint8_t ifname[] = "eth0";
864 /*Get Ip address on defined interface and initialize coap on it with random port number
865 * this port number will be used as a source port in all coap communications*/
866 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
868 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
869 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
871 uint8_t numResources = 0;
872 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
873 EXPECT_EQ(0, numResources);
875 OCResourceHandle containerHandle;
876 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&containerHandle,
881 OC_DISCOVERABLE|OC_OBSERVABLE));
882 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
883 EXPECT_EQ(1, numResources);
885 OCResourceHandle handle0;
886 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
891 OC_DISCOVERABLE|OC_OBSERVABLE));
892 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
893 EXPECT_EQ(2, numResources);
895 OCResourceHandle handle1;
896 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
901 OC_DISCOVERABLE|OC_OBSERVABLE));
902 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
903 EXPECT_EQ(3, numResources);
905 OCResourceHandle handle2;
906 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
911 OC_DISCOVERABLE|OC_OBSERVABLE));
912 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
913 EXPECT_EQ(4, numResources);
915 OCResourceHandle handle3;
916 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
921 OC_DISCOVERABLE|OC_OBSERVABLE));
922 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
923 EXPECT_EQ(5, numResources);
925 OCResourceHandle handle4;
926 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
931 OC_DISCOVERABLE|OC_OBSERVABLE));
932 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
933 EXPECT_EQ(6, numResources);
935 OCResourceHandle handle5;
936 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle5,
941 OC_DISCOVERABLE|OC_OBSERVABLE));
942 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
943 EXPECT_EQ(7, numResources);
945 EXPECT_EQ(containerHandle, OCGetResourceHandle(0));
946 EXPECT_EQ(handle0, OCGetResourceHandle(1));
947 EXPECT_EQ(handle1, OCGetResourceHandle(2));
948 EXPECT_EQ(handle2, OCGetResourceHandle(3));
949 EXPECT_EQ(handle3, OCGetResourceHandle(4));
950 EXPECT_EQ(handle4, OCGetResourceHandle(5));
951 EXPECT_EQ(handle5, OCGetResourceHandle(6));
953 EXPECT_EQ(OC_STACK_OK, OCStop());
956 TEST(StackTest, BindEntityHandlerBad) {
958 uint16_t port = USE_RANDOM_PORT;
959 uint8_t ifname[] = "eth0";
961 /*Get Ip address on defined interface and initialize coap on it with random port number
962 * this port number will be used as a source port in all coap communications*/
963 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
965 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
966 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
968 OCResourceHandle handle;
969 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
974 OC_DISCOVERABLE|OC_OBSERVABLE));
976 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(handle, NULL));
977 EXPECT_EQ(OC_STACK_INVALID_PARAM, OCBindResourceHandler(NULL, NULL));
979 EXPECT_EQ(OC_STACK_OK, OCStop());
983 OCEntityHandlerResult entityHandler(OCEntityHandlerFlag flag, OCEntityHandlerRequest * entityHandlerRequest) {
984 OC_LOG(INFO, TAG, "Entering entityHandler");
989 TEST(StackTest, BindEntityHandlerGood) {
991 uint16_t port = USE_RANDOM_PORT;
992 uint8_t ifname[] = "eth0";
994 /*Get Ip address on defined interface and initialize coap on it with random port number
995 * this port number will be used as a source port in all coap communications*/
996 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
998 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
999 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
1001 OCResourceHandle handle;
1002 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1007 OC_DISCOVERABLE|OC_OBSERVABLE));
1009 OCEntityHandler myHandler = entityHandler;
1011 EXPECT_EQ(OC_STACK_OK, OCBindResourceHandler(handle, myHandler));
1013 EXPECT_EQ(myHandler, OCGetResourceHandler(handle));
1015 EXPECT_EQ(OC_STACK_OK, OCStop());
1018 TEST(StackTest, DeleteHeadResource) {
1020 uint16_t port = USE_RANDOM_PORT;
1021 uint8_t ifname[] = "eth0";
1023 /*Get Ip address on defined interface and initialize coap on it with random port number
1024 * this port number will be used as a source port in all coap communications*/
1025 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
1027 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
1028 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
1030 uint8_t numResources = 0;
1031 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1032 EXPECT_EQ(0, numResources);
1034 OCResourceHandle handle0;
1035 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1040 OC_DISCOVERABLE|OC_OBSERVABLE));
1041 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1042 EXPECT_EQ(1, numResources);
1044 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1045 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1046 EXPECT_EQ(0, numResources);
1048 EXPECT_EQ(OC_STACK_OK, OCStop());
1051 TEST(StackTest, DeleteHeadResource2) {
1053 uint16_t port = USE_RANDOM_PORT;
1054 uint8_t ifname[] = "eth0";
1056 /*Get Ip address on defined interface and initialize coap on it with random port number
1057 * this port number will be used as a source port in all coap communications*/
1058 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
1060 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
1061 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
1063 uint8_t numResources = 0;
1064 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1065 EXPECT_EQ(0, numResources);
1067 OCResourceHandle handle0;
1068 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1073 OC_DISCOVERABLE|OC_OBSERVABLE));
1074 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1075 EXPECT_EQ(1, numResources);
1077 OCResourceHandle handle1;
1078 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1083 OC_DISCOVERABLE|OC_OBSERVABLE));
1084 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1085 EXPECT_EQ(2, numResources);
1087 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle0));
1088 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1089 EXPECT_EQ(1, numResources);
1091 EXPECT_EQ(handle1, OCGetResourceHandle(0));
1093 EXPECT_EQ(OC_STACK_OK, OCStop());
1097 TEST(StackTest, DeleteLastResource) {
1099 uint16_t port = USE_RANDOM_PORT;
1100 uint8_t ifname[] = "eth0";
1102 /*Get Ip address on defined interface and initialize coap on it with random port number
1103 * this port number will be used as a source port in all coap communications*/
1104 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
1106 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
1107 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
1109 uint8_t numResources = 0;
1110 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1111 EXPECT_EQ(0, numResources);
1113 OCResourceHandle handle0;
1114 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1119 OC_DISCOVERABLE|OC_OBSERVABLE));
1120 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1121 EXPECT_EQ(1, numResources);
1123 OCResourceHandle handle1;
1124 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1129 OC_DISCOVERABLE|OC_OBSERVABLE));
1130 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1131 EXPECT_EQ(2, numResources);
1133 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1134 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1135 EXPECT_EQ(1, numResources);
1137 EXPECT_EQ(handle0, OCGetResourceHandle(0));
1139 OCResourceHandle handle2;
1140 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1145 OC_DISCOVERABLE|OC_OBSERVABLE));
1146 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1147 EXPECT_EQ(2, numResources);
1149 EXPECT_EQ(OC_STACK_OK, OCStop());
1152 TEST(StackTest, DeleteMiddleResource) {
1154 uint16_t port = USE_RANDOM_PORT;
1155 uint8_t ifname[] = "eth0";
1157 /*Get Ip address on defined interface and initialize coap on it with random port number
1158 * this port number will be used as a source port in all coap communications*/
1159 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
1161 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
1162 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
1164 uint8_t numResources = 0;
1165 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1166 EXPECT_EQ(0, numResources);
1168 OCResourceHandle handle0;
1169 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle0,
1174 OC_DISCOVERABLE|OC_OBSERVABLE));
1175 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1176 EXPECT_EQ(1, numResources);
1178 OCResourceHandle handle1;
1179 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1184 OC_DISCOVERABLE|OC_OBSERVABLE));
1185 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1186 EXPECT_EQ(2, numResources);
1188 OCResourceHandle handle2;
1189 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1194 OC_DISCOVERABLE|OC_OBSERVABLE));
1195 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1196 EXPECT_EQ(3, numResources);
1198 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle1));
1199 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1200 EXPECT_EQ(2, numResources);
1202 EXPECT_EQ(handle0, OCGetResourceHandle(0));
1203 EXPECT_EQ(handle2, OCGetResourceHandle(1));
1205 // Make sure the resource elements are still correct
1206 uint8_t numResourceInterfaces;
1207 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResourceInterfaces(handle2, &numResourceInterfaces));
1208 EXPECT_EQ(1, numResourceInterfaces);
1209 const char *resourceInterfaceName = OCGetResourceInterfaceName(handle2, 0);
1210 EXPECT_STREQ("core.rw", resourceInterfaceName);
1212 EXPECT_EQ(OC_STACK_OK, OCStop());
1215 TEST(StackTest, GetResourceProperties) {
1217 uint16_t port = USE_RANDOM_PORT;
1218 uint8_t ifname[] = "eth0";
1220 /*Get Ip address on defined interface and initialize coap on it with random port number
1221 * this port number will be used as a source port in all coap communications*/
1222 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
1224 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
1225 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
1227 OCResourceHandle handle;
1228 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1233 OC_DISCOVERABLE|OC_OBSERVABLE));
1235 EXPECT_EQ(OC_ACTIVE|OC_DISCOVERABLE|OC_OBSERVABLE, OCGetResourceProperties(handle));
1236 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
1238 EXPECT_EQ(OC_STACK_OK, OCStop());
1241 TEST(StackTest, StackTestResourceDiscoverOneResourceBad) {
1243 uint16_t port = USE_RANDOM_PORT;
1244 uint8_t ifname[] = "eth0";
1246 /*Get Ip address on defined interface and initialize coap on it with random port number
1247 * this port number will be used as a source port in all coap communications*/
1248 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
1250 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
1251 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
1253 OCResourceHandle handle;
1254 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1259 OC_DISCOVERABLE|OC_OBSERVABLE));
1260 const char *url = OCGetResourceUri(handle);
1261 EXPECT_STREQ("/a1/led", url);
1263 //EXPECT_EQ(OC_STACK_INVALID_URI, OCHandleServerRequest(&res, uri, query, req, rsp));
1264 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
1265 uint8_t numResources = 0;
1266 EXPECT_EQ(OC_STACK_OK, OCGetNumberOfResources(&numResources));
1267 EXPECT_EQ(0, numResources);
1269 EXPECT_EQ(OC_STACK_OK, OCStop());
1272 TEST(StackTest, StackTestResourceDiscoverOneResource) {
1274 uint16_t port = USE_RANDOM_PORT;
1275 uint8_t ifname[] = "eth0";
1277 /*Get Ip address on defined interface and initialize coap on it with random port number
1278 * this port number will be used as a source port in all coap communications*/
1279 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
1281 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
1282 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
1284 OCResourceHandle handle;
1285 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle,
1290 OC_DISCOVERABLE|OC_OBSERVABLE));
1291 const char *url = OCGetResourceUri(handle);
1292 EXPECT_STREQ("/a/led", url);
1294 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
1295 EXPECT_EQ(OC_STACK_OK, OCDeleteResource(handle));
1297 EXPECT_EQ(OC_STACK_OK, OCStop());
1300 TEST(StackTest, StackTestResourceDiscoverManyResources) {
1302 uint16_t port = USE_RANDOM_PORT;
1303 uint8_t ifname[] = "eth0";
1305 /*Get Ip address on defined interface and initialize coap on it with random port number
1306 * this port number will be used as a source port in all coap communications*/
1307 OCGetInterfaceAddress(ifname, sizeof(ifname), AF_INET, addr, sizeof(addr));
1309 OC_LOG_V(INFO, TAG, "Starting ocserver on address %s:%d",addr,port);
1310 EXPECT_EQ(OC_STACK_OK, OCInit((char *) addr, port, OC_SERVER));
1312 OCResourceHandle handle1;
1313 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle1,
1319 const char *url = OCGetResourceUri(handle1);
1320 EXPECT_STREQ("/a/led1", url);
1322 OCResourceHandle handle2;
1323 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle2,
1328 OC_DISCOVERABLE|OC_OBSERVABLE));
1329 url = OCGetResourceUri(handle2);
1330 EXPECT_STREQ("/a/led2", url);
1332 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.brightled"));
1333 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle2, "core.colorled"));
1335 OCResourceHandle handle3;
1336 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle3,
1341 OC_DISCOVERABLE|OC_OBSERVABLE));
1342 url = OCGetResourceUri(handle3);
1343 EXPECT_STREQ("/a/led3", url);
1345 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, "oc.mi.ll"));
1346 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle3, "oc.mi.b"));
1348 OCResourceHandle handle4;
1349 EXPECT_EQ(OC_STACK_OK, OCCreateResource(&handle4,
1355 url = OCGetResourceUri(handle4);
1356 EXPECT_STREQ("/a/led4", url);
1358 EXPECT_EQ(OC_STACK_OK, OCBindResourceTypeToResource(handle4, "core.brightled"));
1359 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, "oc.mi.ll"));
1360 EXPECT_EQ(OC_STACK_OK, OCBindResourceInterfaceToResource(handle4, "oc.mi.b"));
1362 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
1364 EXPECT_EQ(OC_STACK_OK, OCStop());
1369 TEST(StackTest, StackTestResourceDiscoverIfFilteringBad) {
1371 uint16_t port = USE_RANDOM_PORT;
1372 uint8_t ifname[] = "eth0";
1373 char uri[] = "/oc/core";
1374 char query[] = "if";
1375 char req[1024] = {};
1376 char rsp[1024] = {};
1377 //OCServerRequestResult res;
1379 //EXPECT_EQ(OC_STACK_INVALID_QUERY, OCHandleServerRequest(&res, uri, query, req, rsp));
1382 TEST(StackTest, StackTestResourceDiscoverRtFilteringBad) {
1384 uint16_t port = USE_RANDOM_PORT;
1385 uint8_t ifname[] = "eth0";
1386 char uri[] = "/oc/core";
1387 char query[] = "rt";
1388 char req[1024] = {};
1389 char rsp[1024] = {};
1390 //OCServerRequestResult res;
1392 //EXPECT_EQ(OC_STACK_INVALID_QUERY, OCHandleServerRequest(&res, uri, query, req, rsp));
1394 TEST(StackTest, StackTestResourceDiscoverIfFiltering) {
1396 uint16_t port = USE_RANDOM_PORT;
1397 uint8_t ifname[] = "eth0";
1398 char uri[] = "/oc/core";
1399 char query[] = "if=oc.mi.ll";
1400 char req[1024] = {};
1401 char rsp[1024] = {};
1402 //OCServerRequestResult res;
1404 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));
1407 TEST(StackTest, StackTestResourceDiscoverRtFiltering) {
1409 uint16_t port = USE_RANDOM_PORT;
1410 uint8_t ifname[] = "eth0";
1411 char uri[] = "/oc/core";
1412 char query[] = "rt=core.brightled";
1413 char req[1024] = {};
1414 char rsp[1024] = {};
1415 //OCServerRequestResult res;
1417 //EXPECT_EQ(OC_STACK_OK, OCHandleServerRequest(&res, uri, query, req, rsp));