package mobisocial.musubi.service; import java.util.Date; import java.util.Random; import mobisocial.crypto.IBIdentity; import mobisocial.musubi.identity.IdentityProvider; import mobisocial.musubi.identity.IdentityProviderException; import mobisocial.musubi.model.MEncodedMessage; import mobisocial.musubi.model.MIdentity; import mobisocial.musubi.model.MSignatureUserKey; import mobisocial.musubi.model.helpers.DatabaseFile; import mobisocial.musubi.model.helpers.EncodedMessageManager; import mobisocial.musubi.model.helpers.IdentitiesManager; import mobisocial.musubi.model.helpers.MessageTransportManager; import mobisocial.musubi.model.helpers.UserKeyManager; import android.content.ContentResolver; import android.content.Context; import android.database.ContentObserver; import android.database.sqlite.SQLiteOpenHelper; import android.net.Uri; import android.test.mock.MockContentResolver; public class AMQPListener { IBIdentity mMe; IdentityProvider mIdp; AMQPService mAMQP; SQLiteOpenHelper mDbh; Random r = new Random(); public AMQPListener(Context original_context, IdentityProvider idp, IBIdentity me) { mMe = me; mIdp = idp; //set up identity and signature user secret mDbh = new DatabaseFile(original_context, null); long myDeviceName0 = r.nextLong(); IdentitiesManager idm0 = new IdentitiesManager(mDbh); MessageTransportManager mtm0 = new MessageTransportManager(mDbh, mIdp.getEncryptionScheme(), mIdp.getSignatureScheme(), myDeviceName0); MIdentity myid0 = mtm0.addClaimedIdentity(me); myid0.owned_ = true; myid0.principal_ = me.principal_; idm0.updateIdentity(myid0); try { UserKeyManager sm0 = new UserKeyManager(mIdp.getEncryptionScheme(), mIdp.getSignatureScheme(), mDbh); MSignatureUserKey sigKey = new MSignatureUserKey(); sigKey.identityId_ = myid0.id_; IBIdentity required_key = me.at(mtm0.getSignatureTime(myid0)); sigKey.userKey_ = mIdp.syncGetSignatureKey(required_key).key_; sigKey.when_ = required_key.temporalFrame_; sm0.insertSignatureUserKey(sigKey); } catch (IdentityProviderException e) {} mAMQP = new AMQPService(mDbh) { @Override public ContentResolver getContentResolver() { return new MockContentResolver() { @Override public void notifyChange(Uri uri, ContentObserver observer) { //we dont need notifies because we aren't waking up the //obj decoder, we aren't being woken up by the obj encoder //and we don't need to listen for network status changes //during testing. } }; } }; } MEncodedMessage waitForNthMessage(long n, long millis) throws InterruptedException { EncodedMessageManager emm = new EncodedMessageManager(mDbh); long start = new Date().getTime(); for(;;) { if(new Date().getTime() - start > millis) break; //success if(emm.lookupById(n) != null) return emm.lookupById(n); Thread.sleep(1000); } return null; } public void destroy() { // if the internals change, this may need to change mAMQP.onDestroy(); mDbh.close(); } }