Create Screenshot of Conversation for Manual

This commit is contained in:
Torsten Grote
2018-08-29 13:11:35 -03:00
parent 097d14b9a1
commit f0e2d5281f
9 changed files with 239 additions and 19 deletions

View File

@@ -2,6 +2,7 @@ package org.briarproject.briar.test;
import org.briarproject.bramble.api.FormatException;
import org.briarproject.bramble.api.client.ClientHelper;
import org.briarproject.bramble.api.client.ContactGroupFactory;
import org.briarproject.bramble.api.contact.Contact;
import org.briarproject.bramble.api.contact.ContactId;
import org.briarproject.bramble.api.contact.ContactManager;
@@ -13,15 +14,18 @@ import org.briarproject.bramble.api.db.DatabaseComponent;
import org.briarproject.bramble.api.db.DbException;
import org.briarproject.bramble.api.db.Transaction;
import org.briarproject.bramble.api.identity.AuthorFactory;
import org.briarproject.bramble.api.identity.AuthorId;
import org.briarproject.bramble.api.identity.IdentityManager;
import org.briarproject.bramble.api.identity.LocalAuthor;
import org.briarproject.bramble.api.lifecycle.IoExecutor;
import org.briarproject.bramble.api.nullsafety.NotNullByDefault;
import org.briarproject.bramble.api.plugin.BluetoothConstants;
import org.briarproject.bramble.api.plugin.LanTcpConstants;
import org.briarproject.bramble.api.plugin.TorConstants;
import org.briarproject.bramble.api.plugin.TransportId;
import org.briarproject.bramble.api.properties.TransportProperties;
import org.briarproject.bramble.api.properties.TransportPropertyManager;
import org.briarproject.bramble.api.sync.ClientId;
import org.briarproject.bramble.api.sync.Group;
import org.briarproject.bramble.api.sync.GroupId;
import org.briarproject.bramble.api.sync.MessageId;
@@ -30,10 +34,12 @@ import org.briarproject.briar.api.blog.Blog;
import org.briarproject.briar.api.blog.BlogManager;
import org.briarproject.briar.api.blog.BlogPost;
import org.briarproject.briar.api.blog.BlogPostFactory;
import org.briarproject.briar.api.blog.BlogSharingManager;
import org.briarproject.briar.api.client.MessageTracker;
import org.briarproject.briar.api.forum.Forum;
import org.briarproject.briar.api.forum.ForumManager;
import org.briarproject.briar.api.forum.ForumPost;
import org.briarproject.briar.api.forum.ForumSharingManager;
import org.briarproject.briar.api.messaging.MessagingManager;
import org.briarproject.briar.api.messaging.PrivateMessage;
import org.briarproject.briar.api.messaging.PrivateMessageFactory;
@@ -59,6 +65,7 @@ import static org.briarproject.bramble.util.StringUtils.getRandomString;
import static org.briarproject.briar.test.TestData.AUTHOR_NAMES;
import static org.briarproject.briar.test.TestData.GROUP_NAMES;
@NotNullByDefault
public class TestDataCreatorImpl implements TestDataCreator {
private final Logger LOG =
@@ -75,6 +82,7 @@ public class TestDataCreatorImpl implements TestDataCreator {
private final DatabaseComponent db;
private final IdentityManager identityManager;
private final ContactManager contactManager;
private final ContactGroupFactory contactGroupFactory;
private final TransportPropertyManager transportPropertyManager;
private final MessagingManager messagingManager;
private final BlogManager blogManager;
@@ -93,6 +101,7 @@ public class TestDataCreatorImpl implements TestDataCreator {
BlogPostFactory blogPostFactory, CryptoComponent cryptoComponent,
DatabaseComponent db, IdentityManager identityManager,
ContactManager contactManager,
ContactGroupFactory contactGroupFactory,
TransportPropertyManager transportPropertyManager,
MessagingManager messagingManager, BlogManager blogManager,
ForumManager forumManager, @IoExecutor Executor ioExecutor) {
@@ -106,6 +115,7 @@ public class TestDataCreatorImpl implements TestDataCreator {
this.db = db;
this.identityManager = identityManager;
this.contactManager = contactManager;
this.contactGroupFactory = contactGroupFactory;
this.transportPropertyManager = transportPropertyManager;
this.messagingManager = messagingManager;
this.blogManager = blogManager;
@@ -146,17 +156,17 @@ public class TestDataCreatorImpl implements TestDataCreator {
List<Contact> contacts = new ArrayList<>(numContacts);
LocalAuthor localAuthor = identityManager.getLocalAuthor();
for (int i = 0; i < numContacts; i++) {
Contact contact = addRandomContact(localAuthor);
LocalAuthor author = getRandomAuthor();
Contact contact = addContact(localAuthor.getId(), author);
contacts.add(contact);
}
return contacts;
}
private Contact addRandomContact(LocalAuthor localAuthor)
private Contact addContact(AuthorId localAuthorId, LocalAuthor author)
throws DbException {
// prepare to add contact
LocalAuthor author = getRandomAuthor();
SecretKey secretKey = getSecretKey();
long timestamp = clock.currentTimeMillis();
boolean verified = random.nextBoolean();
@@ -169,10 +179,11 @@ public class TestDataCreatorImpl implements TestDataCreator {
Transaction txn = db.startTransaction(false);
try {
ContactId contactId = contactManager
.addContact(txn, author, localAuthor.getId(), secretKey,
.addContact(txn, author, localAuthorId, secretKey,
timestamp, true, verified, true);
transportPropertyManager.addRemoteProperties(txn, contactId, props);
contact = db.getContact(txn, contactId);
fakeClientVisibilities(txn, contact);
db.commitTransaction(txn);
} finally {
db.endTransaction(txn);
@@ -186,14 +197,27 @@ public class TestDataCreatorImpl implements TestDataCreator {
return contact;
}
private LocalAuthor getRandomAuthor() {
int i = random.nextInt(AUTHOR_NAMES.length);
String authorName = AUTHOR_NAMES[i];
@Override
public Contact addContact(String name) throws DbException {
// load localAuthor from DB, because cache doesn't get refreshed
// when Espresso tests run within one lifecycle
Transaction txn = db.startTransaction(false);
LocalAuthor localAuthor = db.getLocalAuthors(txn).iterator().next();
db.endTransaction(txn);
return addContact(localAuthor.getId(), getAuthor(name));
}
private LocalAuthor getAuthor(String name) {
KeyPair keyPair = cryptoComponent.generateSignatureKeyPair();
byte[] publicKey = keyPair.getPublic().getEncoded();
byte[] privateKey = keyPair.getPrivate().getEncoded();
return authorFactory.createLocalAuthor(authorName, publicKey,
privateKey);
return authorFactory.createLocalAuthor(name, publicKey, privateKey);
}
private LocalAuthor getRandomAuthor() {
int i = random.nextInt(AUTHOR_NAMES.length);
String authorName = AUTHOR_NAMES[i];
return getAuthor(authorName);
}
private SecretKey getSecretKey() {
@@ -285,7 +309,8 @@ public class TestDataCreatorImpl implements TestDataCreator {
Group group = messagingManager.getContactGroup(contact);
for (int i = 0; i < numPrivateMsgs; i++) {
try {
createPrivateMessage(group.getId(), i);
createRandomPrivateMessage(contact.getId(), group.getId(),
i);
} catch (FormatException e) {
throw new RuntimeException(e);
}
@@ -297,23 +322,30 @@ public class TestDataCreatorImpl implements TestDataCreator {
}
}
private void createPrivateMessage(GroupId groupId, int num)
throws DbException, FormatException {
private void createRandomPrivateMessage(ContactId contactId,
GroupId groupId, int num) throws DbException, FormatException {
long timestamp = clock.currentTimeMillis() - num * 60 * 1000;
String body = getRandomText();
boolean local = random.nextBoolean();
createPrivateMessage(contactId, groupId, body, timestamp, local);
}
private void createPrivateMessage(ContactId contactId, GroupId groupId,
String body, long timestamp, boolean local)
throws DbException, FormatException {
PrivateMessage m = privateMessageFactory
.createPrivateMessage(groupId, timestamp, body);
boolean local = random.nextBoolean();
BdfDictionary meta = new BdfDictionary();
meta.put("timestamp", timestamp);
meta.put("local", local);
meta.put("read", local); // all local messages are read
Transaction txn = db.startTransaction(false);
try {
clientHelper.addLocalMessage(txn, m.getMessage(), meta, true);
if (local) messageTracker.trackOutgoingMessage(txn, m.getMessage());
if (local) {
messageTracker.trackOutgoingMessage(txn, m.getMessage());
db.receiveMessage(txn, contactId, m.getMessage());
}
else messageTracker.trackIncomingMessage(txn, m.getMessage());
db.commitTransaction(txn);
} finally {
@@ -321,6 +353,14 @@ public class TestDataCreatorImpl implements TestDataCreator {
}
}
@Override
public void addPrivateMessage(Contact contact, String body, long time,
boolean local) throws DbException, FormatException {
Group group = messagingManager.getContactGroup(contact);
createPrivateMessage(contact.getId(), group.getId(), body, time,
local);
}
private void createBlogPosts(List<Contact> contacts, int numBlogPosts)
throws DbException {
for (int i = 0; i < numBlogPosts; i++) {
@@ -399,6 +439,23 @@ public class TestDataCreatorImpl implements TestDataCreator {
}
}
private void fakeClientVisibilities(Transaction txn, Contact contact)
throws DbException {
fakeClientVisibilities(txn, contact, MessagingManager.CLIENT_ID,
MessagingManager.MAJOR_VERSION);
fakeClientVisibilities(txn, contact, ForumSharingManager.CLIENT_ID,
ForumSharingManager.MAJOR_VERSION);
fakeClientVisibilities(txn, contact, BlogSharingManager.CLIENT_ID,
BlogSharingManager.MAJOR_VERSION);
}
private void fakeClientVisibilities(Transaction txn, Contact contact,
ClientId clientId, int majorVersion) throws DbException {
Group group = contactGroupFactory
.createContactGroup(clientId, majorVersion, contact);
db.setGroupVisibility(txn, contact.getId(), group.getId(), SHARED);
}
private String getRandomText() {
int minLength = 3 + random.nextInt(500);
int maxWordLength = 15;