package org.societies.android.remote.helper.container.test;
import java.util.ArrayList;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import org.societies.android.api.comms.IMethodCallback;
import org.societies.android.api.events.IAndroidSocietiesEvents;
import org.societies.android.api.events.IPlatformEventsCallback;
import org.societies.android.api.events.PlatformEventsHelperNotConnectedException;
import org.societies.android.remote.helper.EventsHelper;
import org.societies.api.schema.cssmanagement.CssEvent;
import org.societies.api.schema.useragent.feedback.ExpFeedbackResultBean;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.MediumTest;
import android.util.Log;
/**
* The test suite tests the Societies Client app Events serverice helper class and its interaction with the remote Android Societies Events service.
*
* In order to run the tests contained in this class ensure that the following steps are taken:
*
* 1. An Openfire XMPP server must be running
* 2. A suitable AVD must be running
* 3. The Android Client app must have already logged in successfully
*
*/
public class TestEventsHelper extends AndroidTestCase {
private static final String LOG_TAG = TestEventsHelper.class.getName();
private static final int LATCH_TIME_OUT = 10000;
private static final String INTENTS_FILTER = "org.societies.android.css.manager";
private static final int NUM_FILTER_EVENTS = 2;
private static final String CSS_EVENT_TEST_DESCRIPTION = "test Css Event";
private static final String CSS_EVENT_TEST_TYPE = "test type";
private boolean testCompleted;
private long startTime;
protected void setUp() throws Exception {
super.setUp();
this.startTime = System.currentTimeMillis();
}
protected void tearDown() throws Exception {
Log.d(LOG_TAG, "Test duration: " + (System.currentTimeMillis() - this.startTime));
super.tearDown();
}
@MediumTest
public void testServiceConfiguration() throws Exception {
this.testCompleted = false;
final CountDownLatch latch = new CountDownLatch(1);
final EventsHelper helper = new EventsHelper(getContext());
helper.setUpService(new IMethodCallback() {
@Override
public void returnException(String exception) {
}
@Override
public void returnAction(String result) {
fail();
}
@Override
public void returnAction(boolean resultFlag) {
assertTrue(resultFlag);
helper.tearDownService(new IMethodCallback() {
@Override
public void returnException(String exception) {
}
@Override
public void returnAction(String result) {
fail();
}
@Override
public void returnAction(boolean resultFlag) {
assertTrue(resultFlag);
TestEventsHelper.this.testCompleted = true;
latch.countDown();
}
});
}
});
latch.await(LATCH_TIME_OUT, TimeUnit.MILLISECONDS);
assertTrue(this.testCompleted);
}
@MediumTest
public void testSubscribeToEvent() throws Exception {
this.testCompleted = false;
final CountDownLatch latch = new CountDownLatch(1);
final EventsHelper helper = new EventsHelper(getContext());
helper.setUpService(new IMethodCallback() {
@Override
public void returnException(String exception) {
}
@Override
public void returnAction(String result) {
fail();
}
@Override
public void returnAction(boolean resultFlag) {
assertTrue(resultFlag);
try {
helper.subscribeToEvent(IAndroidSocietiesEvents.CSS_MANAGER_ADD_CSS_NODE_INTENT, new IPlatformEventsCallback() {
@Override
public void returnException(int exception) {
}
@Override
public void returnAction(int result) {
fail();
}
@Override
public void returnAction(boolean resultFlag) {
assertTrue(resultFlag);
try {
helper.getNumSubscribedNodes(new IPlatformEventsCallback() {
@Override
public void returnException(int exception) {
}
@Override
public void returnAction(int result) {
assertEquals(1, result);
try {
helper.publishEvent(IAndroidSocietiesEvents.CSS_MANAGER_ADD_CSS_NODE_INTENT, getCssEvent(), new IPlatformEventsCallback() {
@Override
public void returnException(int exception) {
}
@Override
public void returnAction(int arg0) {
}
@Override
public void returnAction(boolean result) {
assertTrue(result);
try {
helper.unSubscribeFromEvent(IAndroidSocietiesEvents.CSS_MANAGER_ADD_CSS_NODE_INTENT, new IPlatformEventsCallback() {
@Override
public void returnException(int exception) {
}
@Override
public void returnAction(int result) {
fail();
}
@Override
public void returnAction(boolean resultFlag) {
assertTrue(resultFlag);
helper.tearDownService(new IMethodCallback() {
@Override
public void returnException(String exception) {
}
@Override
public void returnAction(String result) {
fail();
}
@Override
public void returnAction(boolean resultFlag) {
assertTrue(resultFlag);
TestEventsHelper.this.testCompleted = true;
latch.countDown();
}
});
}
});
} catch (PlatformEventsHelperNotConnectedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
} catch (PlatformEventsHelperNotConnectedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
@Override
public void returnAction(boolean resultFlag) {
fail();
}
});
} catch (PlatformEventsHelperNotConnectedException e) {
e.printStackTrace();
fail();
}
}
});
} catch (PlatformEventsHelperNotConnectedException e) {
e.printStackTrace();
fail();
}
}
});
latch.await(LATCH_TIME_OUT, TimeUnit.MILLISECONDS);
assertTrue(this.testCompleted);
}
@MediumTest
public void testSubscribeToEventWithComplexPayload() throws Exception {
this.testCompleted = false;
final CountDownLatch latch = new CountDownLatch(1);
final EventsHelper helper = new EventsHelper(getContext());
helper.setUpService(new IMethodCallback() {
@Override
public void returnException(String exception) {
}
@Override
public void returnAction(String result) {
fail();
}
@Override
public void returnAction(boolean resultFlag) {
assertTrue(resultFlag);
try {
helper.subscribeToEvent(IAndroidSocietiesEvents.CSS_MANAGER_ADD_CSS_NODE_INTENT, new IPlatformEventsCallback() {
@Override
public void returnException(int exception) {
}
@Override
public void returnAction(int result) {
fail();
}
@Override
public void returnAction(boolean resultFlag) {
assertTrue(resultFlag);
try {
helper.getNumSubscribedNodes(new IPlatformEventsCallback() {
@Override
public void returnException(int exception) {
}
@Override
public void returnAction(int result) {
assertEquals(1, result);
try {
helper.publishEvent(IAndroidSocietiesEvents.CSS_MANAGER_ADD_CSS_NODE_INTENT, getExpFeedbackResultBean(), new IPlatformEventsCallback() {
@Override
public void returnException(int exception) {
}
@Override
public void returnAction(int arg0) {
}
@Override
public void returnAction(boolean result) {
assertTrue(result);
try {
helper.unSubscribeFromEvent(IAndroidSocietiesEvents.CSS_MANAGER_ADD_CSS_NODE_INTENT, new IPlatformEventsCallback() {
@Override
public void returnException(int exception) {
}
@Override
public void returnAction(int result) {
fail();
}
@Override
public void returnAction(boolean resultFlag) {
assertTrue(resultFlag);
helper.tearDownService(new IMethodCallback() {
@Override
public void returnException(String exception) {
}
@Override
public void returnAction(String result) {
fail();
}
@Override
public void returnAction(boolean resultFlag) {
assertTrue(resultFlag);
TestEventsHelper.this.testCompleted = true;
latch.countDown();
}
});
}
});
} catch (PlatformEventsHelperNotConnectedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
} catch (PlatformEventsHelperNotConnectedException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
@Override
public void returnAction(boolean resultFlag) {
fail();
}
});
} catch (PlatformEventsHelperNotConnectedException e) {
e.printStackTrace();
fail();
}
}
});
} catch (PlatformEventsHelperNotConnectedException e) {
e.printStackTrace();
fail();
}
}
});
latch.await(LATCH_TIME_OUT, TimeUnit.MILLISECONDS);
assertTrue(this.testCompleted);
}
@MediumTest
public void testSubscribeToSomeEvents() throws Exception {
this.testCompleted = false;
final CountDownLatch latch = new CountDownLatch(1);
final EventsHelper helper = new EventsHelper(getContext());
helper.setUpService(new IMethodCallback() {
@Override
public void returnException(String exception) {
}
@Override
public void returnAction(String result) {
fail();
}
@Override
public void returnAction(boolean resultFlag) {
assertTrue(resultFlag);
try {
helper.subscribeToEvents(INTENTS_FILTER, new IPlatformEventsCallback() {
@Override
public void returnException(int exception) {
}
@Override
public void returnAction(int result) {
fail();
}
@Override
public void returnAction(boolean resultFlag) {
assertTrue(resultFlag);
try {
helper.getNumSubscribedNodes(new IPlatformEventsCallback() {
@Override
public void returnException(int exception) {
}
@Override
public void returnAction(int result) {
assertEquals(NUM_FILTER_EVENTS, result);
try {
helper.unSubscribeFromEvents(INTENTS_FILTER, new IPlatformEventsCallback() {
@Override
public void returnException(int exception) {
}
@Override
public void returnAction(int result) {
fail();
}
@Override
public void returnAction(boolean resultFlag) {
assertTrue(resultFlag);
helper.tearDownService(new IMethodCallback() {
@Override
public void returnException(String exception) {
}
@Override
public void returnAction(String result) {
fail();
}
@Override
public void returnAction(boolean resultFlag) {
assertTrue(resultFlag);
TestEventsHelper.this.testCompleted = true;
latch.countDown();
}
});
}
});
} catch (PlatformEventsHelperNotConnectedException e) {
e.printStackTrace();
fail();
}
}
@Override
public void returnAction(boolean resultFlag) {
fail();
}
});
} catch (PlatformEventsHelperNotConnectedException e) {
e.printStackTrace();
fail();
}
}
});
} catch (PlatformEventsHelperNotConnectedException e) {
e.printStackTrace();
fail();
}
}
});
latch.await(LATCH_TIME_OUT, TimeUnit.MILLISECONDS);
assertTrue(this.testCompleted);
}
@MediumTest
/**
* Try using the service with setting it up
* @throws Exception
*/
public void testIllegalServiceUsage() throws Exception {
this.testCompleted = false;
final CountDownLatch latch = new CountDownLatch(1);
final EventsHelper helper = new EventsHelper(getContext());
try {
helper.subscribeToAllEvents(new IPlatformEventsCallback() {
@Override
public void returnException(int exception) {
}
@Override
public void returnAction(int result) {
}
@Override
public void returnAction(boolean resultFlag) {
}
});
fail();
} catch (PlatformEventsHelperNotConnectedException p) {
assertNotNull(p);
this.testCompleted = true;
}
latch.await(LATCH_TIME_OUT, TimeUnit.MILLISECONDS);
assertTrue(this.testCompleted);
}
private static CssEvent getCssEvent() {
CssEvent event = new CssEvent();
event.setDescription(CSS_EVENT_TEST_DESCRIPTION);
event.setType(CSS_EVENT_TEST_TYPE);
return event;
}
private static ExpFeedbackResultBean getExpFeedbackResultBean() {
ExpFeedbackResultBean bean = new ExpFeedbackResultBean();
bean.setFeedback(new ArrayList<String>());
bean.setRequestId("requestID1111");
return bean;
}
}