Initial merge-commit of the OIC code. Should successfully do discovery for single...
[platform/upstream/iotivity.git] / csdk / android / UnitTests / src / com / oc / unittests / UnitTest.java
1 //******************************************************************
2 //
3 // Copyright 2014 Intel Corporation All Rights Reserved.
4 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
5
6 package com.oc.unittests;
7
8 import static org.junit.Assert.*;
9 import junit.framework.Assert;
10
11 import org.junit.After;
12 import org.junit.Before;
13 import org.junit.Test;
14
15 import com.oc.OCDiscovery;
16 import com.oc.OCObserver;
17 import com.oc.OCResource;
18 import com.oc.OCResourceResultHandler;
19 import com.oc.OCSecurityModel;
20 import com.oc.OCServer;
21
22 public class UnitTest {
23   private OCServer clientService = null;
24   private OCServer serverService = null;
25   private OCDiscovery ocDiscovery = null;
26   private UnitTestResource serverResource = null;
27
28   @Before
29   public void init() throws Exception {
30     clientService = new OCServer();
31     clientService.start();
32     ocDiscovery = clientService.getDiscoverySingleton();
33   }
34
35   @After
36   public void destroy() throws Exception {
37     try {
38       clientService.stop();
39       clientService = null;
40       serverService.unregisterResource(serverResource);
41       serverService.stop();
42     } catch (Exception exception) {
43       // TODO: Handle exception
44     }
45   }
46
47   @Test
48   public void findMyself() {
49     client();
50     server();
51   }
52
53   @SuppressWarnings("serial")
54   public void client() {
55     assertNotNull(clientService);
56
57     /*
58      * APPLICATION NOTE: All callbacks will come through on a new thread and will not interfere with
59      * the UI thread or the Framework Thread (i.e. Networking Thread) which means that you need to
60      * use a Handler() to post back to the UI.
61      */
62     ocDiscovery.findResourceByType(null, null, new OCResourceResultHandler() {
63       @Override
64       public void onResourcesFound(String serviceURL, OCResource[] resources) {
65         // NOTE: This means that a service is reporting back zero or more resources
66         // During the callback, lets check to see if the resource supports the
67         // light control interface and turn the light on and then subscribe to any changes in the
68         // light's power state.
69         for (OCResource resource : resources) {
70           try {
71             UnitTestControlItf control = resource.getInterface(UnitTestControlItf.class);
72             assertNotNull(control);
73             if (control != null) {
74               control.setState(true);
75               control.isTrue();
76
77               Assert.assertEquals(true, control.isTrue());
78
79               /*
80                * APPLICATION NOTE: All callbacks will come through on a new thread and will not
81                * interfere with the UI thread or the Framework Thread (i.e. Networking Thread) which
82                * means that you need to use a Handler() to post back to the UI.
83                */
84               control.addMyUnitTestObserver(new OCObserver<Boolean>() {
85                 @Override
86                 public void onChanged(Boolean data) {
87                   // TODO: Tell the UI! The state of the Light has changed.
88
89                 }
90
91                 @Override
92                 public void onFailed(Throwable throwable) {
93                   // TODO: Tell the UI! We are no longer subscribed to events for the Light's power
94                   // state.
95                 }
96               });
97             }
98           } catch (Exception exception) {
99             // TODO: Ooops
100           }
101         }
102
103       }
104
105       @Override
106       public void onFailed(Throwable throwable) {
107         // TODO: Handle the error. The request to find resources has failed.
108       }
109
110       @Override
111       public void onCompleted() {
112         // Nothing to do here... we are just done finding resources is all.
113       }
114     });
115   }
116
117   public void server() {
118     // NOTE: We throw exceptions for the bad errors... so no return codes
119     try {
120       // In a complete example, the MyLight class should have callback to
121       // update the UI
122       serverResource = new UnitTestResource();
123       serverService = new OCServer();
124       serverService.setSecurityModel(new OCSecurityModel());
125       // TODO: Mats, will we allow one resource to be mapped to two URLs???
126       serverService.registerResource(serverResource, "/ResourceTypeGoesHere/a");
127       // TODO: Mats, will we allow one resource to be mapped to two URLs???
128       // service.registerResource(resource, "/light/b", new OCAccessHandler());
129       serverService.start();
130     } catch (Exception exception) {
131       // finish();
132       return; // End the application.
133     }
134   }
135 }