package org.societies.android.platform.cismanager.test;
import java.util.ArrayList;
import java.util.List;
import org.societies.android.api.cis.management.ICisManager;
import org.societies.android.platform.cismanager.container.TestServiceCISManagerLocal;
import org.societies.android.platform.cismanager.container.TestServiceCISManagerLocal.LocalCISManagerBinder;
import org.societies.api.schema.cis.community.Community;
import org.societies.api.schema.cis.community.Criteria;
import org.societies.api.schema.cis.community.MembershipCrit;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.test.ServiceTestCase;
import android.test.suitebuilder.annotation.MediumTest;
import android.util.Log;
/**
* 1. Created identity must be deleted prior to test on XMPP server
* 2. Ensure that test data in test source matches XMPP server and Virgo details
*
*
*/
public class TestSocietiesCISManager extends ServiceTestCase<TestServiceCISManagerLocal> {
private static final String LOG_TAG = TestSocietiesCISManager.class.getName();
private static final String CLIENT = "org.societies.android.platform.cismanager.test";
private static final int DELAY = 10000;
private static final int TEST_END_DELAY = 2000;
//TEST VALUES
private static final String TEST_COMMUNITY_NAME = "Test NameXYZ";
private static final String TEST_COMMUNITY_DESC = "Test description for community XYZ";
private static final String TEST_COMMUNITY_TYPE = "community type";
private static final String TEST_PRIVACY_POLICY = "<privacy />";
private ICisManager cisManager;
private long testStartTime, testEndTime;
private boolean testCompleted;
public TestSocietiesCISManager() {
super(TestServiceCISManagerLocal.class);
}
protected void setUp() throws Exception {
super.setUp();
Intent commsIntent = new Intent(getContext(), TestServiceCISManagerLocal.class);
LocalCISManagerBinder binder = (LocalCISManagerBinder) bindService(commsIntent);
assertNotNull(binder);
this.cisManager = (ICisManager) binder.getService();
cisManager.startService();
Thread.sleep(DELAY);
}
protected void tearDown() throws Exception {
Thread.sleep(TEST_END_DELAY);
//ensure that service is shutdown to test if service leakage occurs
shutdownService();
super.tearDown();
}
@MediumTest
public void testCreateCIS() throws Exception {
this.testCompleted = false;
BroadcastReceiver receiver = this.setupBroadcastReceiver();
this.testStartTime = System.currentTimeMillis();
this.testEndTime = this.testStartTime;
Criteria crit1 = new Criteria();
crit1.setAttrib("Location");
crit1.setAttrib("=");
crit1.setRank(1);
crit1.setValue1("Paris");
crit1.setValue2("Paris");
List<Criteria> crits = new ArrayList<Criteria>();
MembershipCrit membership = new MembershipCrit();
membership.setCriteria(crits);
Log.d(LOG_TAG, "testCreateCIS start time: " + this.testStartTime);
try {
this.cisManager.createCis(CLIENT, TEST_COMMUNITY_NAME, TEST_COMMUNITY_TYPE, TEST_COMMUNITY_DESC, membership, TEST_PRIVACY_POLICY);
} catch (Exception e) {
Log.d(LOG_TAG, "");
}
Thread.sleep(DELAY);
//ensure that the broadcast receiver is shutdown to prevent more than one active receiver
unregisterReceiver(receiver);
assertTrue(this.testCompleted);
}
@MediumTest
public void testCreateCISMembershipNull() throws Exception {
this.testCompleted = false;
BroadcastReceiver receiver = this.setupBroadcastReceiver();
this.testStartTime = System.currentTimeMillis();
this.testEndTime = this.testStartTime;
Log.d(LOG_TAG, "testCreateCISMembershipNull start time: " + this.testStartTime);
try {
this.cisManager.createCis(CLIENT, TEST_COMMUNITY_NAME + "memberNull", TEST_COMMUNITY_TYPE, TEST_COMMUNITY_DESC, null, TEST_PRIVACY_POLICY);
} catch (Exception e) {
Log.d(LOG_TAG, "");
}
Thread.sleep(DELAY);
//ensure that the broadcast receiver is shutdown to prevent more than one active receiver
unregisterReceiver(receiver);
assertTrue(this.testCompleted);
}
@MediumTest
public void testCreateCISCriteriaNull() throws Exception {
this.testCompleted = false;
BroadcastReceiver receiver = this.setupBroadcastReceiver();
this.testStartTime = System.currentTimeMillis();
this.testEndTime = this.testStartTime;
MembershipCrit membership = new MembershipCrit();
Log.d(LOG_TAG, "testCreateCIS start time: " + this.testStartTime);
try {
this.cisManager.createCis(CLIENT, TEST_COMMUNITY_NAME, TEST_COMMUNITY_TYPE, TEST_COMMUNITY_DESC, membership, TEST_PRIVACY_POLICY);
} catch (Exception e) {
Log.d(LOG_TAG, "");
}
Thread.sleep(DELAY);
//ensure that the broadcast receiver is shutdown to prevent more than one active receiver
unregisterReceiver(receiver);
assertTrue(this.testCompleted);
}
@MediumTest
public void testListCommunities() throws Exception {
this.testCompleted = false;
BroadcastReceiver receiver = this.setupBroadcastReceiver();
this.testStartTime = System.currentTimeMillis();
this.testEndTime = this.testStartTime;
Log.d(LOG_TAG, "testCreateNewIdentity start time: " + this.testStartTime);
try {
this.cisManager.getCisList(CLIENT, "all");
} catch (Exception e) {
Log.d(LOG_TAG, "");
}
Thread.sleep(DELAY);
//ensure that the broadcast receiver is shutdown to prevent more than one active receiver
unregisterReceiver(receiver);
assertTrue(this.testCompleted);
}
/**
* Create a broadcast receiver
*
* @return the created broadcast receiver
*/
private BroadcastReceiver setupBroadcastReceiver() {
BroadcastReceiver receiver = null;
Log.d(LOG_TAG, "Set up Main broadcast receiver");
receiver = new MainReceiver();
getContext().registerReceiver(receiver, createTestIntentFilter());
Log.d(LOG_TAG, "Register Main broadcast receiver");
return receiver;
}
/**
* Unregister a broadcast receiver
* @param receiver
*/
private void unregisterReceiver(BroadcastReceiver receiver) {
Log.d(LOG_TAG, "Unregister broadcast receiver");
getContext().unregisterReceiver(receiver);
}
/**
* Broadcast receiver to receive intent return values from service method calls
*/
private class MainReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(LOG_TAG, "Received action: " + intent.getAction());
if (intent.getAction().equals(ICisManager.CREATE_CIS)) {
Community createdCommunity = intent.getParcelableExtra(ICisManager.INTENT_RETURN_VALUE);
assertNotNull(createdCommunity);
} else if (intent.getAction().equals(ICisManager.GET_CIS_LIST)) {
Community[] listing = (Community[]) intent.getParcelableArrayExtra(ICisManager.INTENT_RETURN_VALUE);
assertNotNull(listing);
for(Community cis: listing) {
Log.i(LOG_TAG, cis.getCommunityJid());
Log.i(LOG_TAG, cis.getCommunityName());
}
assertTrue(listing.length > 0);
}
//signal that test has completed
TestSocietiesCISManager.this.testCompleted = true;
TestSocietiesCISManager.this.testEndTime = System.currentTimeMillis();
Log.d(LOG_TAG, intent.getAction() + " elapse time: " + (TestSocietiesCISManager.this.testEndTime - TestSocietiesCISManager.this.testStartTime));
}
}
/**
* Create a suitable intent filter
* @return IntentFilter
*/
private IntentFilter createTestIntentFilter() {
//register broadcast receiver to receive SocietiesEvents return values
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ICisManager.CREATE_CIS);
intentFilter.addAction(ICisManager.GET_CIS_LIST);
intentFilter.addAction(ICisManager.GET_CIS_LIST);
intentFilter.addAction(ICisManager.INTENT_NOTSTARTED_EXCEPTION);
return intentFilter;
}
}