package org.societies.android.platform.pubsub.helper.container.test;
import java.util.Collections;
import java.util.List;
import org.societies.android.api.comms.IMethodCallback;
import org.societies.android.api.comms.xmpp.CommunicationException;
import org.societies.android.api.comms.xmpp.XMPPError;
import org.societies.android.api.pubsub.IPubsubClient;
import org.societies.android.api.pubsub.ISubscriber;
import org.societies.android.platform.pubsub.helper.PubsubHelper;
import org.societies.api.identity.IIdentity;
import org.societies.api.identity.IdentityType;
import org.societies.api.schema.cssmanagement.CssEvent;
import android.test.AndroidTestCase;
import android.test.suitebuilder.annotation.MediumTest;
import android.util.Log;
/**
* The test suite tests the Pubsub helper class and its interaction with the remote Android Societies Pubsub 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 AVD must be configured so that the XMPP_DOMAIN value is valid
* 4. The Android Client or Login Tester app must have already logged in successfully
*
* Consult http://xmpp.org/extensions/xep-0060.html (Pubsub XMPP XEP) for more details especially
* on Pubsub error messages (SEND_IQ_ERROR)
*/
public class TestAndroidPubsubHelper extends AndroidTestCase {
private static final int DELAY = 10000;
private static final String LOG_TAG = TestAndroidPubsubHelper.class.getName();
private static final String XMPP_DOMAIN = "societies.bespoke";
private static final String XMPP_IDENTIFIER = "alan";
private static final String XMPP_SUCCESSFUL_CLOUD_NODE = XMPP_IDENTIFIER + "." + XMPP_DOMAIN;
public static final String ADD_CSS_NODE = "addCSSNode";
public static final String ADD_CSS_NODE_DESC = "Additional node available on CSS";
public static final String DEPART_CSS_NODE = "departCSSNode";
public static final String DEPART_CSS_NODE_DESC = "Existing node no longer available on CSS";
//Test Nodes
public static final String TEST_PUBSUB_NODE_1 = "testSocietiesNode_11";
public static final String TEST_PUBSUB_NODE_2 = "testSocietiesNode_21";
public static final String PUBSUB_NODE_ITEM_ID = "testPubsub2013";
private static final String PUBSUB_CLASS = "org.societies.api.schema.cssmanagement.CssEvent";
private static final List<String> classList = Collections.singletonList(PUBSUB_CLASS);
private boolean testCompleted;
protected void setUp() throws Exception {
super.setUp();
}
protected void tearDown() throws Exception {
super.tearDown();
}
@MediumTest
public void testBindToPubsubService() throws Exception {
this.testCompleted = false;
final PubsubHelper helper = new PubsubHelper(getContext());
helper.setSubscriberCallback(new EventSubscriber());
helper.addSimpleClasses(classList);
helper.bindPubsubService(new IMethodCallback() {
@Override
public void returnAction(String result) {
fail();
}
@Override
public void returnAction(boolean resultFlag) {
assertTrue(resultFlag);
if (resultFlag) {
helper.unbindCommsService(new IMethodCallback() {
@Override
public void returnAction(String arg0) {
fail();
}
@Override
public void returnAction(boolean result) {
assertTrue(result);
TestAndroidPubsubHelper.this.testCompleted = true;
}
@Override
public void returnException(String arg0) {
// TODO Auto-generated method stub
}
});
}
}
@Override
public void returnException(String arg0) {
// TODO Auto-generated method stub
}
});
Thread.sleep(DELAY);
assertTrue(this.testCompleted);
}
@MediumTest
public void testOwnerCreateDelete() throws Exception {
this.testCompleted = false;
final PubsubHelper helper = new PubsubHelper(getContext());
helper.setSubscriberCallback(new EventSubscriber());
helper.addSimpleClasses(classList);
helper.bindPubsubService(new IMethodCallback() {
@Override
public void returnAction(String result) {
fail();
}
@Override
public void returnAction(boolean flag) {
assertTrue(flag);
try {
helper.ownerCreate(new TestIdentity(), TEST_PUBSUB_NODE_1, new IMethodCallback() {
@Override
public void returnAction(String result) {
assertNotNull(result);
try {
helper.ownerDelete(new TestIdentity(), TEST_PUBSUB_NODE_1, new IMethodCallback() {
@Override
public void returnAction(String result) {
assertNotNull(result);
helper.unbindCommsService(new IMethodCallback() {
@Override
public void returnAction(String arg0) {
}
@Override
public void returnAction(boolean result) {
assertTrue(result);
TestAndroidPubsubHelper.this.testCompleted = true;
}
@Override
public void returnException(
String arg0) {
// TODO Auto-generated method stub
}
});
}
@Override
public void returnAction(boolean arg0) {
fail();
}
@Override
public void returnException(String arg0) {
// TODO Auto-generated method stub
}
});
} catch (XMPPError e) {
// TODO Auto-generated catch block
e.printStackTrace();
fail();
} catch (CommunicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
fail();
}
}
@Override
public void returnAction(boolean result) {
fail();
}
@Override
public void returnException(String arg0) {
// TODO Auto-generated method stub
}
});
} catch (XMPPError e) {
e.printStackTrace();
fail();
} catch (CommunicationException e) {
e.printStackTrace();
fail();
}
}
@Override
public void returnException(String arg0) {
// TODO Auto-generated method stub
}
});
Thread.sleep(DELAY);
assertTrue(this.testCompleted);
}
@MediumTest
public void testSubscribeToNode() throws Exception {
this.testCompleted = false;
final PubsubHelper helper = new PubsubHelper(getContext());
helper.setSubscriberCallback(new EventSubscriber());
helper.addSimpleClasses(classList);
helper.bindPubsubService(new IMethodCallback() {
@Override
public void returnAction(String result) {
fail();
}
@Override
public void returnAction(boolean resultFlag) {
assertTrue(resultFlag);
if (resultFlag) {
try {
helper.subscriberSubscribe(new TestIdentity(), ADD_CSS_NODE, new IMethodCallback() {
@Override
public void returnAction(String result) {
try {
assertNotNull(result);
helper.subscriberUnsubscribe(new TestIdentity(), ADD_CSS_NODE, new IMethodCallback() {
@Override
public void returnAction(String result) {
assertNotNull(result);
helper.unbindCommsService(new IMethodCallback() {
@Override
public void returnAction(String arg0) {
fail();
}
@Override
public void returnAction(boolean result) {
assertTrue(result);
TestAndroidPubsubHelper.this.testCompleted = true;
}
@Override
public void returnException(
String arg0) {
// TODO Auto-generated method stub
}
});
}
@Override
public void returnAction(boolean result) {
fail();
}
@Override
public void returnException(String arg0) {
// TODO Auto-generated method stub
}
});
} catch (XMPPError e) {
// TODO Auto-generated catch block
e.printStackTrace();
fail();
} catch (CommunicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
fail();
}
}
@Override
public void returnAction(boolean result) {
fail();
}
@Override
public void returnException(String arg0) {
// TODO Auto-generated method stub
}
});
} catch (XMPPError e) {
// TODO Auto-generated catch block
e.printStackTrace();
fail();
} catch (CommunicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
fail();
}
}
}
@Override
public void returnException(String arg0) {
// TODO Auto-generated method stub
}
});
Thread.sleep(DELAY);
assertTrue(this.testCompleted);
}
@MediumTest
public void testSendCatchEvent() throws Exception {
this.testCompleted = false;
final PubsubHelper helper = new PubsubHelper(getContext());
helper.setSubscriberCallback(new EventSubscriber());
helper.addSimpleClasses(classList);
helper.bindPubsubService(new IMethodCallback() {
@Override
public void returnAction(String result) {
fail();
}
@Override
public void returnAction(boolean flag) {
assertTrue(flag);
try {
helper.ownerCreate(new TestIdentity(), TEST_PUBSUB_NODE_2, new IMethodCallback() {
@Override
public void returnAction(String result) {
assertNotNull(result);
try {
helper.subscriberSubscribe(new TestIdentity(), TEST_PUBSUB_NODE_2, new IMethodCallback() {
@Override
public void returnAction(boolean result) {
fail();
}
@Override
public void returnAction(String result) {
assertNotNull(result);
try {
helper.publisherPublish(new TestIdentity(), TEST_PUBSUB_NODE_2, PUBSUB_NODE_ITEM_ID, getCssEvent(), new IMethodCallback() {
@Override
public void returnAction(String result) {
assertNotNull(result);
try {
helper.subscriberUnsubscribe(new TestIdentity(), TEST_PUBSUB_NODE_2, new IMethodCallback() {
@Override
public void returnAction(boolean result) {
fail();
}
@Override
public void returnAction(String result) {
assertNotNull(result);
try {
helper.ownerDelete(new TestIdentity(), TEST_PUBSUB_NODE_2, new IMethodCallback() {
@Override
public void returnAction(String result) {
assertNotNull(result);
helper.unbindCommsService(new IMethodCallback() {
@Override
public void returnAction(String arg0) {
fail();
}
@Override
public void returnAction(boolean result) {
assertTrue(result);
TestAndroidPubsubHelper.this.testCompleted = true;
}
@Override
public void returnException(
String arg0) {
// TODO Auto-generated method stub
}
});
}
@Override
public void returnAction(boolean arg0) {
}
@Override
public void returnException(
String arg0) {
// TODO Auto-generated method stub
}
});
} catch (XMPPError e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CommunicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void returnException(
String arg0) {
// TODO Auto-generated method stub
}
});
} catch (XMPPError e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CommunicationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void returnAction(boolean arg0) {
fail();
}
@Override
public void returnException(
String arg0) {
// TODO Auto-generated method stub
}
});
} catch (XMPPError e) {
e.printStackTrace();
fail();
} catch (CommunicationException e) {
e.printStackTrace();
fail();
}
}
@Override
public void returnException(String arg0) {
// TODO Auto-generated method stub
}
});
} catch (XMPPError e) {
e.printStackTrace();
fail();
} catch (CommunicationException e) {
e.printStackTrace();
fail();
}
}
@Override
public void returnAction(boolean arg0) {
fail();
}
@Override
public void returnException(String arg0) {
// TODO Auto-generated method stub
}
});
} catch (XMPPError e) {
e.printStackTrace();
fail();
} catch (CommunicationException e) {
e.printStackTrace();
fail();
}
}
@Override
public void returnException(String arg0) {
// TODO Auto-generated method stub
}
});
Thread.sleep(DELAY);
assertTrue(this.testCompleted);
}
private CssEvent getCssEvent() {
CssEvent event = new CssEvent();
event.setDescription("TestCssEvent");
event.setType("PubsubTester");
return event;
}
private class TestSubscriber implements ISubscriber {
@Override
public void pubsubEvent(IIdentity arg0, String arg1, String arg2,
Object arg3) {
}
}
private class TestIdentity implements IIdentity {
@Override
public String getBareJid() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getDomain() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getIdentifier() {
// TODO Auto-generated method stub
return null;
}
@Override
public String getJid() {
return XMPP_SUCCESSFUL_CLOUD_NODE;
}
@Override
public IdentityType getType() {
// TODO Auto-generated method stub
return null;
}
}
private class EventSubscriber implements ISubscriber {
@Override
public void pubsubEvent(IIdentity pubsubServiceID, String node, String itemId, Object item) {
Log.d(TestAndroidPubsubHelper.LOG_TAG, "Event Node: " + node);
Log.d(TestAndroidPubsubHelper.LOG_TAG, "Event ID: " + itemId);
Log.d(TestAndroidPubsubHelper.LOG_TAG, "Event Payload: " + Object.class.getName());
}
}
}