package mobisocial.musubi.feed;
import java.util.Arrays;
import java.util.Random;
import mobisocial.crypto.IBEncryptionScheme;
import mobisocial.crypto.IBHashedIdentity.Authority;
import mobisocial.crypto.IBIdentity;
import mobisocial.crypto.IBSignatureScheme;
import mobisocial.musubi.encoding.TransientTransportDataProvider;
import mobisocial.musubi.identity.UnverifiedIdentityProvider;
import mobisocial.musubi.model.MFeed;
import mobisocial.musubi.model.MIdentity;
import mobisocial.musubi.model.helpers.DatabaseFile;
import mobisocial.musubi.model.helpers.FeedManager;
import mobisocial.musubi.model.helpers.IdentitiesManager;
import mobisocial.musubi.model.helpers.MessageTransportManager;
import mobisocial.musubi.util.Util;
import mobisocial.test.TestBase;
import android.database.sqlite.SQLiteOpenHelper;
public class FixedFeedTest extends TestBase {
final String PRINCIPLE_PRINCIPAL = "bjdodson@cs.stanford.edu";
final IBIdentity me = new IBIdentity(Authority.Email, PRINCIPLE_PRINCIPAL, 0);
final IBEncryptionScheme encryptionScheme_ = new IBEncryptionScheme();
final IBSignatureScheme signatureScheme_ = new IBSignatureScheme();
final TransientTransportDataProvider tdp = new TransientTransportDataProvider(
encryptionScheme_, signatureScheme_, me, null, null, null);
final UnverifiedIdentityProvider idp_ = new UnverifiedIdentityProvider();
protected void setUp() throws Exception {
}
public void testStableName() {
SQLiteOpenHelper dbh = new DatabaseFile(getContext(), null);
IBIdentity ib1 = new IBIdentity(Authority.Email, randomUniquePrincipal(), 0);
IBIdentity ib2 = new IBIdentity(Authority.Email, randomUniquePrincipal(), 0);
MIdentity id1 = tdp.addClaimedIdentity(ib1);
MIdentity id2 = tdp.addClaimedIdentity(ib2);
byte[] first, second;
MIdentity[] list = new MIdentity[2];
list[0] = id1;
list[1] = id2;
first = FeedManager.computeFixedIdentifier(list);
list[0] = id2;
list[1] = id1;
second = FeedManager.computeFixedIdentifier(list);
assertTrue(Arrays.equals(first, second));
dbh.close();
}
public void testFeedCreation() {
Random r = new Random();
SQLiteOpenHelper dbh = new DatabaseFile(getContext(), null);
long myDeviceName = r.nextLong();
IdentitiesManager idm = new IdentitiesManager(dbh);
MessageTransportManager mtm = new MessageTransportManager(dbh, idp_.getEncryptionScheme(),
idp_.getSignatureScheme(), myDeviceName);
MIdentity myid;
myid = mtm.addClaimedIdentity(me);
myid.owned_ = true;
myid.principal_ = me.principal_;
idm.updateIdentity(myid);
FeedManager fm = new FeedManager(dbh);
MIdentity[] participants = new MIdentity[3];
participants[0] = myid;
participants[1] = mtm.addClaimedIdentity(generateIBIdentity());
participants[2] = mtm.addClaimedIdentity(generateIBIdentity());
MFeed feed = fm.getOrCreateFixedFeed(participants);
// Verify returned row
byte[] capability = FeedManager.computeFixedIdentifier(participants);
assertTrue(Arrays.equals(capability, feed.capability_));
assertEquals((Long)Util.shortHash(feed.capability_), feed.shortCapability_);
// Do a lookup to make sure it's really in the database
MFeed lookup = fm.lookupFeed(feed.id_);
assertEquals(feed.id_, lookup.id_);
assertTrue(Arrays.equals(feed.capability_, lookup.capability_));
assertEquals(feed.shortCapability_, lookup.shortCapability_);
assertEquals((Long)Util.shortHash(feed.capability_), feed.shortCapability_);
}
IBIdentity generateIBIdentity() {
return new IBIdentity(Authority.Email, randomUniquePrincipal(), 0);
}
}