Imported Upstream version 1.0.0
[platform/upstream/iotivity.git] / service / resource-encapsulation / android / service / src / androidTest / java / org / iotivity / service / ResourceObjectTest.java
1 package org.iotivity.service;
2
3 import static org.mockito.Matchers.any;
4 import static org.mockito.Matchers.anyInt;
5 import static org.mockito.Matchers.eq;
6 import static org.mockito.Mockito.doReturn;
7 import static org.mockito.Mockito.never;
8 import static org.mockito.Mockito.timeout;
9 import static org.mockito.Mockito.verify;
10
11 import org.iotivity.service.client.RcsRemoteResourceObject.OnRemoteAttributesReceivedListener;
12 import org.iotivity.service.server.RcsGetResponse;
13 import org.iotivity.service.server.RcsRequest;
14 import org.iotivity.service.server.RcsResourceObject.AutoNotifyPolicy;
15 import org.iotivity.service.server.RcsResourceObject.GetRequestHandler;
16 import org.iotivity.service.server.RcsResourceObject.OnAttributeUpdatedListener;
17 import org.iotivity.service.server.RcsResourceObject.SetRequestHandler;
18 import org.iotivity.service.server.RcsResourceObject.SetRequestHandlerPolicy;
19 import org.iotivity.service.server.RcsSetResponse;
20 import org.mockito.Mockito;
21
22 public class ResourceObjectTest extends TestBase {
23     private static final String NEW_KEY = "new" + KEY;
24
25     private OnRemoteAttributesReceivedListener mOnRemoteAttributesReceivedListener;
26     private SetRequestHandler                  mSetRequestHandler;
27     private GetRequestHandler                  mGetRequestHandler;
28     private OnAttributeUpdatedListener         mOnAttributeUpdatedListener;
29
30     private void setSetRequestHandlerReturn(RcsSetResponse setResponse) {
31         doReturn(setResponse).when(mSetRequestHandler).onSetRequested(
32                 any(RcsRequest.class), any(RcsResourceAttributes.class));
33     }
34
35     private void setGetRequestHandlerReturn(RcsGetResponse getResponse) {
36         doReturn(getResponse).when(mGetRequestHandler).onGetRequested(
37                 any(RcsRequest.class), any(RcsResourceAttributes.class));
38     }
39
40     @Override
41     protected void setUp() throws Exception {
42         super.setUp();
43
44         mOnRemoteAttributesReceivedListener = Mockito
45                 .mock(OnRemoteAttributesReceivedListener.class);
46
47         mGetRequestHandler = Mockito.mock(GetRequestHandler.class);
48         mSetRequestHandler = Mockito.mock(SetRequestHandler.class);
49         mOnAttributeUpdatedListener = Mockito
50                 .mock(OnAttributeUpdatedListener.class);
51     }
52
53     public void testDefalutAutoNotifyPolicyIsUpdated() throws RcsException {
54         assertEquals(AutoNotifyPolicy.UPDATED, mServer.getAutoNotifyPolicy());
55     }
56
57     public void testAutoNotifyPolicyCanBeSet() throws RcsException {
58         mServer.setAutoNotifyPolicy(AutoNotifyPolicy.NEVER);
59         assertEquals(AutoNotifyPolicy.NEVER, mServer.getAutoNotifyPolicy());
60
61         mServer.setAutoNotifyPolicy(AutoNotifyPolicy.UPDATED);
62         assertEquals(AutoNotifyPolicy.UPDATED, mServer.getAutoNotifyPolicy());
63
64         mServer.setAutoNotifyPolicy(AutoNotifyPolicy.ALWAYS);
65         assertEquals(AutoNotifyPolicy.ALWAYS, mServer.getAutoNotifyPolicy());
66     }
67
68     public void testDefalutSetRequestHandlerPolicyIsNever()
69             throws RcsException {
70         assertEquals(SetRequestHandlerPolicy.NEVER,
71                 mServer.getSetRequestHandlerPolicy());
72     }
73
74     public void testSetRequestHandlerPolicyCanBeSet() throws RcsException {
75         mServer.setSetRequestHandlerPolicy(SetRequestHandlerPolicy.ACCEPT);
76         assertEquals(SetRequestHandlerPolicy.ACCEPT,
77                 mServer.getSetRequestHandlerPolicy());
78
79         mServer.setSetRequestHandlerPolicy(SetRequestHandlerPolicy.NEVER);
80         assertEquals(SetRequestHandlerPolicy.NEVER,
81                 mServer.getSetRequestHandlerPolicy());
82     }
83
84     public void testGetRequestHandlerCalledIfReceived() throws RcsException {
85         setGetRequestHandlerReturn(RcsGetResponse.defaultAction());
86
87         mServer.setGetRequestHandler(mGetRequestHandler);
88
89         mClient.getRemoteAttributes(mOnRemoteAttributesReceivedListener);
90
91         verify(mGetRequestHandler, timeout(1000)).onGetRequested(
92                 any(RcsRequest.class), any(RcsResourceAttributes.class));
93     }
94
95     public void testGetRequestHandlerCanReturnCustomAttrsAsResponse()
96             throws RcsException {
97         RcsResourceAttributes newAttrs = new RcsResourceAttributes();
98         newAttrs.put(NEW_KEY, new RcsValue(RAW_VALUE + 1));
99
100         setGetRequestHandlerReturn(RcsGetResponse.create(newAttrs));
101
102         mServer.setGetRequestHandler(mGetRequestHandler);
103         mClient.getRemoteAttributes(mOnRemoteAttributesReceivedListener);
104
105         verify(mGetRequestHandler, timeout(1000)).onGetRequested(
106                 any(RcsRequest.class), any(RcsResourceAttributes.class));
107
108         verify(mOnRemoteAttributesReceivedListener, timeout(1000))
109                 .onAttributesReceived(eq(newAttrs), anyInt());
110     }
111
112     public void testSetRequestHandlerCalledIfReceived() throws RcsException {
113         setSetRequestHandlerReturn(RcsSetResponse.defaultAction());
114
115         mServer.setSetRequestHandler(mSetRequestHandler);
116
117         mClient.setRemoteAttributes(new RcsResourceAttributes(),
118                 mOnRemoteAttributesReceivedListener);
119
120         verify(mSetRequestHandler, timeout(1000)).onSetRequested(
121                 any(RcsRequest.class), any(RcsResourceAttributes.class));
122     }
123
124     public void testIgnoreSetRequestIfSetRequestHandlerReturnsIgnore()
125             throws RcsException {
126         setSetRequestHandlerReturn(RcsSetResponse.ignore());
127
128         mServer.setSetRequestHandler(mSetRequestHandler);
129
130         RcsResourceAttributes newAttrs = new RcsResourceAttributes();
131         newAttrs.put(KEY, new RcsValue(RAW_VALUE + 1));
132
133         mClient.setRemoteAttributes(newAttrs,
134                 mOnRemoteAttributesReceivedListener);
135
136         verify(mSetRequestHandler, timeout(1000))
137                 .onSetRequested(any(RcsRequest.class), eq(newAttrs));
138
139         assertEquals(RAW_VALUE, mServer.getAttributeValue(KEY).asInt());
140     }
141
142     public void testAcceptSetRequestIfSetRequestHandlerReturnsAccept()
143             throws RcsException {
144         setSetRequestHandlerReturn(RcsSetResponse.accept());
145
146         mServer.setSetRequestHandlerPolicy(SetRequestHandlerPolicy.NEVER);
147         mServer.setSetRequestHandler(mSetRequestHandler);
148
149         RcsResourceAttributes newAttrs = new RcsResourceAttributes();
150         newAttrs.put(NEW_KEY, new RcsValue(RAW_VALUE + 1));
151
152         mClient.setRemoteAttributes(newAttrs,
153                 mOnRemoteAttributesReceivedListener);
154
155         verify(mSetRequestHandler, timeout(1000))
156                 .onSetRequested(any(RcsRequest.class), eq(newAttrs));
157
158         assertEquals(RAW_VALUE + 1, mServer.getAttributeValue(NEW_KEY).asInt());
159     }
160
161     public void testSetRequestHandlerCanReturnCustomAttrsAsResponse()
162             throws RcsException {
163         final RcsResourceAttributes newAttrs = new RcsResourceAttributes();
164         newAttrs.put(NEW_KEY, new RcsValue(RAW_VALUE + 1));
165
166         setSetRequestHandlerReturn(RcsSetResponse.create(newAttrs));
167
168         mServer.setSetRequestHandler(mSetRequestHandler);
169         mClient.setRemoteAttributes(new RcsResourceAttributes(),
170                 mOnRemoteAttributesReceivedListener);
171
172         verify(mSetRequestHandler, timeout(1000)).onSetRequested(
173                 any(RcsRequest.class), any(RcsResourceAttributes.class));
174
175         verify(mOnRemoteAttributesReceivedListener, timeout(1000))
176                 .onAttributesReceived(eq(newAttrs), anyInt());
177     }
178
179     public void testOnAttributeUpdatedListenerIsCalledIfValueUpdated()
180             throws RcsException {
181         final RcsValue newValue = new RcsValue(RAW_VALUE + 1);
182         final RcsResourceAttributes newAttrs = new RcsResourceAttributes();
183         newAttrs.put(KEY, newValue);
184
185         mServer.addAttributeUpdatedListener(KEY, mOnAttributeUpdatedListener);
186         mClient.setRemoteAttributes(newAttrs,
187                 mOnRemoteAttributesReceivedListener);
188
189         verify(mOnAttributeUpdatedListener, timeout(1000))
190                 .onAttributeUpdated(eq(VALUE), eq(newValue));
191     }
192
193     public void testOnAttributeUpdatedListenerIsNotCalledIRemoved()
194             throws RcsException {
195         final RcsValue newValue = new RcsValue(RAW_VALUE + 1);
196         final RcsResourceAttributes newAttrs = new RcsResourceAttributes();
197         newAttrs.put(KEY, newValue);
198
199         mServer.addAttributeUpdatedListener(KEY, mOnAttributeUpdatedListener);
200         mServer.removeAttribute(KEY);
201         mClient.setRemoteAttributes(newAttrs,
202                 mOnRemoteAttributesReceivedListener);
203
204         verify(mOnAttributeUpdatedListener, never())
205                 .onAttributeUpdated(eq(VALUE), eq(newValue));
206     }
207
208     public void testThrowIfObjectIsDestroyed() throws RcsException {
209         mServer.destroy();
210         try {
211             mServer.removeAttribute("");
212             fail("No exception thrown");
213         } catch (RcsDestroyedObjectException e) {
214         }
215
216     }
217 }