package org.societies.android.platform.content.container.test; import java.util.ArrayList; import org.societies.android.api.contentproviders.CSSContentProvider; import org.societies.android.api.internal.cssmanager.CSSManagerEnums; import org.societies.android.platform.content.CssRecordDAO; import org.societies.android.platform.content.ProviderImplementation; import org.societies.api.schema.cssmanagement.CssNode; import org.societies.api.schema.cssmanagement.CssRecord; import android.content.ContentProvider; import android.content.SharedPreferences; import android.database.Cursor; import android.preference.PreferenceManager; import android.test.ProviderTestCase2; import android.test.mock.MockContentResolver; import android.test.suitebuilder.annotation.MediumTest; import android.util.Log; public class TestCSSContainerProvider extends ProviderTestCase2<ProviderImplementation> { private final static String LOG_TAG = TestCSSContainerProvider.class.getName(); private static final String PROVIDER_AUTHORITY = "org.societies.android.platform.content.androidcssmanager"; private final static String SOCIETIES_DATABASE_NAME = "TestSocietiesAndroidClient"; private final static int SOCIETIES_DATABASE_VERSION = 1; private final static String CURRENT_NODE_1_IDENTITY = "alan@societies.bespoke/android1"; private final static String CURRENT_NODE_2_IDENTITY = "alan@societies.bespoke/rich1"; private final static String CURRENT_NODE_3_IDENTITY = "alan.societies.bespoke"; private final static String CURRENT_NODE_1_MACADDR = "11:11:11:11:11"; private final static String CURRENT_NODE_2_MACADDR = "22:11:11:11:11"; private final static String CURRENT_NODE_3_MACADDR = "33:11:11:11:11"; private final static String CURRENT_NODE_1_INTERACTABLE = "true"; private final static String CURRENT_NODE_2_INTERACTABLE = "true"; private final static String CURRENT_NODE_3_INTERACTABLE = "false"; private final static String ARCHIVED_NODE_1_IDENTITY = "alan@societies.bespoke/android11"; private final static String ARCHIVED_NODE_2_IDENTITY = "alan@societies.bespoke/rich1222"; public static final String TEST_IDENTITY = "alan.socities.local"; public static final String TEST_INACTIVE_DATE = "20121029"; public static final String TEST_REGISTERED_DATE = "20120229"; public static final int TEST_UPTIME = 7799; public static final String TEST_EMAIL = "somebody@tssg.org"; public static final String TEST_FORENAME = "4Name"; public static final String TEST_HOME_LOCATION = "The Hearth"; public static final String TEST_HOSTING_LOCATION = "Dublin"; public static final String TEST_IDENTITY_NAME = "Id Name"; public static final String TEST_IM_ID = "somebody.tssg.org"; public static final String TEST_NAME = "The CSS"; public static final String TEST_PASSWORD = "P455W0RD"; public static final String TEST_SOCIAL_URI = "sombody@fb.com"; public static final String TEST_DOMAIN_SERVER = "societies.bespoke"; public static final String TEST_POSITION = "operative"; public static final String TEST_WORKPLACE = "the Grindstone"; public static final String TEST_UPDATE_IDENTITY = "alan.socities.bespoke"; public static final String TEST_UPDATE_INACTIVE_DATE = "20131029"; public static final String TEST_UPDATE_REGISTERED_DATE = "20130229"; public static final int TEST_UPDATE_UPTIME = 77967; public static final String TEST_UPDATE_EMAIL = "somebody@tssg.net"; public static final String TEST_UPDATE_FORENAME = "4NameFore"; public static final String TEST_UPDATE_HOME_LOCATION = "The Hearthiest"; public static final String TEST_UPDATE_HOSTING_LOCATION = "Dubliner"; public static final String TEST_UPDATE_IDENTITY_NAME = "Id Nameest"; public static final String TEST_UPDATE_IM_ID = "somebody.tssg.orgy"; public static final String TEST_UPDATE_NAME = "The Other CSS"; public static final String TEST_UPDATE_PASSWORD = "P455Wweird"; public static final String TEST_UPDATE_SOCIAL_URI = "sombody@fb.net"; public static final String TEST_UPDATE_DOMAIN_SERVER = "societies.bespookiest"; public static final String TEST_UPDATE_POSITION = "operativeUnderling"; public static final String TEST_UPDATE_WORKPLACE = "the Slow Grindstone "; //Preferences private static final String USER_VALUE = "paranoid"; private static final String XMPP_SERVER = "societies.bespoke"; private static final String DOMAIN_AUTHORITY_VALUE = "daNode.societies.bespoke"; private static final String NODE_JID_RESOURCE = "Nexus403"; CssRecordDAO cssDAO; public TestCSSContainerProvider() { super(ProviderImplementation.class, PROVIDER_AUTHORITY); } protected void setUp() throws Exception { super.setUp(); //Create shared preferences for later use SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getContext().getApplicationContext()); SharedPreferences.Editor editor = settings.edit(); editor.putString(CSSContentProvider.CssPreferences.CSS_USER_PREFERENCE, USER_VALUE); editor.putString(CSSContentProvider.CssPreferences.CSS_XMPP_SERVER, XMPP_SERVER); editor.putString(CSSContentProvider.CssPreferences.CSS_DOMAIN_AUTHORITY, DOMAIN_AUTHORITY_VALUE); editor.putString(CSSContentProvider.CssPreferences.CSS_CURRENT_NODE_JID, NODE_JID_RESOURCE); editor.commit(); ContentProvider provider = getProvider(); assertNotNull(provider); //populate test database this.cssDAO = new CssRecordDAO(getMockContext()); this.cssDAO.insertCSSRecord(getCssRecord()); } protected void tearDown() throws Exception { this.cssDAO.updateCSSRecord(new CssRecord()); super.tearDown(); } @MediumTest public void testUseIllegalUri() throws Exception { MockContentResolver resolver = getMockContentResolver(); assertNotNull(resolver); try { resolver.query(CSSContentProvider.CONTENT_URI, null, null, null, null); fail(); } catch (IllegalArgumentException e) { assertEquals("Unknown URI: content://org.societies.android.platform.content.androidcssmanager", e.getMessage()); } } @MediumTest public void testGetCssRecord() throws Exception { MockContentResolver resolver = getMockContentResolver(); assertNotNull(resolver); String columns [] = {CSSContentProvider.CssRecord.CSS_RECORD_CSS_IDENTITY, CSSContentProvider.CssRecord.CSS_RECORD_DOMAIN_SERVER, CSSContentProvider.CssRecord.CSS_RECORD_NAME}; try { Cursor cursor = resolver.query(CSSContentProvider.CssRecord.CONTENT_URI, columns, null, null, null); assertNotNull(cursor); assertEquals(1, cursor.getCount()); assertEquals(columns.length, cursor.getColumnCount()); cursor.moveToFirst(); assertEquals(TEST_IDENTITY, cursor.getString(cursor.getColumnIndex(CSSContentProvider.CssRecord.CSS_RECORD_CSS_IDENTITY))); assertEquals(TEST_DOMAIN_SERVER, cursor.getString(cursor.getColumnIndex(CSSContentProvider.CssRecord.CSS_RECORD_DOMAIN_SERVER))); assertEquals(TEST_NAME, cursor.getString(cursor.getColumnIndex(CSSContentProvider.CssRecord.CSS_RECORD_NAME))); cursor.close(); } catch (IllegalArgumentException e) { fail(); } } @MediumTest public void testCurrentCssNodes() throws Exception { MockContentResolver resolver = getMockContentResolver(); assertNotNull(resolver); String columns [] = {CSSContentProvider.CssNodes.CSS_NODE_IDENTITY, CSSContentProvider.CssNodes.CSS_NODE_STATUS, CSSContentProvider.CssNodes.CSS_NODE_TYPE, CSSContentProvider.CssNodes.CSS_NODE_DEVICE_MAC_ADDRESS, CSSContentProvider.CssNodes.CSS_NODE_INTERACTABLE }; try { Cursor cursor = resolver.query(CSSContentProvider.CssNodes.CONTENT_URI, columns, null, null, null); assertNotNull(cursor); assertEquals(3, cursor.getCount()); assertEquals(columns.length, cursor.getColumnCount()); if (cursor.moveToFirst()) { do { Log.d(LOG_TAG, "Node identity: " + cursor.getString(cursor.getColumnIndex(CSSContentProvider.CssNodes.CSS_NODE_IDENTITY))); Log.d(LOG_TAG, "Node status: " + cursor.getInt(cursor.getColumnIndex(CSSContentProvider.CssNodes.CSS_NODE_STATUS))); Log.d(LOG_TAG, "Node type: " + cursor.getInt(cursor.getColumnIndex(CSSContentProvider.CssNodes.CSS_NODE_TYPE))); Log.d(LOG_TAG, "Node MAC: " + cursor.getInt(cursor.getColumnIndex(CSSContentProvider.CssNodes.CSS_NODE_DEVICE_MAC_ADDRESS))); Log.d(LOG_TAG, "Node Interactable: " + cursor.getInt(cursor.getColumnIndex(CSSContentProvider.CssNodes.CSS_NODE_INTERACTABLE))); } while (cursor.moveToNext()); } cursor.close(); } catch (IllegalArgumentException e) { fail(); } } @MediumTest public void testArchivedCssNodes() throws Exception { MockContentResolver resolver = getMockContentResolver(); assertNotNull(resolver); String columns [] = {CSSContentProvider.CssNodes.CSS_NODE_IDENTITY, CSSContentProvider.CssNodes.CSS_NODE_STATUS, CSSContentProvider.CssNodes.CSS_NODE_TYPE, CSSContentProvider.CssNodes.CSS_NODE_DEVICE_MAC_ADDRESS, CSSContentProvider.CssNodes.CSS_NODE_INTERACTABLE }; try { Cursor cursor = resolver.query(CSSContentProvider.CssArchivedNodes.CONTENT_URI, columns, null, null, null); assertNotNull(cursor); assertEquals(columns.length, cursor.getColumnCount()); assertEquals(2, cursor.getCount()); if (cursor.moveToFirst()) { do { Log.d(LOG_TAG, "Archived Node identity: " + cursor.getString(cursor.getColumnIndex(CSSContentProvider.CssNodes.CSS_NODE_IDENTITY))); Log.d(LOG_TAG, "Archived Node status: " + cursor.getInt(cursor.getColumnIndex(CSSContentProvider.CssNodes.CSS_NODE_STATUS))); Log.d(LOG_TAG, "Archived Node type: " + cursor.getInt(cursor.getColumnIndex(CSSContentProvider.CssNodes.CSS_NODE_TYPE))); Log.d(LOG_TAG, "Node MAC: " + cursor.getInt(cursor.getColumnIndex(CSSContentProvider.CssNodes.CSS_NODE_DEVICE_MAC_ADDRESS))); Log.d(LOG_TAG, "Node Interactable: " + cursor.getInt(cursor.getColumnIndex(CSSContentProvider.CssNodes.CSS_NODE_INTERACTABLE))); } while (cursor.moveToNext()); } cursor.close(); } catch (IllegalArgumentException e) { fail(); } } @MediumTest public void testCSSRecordDAO() throws Exception { assertTrue(this.cssDAO.cssRecordExists()); assertEquals(1, this.cssDAO.getCssRowId()); CssRecord cssRecord = this.cssDAO.readCSSrecord(); assertEquals(TEST_IDENTITY, cssRecord.getCssIdentity()); assertEquals(TEST_DOMAIN_SERVER, cssRecord.getDomainServer()); assertEquals(TEST_EMAIL, cssRecord.getEmailID()); assertEquals(TEST_FORENAME, cssRecord.getForeName()); assertEquals(CSSManagerEnums.entityType.Person.ordinal(), cssRecord.getEntity()); assertEquals(TEST_HOME_LOCATION, cssRecord.getHomeLocation()); assertEquals(TEST_NAME, cssRecord.getName()); assertEquals(TEST_PASSWORD, cssRecord.getPassword()); assertEquals(TEST_POSITION, cssRecord.getPosition()); assertEquals(CSSManagerEnums.genderType.Male.ordinal(), cssRecord.getSex()); assertEquals(TEST_WORKPLACE, cssRecord.getWorkplace()); } @MediumTest public void testUpdateCSSRecordDAO() throws Exception { assertTrue(this.cssDAO.cssRecordExists()); CssRecord cssRecord = new CssRecord(); assertEquals(1, this.cssDAO.getCssRowId()); cssRecord.setCssIdentity(TEST_UPDATE_IDENTITY); cssRecord.setDomainServer(TEST_UPDATE_DOMAIN_SERVER); cssRecord.setEmailID(TEST_UPDATE_EMAIL); cssRecord.setEntity(CSSManagerEnums.entityType.Organisation.ordinal()); cssRecord.setForeName(TEST_UPDATE_FORENAME); cssRecord.setHomeLocation(TEST_UPDATE_HOME_LOCATION); cssRecord.setName(TEST_UPDATE_NAME); cssRecord.setPassword(TEST_UPDATE_PASSWORD); cssRecord.setSex(CSSManagerEnums.genderType.Female.ordinal()); cssRecord.setPosition(TEST_UPDATE_POSITION); cssRecord.setWorkplace(TEST_UPDATE_WORKPLACE); this.cssDAO.updateCSSRecord(cssRecord); CssRecord updatedRecord = this.cssDAO.readCSSrecord(); assertEquals(TEST_UPDATE_IDENTITY, updatedRecord.getCssIdentity()); assertEquals(TEST_UPDATE_DOMAIN_SERVER, updatedRecord.getDomainServer()); assertEquals(TEST_UPDATE_EMAIL, updatedRecord.getEmailID()); assertEquals(TEST_UPDATE_FORENAME, updatedRecord.getForeName()); assertEquals(CSSManagerEnums.entityType.Organisation.ordinal(), updatedRecord.getEntity()); assertEquals(TEST_UPDATE_HOME_LOCATION, updatedRecord.getHomeLocation()); assertEquals(TEST_UPDATE_NAME, updatedRecord.getName()); assertEquals(TEST_UPDATE_PASSWORD, updatedRecord.getPassword()); assertEquals(TEST_UPDATE_POSITION, updatedRecord.getPosition()); assertEquals(CSSManagerEnums.genderType.Female.ordinal(), updatedRecord.getSex()); assertEquals(TEST_UPDATE_WORKPLACE, updatedRecord.getWorkplace()); } //Cannot be tested as MockContext fails at getPackageName() // @MediumTest // public void testPreferences() throws Exception { // MockContentResolver resolver = getMockContentResolver(); // assertNotNull(resolver); // // String columns [] = {CSSContentProvider.CssPreferences.CSS_USER_PREFERENCE, // CSSContentProvider.CssPreferences.CSS_XMPP_SERVER, // CSSContentProvider.CssPreferences.CSS_DOMAIN_AUTHORITY, // CSSContentProvider.CssPreferences.CSS_CURRENT_NODE_JID}; // try { // Cursor cursor = resolver.query(CSSContentProvider.CssPreferences.CONTENT_URI, columns, null, null, null); // assertNotNull(cursor); // assertEquals(columns.length, cursor.getColumnCount()); // assertEquals(1, cursor.getCount()); // cursor.moveToFirst(); // assertEquals(USER_VALUE, cursor.getString(cursor.getColumnIndex(CSSContentProvider.CssPreferences.CSS_USER_PREFERENCE))); // assertEquals(XMPP_SERVER, cursor.getString(cursor.getColumnIndex(CSSContentProvider.CssPreferences.CSS_XMPP_SERVER))); // assertEquals(DOMAIN_AUTHORITY_VALUE, cursor.getString(cursor.getColumnIndex(CSSContentProvider.CssPreferences.CSS_DOMAIN_AUTHORITY))); // assertEquals(NODE_JID_RESOURCE, cursor.getString(cursor.getColumnIndex(CSSContentProvider.CssPreferences.CSS_CURRENT_NODE_JID))); // cursor.close(); // // } catch (IllegalArgumentException e) { // fail(); // } // } /** * Get a populated CssRecord * * @return {@link CssRecord} */ private CssRecord getCssRecord() { CssNode currentNode_1 = new CssNode(); currentNode_1.setIdentity(CURRENT_NODE_1_IDENTITY); currentNode_1.setStatus(CSSManagerEnums.nodeStatus.Hibernating.ordinal()); currentNode_1.setType(CSSManagerEnums.nodeType.Android.ordinal()); currentNode_1.setCssNodeMAC(CURRENT_NODE_1_MACADDR); currentNode_1.setInteractable(CURRENT_NODE_1_INTERACTABLE); CssNode currentNode_2 = new CssNode(); currentNode_2.setIdentity(CURRENT_NODE_2_IDENTITY); currentNode_2.setStatus(CSSManagerEnums.nodeStatus.Available.ordinal()); currentNode_2.setType(CSSManagerEnums.nodeType.Rich.ordinal()); currentNode_2.setCssNodeMAC(CURRENT_NODE_2_MACADDR); currentNode_2.setInteractable(CURRENT_NODE_2_INTERACTABLE); CssNode currentNode_3 = new CssNode(); currentNode_3.setIdentity(CURRENT_NODE_3_IDENTITY); currentNode_3.setStatus(CSSManagerEnums.nodeStatus.Available.ordinal()); currentNode_3.setType(CSSManagerEnums.nodeType.Cloud.ordinal()); currentNode_3.setCssNodeMAC(CURRENT_NODE_3_MACADDR); currentNode_3.setInteractable(CURRENT_NODE_3_INTERACTABLE); ArrayList<CssNode> currentNodes = new ArrayList<CssNode>(); currentNodes.add(currentNode_1); currentNodes.add(currentNode_2); currentNodes.add(currentNode_3); CssNode archivedNode_1 = new CssNode(); archivedNode_1.setIdentity(ARCHIVED_NODE_1_IDENTITY); archivedNode_1.setStatus(CSSManagerEnums.nodeStatus.Hibernating.ordinal()); archivedNode_1.setType(CSSManagerEnums.nodeType.Android.ordinal()); archivedNode_1.setCssNodeMAC(CURRENT_NODE_1_MACADDR); archivedNode_1.setInteractable(CURRENT_NODE_1_INTERACTABLE); CssNode archivedNode_2 = new CssNode(); archivedNode_2.setIdentity(ARCHIVED_NODE_2_IDENTITY); archivedNode_2.setStatus(CSSManagerEnums.nodeStatus.Unavailable.ordinal()); archivedNode_2.setType(CSSManagerEnums.nodeType.Rich.ordinal()); archivedNode_2.setCssNodeMAC(CURRENT_NODE_2_MACADDR); archivedNode_2.setInteractable(CURRENT_NODE_2_INTERACTABLE); ArrayList<CssNode> archivedNodes = new ArrayList<CssNode>(); archivedNodes.add(archivedNode_1); archivedNodes.add(archivedNode_2); CssRecord cssRecord = new CssRecord(); cssRecord.setArchiveCSSNodes(archivedNodes); cssRecord.setCssNodes(currentNodes); cssRecord.setCssIdentity(TEST_IDENTITY); cssRecord.setDomainServer(TEST_DOMAIN_SERVER); cssRecord.setEmailID(TEST_EMAIL); cssRecord.setEntity(CSSManagerEnums.entityType.Person.ordinal()); cssRecord.setForeName(TEST_FORENAME); cssRecord.setHomeLocation(TEST_HOME_LOCATION); cssRecord.setName(TEST_NAME); cssRecord.setPassword(TEST_PASSWORD); cssRecord.setSex(CSSManagerEnums.genderType.Male.ordinal()); cssRecord.setPosition(TEST_POSITION); cssRecord.setWorkplace(TEST_WORKPLACE); return cssRecord; } }