Merge test folder of test branch
[iotivity.git] / test / src / tc / re / junit / src / org / iotivity / test / re / tc / stc / REServerBuilderTest.java
1 //******************************************************************
2 //
3 // Copyright 2016 Samsung Electronics All Rights Reserved.
4 //
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 //
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
10 //
11 //      http://www.apache.org/licenses/LICENSE-2.0
12 //
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.
18 //
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20
21 package org.iotivity.test.re.tc.stc;
22
23 import org.iotivity.test.re.tc.helper.REAPIHelper;
24
25 import static org.iotivity.test.re.tc.helper.ResourceUtil.*;
26
27 import org.iotivity.service.RcsException;
28 import org.iotivity.service.RcsDestroyedObjectException;
29 import org.iotivity.service.RcsResourceAttributes;
30 import org.iotivity.service.RcsValue;
31 import org.iotivity.service.server.RcsGetResponse;
32 import org.iotivity.service.server.RcsRequest;
33 import org.iotivity.service.server.RcsResourceObject;
34 import org.iotivity.service.server.RcsResourceObject.AutoNotifyPolicy;
35 import org.iotivity.service.server.RcsResourceObject.GetRequestHandler;
36 import org.iotivity.service.server.RcsResourceObject.SetRequestHandler;
37 import org.iotivity.service.server.RcsResourceObject.SetRequestHandlerPolicy;
38 import org.iotivity.service.server.RcsSetResponse;
39 import android.test.InstrumentationTestCase;
40 import android.util.Log;
41
42 public class REServerBuilderTest extends InstrumentationTestCase {
43   private RcsResourceObject.Builder m_Builder;
44   private RcsResourceObject         m_ResourceObject;
45   private static final String       LOG_TAG = "RETest";
46   REAPIHelper                       m_REHelper;
47   int                               m_count = 10;
48
49   protected void setUp() throws Exception {
50     super.setUp();
51
52     m_REHelper = new REAPIHelper();
53
54     m_Builder = new RcsResourceObject.Builder(TEMP_SENSOR_URI,
55         TEMP_SENSOR_TYPE, DEFAULT_INTERFACE);
56
57     if (getName().equalsIgnoreCase("testSetDiscoverable_SQV_P")
58         || getName().equalsIgnoreCase("testSetObservable_SQV_P")) {
59       Log.i(LOG_TAG, "Found selected testcase");
60     } else {
61       RcsResourceAttributes attributes = new RcsResourceAttributes();
62       attributes.put(ATTR_KEY_POWER, ATTR_VALUE_POWER_ON);
63
64       m_Builder.setAttributes(attributes);
65
66       m_ResourceObject = m_Builder.build();
67
68       Log.i(LOG_TAG, "Resource created successfully");
69     }
70
71   }
72
73   protected void tearDown() throws Exception {
74     super.tearDown();
75
76     if (m_Builder != null) {
77       m_Builder = null;
78
79       Log.d(LOG_TAG, "Resource stopped successfully");
80     }
81
82     if (m_REHelper != null) {
83       m_REHelper = null;
84     }
85
86     if (m_ResourceObject != null) {
87       m_ResourceObject.destroy();
88     }
89
90     Log.d(LOG_TAG, "tearDown() called for REServerBuilderTest");
91   }
92
93   private GetRequestHandler mGetRequestHandler = new GetRequestHandler() {
94     @Override
95     public RcsGetResponse onGetRequested(RcsRequest request,
96         RcsResourceAttributes attrs) {
97       Log.d(LOG_TAG, "Got a Get request from client, send default response "
98           + "URI : " + request.getResourceUri());
99
100       return RcsGetResponse.defaultAction();
101     }
102   };
103
104   private SetRequestHandler mSetRequestHandler = new SetRequestHandler() {
105     @Override
106     public RcsSetResponse onSetRequested(RcsRequest request,
107         RcsResourceAttributes attrs) {
108       Log.d(LOG_TAG,
109           "Got a Set request from client, send default response URI: "
110               + request.getResourceUri());
111
112       return RcsSetResponse.defaultAction();
113     }
114   };
115
116   /**
117    * @since 2015-11-06
118    * @see None
119    * @objective Test 'Builder' constructor with positive basic way
120    * @target Builder(String uri, String resourceType, String resourceInterface)
121    * @test_data None
122    * @pre_condition None
123    * @procedure Make Builder class with valid value
124    * @post_condition None
125    * @expected No crash occurs
126    **/
127   public void testBuilder_SQV_P() {
128     boolean isBuilderNull = true;
129     try {
130       RcsResourceObject.Builder builder;
131       builder = new RcsResourceObject.Builder(TEMP_SENSOR_URI, TEMP_SENSOR_TYPE,
132           DEFAULT_INTERFACE);
133
134       m_REHelper.waitInSecond(2);
135
136       if (builder != null) {
137         isBuilderNull = false;
138         Log.i(LOG_TAG, "Builder is not null");
139         builder = null;
140       }
141     } catch (NullPointerException e) {
142       fail("Throw NullPointerException when called Builder API. "
143           + e.getLocalizedMessage());
144     }
145
146     if (isBuilderNull) {
147       fail("RcsResourceObject is not constructed.");
148     }
149   }
150
151   /**
152    * @since 2015-11-06
153    * @see None
154    * @objective Test 'setDiscoverable' function with positive basic way
155    * @target Builder setDiscoverable(boolean isDiscoverable)
156    * @test_data discoverable = true
157    * @pre_condition Builder class should be initialized
158    * @procedure 1. Perform setDiscoverable() API 2. Perform isDiscoverable() API
159    * @post_condition None
160    * @expected Returned builder should not be null
161    **/
162   public void testSetDiscoverable_SQV_P() {
163     boolean discoverable = true;
164
165     try {
166       m_Builder.setDiscoverable(discoverable);
167
168       m_ResourceObject = m_Builder.build();
169
170       boolean isDiscoverable = m_ResourceObject.isDiscoverable();
171
172       if (discoverable != isDiscoverable) {
173         fail("Discoverable is not setted using setDiscoverable API.");
174       }
175     } catch (Exception e) {
176       fail("Unable to set discoverable to true, exception is "
177           + e.getLocalizedMessage());
178     }
179   }
180
181   /**
182    * @since 2015-11-06
183    * @see None
184    * @objective Test 'setObservable' function with positive basic way
185    * @target Builder setObservable(boolean isObservable)
186    * @test_data observable = true
187    * @pre_condition Builder class should be initialized
188    * @procedure 1. Perform setObservable() API 2. Perform isObservable()
189    * @post_condition None
190    * @expected Returned builder should not be null
191    **/
192   public void testSetObservable_SQV_P() {
193     Boolean observable = true;
194
195     try {
196       m_Builder.setObservable(observable);
197
198       m_ResourceObject = m_Builder.build();
199
200       boolean isObservable = m_ResourceObject.isObservable();
201
202       if (observable != isObservable) {
203         fail("Observable is not setted using setObservable API.");
204       }
205     } catch (Exception e) {
206       fail("Unable to set observable to true, exception is "
207           + e.getLocalizedMessage());
208     }
209   }
210
211   /**
212    * @since 2015-11-06
213    * @see None
214    * @objective Test 'setAttributes' function with positive basic way
215    * @target Builder setAttributes(RcsResourceAttributes attributes)
216    * @test_data Resource Attributes, "Power" "On"
217    * @pre_condition Builder class should be initialized
218    * @procedure 1. Perform setAttributes API 2. Perform getAttributes()
219    * @post_condition None
220    * @expected Should not throw any exception
221    **/
222   public void testSetAttributes_SQV_P() {
223     RcsResourceAttributes attrs = new RcsResourceAttributes();
224     attrs.put(ATTR_KEY_POWER, ATTR_VALUE_POWER_ON);
225
226     try {
227       m_Builder.setAttributes(attrs);
228
229       RcsResourceAttributes rAttributes = m_ResourceObject.getAttributes();
230
231       if (attrs.get(ATTR_KEY_POWER) == rAttributes.get(ATTR_KEY_POWER)) {
232         fail("Atrribute is not same as set value.");
233       }
234     } catch (Exception e) {
235       fail("Unable to set Resource Attributes, exception is : "
236           + e.getLocalizedMessage());
237     }
238   }
239
240   /**
241    * @since 2015-11-06
242    * @see None
243    * @objective Test 'setAttributes' function with empty attribute value
244    * @target Builder setAttributes(RcsResourceAttributes attributes)
245    * @test_data empty Resource Attribute Value
246    * @pre_condition Builder class should be initialized
247    * @procedure 1. Perform setAttributes API 2. Perform getAttributes()
248    * @post_condition None
249    * @expected Should throw exception
250    **/
251   public void testSetAttributes_EG_N() {
252     RcsResourceAttributes attrs = new RcsResourceAttributes();
253     attrs.put(ATTR_KEY_POWER, "");
254
255     try {
256       m_Builder.setAttributes(attrs);
257
258       RcsResourceAttributes rAttributes = m_ResourceObject.getAttributes();
259
260       if (attrs.get(ATTR_KEY_POWER) == rAttributes.get(ATTR_KEY_POWER)) {
261         fail("Atrribute is not same as set value.");
262       }
263     } catch (Exception e) {
264       fail("Unable to set Resource Attributes, exception is : "
265           + e.getLocalizedMessage());
266     }
267   }
268
269   /**
270    * @since 2015-11-06
271    * @see None
272    * @objective Test 'setAttribute' function with positive basic way
273    * @target void setAttribute(String key, RcsValue value)
274    * @test_data 1. key = "Power" 2. value = "On"
275    * @pre_condition 1. Builder class should be initialized 2. Resource object
276    *                should be built
277    * @procedure 1. Perform getAttributeValue() API 2. Perform setAttribute() API
278    * @post_condition None
279    * @expected The API should not generate exception
280    **/
281   public void testSetAttribute_SQV_P() {
282     RcsValue value = new RcsValue(ATTR_VALUE_POWER_ON);
283
284     try {
285       m_ResourceObject.setAttribute(ATTR_KEY_POWER, value);
286
287       RcsValue rValue = m_ResourceObject.getAttributeValue(ATTR_KEY_POWER);
288
289       if (value.asString().compareTo(rValue.asString()) != 0) {
290         fail("Set value is not same as received value.");
291       }
292     } catch (RcsException e) {
293       fail("Unable to set attribute, exception occurred: "
294           + e.getLocalizedMessage());
295     }
296   }
297
298   /**
299    * @since 2015-11-06
300    * @see None
301    * @objective Test 'setAttribute' function with empty key
302    * @target void setAttribute(String key, RcsValue value)
303    * @test_data 1. key = "" 2. value = "On"
304    * @pre_condition 1. Builder class should be initialized 2. Resource object
305    *                should be built
306    * @procedure 1. Perform setAttribute() API 2. Perform getAttributeValue() API
307    * @post_condition None
308    * @expected The API should generate NullPointerException exception
309    **/
310   public void testSetAttribute_EG_N() {
311     try {
312       RcsValue rcsValue = new RcsValue(ATTR_VALUE_POWER_ON);
313       m_ResourceObject.setAttribute("", rcsValue);
314
315       RcsValue rValue = m_ResourceObject.getAttributeValue("");
316
317       Log.d(LOG_TAG, "value " + rValue);
318
319       if (rcsValue.asString().compareTo(rValue.asString()) != 0) {
320         fail("Set value is not same as received value.");
321       }
322     } catch (RcsException e) {
323       fail("Got RcsException at SetAttribute_N. Exception: "
324           + e.getLocalizedMessage());
325     }
326   }
327
328   /**
329    * @since 2015-11-06
330    * @see None
331    * @objective Test 'containsAttribute' function with positive basic way
332    * @target boolean containsAttribute(String key)
333    * @test_data key = "Temperature"
334    * @pre_condition 1. Builder class should be initialized 2. Resource object
335    *                should be built
336    * @procedure 1. Perform setAttribute() API 2. Perform containsAttribute() API
337    *            using key
338    * @post_condition None
339    * @expected The returned value should be true
340    **/
341   public void testHasAttribute_SQV_P() {
342     try {
343       RcsValue value = new RcsValue(ATTR_VALUE_POWER_ON);
344       m_ResourceObject.setAttribute(ATTR_KEY_POWER, value);
345
346       boolean hasAttribute = m_ResourceObject.containsAttribute(ATTR_KEY_POWER);
347
348       if (hasAttribute == false) {
349         fail("\"" + ATTR_KEY_POWER + "\"" + " attribute is not available.");
350       }
351     } catch (RcsException e) {
352       fail("Got RcsException while calling containsAttribute API with "
353           + ATTR_KEY_POWER + "key. Exception is: " + e.getLocalizedMessage());
354     }
355   }
356
357   /**
358    * @since 2016-07-25
359    * @see None
360    * @objective Test 'containsAttribute' function with empty key
361    * @target boolean containsAttribute(String key)
362    * @test_data key = ""
363    * @pre_condition 1. Builder class should be initialized 2. Resource object
364    *                should be built
365    * @procedure 1. Perform setAttribute() API with empty string value 2. Perform
366    *            containsAttribute() API using empty key
367    * @post_condition None
368    * @expected The API should not throw exception
369    **/
370   public void testContainsAttribute_ESV_N() {
371
372     try {
373       RcsValue value = new RcsValue(ATTR_VALUE_POWER_ON);
374       m_ResourceObject.setAttribute(DEFAULT_EMPTY_STRING_VALUE, value);
375
376       boolean hasAttribute = m_ResourceObject
377           .containsAttribute(DEFAULT_EMPTY_STRING_VALUE);
378
379       if (hasAttribute == false) {
380         fail("\"" + DEFAULT_EMPTY_STRING_VALUE + "\""
381             + " attribute is not available.");
382       }
383     } catch (Exception e) {
384         fail("Unexpected exception found..!!");
385     }
386   }
387
388   /**
389    * @since 2016-07-25
390    * @see None
391    * @objective Test 'setAutoNotifyPolicy' & 'getAutoNotifyPolicy' functions
392    *            with sequential validation
393    * @target 1. void setAutoNotifyPolicy(AutoNotifyPolicy policy) 2.
394    *         AutoNotifyPolicy getAutoNotifyPolicy()
395    * @test_data policy = NEVER, ALWAYS and UPDATED
396    * @pre_condition 1. Builder class should be initialized 2. Resource object
397    *                should be built
398    * @procedure 1. Perform setAutoNotifyPolicy() and getAutoNotifyPolicy() API
399    *            with multiple policies
400    * @post_condition None
401    * @expected Should not occur any exception.
402    **/
403   public void testSetGetAutoNotifyPolicy_SQV_P() {
404     try {
405       m_ResourceObject.setAutoNotifyPolicy(AutoNotifyPolicy.NEVER);
406       m_ResourceObject.getAutoNotifyPolicy();
407
408     } catch (Exception e) {
409       fail("Exception occurs when calling setAutoNotifyPolicy API with NEVER.");
410     }
411
412     try {
413       m_ResourceObject.setAutoNotifyPolicy(AutoNotifyPolicy.ALWAYS);
414       m_ResourceObject.getAutoNotifyPolicy();
415
416     } catch (Exception e) {
417       fail(
418           "Exception occurs when calling setAutoNotifyPolicy API with ALWAYS.");
419     }
420
421     try {
422       m_ResourceObject.setAutoNotifyPolicy(AutoNotifyPolicy.UPDATED);
423       m_ResourceObject.getAutoNotifyPolicy();
424
425     } catch (Exception e) {
426       fail(
427           "Exception occurs when calling setAutoNotifyPolicy API with UPDATED.");
428     }
429   }
430
431   /**
432    * @since 2016-07-25
433    * @see None
434    * @objective Test 'setSetRequestHandlerPolicy' and
435    *            'getSetRequestHandlerPolicy' functions with sequential
436    *            validation
437    * @target 1. void setSetRequestHandlerPolicy(SetRequestHandlerPolicy policy)
438    *         2. SetRequestHandlerPolicy getSetRequestHandlerPolicy()
439    * @test_data policy = NEVER, ACCEPT
440    * @pre_condition 1. Builder class should be initialized 2. Resource object
441    *                should be built
442    * @procedure Perform setSetRequestHandlerPolicy() and
443    *            getSetRequestHandlerPolicy() API with multiple policies
444    * @post_condition None
445    * @expected Should not occur exception.
446    **/
447   public void testSetSetGetRequestHandlerPolicy_SQV_P() {
448     try {
449       m_ResourceObject
450       .setSetRequestHandlerPolicy(SetRequestHandlerPolicy.NEVER);
451       m_ResourceObject.getSetRequestHandlerPolicy();
452
453     } catch (Exception e) {
454       fail(
455           "Exception occurs when calling setSetRequestHandlerPolicy API with NEVER.");
456     }
457
458     try {
459       m_ResourceObject
460       .setSetRequestHandlerPolicy(SetRequestHandlerPolicy.ACCEPT);
461       m_ResourceObject.getSetRequestHandlerPolicy();
462
463     } catch (Exception e) {
464       fail(
465           "Exception occurs when calling setSetRequestHandlerPolicy API with ACCEPT.");
466     }
467   }
468
469   /**
470    * @since 2015-11-06
471    * @see None
472    * @objective Test 'containsAttribute' function with positive basic way
473    * @target boolean containsAttribute(String key)
474    * @test_data key = "power"
475    * @pre_condition 1. Builder class should be initialized 2. Resource object
476    *                should be built
477    * @procedure 1. Perform removeAttribute() API 2. Perform containsAttribute() API
478    *            using key
479    * @post_condition None
480    * @expected The returned value should be false
481    **/
482   public void testRemoveAttributeAndContainsAttribute_SQV_P() {
483     try {
484       boolean isRemoved = m_ResourceObject.removeAttribute(ATTR_KEY_POWER);
485       if(!isRemoved){
486         fail("Can't remove attribute key=power.");
487       }
488
489       boolean hasAttribute = m_ResourceObject.containsAttribute(ATTR_KEY_POWER);
490
491       if (hasAttribute) {
492         fail("\"" + ATTR_KEY_POWER + "\"" + " attribute alredy removed.");
493       }
494     } catch (RcsException e) {
495       fail("Got RcsException while calling removeAttribute/containsAttribute API with "
496           + ATTR_KEY_POWER + "key. Exception is: " + e.getLocalizedMessage());
497     }
498   }
499
500 }