2 * Copyright 2016 Samsung Electronics All Rights Reserved.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.iotivity.service.ns.sample.consumer;
19 import android.app.Application;
20 import android.content.Context;
21 import android.support.test.runner.AndroidJUnit4;
22 import android.test.ApplicationTestCase;
23 import android.util.Log;
25 import org.iotivity.base.ModeType;
26 import org.iotivity.base.OcPlatform;
27 import org.iotivity.base.PlatformConfig;
28 import org.iotivity.base.QualityOfService;
29 import org.iotivity.base.ServiceType;
30 import org.iotivity.service.ns.common.Message;
31 import org.iotivity.service.ns.common.NSException;
32 import org.iotivity.service.ns.common.NSErrorCode;
33 import org.iotivity.service.ns.common.Topic;
34 import org.iotivity.service.ns.common.TopicsList;
35 import org.iotivity.service.ns.common.SyncInfo;
36 import org.iotivity.service.ns.consumer.ConsumerService;
37 import org.iotivity.service.ns.provider.ProviderService;
38 import org.iotivity.service.ns.consumer.Provider;
40 import org.junit.After;
41 import org.junit.Before;
42 import org.junit.BeforeClass;
43 import org.junit.Test;
44 import org.junit.runner.RunWith;
46 import java.util.Iterator;
47 import java.util.concurrent.CountDownLatch;
48 import java.util.concurrent.TimeUnit;
51 * To work on unit tests, switch the Test Artifact in the Build Variants view.
53 @RunWith(AndroidJUnit4.class)
54 public class ExampleUnitTest extends ApplicationTestCase<Application> {
55 public ExampleUnitTest() {
56 super(Application.class);
59 private static Context mContext = null;
60 private ProviderService gProviderRes;
61 private ProviderSimulator gProviderSimul;
62 private static ConsumerService gConsumerRes;
63 private static DiscoveryCallbackListener disCb;
64 private static ProviderCallbackListener provCb;
65 CountDownLatch lockObject;
67 private static String TAG = "ConsumerExample UnitTest";
69 public void startBefore(boolean subControllability) {
70 Log.i(TAG, "startConsumerBefore - IN");
72 gConsumerRes.start(disCb);
73 gProviderRes.start(gProviderSimul, gProviderSimul,
74 subControllability, "nothing", false);
75 lockObject.await(4000, TimeUnit.MILLISECONDS);
76 } catch (Exception e) {
79 Log.i(TAG, "startConsumerBefore - OUT");
82 public void startAfter(boolean subControllability) {
83 Log.i(TAG, "startConsumerAfter - IN");
85 gProviderRes.start(gProviderSimul, gProviderSimul,
86 subControllability, "nothing", false);
87 gConsumerRes.start(disCb);
88 lockObject.await(4000, TimeUnit.MILLISECONDS);
89 } catch (Exception e) {
92 Log.i(TAG, "startConsumerAfter - OUT");
95 public void setListener(Provider mProvider) {
97 mProvider.setListener(provCb, provCb, provCb);
98 } catch (Exception e) {
103 public void subscribe(Provider.ProviderState state) {
104 lockObject = new CountDownLatch(1);
105 response = new Response();
106 provCb.set(lockObject, response);
107 provCb.setState(state);
108 Provider mProvider = disCb.getProvider();
109 setListener(mProvider);
111 if (!mProvider.isSubscribed()) {
112 Log.i(TAG, "not subscribed");
113 mProvider.subscribe();
115 lockObject.await(4000, TimeUnit.MILLISECONDS);
116 } catch (Exception e) {
120 public void unsubscribe() {
121 lockObject = new CountDownLatch(1);
122 response = new Response();
123 provCb.set(lockObject, response);
124 provCb.setState(Provider.ProviderState.STOPPED);
125 Provider mProvider = disCb.getProvider();
126 setListener(mProvider);
128 if (mProvider.isSubscribed()) {
129 Log.i(TAG, "subscribed");
130 mProvider.unsubscribe();
132 lockObject.await(4000, TimeUnit.MILLISECONDS);
133 } catch (Exception e) {
138 public long sendMessage() {
139 lockObject = new CountDownLatch(1);
140 response = new Response();
141 provCb.set(lockObject, response);
142 org.iotivity.service.ns.common.Message msg = gProviderSimul
144 long Id = msg.getMessageId();
147 gProviderRes.sendMessage(msg);
148 lockObject.await(4000, TimeUnit.MILLISECONDS);
149 } catch (Exception e) {
155 public void sendSyncInfo(long id, SyncInfo.SyncType type) {
157 lockObject = new CountDownLatch(1);
158 response = new Response();
159 provCb.set(lockObject, response);
160 provCb.setType(type);
161 gProviderRes.sendSyncInfo(id, type);
162 lockObject.await(4000, TimeUnit.MILLISECONDS);
163 } catch (Exception e) {
168 public void providerSendSyncInfo(Provider provider, long id,
169 SyncInfo.SyncType type) {
171 lockObject = new CountDownLatch(1);
172 response = new Response();
173 provCb.set(lockObject, response);
174 provCb.setType(type);
175 provider.sendSyncInfo(id, type);
176 lockObject.await(4000, TimeUnit.MILLISECONDS);
177 } catch (Exception e) {
182 public void registerTopic(String topic) {
183 lockObject = new CountDownLatch(1);
184 response = new Response();
185 provCb.set(lockObject, response);
186 provCb.setState(Provider.ProviderState.TOPIC);
188 gProviderRes.registerTopic(topic);
189 lockObject.await(4000, TimeUnit.MILLISECONDS);
190 } catch (Exception e) {
196 public static void Initialize() {
197 PlatformConfig platformConfig = new PlatformConfig(mContext,
198 ServiceType.IN_PROC, ModeType.CLIENT_SERVER, "0.0.0.0",
199 0, // Uses randomly available port
200 QualityOfService.LOW);
202 OcPlatform.Configure(platformConfig);
204 OcPlatform.stopPresence(); // Initialize OcPlatform
205 } catch (Exception e) {
211 public void SetUp() {
212 Log.i(TAG, "SetUp - IN");
213 disCb = new DiscoveryCallbackListener();
214 provCb = new ProviderCallbackListener();
215 gConsumerRes = ConsumerService.getInstance();
216 gProviderRes = ProviderService.getInstance();
217 gProviderSimul = new ProviderSimulator();
218 lockObject = new CountDownLatch(1);
219 response = new Response();
220 disCb.set(lockObject, response);
221 Log.i(TAG, "SetUp - OUT");
225 public void TearDown() {
226 Log.i(TAG, "TearDown - IN");
230 lockObject = new CountDownLatch(1);
231 lockObject.await(2000, TimeUnit.MILLISECONDS);
232 } catch (Exception e) {
235 Log.i(TAG, "TearDown - OUT");
239 public void DiscoverProviderWithNonAccepterWhenStartedConsumerFirst() {
241 assertEquals(true, response.get());
245 public void DiscoverProviderWithNonAccepterWhenStartedConsumerAfter() {
247 assertEquals(true, response.get());
251 public void DiscoverProviderWithNonAccepterWhenRescan() {
253 assertEquals(true, response.get());
255 gConsumerRes.rescanProvider();
256 } catch (Exception e) {
259 assertEquals(true, response.get());
263 public void ExpectSubscribeSuccess() {
265 assertEquals(true, response.get());
267 Provider.ProviderState state = Provider.ProviderState.ALLOW;
269 assertEquals(true, response.get());
272 public void ExpectUnSubscribeSuccess() {
274 assertEquals(true, response.get());
276 Provider.ProviderState state = Provider.ProviderState.ALLOW;
278 assertEquals(true, response.get());
280 assertEquals(true, response.get());
283 public void ExpectReceiveNotification() {
285 assertEquals(true, response.get());
287 Provider.ProviderState state = Provider.ProviderState.ALLOW;
289 assertEquals(true, response.get());
292 assertEquals(true, response.get());
297 public void DiscoverProviderWithAccepterisProvider() {
299 assertEquals(true, response.get());
303 public void ExpectReceiveNotificationWithAccepterisProvider() {
305 assertEquals(true, response.get());
307 Provider mProvider = disCb.getProvider();
308 setListener(mProvider);
311 assertEquals(true, response.get());
315 public void ExpectCallbackReadCheckWhenProviderNotifySync() {
317 assertEquals(true, response.get());
319 Provider mProvider = disCb.getProvider();
320 setListener(mProvider);
322 long id = sendMessage();
323 assertEquals(true, response.get());
325 sendSyncInfo(id, SyncInfo.SyncType.READ);
326 assertEquals(true, response.get());
330 public void ExpectCallbackDismissCheckWhenProviderNotifySync() {
332 assertEquals(true, response.get());
334 Provider mProvider = disCb.getProvider();
335 setListener(mProvider);
337 long id = sendMessage();
338 assertEquals(true, response.get());
340 sendSyncInfo(id, SyncInfo.SyncType.DELETED);
341 assertEquals(true, response.get());
345 public void ExpectCallbackReadCheckWhenConsumerPostSync() {
347 assertEquals(true, response.get());
349 Provider mProvider = disCb.getProvider();
350 setListener(mProvider);
352 long id = sendMessage();
353 assertEquals(true, response.get());
355 providerSendSyncInfo(mProvider, id, SyncInfo.SyncType.READ);
356 assertEquals(true, response.get());
360 public void ExpectCallbackDismissCheckWhenConsumerPostSync() {
362 assertEquals(true, response.get());
364 Provider mProvider = disCb.getProvider();
365 setListener(mProvider);
367 long id = sendMessage();
368 assertEquals(true, response.get());
370 providerSendSyncInfo(mProvider, id, SyncInfo.SyncType.DELETED);
371 assertEquals(true, response.get());
375 public void ExpectCallbackTopicUpdated() {
377 assertEquals(true, response.get());
379 Provider mProvider = disCb.getProvider();
380 setListener(mProvider);
382 registerTopic("OIC_TOPIC1");
383 assertEquals(true, response.get());
387 public void ExpectEQTopicList() {
389 assertEquals(true, response.get());
391 Provider mProvider = disCb.getProvider();
392 setListener(mProvider);
395 registerTopic("OIC_TOPIC1");
396 assertEquals(true, response.get());
397 registerTopic("OIC_TOPIC2");
398 assertEquals(true, response.get());
399 registerTopic("OIC_TOPIC3");
400 assertEquals(true, response.get());
402 response = new Response();
403 Iterator<Topic> it = mProvider.getTopicList().getTopicsList()
405 Iterator<Topic> it2 = gProviderRes.getRegisteredTopicList()
406 .getTopicsList().iterator();
407 while (it.hasNext()) {
408 Topic element = it.next();
409 Topic element2 = it2.next();
410 Log.i(TAG, element2.getTopicName());
411 if (!element.getTopicName().equals(element2.getTopicName())) {
417 } catch (Exception e) {
420 assertEquals(true, response.get());
424 public void ExpectFailUpdateTopicOnConsumer() {
426 assertEquals(true, response.get());
428 Provider mProvider = disCb.getProvider();
429 setListener(mProvider);
431 registerTopic("OIC_TOPIC1");
432 assertEquals(true, response.get());
435 TopicsList list = mProvider.getTopicList();
436 Iterator<Topic> it = list.getTopicsList().iterator();
437 while (it.hasNext()) {
438 Topic element = it.next();
439 element.setState(Topic.TopicState.SUBSCRIBED);
441 mProvider.updateTopicList(list);
442 } catch (NSException e) {
444 assertEquals(NSErrorCode.ERROR, e.getErrorCode());
449 public void ExpectCallbackStoppedProvider() {
451 assertEquals(true, response.get());
453 Provider mProvider = disCb.getProvider();
454 setListener(mProvider);
456 lockObject = new CountDownLatch(1);
457 response = new Response();
458 provCb.set(lockObject, response);
459 provCb.setState(Provider.ProviderState.STOPPED);
463 lockObject.await(4000, TimeUnit.MILLISECONDS);
464 } catch (Exception e) {
468 assertEquals(true, response.get());
473 class DiscoveryCallbackListener
474 implements ConsumerService.OnProviderDiscoveredListener {
475 private CountDownLatch mLockObject;
476 private Response mResponse;
477 private Provider mProvider;
478 private static String TAG = "UnitTest DiscoveryCallbackListener";
480 public void set(CountDownLatch lockObject, Response response) {
481 mLockObject = lockObject;
482 mResponse = response;
485 public Provider getProvider() {
490 public void onProviderDiscovered(Provider provider) {
491 Log.i(TAG, provider.getProviderId());
492 mProvider = provider;
493 if (mResponse != null) {
494 Log.i(TAG, "onProviderDiscovered: Lock released");
496 mLockObject.countDown();
501 class ProviderCallbackListener implements Provider.OnProviderStateListener,
502 Provider.OnMessageReceivedListener, Provider.OnSyncInfoReceivedListener {
504 private CountDownLatch mLockObject;
505 private Response mResponse;
506 private Provider.ProviderState mState;
507 private SyncInfo.SyncType mType;
509 private static String TAG = "UnitTest ProviderCallbackListener";
511 public void set(CountDownLatch lockObject, Response response) {
512 mLockObject = lockObject;
513 mResponse = response;
516 public void setState(Provider.ProviderState state) {
520 public void setId(long id) {
524 void setType(SyncInfo.SyncType type) {
529 public void onProviderStateReceived(Provider.ProviderState state) {
530 Log.i(TAG, "onProviderStateReceived: " + state);
531 if (mState == state) {
532 Log.i(TAG, "onProviderStateReceived: Lock released");
534 mLockObject.countDown();
540 public void onMessageReceived(org.iotivity.service.ns.common.Message msg) {
541 Log.i(TAG, "onMessageReceived: " + msg.getMessageId());
542 if (mId == msg.getMessageId()) {
543 Log.i(TAG, "onMessageReceived: Lock released");
545 mLockObject.countDown();
550 public void onSyncInfoReceived(SyncInfo syncInfo) {
551 Log.i(TAG, "onSyncInfoReceived: " + syncInfo.getState());
552 if (mType == syncInfo.getState()) {
553 Log.i(TAG, "onSyncInfoReceived: Lock released");
555 mLockObject.countDown();
561 private boolean state;
567 public void set(boolean val) {
571 public boolean get() {