package mobisocial.test; import java.util.Date; import mobisocial.crypto.IBHashedIdentity.Authority; import mobisocial.musubi.App; import mobisocial.musubi.encoding.ObjEncoder; import mobisocial.musubi.feed.iface.DbEntryHandler; import mobisocial.musubi.feed.iface.FeedRenderer; import mobisocial.musubi.model.MApp; import mobisocial.musubi.model.MDevice; import mobisocial.musubi.model.MFeed; import mobisocial.musubi.model.MIdentity; import mobisocial.musubi.model.MObject; import mobisocial.musubi.model.helpers.AppManager; import mobisocial.musubi.model.helpers.DeviceManager; import mobisocial.musubi.model.helpers.FeedManager; import mobisocial.musubi.model.helpers.IdentitiesManager; import mobisocial.musubi.model.helpers.ObjectManager; import mobisocial.musubi.obj.ObjHelpers; import mobisocial.musubi.provider.MusubiContentProvider; import mobisocial.musubi.service.MusubiService; import mobisocial.musubi.util.Util; import mobisocial.socialkit.Obj; import android.app.Service; import android.content.Context; import android.content.Intent; import android.database.sqlite.SQLiteOpenHelper; import android.os.IBinder; import android.util.Log; public abstract class NMusubisTestBase extends NServicesTestCase { protected MockMusubiAppContext[] mContexts; protected Context mContext; protected SQLiteOpenHelper[] db; protected IdentitiesManager[] im; protected DeviceManager[] dm; protected ObjectManager[] om; protected FeedManager[] fm; protected AppManager[] am; protected MIdentity[][] me; protected MusubiService ms[]; @SuppressWarnings({ "rawtypes" }) private static Class[] makeClassList(int num) { Class[] c = new Class[num]; for(int i = 0; i < num; ++i) c[i] = MusubiService.class; return c; } @SuppressWarnings("unchecked") public NMusubisTestBase(int num) { super(makeClassList(num)); } @Override protected Context getContextForService(int index, Service service) { return mContexts[index]; } @Override protected Context getApplicationForService(int index, Service service) { return mContexts[index]; } @Override protected void setUp() throws Exception { mContext = getContext(); mContexts = new MockMusubiAppContext[2]; for(int i = 0; i < mContexts.length; ++i) { mContexts[i] = new MockMusubiAppContext(mContext); } super.setUp(); Intent startIntent[] = new Intent[] {new Intent(), new Intent()}; assertEquals(mContexts.length, startIntent.length); for(int i = 0; i < mContexts.length; ++i) startIntent[i].setClass(mContexts[i], MusubiService.class); IBinder[] b = bindService(startIntent); db = new SQLiteOpenHelper[mContexts.length]; im = new IdentitiesManager[mContexts.length]; dm = new DeviceManager[mContexts.length]; om = new ObjectManager[mContexts.length]; fm = new FeedManager[mContexts.length]; am = new AppManager[mContexts.length]; me = new MIdentity[mContexts.length][]; ms = new MusubiService[mContexts.length]; for(int i = 0; i < mContexts.length; ++i) { MusubiService musubi_service = ((MusubiService.MusubiServiceBinder)b[i]).getService(); ms[i] = musubi_service; db[i] = App.getDatabaseSource(musubi_service); im[i] = new IdentitiesManager(db[i]); dm[i] = new DeviceManager(db[i]); om[i] = new ObjectManager(db[i]); fm[i] = new FeedManager(db[i]); am[i] = new AppManager(db[i]); me[i] = new MIdentity[mContexts.length]; me[i][i] = new MIdentity(); me[i][i].type_ = Authority.Email; me[i][i].principal_ = randomUniquePrincipal(); me[i][i].principalHash_ = Util.sha256(me[i][i].principal_.getBytes()); me[i][i].principalShortHash_ = Util.shortHash(me[i][i].principalHash_); me[i][i].owned_ = true; me[i][i].claimed_ = true; im[i].insertIdentity(me[i][i]); mContexts[i].getContentResolver().notifyChange(MusubiService.OWNED_IDENTITY_AVAILABLE, null); } for(int i = 0; i < mContexts.length; ++i) { for(int j = 0; j < mContexts.length; ++j) { if(i == j) { continue; } me[i][j] = new MIdentity(); me[i][j].type_ = me[j][j].type_; me[i][j].principal_ = me[j][j].principal_; me[i][j].principalHash_ = me[j][j].principalHash_; me[i][j].principalShortHash_ = me[j][j].principalShortHash_; me[i][j].owned_ = false; im[i].insertIdentity(me[i][j]); } } } @Override protected void tearDown() throws Exception { if(ms != null) for(MusubiService s : ms) { s.shutdownThreads(); } super.tearDown(); } protected long insertObject(MockMusubiAppContext context, IdentitiesManager identitiesManager, DeviceManager deviceManager, ObjectManager objectManager, FeedManager feedManager, AppManager appManager, MFeed feed, MIdentity me, Obj obj) { MApp superApp = appManager.ensureApp(MusubiContentProvider.SUPER_APP_ID); MObject o = new MObject(); o.feedId_ = feed.id_; o.identityId_ = me.id_; o.appId_ = superApp.id_; o.timestamp_ = new Date().getTime(); ObjEncoder.populate(o, obj); MIdentity self = identitiesManager.getOwnedIdentities().get(0); Log.w(getName(), "device id value: " + deviceManager.getLocalDeviceName()); MDevice device = deviceManager.getDeviceForName(self.id_, deviceManager.getLocalDeviceName()); o.deviceId_ = device.id_; byte[] hash = new byte[] { 'b', 'o', 'g', 'u', 's', '!', '!', '!' }; o.universalHash_ = hash; o.shortUniversalHash_ = Util.shortHash(hash); o.lastModifiedTimestamp_ = o.timestamp_; o.processed_ = false; o.renderable_ = false; DbEntryHandler h = ObjHelpers.forType(o.type_); if (h instanceof FeedRenderer) { o.renderable_ = true; } objectManager.insertObject(o); context.getContentResolver().notifyChange(MusubiService.PLAIN_OBJ_READY, null); return o.id_; } }