package mobisocial.test; import java.util.Arrays; import java.util.HashSet; import java.util.Random; import mobisocial.crypto.IBHashedIdentity.Authority; import mobisocial.crypto.IBIdentity; import mobisocial.musubi.encoding.IncomingMessage; import mobisocial.musubi.encoding.OutgoingMessage; import mobisocial.musubi.model.MObject; import mobisocial.musubi.model.helpers.IdentitiesManager; import android.database.Cursor; import android.database.sqlite.SQLiteCursor; import android.database.sqlite.SQLiteCursorDriver; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteQuery; import android.test.AndroidTestCase; import android.util.Log; public abstract class TestBase extends AndroidTestCase { protected String TAG = "MusubiTestBase"; protected Random r = new Random(); private final HashSet<String> usedNames = new HashSet<String>(); protected String randomUniquePrincipal() { for(;;) { int length = r.nextInt(16); StringBuilder sb = new StringBuilder(); for(int i = 0; i < length; ++i) { char c = (char) ('a' + r.nextInt('z' - 'a')); sb.append(c); } sb.append("@gmail.com"); String result = sb.toString(); if(usedNames.contains(result)) continue; usedNames.add(result); return result; } } protected IBIdentity randomIBIdentity() { String principal = randomUniquePrincipal(); long temporalFrame = IdentitiesManager.computeTemporalFrameFromPrincipal(principal); return new IBIdentity(Authority.Email, principal, temporalFrame); } public class DebugSQLiteCursorFactory implements CursorFactory { private boolean debugQueries = true; public DebugSQLiteCursorFactory() { debugQueries = true; } public DebugSQLiteCursorFactory(boolean debugQueries) { this.debugQueries = debugQueries; } @Override public Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery, String editTable, SQLiteQuery query) { if (debugQueries) { Log.d("SQL", query.toString()); } return new SQLiteCursor(db, masterQuery, editTable, query); } } protected void assertMessagesEqual(OutgoingMessage om, IncomingMessage im) { assertTrue(Arrays.equals(om.data_, im.data_)); assertEquals(om.recipients_.length, im.recipients_.length); for(int i = 0; i < im.recipients_.length; ++i) { assertTrue(Arrays.equals(im.recipients_[i].principalHash_, om.recipients_[i].principalHash_)); assertEquals(im.recipients_[i].type_, om.recipients_[i].type_); } assertTrue(Arrays.equals(om.fromIdentity_.principalHash_, im.fromIdentity_.principalHash_)); assertEquals(im.fromIdentity_.type_, om.fromIdentity_.type_); } protected void assertObjectsEqual(MObject a, MObject b) { if (a.equals(b)) { return; } assertEquals(a.id_, b.id_); assertEquals(a.feedId_, b.feedId_); assertEquals(a.identityId_, b.identityId_); assertEquals(a.deviceId_, b.deviceId_); assertTrue(a.parentId_ == null && b.parentId_ == null || a.parentId_.equals(b.parentId_)); assertEquals(a.appId_, b.appId_); assertEquals(a.timestamp_, b.timestamp_); assertTrue(Arrays.equals(a.universalHash_, b.universalHash_)); assertEquals(a.shortUniversalHash_, b.shortUniversalHash_); assertEquals(a.type_, b.type_); assertTrue(a.json_ == null && b.json_ == null || a.json_.equals(b.json_)); assertTrue(a.raw_ == null && b.raw_ == null || Arrays.equals(a.raw_, b.raw_)); assertTrue(a.intKey_ == null && b.intKey_ == null || a.intKey_.equals(b.intKey_)); assertTrue(a.stringKey_ == null && b.stringKey_ == null || a.stringKey_.equals(b.stringKey_)); assertEquals(a.lastModifiedTimestamp_, b.lastModifiedTimestamp_); assertTrue(a.encodedId_ == null && b.encodedId_ == null || a.encodedId_.equals(b.encodedId_)); assertEquals(a.deleted_, b.deleted_); assertEquals(a.renderable_, b.renderable_); assertEquals(a.processed_, b.processed_); } }