2 *******************************************************************
4 * Copyright 2015 Intel Corporation.
6 *-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
20 *-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
23 package org.iotivity.base;
25 import android.test.InstrumentationTestCase;
26 import android.util.Log;
28 import java.util.Date;
29 import java.util.EnumSet;
30 import java.util.HashMap;
31 import java.util.LinkedList;
32 import java.util.List;
34 import java.util.Random;
35 import java.util.Timer;
36 import java.util.TimerTask;
37 import java.util.concurrent.CountDownLatch;
38 import java.util.concurrent.TimeUnit;
40 public class SmokeTest extends InstrumentationTestCase {
41 private static final String TAG = "SmokeTest";
42 private Random rnd = new Random();
45 protected void setUp() throws Exception {
47 PlatformConfig cfg = new PlatformConfig(
48 getInstrumentation().getContext(),
50 ModeType.CLIENT_SERVER,
53 QualityOfService.LOW);
55 OcPlatform.Configure(cfg);
59 protected void tearDown() throws Exception {
63 public void testResourceRegisterUnregister() throws InterruptedException {
64 final String resourceType = "unit.test.resource" +
66 final CountDownLatch signal = new CountDownLatch(1);
68 OcPlatform.EntityHandler entityHandler = new OcPlatform.EntityHandler() {
70 public EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest) {
71 return EntityHandlerResult.OK;
75 OcPlatform.OnResourceFoundListener resourceFoundListener =
76 new OcPlatform.OnResourceFoundListener() {
78 public void onResourceFound(OcResource resource) {
79 Log.i(TAG, "Host: " + resource.getHost());
80 Log.i(TAG, "Server ID: " + resource.getServerId());
81 Log.i(TAG, "Connectivity Types: ");
82 for (OcConnectivityType connectivityType : resource.getConnectivityTypeSet()) {
83 Log.i(TAG, " " + connectivityType);
91 OcResourceHandle resourceHandle = OcPlatform.registerResource(
94 OcPlatform.DEFAULT_INTERFACE,
96 EnumSet.of(ResourceProperty.DISCOVERABLE)
100 OcPlatform.findResource("",
101 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType,
102 EnumSet.of(OcConnectivityType.CT_DEFAULT),
103 resourceFoundListener);
105 //wait for onResourceFound event
106 assertTrue(signal.await(60, TimeUnit.SECONDS));
109 OcPlatform.unregisterResource(resourceHandle);
110 } catch (OcException e) {
111 Log.e(TAG, e.getMessage());
116 public void testStartStopListenForPresence() throws InterruptedException {
117 final String resourceType = "unit.test.resource" +
118 new Date().getTime();
119 final CountDownLatch signal = new CountDownLatch(1);
121 OcPlatform.EntityHandler entityHandler = new OcPlatform.EntityHandler() {
123 public EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest) {
124 return EntityHandlerResult.OK;
128 final OcPlatform.OnPresenceListener presenceListener = new OcPlatform.OnPresenceListener() {
130 public void onPresence(OcPresenceStatus ocPresenceStatus, int nonce, String hostAddress) {
131 Log.i(TAG, "onPresence status " + ocPresenceStatus.toString() + " nonce " + nonce);
136 OcPlatform.OnResourceFoundListener resourceFoundListener =
137 new OcPlatform.OnResourceFoundListener() {
139 public void onResourceFound(OcResource resource) {
142 OcPresenceHandle presenceHandle = OcPlatform.subscribePresence(
144 EnumSet.of(OcConnectivityType.CT_DEFAULT),
148 //wait for onPresence event
149 assertTrue(signal.await(60, TimeUnit.SECONDS));
152 OcPlatform.unsubscribePresence(presenceHandle);
153 } catch (OcException e) {
155 } catch (InterruptedException e) {
163 OcResourceHandle resourceHandle = OcPlatform.registerResource(
166 OcPlatform.DEFAULT_INTERFACE,
168 EnumSet.of(ResourceProperty.DISCOVERABLE, ResourceProperty.OBSERVABLE)
172 OcPlatform.findResource("",
173 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType,
174 EnumSet.of(OcConnectivityType.CT_DEFAULT),
175 resourceFoundListener);
178 OcPlatform.startPresence(OcPlatform.DEFAULT_PRESENCE_TTL);
180 //wait for onPresence event
181 assertTrue(signal.await(60, TimeUnit.SECONDS));
184 OcPlatform.stopPresence();
187 OcPlatform.unregisterResource(resourceHandle);
189 } catch (OcException e) {
190 Log.e(TAG, e.getMessage());
195 public void testHandleGetRequest() throws InterruptedException {
196 final String someKey = "SomeKey";
197 final String someValue = "SomeValue";
198 final String resourceType = "unit.test.resource" + new Date().getTime();
199 final CountDownLatch signal1 = new CountDownLatch(1);
200 final CountDownLatch signal2 = new CountDownLatch(1);
201 final List<OcResource> ocResourceList = new LinkedList<OcResource>();
204 final OcResource.OnGetListener onGetListener = new OcResource.OnGetListener() {
206 public void onGetCompleted(List<OcHeaderOption> headerOptionList, OcRepresentation ocRepresentation) {
207 if (!headerOptionList.isEmpty()) {
208 for (OcHeaderOption headerOption : headerOptionList) {
209 Log.i(TAG, "Header option " +
210 headerOption.getOptionId() +
212 headerOption.getOptionData());
216 Log.i(TAG, "Power: " + ocRepresentation.getValue("power"));
217 } catch (OcException e) {
218 Log.e(TAG, e.toString());
225 public void onGetFailed(Throwable ex) {
226 if (ex instanceof OcException) {
227 OcException ocEx = (OcException) ex;
228 ErrorCode errCode = ocEx.getErrorCode();
229 if (ErrorCode.NO_RESOURCE != errCode) {
230 Log.e(TAG, ocEx.getMessage());
234 Log.e(TAG, ex.getMessage());
241 final OcPlatform.OnResourceFoundListener resourceFoundListener =
242 new OcPlatform.OnResourceFoundListener() {
244 public void onResourceFound(OcResource resource) {
245 Map<String, String> queryParamsMap = new HashMap<String, String>();
246 queryParamsMap.put(someKey, someValue);
248 ocResourceList.add(resource);
250 resource.get(queryParamsMap, onGetListener);
251 // TODO there is a bug in the stack that prevents the usage of the following APIs
252 // resource.get(resourceType, OcPlatform.DEFAULT_INTERFACE, queryParamsMap,
255 // resource.get(queryParamsMap, onGetListener, QualityOfService.LOW);
257 // resource.get(resourceType, OcPlatform.DEFAULT_INTERFACE,queryParamsMap,
258 // onGetListener, QualityOfService.LOW);
259 } catch (OcException e) {
260 Log.e(TAG, e.toString());
269 OcResourceHandle resourceHandle = OcPlatform.registerResource(
272 OcPlatform.DEFAULT_INTERFACE,
273 new OcPlatform.EntityHandler() {
275 public EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest) {
276 EnumSet<RequestHandlerFlag> handlerFlagSet =
277 ocResourceRequest.getRequestHandlerFlagSet();
279 RequestType requestType = ocResourceRequest.getRequestType();
281 if (handlerFlagSet.contains(RequestHandlerFlag.INIT)) {
283 if (handlerFlagSet.contains(RequestHandlerFlag.REQUEST)) {
284 OcResourceResponse ocResourceResponse = new OcResourceResponse();
285 ocResourceResponse.setRequestHandle(
286 ocResourceRequest.getRequestHandle());
287 ocResourceResponse.setResourceHandle(
288 ocResourceRequest.getResourceHandle());
290 switch (requestType) {
292 Map<String, String> queryParams =
293 ocResourceRequest.getQueryParameters();
295 if (!(queryParams.containsKey(someKey) &&
296 someValue.equals(queryParams.get(someKey)))) {
300 ocResourceResponse.setErrorCode(200);
301 ocResourceResponse.setResponseResult(EntityHandlerResult.OK);
302 ocResourceResponse.setResourceRepresentation(
303 getRepresentation(74));
308 OcPlatform.sendResponse(ocResourceResponse);
309 } catch (OcException e) {
310 Log.e(TAG, e.getMessage());
311 return EntityHandlerResult.ERROR;
314 if (handlerFlagSet.contains(RequestHandlerFlag.OBSERVER)) {
316 return EntityHandlerResult.OK;
319 EnumSet.of(ResourceProperty.DISCOVERABLE)
323 OcPlatform.findResource(null,
324 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType,
325 EnumSet.of(OcConnectivityType.CT_DEFAULT),
326 resourceFoundListener);
328 //wait for onResourceFound event
329 assertTrue(signal1.await(60, TimeUnit.SECONDS));
331 //wait for onGetCompleted event
332 assertTrue(signal2.await(60, TimeUnit.SECONDS));
335 OcPlatform.unregisterResource(resourceHandle);
337 } catch (OcException e) {
338 Log.e(TAG, e.getMessage());
343 public void testHandlePutRequest() throws InterruptedException {
344 final String resourceType = "unit.test.resource" + new Date().getTime();
345 final CountDownLatch signal1 = new CountDownLatch(1);
346 final CountDownLatch signal2 = new CountDownLatch(3);
347 final List<OcResource> ocResourceList = new LinkedList<OcResource>();
349 final OcResource.OnPutListener onPutListener = new OcResource.OnPutListener() {
351 public void onPutCompleted(List<OcHeaderOption> headerOptionList, OcRepresentation ocRepresentation) {
352 if (!headerOptionList.isEmpty()) {
353 for (OcHeaderOption headerOption : headerOptionList) {
354 Log.i(TAG, "Header option " +
355 headerOption.getOptionId() +
357 headerOption.getOptionData());
361 Log.i(TAG, "onPutCompleted Power: " + ocRepresentation.getValue("power"));
362 } catch (OcException e) {
363 Log.e(TAG, e.getMessage());
366 Log.i(TAG, "onPutCompleted Uri: " + ocRepresentation.getUri());
371 public void onPutFailed(Throwable ex) {
372 if (ex instanceof OcException) {
373 OcException ocEx = (OcException) ex;
374 ErrorCode errCode = ocEx.getErrorCode();
375 if (ErrorCode.NO_RESOURCE != errCode) {
376 Log.e(TAG, ocEx.getMessage());
380 Log.e(TAG, ex.getMessage());
386 final OcPlatform.OnResourceFoundListener resourceFoundListener =
387 new OcPlatform.OnResourceFoundListener() {
389 public void onResourceFound(OcResource resource) {
390 ocResourceList.add(resource);
394 new HashMap<String, String>(),
399 new HashMap<String, String>(),
404 new HashMap<String, String>(),
405 new OcResource.OnPutListener() {
407 public void onPutCompleted(List<OcHeaderOption> headerOptionList, OcRepresentation ocRepresentation) {
412 public void onPutFailed(Throwable ex) {
413 if (ex instanceof OcException) {
414 OcException ocEx = (OcException) ex;
415 ErrorCode errCode = ocEx.getErrorCode();
416 if (ErrorCode.NO_RESOURCE != errCode) {
417 Log.e(TAG, ocEx.getMessage());
421 Log.e(TAG, ex.getMessage());
427 } catch (OcException e) {
436 OcResourceHandle resourceHandle = OcPlatform.registerResource(
439 OcPlatform.DEFAULT_INTERFACE,
440 new OcPlatform.EntityHandler() {
442 public EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest) {
443 EnumSet<RequestHandlerFlag> handlerFlagSet = ocResourceRequest.getRequestHandlerFlagSet();
444 RequestType requestType = ocResourceRequest.getRequestType();
446 if (handlerFlagSet.contains(RequestHandlerFlag.INIT)) {
448 if (handlerFlagSet.contains(RequestHandlerFlag.REQUEST)) {
449 OcResourceResponse ocResourceResponse = new OcResourceResponse();
450 ocResourceResponse.setRequestHandle(
451 ocResourceRequest.getRequestHandle());
452 ocResourceResponse.setResourceHandle(
453 ocResourceRequest.getResourceHandle());
455 switch (requestType) {
460 OcRepresentation rep = ocResourceRequest.getResourceRepresentation();
462 Log.i(TAG, "Put res. power: " + rep.getValue("power"));
463 } catch (OcException e) {
464 Log.e(TAG, e.toString());
467 Log.i(TAG, "URI: " + rep.getUri());
469 ocResourceResponse.setResponseResult(EntityHandlerResult.OK);
470 ocResourceResponse.setErrorCode(200);
471 ocResourceResponse.setResourceRepresentation(rep);
481 OcPlatform.sendResponse(ocResourceResponse);
482 } catch (OcException e) {
483 Log.e(TAG, e.getMessage());
484 return EntityHandlerResult.ERROR;
487 if (handlerFlagSet.contains(RequestHandlerFlag.OBSERVER)) {
489 return EntityHandlerResult.OK;
492 EnumSet.of(ResourceProperty.DISCOVERABLE)
496 OcPlatform.findResource("",
497 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType,
498 EnumSet.of(OcConnectivityType.CT_DEFAULT),
499 resourceFoundListener);
501 //wait for onResourceFound event
502 assertTrue(signal1.await(60, TimeUnit.SECONDS));
504 //wait for onGetCompleted event
505 assertTrue(signal2.await(60, TimeUnit.SECONDS));
508 OcPlatform.unregisterResource(resourceHandle);
510 } catch (OcException e) {
511 Log.e(TAG, e.getMessage());
516 public void testHandlePostRequest() throws InterruptedException {
517 final String resourceType = "unit.test.resource" + new Date().getTime();
518 final CountDownLatch signal1 = new CountDownLatch(1);
519 final CountDownLatch signal2 = new CountDownLatch(3);
520 final List<OcResource> ocResourceList = new LinkedList<OcResource>();
522 final OcResource.OnPostListener onPostListener = new OcResource.OnPostListener() {
524 public void onPostCompleted(List<OcHeaderOption> headerOptionList, OcRepresentation ocRepresentation) {
525 if (!headerOptionList.isEmpty()) {
526 for (OcHeaderOption headerOption : headerOptionList) {
527 Log.i(TAG, "Header option " +
528 headerOption.getOptionId() +
530 headerOption.getOptionData());
534 Log.i(TAG, "onPostCompleted Power: " + ocRepresentation.getValue("power"));
535 } catch (OcException e) {
536 Log.e(TAG, e.toString());
539 Log.i(TAG, "onPostCompleted Uri: " + ocRepresentation.getUri());
544 public void onPostFailed(Throwable ex) {
545 if (ex instanceof OcException) {
546 OcException ocEx = (OcException) ex;
547 ErrorCode errCode = ocEx.getErrorCode();
548 if (ErrorCode.NO_RESOURCE != errCode) {
549 Log.e(TAG, ocEx.getMessage());
553 Log.e(TAG, ex.getMessage());
559 final OcPlatform.OnResourceFoundListener resourceFoundListener =
560 new OcPlatform.OnResourceFoundListener() {
562 public void onResourceFound(OcResource resource) {
563 ocResourceList.add(resource);
567 new HashMap<String, String>(),
572 new HashMap<String, String>(),
577 new HashMap<String, String>(),
578 new OcResource.OnPostListener() {
580 public void onPostCompleted(List<OcHeaderOption> headerOptionList, OcRepresentation ocRepresentation) {
585 public void onPostFailed(Throwable ex) {
586 if (ex instanceof OcException) {
587 OcException ocEx = (OcException) ex;
588 ErrorCode errCode = ocEx.getErrorCode();
589 if (ErrorCode.NO_RESOURCE != errCode) {
590 Log.e(TAG, ocEx.getMessage());
594 Log.e(TAG, ex.getMessage());
600 } catch (OcException e) {
609 OcResourceHandle resourceHandle = OcPlatform.registerResource(
612 OcPlatform.DEFAULT_INTERFACE,
613 new OcPlatform.EntityHandler() {
615 public EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest) {
616 EnumSet<RequestHandlerFlag> handlerFlagSet = ocResourceRequest.getRequestHandlerFlagSet();
617 RequestType requestType = ocResourceRequest.getRequestType();
619 if (handlerFlagSet.contains(RequestHandlerFlag.INIT)) {
621 if (handlerFlagSet.contains(RequestHandlerFlag.REQUEST)) {
622 OcResourceResponse ocResourceResponse = new OcResourceResponse();
623 ocResourceResponse.setRequestHandle(
624 ocResourceRequest.getRequestHandle());
625 ocResourceResponse.setResourceHandle(
626 ocResourceRequest.getResourceHandle());
628 switch (requestType) {
636 OcRepresentation rep = ocResourceRequest.getResourceRepresentation();
638 Log.i(TAG, "Post res. power: " + rep.getValue("power"));
639 } catch (OcException e) {
640 Log.e(TAG, e.toString());
643 Log.i(TAG, "URI: " + rep.getUri());
645 ocResourceResponse.setErrorCode(200);
646 ocResourceResponse.setResponseResult(EntityHandlerResult.OK);
647 ocResourceResponse.setResourceRepresentation(
648 getRepresentation(44));
657 OcPlatform.sendResponse(ocResourceResponse);
658 } catch (OcException e) {
659 Log.e(TAG, e.getMessage());
660 return EntityHandlerResult.ERROR;
663 if (handlerFlagSet.contains(RequestHandlerFlag.OBSERVER)) {
665 return EntityHandlerResult.OK;
668 EnumSet.of(ResourceProperty.DISCOVERABLE)
672 OcPlatform.findResource("",
673 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType,
674 EnumSet.of(OcConnectivityType.CT_DEFAULT),
675 resourceFoundListener);
677 //wait for onResourceFound event
678 assertTrue(signal1.await(60, TimeUnit.SECONDS));
680 //wait for onPostCompleted event
681 assertTrue(signal2.await(60, TimeUnit.SECONDS));
684 OcPlatform.unregisterResource(resourceHandle);
686 } catch (OcException e) {
687 Log.e(TAG, e.getMessage());
693 public void testHandleDeleteRequest() throws InterruptedException {
694 final String resourceType = "unit.test.resource" + new Date().getTime();
695 final CountDownLatch signal1 = new CountDownLatch(1);
696 final CountDownLatch signal2 = new CountDownLatch(1);
697 final List<OcResource> ocResourceList = new LinkedList<OcResource>();
699 final OcResource.OnDeleteListener onDeleteListener = new OcResource.OnDeleteListener() {
701 public void onDeleteCompleted(List<OcHeaderOption> headerOptionList) {
706 public void onDeleteFailed(Throwable ex) {
707 if (ex instanceof OcException) {
708 OcException ocEx = (OcException) ex;
709 ErrorCode errCode = ocEx.getErrorCode();
710 if (ErrorCode.NO_RESOURCE != errCode) {
711 Log.e(TAG, ocEx.getMessage());
715 Log.e(TAG, ex.getMessage());
721 final OcPlatform.OnResourceFoundListener resourceFoundListener =
722 new OcPlatform.OnResourceFoundListener() {
724 public void onResourceFound(OcResource resource) {
725 ocResourceList.add(resource);
727 resource.deleteResource(onDeleteListener);
728 } catch (OcException e) {
737 OcResourceHandle resourceHandle = OcPlatform.registerResource(
740 OcPlatform.DEFAULT_INTERFACE,
741 new OcPlatform.EntityHandler() {
743 public EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest) {
744 EnumSet<RequestHandlerFlag> handlerFlagSet =
745 ocResourceRequest.getRequestHandlerFlagSet();
746 RequestType requestType = ocResourceRequest.getRequestType();
748 if (handlerFlagSet.contains(RequestHandlerFlag.INIT)) {
750 if (handlerFlagSet.contains(RequestHandlerFlag.REQUEST)) {
751 OcResourceResponse ocResourceResponse = new OcResourceResponse();
752 ocResourceResponse.setRequestHandle(
753 ocResourceRequest.getRequestHandle());
754 ocResourceResponse.setResourceHandle(
755 ocResourceRequest.getResourceHandle());
757 switch (requestType) {
759 ocResourceResponse.setErrorCode(200);
760 ocResourceResponse.setResponseResult(
761 EntityHandlerResult.RESOURCE_DELETED);
766 OcPlatform.sendResponse(ocResourceResponse);
767 } catch (OcException e) {
768 Log.e(TAG, e.getMessage());
769 return EntityHandlerResult.ERROR;
772 if (handlerFlagSet.contains(RequestHandlerFlag.OBSERVER)) {
774 return EntityHandlerResult.OK;
777 EnumSet.of(ResourceProperty.DISCOVERABLE)
781 OcPlatform.findResource("",
782 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType,
783 EnumSet.of(OcConnectivityType.CT_DEFAULT),
784 resourceFoundListener);
786 //wait for onResourceFound event
787 assertTrue(signal1.await(60, TimeUnit.SECONDS));
789 //wait for onDeleteCompleted event
790 assertTrue(signal2.await(60, TimeUnit.SECONDS));
793 OcPlatform.unregisterResource(resourceHandle);
795 } catch (OcException e) {
796 Log.e(TAG, e.getMessage());
801 public void testHandleGetPutPostDeleteFailures() throws InterruptedException {
802 final String resourceType = "unit.test.resource" + new Date().getTime();
803 final CountDownLatch signal1 = new CountDownLatch(1);
804 final CountDownLatch signal2 = new CountDownLatch(1);
805 final CountDownLatch signal3 = new CountDownLatch(1);
806 final CountDownLatch signal4 = new CountDownLatch(1);
807 final CountDownLatch signal5 = new CountDownLatch(1);
809 final List<OcResource> ocResourceList = new LinkedList<OcResource>();
810 final OcResource.OnGetListener onGetListener = new OcResource.OnGetListener() {
812 public void onGetCompleted(List<OcHeaderOption> headerOptionList,
813 OcRepresentation ocRepresentation) {
818 public void onGetFailed(Throwable ex) {
819 if (ex instanceof OcException) {
820 OcException ocEx = (OcException) ex;
821 ErrorCode errCode = ocEx.getErrorCode();
823 Log.i(TAG, ex.toString());
828 final OcResource.OnPutListener onPutListener = new OcResource.OnPutListener() {
830 public void onPutCompleted(List<OcHeaderOption> headerOptionList,
831 OcRepresentation ocRepresentation) {
836 public void onPutFailed(Throwable ex) {
837 if (ex instanceof OcException) {
838 OcException ocEx = (OcException) ex;
839 ErrorCode errCode = ocEx.getErrorCode();
841 Log.i(TAG, ex.toString());
845 final OcResource.OnPostListener onPostListener = new OcResource.OnPostListener() {
847 public void onPostCompleted(List<OcHeaderOption> headerOptionList,
848 OcRepresentation ocRepresentation) {
853 public void onPostFailed(Throwable ex) {
854 if (ex instanceof OcException) {
855 OcException ocEx = (OcException) ex;
856 ErrorCode errCode = ocEx.getErrorCode();
858 Log.i(TAG, ex.toString());
863 final OcResource.OnDeleteListener onDeleteListener = new OcResource.OnDeleteListener() {
865 public void onDeleteCompleted(List<OcHeaderOption> headerOptionList) {
870 public void onDeleteFailed(Throwable ex) {
871 if (ex instanceof OcException) {
872 OcException ocEx = (OcException) ex;
873 ErrorCode errCode = ocEx.getErrorCode();
875 Log.i(TAG, ex.toString());
880 final OcPlatform.OnResourceFoundListener resourceFoundListener =
881 new OcPlatform.OnResourceFoundListener() {
883 public void onResourceFound(OcResource resource) {
884 ocResourceList.add(resource);
886 resource.get(new HashMap<String, String>(), onGetListener);
887 resource.put(new OcRepresentation(), new HashMap<String, String>(),
889 resource.post(new OcRepresentation(), new HashMap<String, String>(),
891 resource.deleteResource(onDeleteListener);
892 } catch (OcException e) {
901 OcResourceHandle resourceHandle = OcPlatform.registerResource(
904 OcPlatform.DEFAULT_INTERFACE,
905 new OcPlatform.EntityHandler() {
907 public EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest) {
908 EnumSet<RequestHandlerFlag> handlerFlagSet =
909 ocResourceRequest.getRequestHandlerFlagSet();
910 RequestType requestType = ocResourceRequest.getRequestType();
912 if (handlerFlagSet.contains(RequestHandlerFlag.INIT)) {
914 if (handlerFlagSet.contains(RequestHandlerFlag.REQUEST)) {
915 OcResourceResponse ocResourceResponse = new OcResourceResponse();
916 ocResourceResponse.setRequestHandle(
917 ocResourceRequest.getRequestHandle());
918 ocResourceResponse.setResourceHandle(
919 ocResourceRequest.getResourceHandle());
921 switch (requestType) {
923 ocResourceResponse.setErrorCode(200);
924 ocResourceResponse.setResponseResult(
925 EntityHandlerResult.ERROR);
928 ocResourceResponse.setErrorCode(200);
929 ocResourceResponse.setResponseResult(
930 EntityHandlerResult.ERROR);
933 ocResourceResponse.setErrorCode(200);
934 ocResourceResponse.setResponseResult(
935 EntityHandlerResult.ERROR);
938 ocResourceResponse.setErrorCode(200);
939 ocResourceResponse.setResponseResult(
940 EntityHandlerResult.ERROR);
944 OcPlatform.sendResponse(ocResourceResponse);
945 } catch (OcException e) {
946 Log.e(TAG, e.getMessage());
947 return EntityHandlerResult.ERROR;
950 if (handlerFlagSet.contains(RequestHandlerFlag.OBSERVER)) {
952 return EntityHandlerResult.OK;
955 EnumSet.of(ResourceProperty.DISCOVERABLE)
959 OcPlatform.findResource("",
960 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType,
961 EnumSet.of(OcConnectivityType.CT_DEFAULT),
962 resourceFoundListener);
964 //wait for onResourceFound event
965 assertTrue(signal1.await(60, TimeUnit.SECONDS));
966 //wait for onGetCompleted event
967 assertTrue(signal2.await(60, TimeUnit.SECONDS));
968 //wait for onPutCompleted event
969 assertTrue(signal3.await(60, TimeUnit.SECONDS));
970 //wait for onPostCompleted event
971 assertTrue(signal4.await(60, TimeUnit.SECONDS));
972 //wait for onDeleteCompleted event
973 assertTrue(signal5.await(60, TimeUnit.SECONDS));
976 OcPlatform.unregisterResource(resourceHandle);
978 } catch (OcException e) {
979 Log.e(TAG, e.getMessage());
984 public void testPlatformInfo() throws InterruptedException {
985 final String resourceType = "unit.test.resource" + new Date().getTime();
986 final CountDownLatch signal = new CountDownLatch(1);
988 OcPlatform.OnPlatformFoundListener platformFoundListener = new OcPlatform.OnPlatformFoundListener() {
990 public void onPlatformFound(OcRepresentation ocRepresentation) {
991 Log.i(TAG, "Platform Info Received: ");
992 Log.i(TAG, "URI: " + ocRepresentation.getUri());
997 OcPlatformInfo platformInfo = null;
999 platformInfo = new OcPlatformInfo("myPlatformID", "myManuName", "myManuUrl");
1001 platformInfo.setModelNumber("myModelNumber");
1002 platformInfo.setDateOfManufacture("myDateOfManufacture");
1003 platformInfo.setPlatformVersion("myPlatformVersion");
1004 platformInfo.setOperatingSystemVersion("myOperatingSystemVersion");
1005 platformInfo.setHardwareVersion("myHardwareVersion");
1006 platformInfo.setFirmwareVersion("myFirmwareVersion");
1007 platformInfo.setSupportUrl("mySupportUrl");
1008 platformInfo.setSystemTime("mySystemTime");
1012 OcPlatform.registerPlatformInfo(platformInfo);
1015 OcPlatform.getPlatformInfo(
1017 OcPlatform.WELL_KNOWN_PLATFORM_QUERY,
1018 EnumSet.of(OcConnectivityType.CT_DEFAULT),
1019 platformFoundListener);
1021 //wait for onPlatformFound event
1022 assertTrue(signal.await(60, TimeUnit.SECONDS));
1023 } catch (OcException e) {
1024 Log.e(TAG, e.getMessage() + platformInfo.toString());
1029 public void testRegisterDeviceInfoGetDeviceInfo() throws InterruptedException {
1030 final String resourceType = "unit.test.resource" + new Date().getTime();
1031 final CountDownLatch signal = new CountDownLatch(1);
1033 OcPlatform.OnDeviceFoundListener deviceFoundListener = new OcPlatform.OnDeviceFoundListener() {
1035 public void onDeviceFound(OcRepresentation ocRepresentation) {
1037 Log.i(TAG, "Device Name: " + ocRepresentation.getValue("n"));
1038 } catch (OcException e) {
1039 Log.e(TAG, e.toString());
1042 boolean hasDeviceNameAtr = ocRepresentation.hasAttribute("n");
1043 assertTrue(hasDeviceNameAtr);
1044 boolean hasNonExistingAtr = ocRepresentation.hasAttribute("NonExisting");
1045 assertFalse(hasNonExistingAtr);
1046 Log.i(TAG, "URI: " + ocRepresentation.getUri());
1051 OcDeviceInfo devInfo = new OcDeviceInfo("myDeviceName");
1055 OcPlatform.registerDeviceInfo(devInfo);
1057 OcPlatform.getDeviceInfo(
1059 OcPlatform.WELL_KNOWN_DEVICE_QUERY,
1060 EnumSet.of(OcConnectivityType.CT_DEFAULT),
1061 deviceFoundListener);
1063 //wait for onDeviceFound event
1064 assertTrue(signal.await(60, TimeUnit.SECONDS));
1066 } catch (OcException e) {
1067 Log.e(TAG, e.getMessage());
1072 public void testBindUnbindResources() throws InterruptedException {
1073 final String resourceType = "unit.test.resource" + new Date().getTime();
1074 final CountDownLatch signal1 = new CountDownLatch(3);
1075 final CountDownLatch signal2 = new CountDownLatch(2);
1076 final CountDownLatch signal3 = new CountDownLatch(1);
1077 final CountDownLatch signal4 = new CountDownLatch(3);
1078 final CountDownLatch signal5 = new CountDownLatch(3);
1079 final CountDownLatch signal6 = new CountDownLatch(1);
1081 OcPlatform.EntityHandler entityHandler = new OcPlatform.EntityHandler() {
1083 public EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest) {
1084 return EntityHandlerResult.OK;
1088 OcPlatform.OnResourceFoundListener resourceFoundListener1 = new OcPlatform.OnResourceFoundListener() {
1090 public void onResourceFound(OcResource resource) {
1091 signal1.countDown();
1095 OcPlatform.OnResourceFoundListener resourceFoundListener2 = new OcPlatform.OnResourceFoundListener() {
1097 public void onResourceFound(OcResource resource) {
1098 signal2.countDown();
1102 OcPlatform.OnResourceFoundListener resourceFoundListener3 = new OcPlatform.OnResourceFoundListener() {
1104 public void onResourceFound(OcResource resource) {
1105 signal3.countDown();
1109 OcPlatform.OnResourceFoundListener resourceFoundListener4 = new OcPlatform.OnResourceFoundListener() {
1111 public void onResourceFound(OcResource resource) {
1112 signal4.countDown();
1116 OcPlatform.OnResourceFoundListener resourceFoundListener5 = new OcPlatform.OnResourceFoundListener() {
1118 public void onResourceFound(OcResource resource) {
1119 signal5.countDown();
1123 OcPlatform.OnResourceFoundListener resourceFoundListener6 = new OcPlatform.OnResourceFoundListener() {
1125 public void onResourceFound(OcResource resource) {
1126 signal6.countDown();
1133 OcResourceHandle resourceHandleCollection = OcPlatform.registerResource(
1136 OcPlatform.DEFAULT_INTERFACE,
1138 EnumSet.of(ResourceProperty.DISCOVERABLE)
1141 OcResourceHandle resourceHandle1 = OcPlatform.registerResource(
1144 OcPlatform.DEFAULT_INTERFACE,
1146 EnumSet.of(ResourceProperty.DISCOVERABLE)
1149 OcResourceHandle resourceHandle2 = OcPlatform.registerResource(
1152 OcPlatform.DEFAULT_INTERFACE,
1154 EnumSet.of(ResourceProperty.DISCOVERABLE)
1158 OcPlatform.findResource("",
1159 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType,
1160 EnumSet.of(OcConnectivityType.CT_DEFAULT),
1161 resourceFoundListener1);
1163 //wait for onResourceFound event to find 3 registered resources
1164 assertTrue(signal1.await(60, TimeUnit.SECONDS));
1167 OcPlatform.bindResource(resourceHandleCollection, resourceHandle1);
1168 OcPlatform.bindResource(resourceHandleCollection, resourceHandle2);
1171 OcPlatform.findResource("",
1172 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType,
1173 EnumSet.of(OcConnectivityType.CT_DEFAULT),
1174 resourceFoundListener3);
1176 //wait for onResourceFound event to find 1 collection resources
1177 assertTrue(signal3.await(60, TimeUnit.SECONDS));
1180 OcPlatform.unbindResource(resourceHandleCollection, resourceHandle1);
1183 OcPlatform.findResource("",
1184 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType,
1185 EnumSet.of(OcConnectivityType.CT_DEFAULT),
1186 resourceFoundListener2);
1188 //wait for onResourceFound event to find 2 resources
1189 assertTrue(signal2.await(60, TimeUnit.SECONDS));
1192 OcPlatform.unbindResource(resourceHandleCollection, resourceHandle2);
1195 OcPlatform.findResource("",
1196 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType,
1197 EnumSet.of(OcConnectivityType.CT_DEFAULT),
1198 resourceFoundListener4);
1200 //wait for onResourceFound event to find 3 registered resources
1201 assertTrue(signal4.await(60, TimeUnit.SECONDS));
1203 //Bind/unbind a list of resource handles
1204 List<OcResourceHandle> resourceHandleList = new LinkedList<OcResourceHandle>();
1205 resourceHandleList.add(resourceHandle1);
1206 resourceHandleList.add(resourceHandle2);
1207 OcPlatform.bindResources(resourceHandleCollection, resourceHandleList);
1210 OcPlatform.findResource("",
1211 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType,
1212 EnumSet.of(OcConnectivityType.CT_DEFAULT),
1213 resourceFoundListener6);
1215 //wait for onResourceFound event to find 1 collection resources
1216 assertTrue(signal6.await(60, TimeUnit.SECONDS));
1218 OcPlatform.unbindResources(resourceHandleCollection, resourceHandleList);
1221 OcPlatform.findResource("",
1222 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType,
1223 EnumSet.of(OcConnectivityType.CT_DEFAULT),
1224 resourceFoundListener5);
1226 //wait for onResourceFound event to find 1 collection resources
1227 assertTrue(signal5.await(60, TimeUnit.SECONDS));
1230 OcPlatform.unregisterResource(resourceHandleCollection);
1231 OcPlatform.unregisterResource(resourceHandle1);
1232 OcPlatform.unregisterResource(resourceHandle2);
1233 } catch (OcException e) {
1234 Log.e(TAG, e.getMessage());
1239 public void testResourceMethods() throws InterruptedException {
1240 final String resourceType1 = "unit.test.resource" + new Date().getTime();
1241 final String resourceType2 = "unit.test.resource" + new Date().getTime();
1243 final CountDownLatch signal = new CountDownLatch(2);
1244 final List<OcResource> resourceList = new LinkedList<>();
1246 OcPlatform.OnResourceFoundListener resourceFoundListener =
1247 new OcPlatform.OnResourceFoundListener() {
1249 public synchronized void onResourceFound(OcResource resource) {
1250 resourceList.add(resource);
1251 Log.i(TAG, "Host: " + resource.getHost());
1252 Log.i(TAG, "Uri: " + resource.getUri());
1253 Log.i(TAG, "Observable: " + resource.isObservable());
1255 assertFalse(resource.getResourceTypes().isEmpty());
1256 for (String resourceType : resource.getResourceTypes()) {
1257 Log.i(TAG, "Type: " + resourceType);
1260 assertFalse(resource.getResourceTypes().isEmpty());
1261 for (String resourceInterface : resource.getResourceInterfaces()) {
1262 Log.i(TAG, "Interface: " + resourceInterface);
1265 List<OcHeaderOption> headerOptionList = new LinkedList<OcHeaderOption>();
1266 headerOptionList.add(new OcHeaderOption(2885, "OptionData1"));
1267 headerOptionList.add(new OcHeaderOption(2886, "OptionData2"));
1269 resource.setHeaderOptions(headerOptionList);
1270 resource.unsetHeaderOptions();
1272 OcResourceIdentifier resourceIdentifier = resource.getUniqueIdentifier();
1273 OcResourceIdentifier resourceIdentifier2 = resource.getUniqueIdentifier();
1274 assertTrue(resourceIdentifier.equals(resourceIdentifier2));
1282 OcResourceHandle resourceHandle1 = OcPlatform.registerResource(
1285 OcPlatform.DEFAULT_INTERFACE,
1287 EnumSet.of(ResourceProperty.DISCOVERABLE)
1290 OcResourceHandle resourceHandle2 = OcPlatform.registerResource(
1293 OcPlatform.DEFAULT_INTERFACE,
1295 EnumSet.of(ResourceProperty.DISCOVERABLE)
1299 OcPlatform.findResource("",
1300 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType1,
1301 EnumSet.of(OcConnectivityType.CT_DEFAULT),
1302 resourceFoundListener);
1304 OcPlatform.findResource("",
1305 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType2,
1306 EnumSet.of(OcConnectivityType.CT_DEFAULT),
1307 resourceFoundListener);
1309 //wait for onResourceFound event
1310 assertTrue(signal.await(60, TimeUnit.SECONDS));
1312 assertTrue(2 == resourceList.size());
1314 OcResource res0 = resourceList.get(0);
1315 OcResource res1 = resourceList.get(1);
1316 assertFalse(res0.getUniqueIdentifier().equals(res1.getUniqueIdentifier()));
1317 assertTrue(res0.getUniqueIdentifier().equals(res0.getUniqueIdentifier()));
1320 OcPlatform.unregisterResource(resourceHandle1);
1321 OcPlatform.unregisterResource(resourceHandle2);
1323 } catch (OcException e) {
1324 Log.e(TAG, e.getMessage());
1329 public void testCreateResourceProxy() throws InterruptedException {
1330 final String resourceType = "unit.test.resource" + new Date().getTime();
1331 final CountDownLatch signal = new CountDownLatch(1);
1333 OcPlatform.OnResourceFoundListener resourceFoundListener =
1334 new OcPlatform.OnResourceFoundListener() {
1336 public void onResourceFound(OcResource resource) {
1339 //client: construct resource proxy
1340 OcResource resourceProxy = OcPlatform.constructResourceObject(
1343 EnumSet.of(OcConnectivityType.CT_DEFAULT),
1344 resource.isObservable(),
1345 resource.getResourceTypes(),
1346 resource.getResourceInterfaces());
1348 //client: register resource proxy
1349 OcResourceHandle resourceProxyHandle =
1350 OcPlatform.registerResource(resourceProxy);
1352 OcPlatform.unregisterResource(resourceProxyHandle);
1353 } catch (OcException e) {
1362 OcResourceHandle resourceHandle = OcPlatform.registerResource(
1365 OcPlatform.DEFAULT_INTERFACE,
1367 EnumSet.of(ResourceProperty.DISCOVERABLE)
1371 OcPlatform.findResource("",
1372 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType,
1373 EnumSet.of(OcConnectivityType.CT_DEFAULT),
1374 resourceFoundListener);
1376 //wait for onResourceFound event
1377 assertTrue(signal.await(60, TimeUnit.SECONDS));
1380 OcPlatform.unregisterResource(resourceHandle);
1382 } catch (OcException e) {
1383 Log.e(TAG, e.getMessage());
1389 OcResourceHandle resourceHandle = OcPlatform.registerResource(
1392 OcPlatform.DEFAULT_INTERFACE,
1394 EnumSet.of(ResourceProperty.DISCOVERABLE)
1398 OcPlatform.findResource("",
1399 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType,
1400 EnumSet.of(OcConnectivityType.CT_DEFAULT),
1401 resourceFoundListener);
1403 //wait for onResourceFound event
1404 assertTrue(signal.await(60, TimeUnit.SECONDS));
1407 OcPlatform.unregisterResource(resourceHandle);
1409 } catch (OcException e) {
1410 Log.e(TAG, e.getMessage());
1415 public void testObserveClientServer() throws InterruptedException {
1416 final int NUM_OBSERVES = 20;
1417 final Timer timer = new Timer();
1418 final List<OcResource> resourceList = new LinkedList<OcResource>();
1419 final List<OcResourceHandle> resourceHandleList = new LinkedList<OcResourceHandle>();
1420 final CountDownLatch signal1 = new CountDownLatch(1);
1421 final CountDownLatch signal2 = new CountDownLatch(NUM_OBSERVES);
1422 final CountDownLatch signal3 = new CountDownLatch(1);
1424 final String resourceType = "unit.test.resource" + new Date().getTime();
1426 final OcResource.OnObserveListener observeListener = new OcResource.OnObserveListener() {
1428 public void onObserveCompleted(
1429 List<OcHeaderOption> headerOptionList,
1430 OcRepresentation ocRepresentation,
1431 int sequenceNumber) {
1434 Log.i(TAG, "Observe #" + sequenceNumber + " power: " +
1435 ocRepresentation.getValue("power"));
1436 } catch (OcException e) {
1437 Log.e(TAG, e.toString());
1440 signal2.countDown();
1444 public void onObserveFailed(Throwable ex) {
1445 if (ex instanceof OcException) {
1446 OcException ocEx = (OcException) ex;
1447 ErrorCode errCode = ocEx.getErrorCode();
1449 Log.e(TAG, ex.toString());
1454 final List<Byte> observationIdList = new LinkedList<Byte>();
1455 OcPlatform.EntityHandler entityHandler = new OcPlatform.EntityHandler() {
1457 public EntityHandlerResult handleEntity(OcResourceRequest ocResourceRequest) {
1458 EnumSet<RequestHandlerFlag> handlerFlagSet = ocResourceRequest.getRequestHandlerFlagSet();
1459 RequestType requestType = ocResourceRequest.getRequestType();
1461 if (handlerFlagSet.contains(RequestHandlerFlag.INIT)) {
1464 if (handlerFlagSet.contains(RequestHandlerFlag.REQUEST)) {
1465 OcResourceResponse ocResourceResponse = new OcResourceResponse();
1466 ocResourceResponse.setRequestHandle(ocResourceRequest.getRequestHandle());
1467 ocResourceResponse.setResourceHandle(ocResourceRequest.getResourceHandle());
1469 switch (requestType) {
1471 ocResourceResponse.setErrorCode(200);
1472 ocResourceResponse.setResponseResult(EntityHandlerResult.OK);
1473 ocResourceResponse.setResourceRepresentation(
1477 OcPlatform.sendResponse(ocResourceResponse);
1478 } catch (OcException e) {
1479 Log.e(TAG, e.getMessage());
1480 return EntityHandlerResult.ERROR;
1486 if (handlerFlagSet.contains(RequestHandlerFlag.OBSERVER)) {
1487 ObservationInfo observationInfo = ocResourceRequest.getObservationInfo();
1489 switch (observationInfo.getObserveAction()) {
1491 synchronized (observationIdList) {
1492 observationIdList.add(observationInfo.getOcObservationId());
1493 timer.schedule(new TimerTask() {
1494 int numNotified = 1;
1498 if (0 < resourceHandleList.size()) {
1499 synchronized (observationIdList) {
1500 if (numNotified > NUM_OBSERVES) {
1503 signal3.countDown();
1506 OcPlatform.notifyAllObservers(
1507 resourceHandleList.get(0));
1508 } catch (OcException e) {
1509 if (ErrorCode.NO_OBSERVERS == e.getErrorCode()) {
1512 signal3.countDown();
1514 Log.e(TAG, e.getMessage());
1526 //TODO unregister isn't implemented in C++ API, yet
1527 synchronized (observationIdList) {
1533 return EntityHandlerResult.OK;
1537 OcPlatform.OnResourceFoundListener resourceFoundListener =
1538 new OcPlatform.OnResourceFoundListener() {
1540 public void onResourceFound(OcResource resource) {
1541 resourceList.add(resource);
1542 if (resource.isObservable()) {
1545 ObserveType.OBSERVE,
1546 new HashMap<String, String>(),
1549 signal1.countDown();
1550 } catch (OcException e) {
1551 Log.e(TAG, e.getMessage());
1559 OcResourceHandle resourceHandle = OcPlatform.registerResource(
1562 OcPlatform.DEFAULT_INTERFACE,
1564 EnumSet.of(ResourceProperty.DISCOVERABLE, ResourceProperty.OBSERVABLE)
1567 resourceHandleList.add(resourceHandle);
1570 OcPlatform.findResource("",
1571 OcPlatform.WELL_KNOWN_QUERY + "?rt=" + resourceType,
1572 EnumSet.of(OcConnectivityType.CT_DEFAULT),
1573 resourceFoundListener);
1575 //wait for onResourceFound event
1576 assertTrue(signal1.await(60, TimeUnit.SECONDS));
1578 //wait for OnObserveListener event to observe 20 values
1579 assertTrue(signal2.await(60, TimeUnit.SECONDS));
1581 if (resourceList.size() > 0) {
1582 OcResource resource = resourceList.get(0);
1583 if (resource.isObservable()) {
1584 resource.cancelObserve();
1588 //wait for server to finish
1589 assertTrue(signal3.await(60, TimeUnit.SECONDS));
1592 OcPlatform.unregisterResource(resourceHandle);
1594 } catch (OcException e) {
1595 Log.e(TAG, e.getMessage());
1600 private OcRepresentation getRepresentation(int value) {
1601 OcRepresentation rep = new OcRepresentation();
1603 rep.setValue("power", value);
1604 } catch (OcException e) {
1605 Log.e(TAG, e.toString());
1611 private OcRepresentation getRepresentation() {
1612 return getRepresentation(74);