1 package org.iotivity.service;
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;
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;
22 public class ResourceObjectTest extends TestBase {
23 private static final String NEW_KEY = "new" + KEY;
25 private OnRemoteAttributesReceivedListener mOnRemoteAttributesReceivedListener;
26 private SetRequestHandler mSetRequestHandler;
27 private GetRequestHandler mGetRequestHandler;
28 private OnAttributeUpdatedListener mOnAttributeUpdatedListener;
30 private void setSetRequestHandlerReturn(RcsSetResponse setResponse) {
31 doReturn(setResponse).when(mSetRequestHandler).onSetRequested(
32 any(RcsRequest.class), any(RcsResourceAttributes.class));
35 private void setGetRequestHandlerReturn(RcsGetResponse getResponse) {
36 doReturn(getResponse).when(mGetRequestHandler).onGetRequested(
37 any(RcsRequest.class), any(RcsResourceAttributes.class));
41 protected void setUp() throws Exception {
44 mOnRemoteAttributesReceivedListener = Mockito
45 .mock(OnRemoteAttributesReceivedListener.class);
47 mGetRequestHandler = Mockito.mock(GetRequestHandler.class);
48 mSetRequestHandler = Mockito.mock(SetRequestHandler.class);
49 mOnAttributeUpdatedListener = Mockito
50 .mock(OnAttributeUpdatedListener.class);
53 public void testDefalutAutoNotifyPolicyIsUpdated() throws RcsException {
54 assertEquals(AutoNotifyPolicy.UPDATED, mServer.getAutoNotifyPolicy());
57 public void testAutoNotifyPolicyCanBeSet() throws RcsException {
58 mServer.setAutoNotifyPolicy(AutoNotifyPolicy.NEVER);
59 assertEquals(AutoNotifyPolicy.NEVER, mServer.getAutoNotifyPolicy());
61 mServer.setAutoNotifyPolicy(AutoNotifyPolicy.UPDATED);
62 assertEquals(AutoNotifyPolicy.UPDATED, mServer.getAutoNotifyPolicy());
64 mServer.setAutoNotifyPolicy(AutoNotifyPolicy.ALWAYS);
65 assertEquals(AutoNotifyPolicy.ALWAYS, mServer.getAutoNotifyPolicy());
68 public void testDefalutSetRequestHandlerPolicyIsNever()
70 assertEquals(SetRequestHandlerPolicy.NEVER,
71 mServer.getSetRequestHandlerPolicy());
74 public void testSetRequestHandlerPolicyCanBeSet() throws RcsException {
75 mServer.setSetRequestHandlerPolicy(SetRequestHandlerPolicy.ACCEPT);
76 assertEquals(SetRequestHandlerPolicy.ACCEPT,
77 mServer.getSetRequestHandlerPolicy());
79 mServer.setSetRequestHandlerPolicy(SetRequestHandlerPolicy.NEVER);
80 assertEquals(SetRequestHandlerPolicy.NEVER,
81 mServer.getSetRequestHandlerPolicy());
84 public void testGetRequestHandlerCalledIfReceived() throws RcsException {
85 setGetRequestHandlerReturn(RcsGetResponse.defaultAction());
87 mServer.setGetRequestHandler(mGetRequestHandler);
89 mClient.getRemoteAttributes(mOnRemoteAttributesReceivedListener);
91 verify(mGetRequestHandler, timeout(1000)).onGetRequested(
92 any(RcsRequest.class), any(RcsResourceAttributes.class));
95 public void testGetRequestHandlerCanReturnCustomAttrsAsResponse()
97 RcsResourceAttributes newAttrs = new RcsResourceAttributes();
98 newAttrs.put(NEW_KEY, new RcsValue(RAW_VALUE + 1));
100 setGetRequestHandlerReturn(RcsGetResponse.create(newAttrs));
102 mServer.setGetRequestHandler(mGetRequestHandler);
103 mClient.getRemoteAttributes(mOnRemoteAttributesReceivedListener);
105 verify(mGetRequestHandler, timeout(1000)).onGetRequested(
106 any(RcsRequest.class), any(RcsResourceAttributes.class));
108 verify(mOnRemoteAttributesReceivedListener, timeout(1000))
109 .onAttributesReceived(eq(newAttrs), anyInt());
112 public void testSetRequestHandlerCalledIfReceived() throws RcsException {
113 setSetRequestHandlerReturn(RcsSetResponse.defaultAction());
115 mServer.setSetRequestHandler(mSetRequestHandler);
117 mClient.setRemoteAttributes(new RcsResourceAttributes(),
118 mOnRemoteAttributesReceivedListener);
120 verify(mSetRequestHandler, timeout(1000)).onSetRequested(
121 any(RcsRequest.class), any(RcsResourceAttributes.class));
124 public void testIgnoreSetRequestIfSetRequestHandlerReturnsIgnore()
125 throws RcsException {
126 setSetRequestHandlerReturn(RcsSetResponse.ignore());
128 mServer.setSetRequestHandler(mSetRequestHandler);
130 RcsResourceAttributes newAttrs = new RcsResourceAttributes();
131 newAttrs.put(KEY, new RcsValue(RAW_VALUE + 1));
133 mClient.setRemoteAttributes(newAttrs,
134 mOnRemoteAttributesReceivedListener);
136 verify(mSetRequestHandler, timeout(1000))
137 .onSetRequested(any(RcsRequest.class), eq(newAttrs));
139 assertEquals(RAW_VALUE, mServer.getAttributeValue(KEY).asInt());
142 public void testAcceptSetRequestIfSetRequestHandlerReturnsAccept()
143 throws RcsException {
144 setSetRequestHandlerReturn(RcsSetResponse.accept());
146 mServer.setSetRequestHandlerPolicy(SetRequestHandlerPolicy.NEVER);
147 mServer.setSetRequestHandler(mSetRequestHandler);
149 RcsResourceAttributes newAttrs = new RcsResourceAttributes();
150 newAttrs.put(NEW_KEY, new RcsValue(RAW_VALUE + 1));
152 mClient.setRemoteAttributes(newAttrs,
153 mOnRemoteAttributesReceivedListener);
155 verify(mSetRequestHandler, timeout(1000))
156 .onSetRequested(any(RcsRequest.class), eq(newAttrs));
158 assertEquals(RAW_VALUE + 1, mServer.getAttributeValue(NEW_KEY).asInt());
161 public void testSetRequestHandlerCanReturnCustomAttrsAsResponse()
162 throws RcsException {
163 final RcsResourceAttributes newAttrs = new RcsResourceAttributes();
164 newAttrs.put(NEW_KEY, new RcsValue(RAW_VALUE + 1));
166 setSetRequestHandlerReturn(RcsSetResponse.create(newAttrs));
168 mServer.setSetRequestHandler(mSetRequestHandler);
169 mClient.setRemoteAttributes(new RcsResourceAttributes(),
170 mOnRemoteAttributesReceivedListener);
172 verify(mSetRequestHandler, timeout(1000)).onSetRequested(
173 any(RcsRequest.class), any(RcsResourceAttributes.class));
175 verify(mOnRemoteAttributesReceivedListener, timeout(1000))
176 .onAttributesReceived(eq(newAttrs), anyInt());
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);
185 mServer.addAttributeUpdatedListener(KEY, mOnAttributeUpdatedListener);
186 mClient.setRemoteAttributes(newAttrs,
187 mOnRemoteAttributesReceivedListener);
189 verify(mOnAttributeUpdatedListener, timeout(1000))
190 .onAttributeUpdated(eq(VALUE), eq(newValue));
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);
199 mServer.addAttributeUpdatedListener(KEY, mOnAttributeUpdatedListener);
200 mServer.removeAttribute(KEY);
201 mClient.setRemoteAttributes(newAttrs,
202 mOnRemoteAttributesReceivedListener);
204 verify(mOnAttributeUpdatedListener, never())
205 .onAttributeUpdated(eq(VALUE), eq(newValue));
208 public void testThrowIfObjectIsDestroyed() throws RcsException {
211 mServer.removeAttribute("");
212 fail("No exception thrown");
213 } catch (RcsDestroyedObjectException e) {