mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-24 08:39:53 +01:00
Merge branch 'client-helper' into 'master'
Helper class to reduce client boilerplate * Renamed BdfReader methods for consistency with BdfList/BdfDictionary * Added readList() and readDictionary() methods to BdfReader * Added ClientHelper to reduce boilerplate when converting messages and metadata to and from BDF * Moved PrivateGroupFactory to the same package as ClientHelper See merge request !114
This commit is contained in:
62
briar-api/src/org/briarproject/api/clients/ClientHelper.java
Normal file
62
briar-api/src/org/briarproject/api/clients/ClientHelper.java
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
package org.briarproject.api.clients;
|
||||||
|
|
||||||
|
import org.briarproject.api.FormatException;
|
||||||
|
import org.briarproject.api.data.BdfDictionary;
|
||||||
|
import org.briarproject.api.data.BdfList;
|
||||||
|
import org.briarproject.api.db.DbException;
|
||||||
|
import org.briarproject.api.db.Transaction;
|
||||||
|
import org.briarproject.api.sync.GroupId;
|
||||||
|
import org.briarproject.api.sync.Message;
|
||||||
|
import org.briarproject.api.sync.MessageId;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
public interface ClientHelper {
|
||||||
|
|
||||||
|
Message createMessage(GroupId g, long timestamp, BdfDictionary body)
|
||||||
|
throws FormatException;
|
||||||
|
|
||||||
|
Message createMessage(GroupId g, long timestamp, BdfList body)
|
||||||
|
throws FormatException;
|
||||||
|
|
||||||
|
BdfDictionary getMessageAsDictionary(MessageId m) throws DbException,
|
||||||
|
FormatException;
|
||||||
|
|
||||||
|
BdfDictionary getMessageAsDictionary(Transaction txn, MessageId m)
|
||||||
|
throws DbException, FormatException;
|
||||||
|
|
||||||
|
BdfList getMessageAsList(MessageId m) throws DbException, FormatException;
|
||||||
|
|
||||||
|
BdfList getMessageAsList(Transaction txn, MessageId m) throws DbException,
|
||||||
|
FormatException;
|
||||||
|
|
||||||
|
BdfDictionary getGroupMetadataAsDictionary(GroupId g) throws DbException,
|
||||||
|
FormatException;
|
||||||
|
|
||||||
|
BdfDictionary getGroupMetadataAsDictionary(Transaction txn, GroupId g)
|
||||||
|
throws DbException, FormatException;
|
||||||
|
|
||||||
|
BdfDictionary getMessageMetadataAsDictionary(MessageId m) throws DbException,
|
||||||
|
FormatException;
|
||||||
|
|
||||||
|
BdfDictionary getMessageMetadataAsDictionary(Transaction txn, MessageId m)
|
||||||
|
throws DbException, FormatException;
|
||||||
|
|
||||||
|
Map<MessageId, BdfDictionary> getMessageMetatataAsDictionary(GroupId g)
|
||||||
|
throws DbException, FormatException;
|
||||||
|
|
||||||
|
Map<MessageId, BdfDictionary> getMessageMetadataAsDictionary(
|
||||||
|
Transaction txn, GroupId g) throws DbException, FormatException;
|
||||||
|
|
||||||
|
void mergeGroupMetadata(GroupId g, BdfDictionary metadata)
|
||||||
|
throws DbException, FormatException;
|
||||||
|
|
||||||
|
void mergeGroupMetadata(Transaction txn, GroupId g, BdfDictionary metadata)
|
||||||
|
throws DbException, FormatException;
|
||||||
|
|
||||||
|
void mergeMessageMetadata(MessageId m, BdfDictionary metadata)
|
||||||
|
throws DbException, FormatException;
|
||||||
|
|
||||||
|
void mergeMessageMetadata(Transaction txn, MessageId m,
|
||||||
|
BdfDictionary metadata) throws DbException, FormatException;
|
||||||
|
}
|
||||||
@@ -1,6 +1,8 @@
|
|||||||
package org.briarproject.api.sync;
|
package org.briarproject.api.clients;
|
||||||
|
|
||||||
import org.briarproject.api.contact.Contact;
|
import org.briarproject.api.contact.Contact;
|
||||||
|
import org.briarproject.api.sync.ClientId;
|
||||||
|
import org.briarproject.api.sync.Group;
|
||||||
|
|
||||||
public interface PrivateGroupFactory {
|
public interface PrivateGroupFactory {
|
||||||
|
|
||||||
@@ -15,13 +15,13 @@ public interface BdfReader {
|
|||||||
boolean readBoolean() throws IOException;
|
boolean readBoolean() throws IOException;
|
||||||
void skipBoolean() throws IOException;
|
void skipBoolean() throws IOException;
|
||||||
|
|
||||||
boolean hasInteger() throws IOException;
|
boolean hasLong() throws IOException;
|
||||||
long readInteger() throws IOException;
|
long readLong() throws IOException;
|
||||||
void skipInteger() throws IOException;
|
void skipLong() throws IOException;
|
||||||
|
|
||||||
boolean hasFloat() throws IOException;
|
boolean hasDouble() throws IOException;
|
||||||
double readFloat() throws IOException;
|
double readDouble() throws IOException;
|
||||||
void skipFloat() throws IOException;
|
void skipDouble() throws IOException;
|
||||||
|
|
||||||
boolean hasString() throws IOException;
|
boolean hasString() throws IOException;
|
||||||
String readString(int maxLength) throws IOException;
|
String readString(int maxLength) throws IOException;
|
||||||
@@ -32,12 +32,14 @@ public interface BdfReader {
|
|||||||
void skipRaw() throws IOException;
|
void skipRaw() throws IOException;
|
||||||
|
|
||||||
boolean hasList() throws IOException;
|
boolean hasList() throws IOException;
|
||||||
|
BdfList readList() throws IOException;
|
||||||
void readListStart() throws IOException;
|
void readListStart() throws IOException;
|
||||||
boolean hasListEnd() throws IOException;
|
boolean hasListEnd() throws IOException;
|
||||||
void readListEnd() throws IOException;
|
void readListEnd() throws IOException;
|
||||||
void skipList() throws IOException;
|
void skipList() throws IOException;
|
||||||
|
|
||||||
boolean hasDictionary() throws IOException;
|
boolean hasDictionary() throws IOException;
|
||||||
|
BdfDictionary readDictionary() throws IOException;
|
||||||
void readDictionaryStart() throws IOException;
|
void readDictionaryStart() throws IOException;
|
||||||
boolean hasDictionaryEnd() throws IOException;
|
boolean hasDictionaryEnd() throws IOException;
|
||||||
void readDictionaryEnd() throws IOException;
|
void readDictionaryEnd() throws IOException;
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ public interface BdfWriter {
|
|||||||
|
|
||||||
void writeNull() throws IOException;
|
void writeNull() throws IOException;
|
||||||
void writeBoolean(boolean b) throws IOException;
|
void writeBoolean(boolean b) throws IOException;
|
||||||
void writeInteger(long l) throws IOException;
|
void writeLong(long l) throws IOException;
|
||||||
void writeFloat(double d) throws IOException;
|
void writeDouble(double d) throws IOException;
|
||||||
void writeString(String s) throws IOException;
|
void writeString(String s) throws IOException;
|
||||||
void writeRaw(byte[] b) throws IOException;
|
void writeRaw(byte[] b) throws IOException;
|
||||||
|
|
||||||
|
|||||||
258
briar-core/src/org/briarproject/clients/ClientHelperImpl.java
Normal file
258
briar-core/src/org/briarproject/clients/ClientHelperImpl.java
Normal file
@@ -0,0 +1,258 @@
|
|||||||
|
package org.briarproject.clients;
|
||||||
|
|
||||||
|
import com.google.inject.Inject;
|
||||||
|
|
||||||
|
import org.briarproject.api.FormatException;
|
||||||
|
import org.briarproject.api.clients.ClientHelper;
|
||||||
|
import org.briarproject.api.data.BdfDictionary;
|
||||||
|
import org.briarproject.api.data.BdfList;
|
||||||
|
import org.briarproject.api.data.BdfReader;
|
||||||
|
import org.briarproject.api.data.BdfReaderFactory;
|
||||||
|
import org.briarproject.api.data.BdfWriter;
|
||||||
|
import org.briarproject.api.data.BdfWriterFactory;
|
||||||
|
import org.briarproject.api.data.MetadataEncoder;
|
||||||
|
import org.briarproject.api.data.MetadataParser;
|
||||||
|
import org.briarproject.api.db.DatabaseComponent;
|
||||||
|
import org.briarproject.api.db.DbException;
|
||||||
|
import org.briarproject.api.db.Metadata;
|
||||||
|
import org.briarproject.api.db.Transaction;
|
||||||
|
import org.briarproject.api.sync.GroupId;
|
||||||
|
import org.briarproject.api.sync.Message;
|
||||||
|
import org.briarproject.api.sync.MessageFactory;
|
||||||
|
import org.briarproject.api.sync.MessageId;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.ByteArrayOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
class ClientHelperImpl implements ClientHelper {
|
||||||
|
|
||||||
|
private final DatabaseComponent db;
|
||||||
|
private final MessageFactory messageFactory;
|
||||||
|
private final BdfReaderFactory bdfReaderFactory;
|
||||||
|
private final BdfWriterFactory bdfWriterFactory;
|
||||||
|
private final MetadataParser metadataParser;
|
||||||
|
private final MetadataEncoder metadataEncoder;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
ClientHelperImpl(DatabaseComponent db, MessageFactory messageFactory,
|
||||||
|
BdfReaderFactory bdfReaderFactory,
|
||||||
|
BdfWriterFactory bdfWriterFactory, MetadataParser metadataParser,
|
||||||
|
MetadataEncoder metadataEncoder) {
|
||||||
|
this.db = db;
|
||||||
|
this.messageFactory = messageFactory;
|
||||||
|
this.bdfReaderFactory = bdfReaderFactory;
|
||||||
|
this.bdfWriterFactory = bdfWriterFactory;
|
||||||
|
this.metadataParser = metadataParser;
|
||||||
|
this.metadataEncoder = metadataEncoder;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Message createMessage(GroupId g, long timestamp, BdfDictionary body)
|
||||||
|
throws FormatException {
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
|
BdfWriter writer = bdfWriterFactory.createWriter(out);
|
||||||
|
try {
|
||||||
|
writer.writeDictionary(body);
|
||||||
|
} catch (FormatException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (IOException e) {
|
||||||
|
// Shouldn't happen with ByteArrayOutputStream
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
byte[] raw = out.toByteArray();
|
||||||
|
return messageFactory.createMessage(g, timestamp, raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Message createMessage(GroupId g, long timestamp, BdfList body)
|
||||||
|
throws FormatException {
|
||||||
|
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
||||||
|
BdfWriter writer = bdfWriterFactory.createWriter(out);
|
||||||
|
try {
|
||||||
|
writer.writeList(body);
|
||||||
|
} catch (FormatException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (IOException e) {
|
||||||
|
// Shouldn't happen with ByteArrayOutputStream
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
byte[] raw = out.toByteArray();
|
||||||
|
return messageFactory.createMessage(g, timestamp, raw);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BdfDictionary getMessageAsDictionary(MessageId m) throws DbException,
|
||||||
|
FormatException {
|
||||||
|
BdfDictionary dictionary;
|
||||||
|
Transaction txn = db.startTransaction();
|
||||||
|
try {
|
||||||
|
dictionary = getMessageAsDictionary(txn, m);
|
||||||
|
txn.setComplete();
|
||||||
|
} finally {
|
||||||
|
db.endTransaction(txn);
|
||||||
|
}
|
||||||
|
return dictionary;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BdfDictionary getMessageAsDictionary(Transaction txn, MessageId m)
|
||||||
|
throws DbException, FormatException {
|
||||||
|
byte[] raw = db.getRawMessage(txn, m);
|
||||||
|
if (raw == null) return null;
|
||||||
|
ByteArrayInputStream in = new ByteArrayInputStream(raw);
|
||||||
|
BdfReader reader = bdfReaderFactory.createReader(in);
|
||||||
|
BdfDictionary dictionary;
|
||||||
|
try {
|
||||||
|
dictionary = reader.readDictionary();
|
||||||
|
if (!reader.eof()) throw new FormatException();
|
||||||
|
} catch (FormatException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (IOException e) {
|
||||||
|
// Shouldn't happen with ByteArrayInputStream
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
return dictionary;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BdfList getMessageAsList(MessageId m) throws DbException,
|
||||||
|
FormatException {
|
||||||
|
BdfList list;
|
||||||
|
Transaction txn = db.startTransaction();
|
||||||
|
try {
|
||||||
|
list = getMessageAsList(txn, m);
|
||||||
|
txn.setComplete();
|
||||||
|
} finally {
|
||||||
|
db.endTransaction(txn);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BdfList getMessageAsList(Transaction txn, MessageId m)
|
||||||
|
throws DbException, FormatException {
|
||||||
|
byte[] raw = db.getRawMessage(txn, m);
|
||||||
|
if (raw == null) return null;
|
||||||
|
ByteArrayInputStream in = new ByteArrayInputStream(raw);
|
||||||
|
BdfReader reader = bdfReaderFactory.createReader(in);
|
||||||
|
BdfList list;
|
||||||
|
try {
|
||||||
|
list = reader.readList();
|
||||||
|
if (!reader.eof()) throw new FormatException();
|
||||||
|
} catch (FormatException e) {
|
||||||
|
throw e;
|
||||||
|
} catch (IOException e) {
|
||||||
|
// Shouldn't happen with ByteArrayInputStream
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BdfDictionary getGroupMetadataAsDictionary(GroupId g)
|
||||||
|
throws DbException, FormatException {
|
||||||
|
BdfDictionary dictionary;
|
||||||
|
Transaction txn = db.startTransaction();
|
||||||
|
try {
|
||||||
|
dictionary = getGroupMetadataAsDictionary(txn, g);
|
||||||
|
txn.setComplete();
|
||||||
|
} finally {
|
||||||
|
db.endTransaction(txn);
|
||||||
|
}
|
||||||
|
return dictionary;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BdfDictionary getGroupMetadataAsDictionary(Transaction txn,
|
||||||
|
GroupId g) throws DbException, FormatException {
|
||||||
|
Metadata metadata = db.getGroupMetadata(txn, g);
|
||||||
|
return metadataParser.parse(metadata);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BdfDictionary getMessageMetadataAsDictionary(MessageId m)
|
||||||
|
throws DbException, FormatException {
|
||||||
|
BdfDictionary dictionary;
|
||||||
|
Transaction txn = db.startTransaction();
|
||||||
|
try {
|
||||||
|
dictionary = getMessageMetadataAsDictionary(txn, m);
|
||||||
|
txn.setComplete();
|
||||||
|
} finally {
|
||||||
|
db.endTransaction(txn);
|
||||||
|
}
|
||||||
|
return dictionary;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BdfDictionary getMessageMetadataAsDictionary(Transaction txn,
|
||||||
|
MessageId m) throws DbException, FormatException {
|
||||||
|
Metadata metadata = db.getMessageMetadata(txn, m);
|
||||||
|
return metadataParser.parse(metadata);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<MessageId, BdfDictionary> getMessageMetatataAsDictionary(
|
||||||
|
GroupId g) throws DbException, FormatException {
|
||||||
|
Map<MessageId, BdfDictionary> map;
|
||||||
|
Transaction txn = db.startTransaction();
|
||||||
|
try {
|
||||||
|
map = getMessageMetadataAsDictionary(txn, g);
|
||||||
|
txn.setComplete();
|
||||||
|
} finally {
|
||||||
|
db.endTransaction(txn);
|
||||||
|
}
|
||||||
|
return map;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Map<MessageId, BdfDictionary> getMessageMetadataAsDictionary(
|
||||||
|
Transaction txn, GroupId g) throws DbException, FormatException {
|
||||||
|
Map<MessageId, Metadata> raw = db.getMessageMetadata(txn, g);
|
||||||
|
Map<MessageId, BdfDictionary> parsed =
|
||||||
|
new HashMap<MessageId, BdfDictionary>(raw.size());
|
||||||
|
for (Entry<MessageId, Metadata> e : raw.entrySet())
|
||||||
|
parsed.put(e.getKey(), metadataParser.parse(e.getValue()));
|
||||||
|
return Collections.unmodifiableMap(parsed);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mergeGroupMetadata(GroupId g, BdfDictionary metadata)
|
||||||
|
throws DbException, FormatException {
|
||||||
|
Transaction txn = db.startTransaction();
|
||||||
|
try {
|
||||||
|
mergeGroupMetadata(txn, g, metadata);
|
||||||
|
txn.setComplete();
|
||||||
|
} finally {
|
||||||
|
db.endTransaction(txn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mergeGroupMetadata(Transaction txn, GroupId g,
|
||||||
|
BdfDictionary metadata) throws DbException, FormatException {
|
||||||
|
db.mergeGroupMetadata(txn, g, metadataEncoder.encode(metadata));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mergeMessageMetadata(MessageId m, BdfDictionary metadata)
|
||||||
|
throws DbException, FormatException {
|
||||||
|
Transaction txn = db.startTransaction();
|
||||||
|
try {
|
||||||
|
mergeMessageMetadata(txn, m, metadata);
|
||||||
|
txn.setComplete();
|
||||||
|
} finally {
|
||||||
|
db.endTransaction(txn);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void mergeMessageMetadata(Transaction txn, MessageId m,
|
||||||
|
BdfDictionary metadata) throws DbException, FormatException {
|
||||||
|
db.mergeMessageMetadata(txn, m, metadataEncoder.encode(metadata));
|
||||||
|
}
|
||||||
|
}
|
||||||
15
briar-core/src/org/briarproject/clients/ClientsModule.java
Normal file
15
briar-core/src/org/briarproject/clients/ClientsModule.java
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
package org.briarproject.clients;
|
||||||
|
|
||||||
|
import com.google.inject.AbstractModule;
|
||||||
|
|
||||||
|
import org.briarproject.api.clients.ClientHelper;
|
||||||
|
import org.briarproject.api.clients.PrivateGroupFactory;
|
||||||
|
|
||||||
|
public class ClientsModule extends AbstractModule {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void configure() {
|
||||||
|
bind(ClientHelper.class).to(ClientHelperImpl.class);
|
||||||
|
bind(PrivateGroupFactory.class).to(PrivateGroupFactoryImpl.class);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,8 +1,9 @@
|
|||||||
package org.briarproject.sync;
|
package org.briarproject.clients;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
|
||||||
import org.briarproject.api.Bytes;
|
import org.briarproject.api.Bytes;
|
||||||
|
import org.briarproject.api.clients.PrivateGroupFactory;
|
||||||
import org.briarproject.api.contact.Contact;
|
import org.briarproject.api.contact.Contact;
|
||||||
import org.briarproject.api.data.BdfWriter;
|
import org.briarproject.api.data.BdfWriter;
|
||||||
import org.briarproject.api.data.BdfWriterFactory;
|
import org.briarproject.api.data.BdfWriterFactory;
|
||||||
@@ -10,7 +11,6 @@ import org.briarproject.api.identity.AuthorId;
|
|||||||
import org.briarproject.api.sync.ClientId;
|
import org.briarproject.api.sync.ClientId;
|
||||||
import org.briarproject.api.sync.Group;
|
import org.briarproject.api.sync.Group;
|
||||||
import org.briarproject.api.sync.GroupFactory;
|
import org.briarproject.api.sync.GroupFactory;
|
||||||
import org.briarproject.api.sync.PrivateGroupFactory;
|
|
||||||
|
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
@@ -1,11 +1,14 @@
|
|||||||
package org.briarproject.data;
|
package org.briarproject.data;
|
||||||
|
|
||||||
import org.briarproject.api.FormatException;
|
import org.briarproject.api.FormatException;
|
||||||
|
import org.briarproject.api.data.BdfDictionary;
|
||||||
|
import org.briarproject.api.data.BdfList;
|
||||||
import org.briarproject.api.data.BdfReader;
|
import org.briarproject.api.data.BdfReader;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
|
||||||
|
import static org.briarproject.api.data.BdfDictionary.NULL_VALUE;
|
||||||
import static org.briarproject.data.Types.DICTIONARY;
|
import static org.briarproject.data.Types.DICTIONARY;
|
||||||
import static org.briarproject.data.Types.END;
|
import static org.briarproject.data.Types.END;
|
||||||
import static org.briarproject.data.Types.FALSE;
|
import static org.briarproject.data.Types.FALSE;
|
||||||
@@ -74,11 +77,26 @@ class BdfReaderImpl implements BdfReader {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private Object readObject() throws IOException {
|
||||||
|
if (hasNull()) {
|
||||||
|
readNull();
|
||||||
|
return NULL_VALUE;
|
||||||
|
}
|
||||||
|
if (hasBoolean()) return readBoolean();
|
||||||
|
if (hasLong()) return readLong();
|
||||||
|
if (hasDouble()) return readDouble();
|
||||||
|
if (hasString()) return readString(Integer.MAX_VALUE);
|
||||||
|
if (hasRaw()) return readRaw(Integer.MAX_VALUE);
|
||||||
|
if (hasList()) return readList();
|
||||||
|
if (hasDictionary()) return readDictionary();
|
||||||
|
throw new FormatException();
|
||||||
|
}
|
||||||
|
|
||||||
private void skipObject() throws IOException {
|
private void skipObject() throws IOException {
|
||||||
if (hasNull()) skipNull();
|
if (hasNull()) skipNull();
|
||||||
else if (hasBoolean()) skipBoolean();
|
else if (hasBoolean()) skipBoolean();
|
||||||
else if (hasInteger()) skipInteger();
|
else if (hasLong()) skipLong();
|
||||||
else if (hasFloat()) skipFloat();
|
else if (hasDouble()) skipDouble();
|
||||||
else if (hasString()) skipString();
|
else if (hasString()) skipString();
|
||||||
else if (hasRaw()) skipRaw();
|
else if (hasRaw()) skipRaw();
|
||||||
else if (hasList()) skipList();
|
else if (hasList()) skipList();
|
||||||
@@ -129,15 +147,15 @@ class BdfReaderImpl implements BdfReader {
|
|||||||
hasLookahead = false;
|
hasLookahead = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasInteger() throws IOException {
|
public boolean hasLong() throws IOException {
|
||||||
if (!hasLookahead) readLookahead();
|
if (!hasLookahead) readLookahead();
|
||||||
if (eof) return false;
|
if (eof) return false;
|
||||||
return next == INT_8 || next == INT_16 || next == INT_32 ||
|
return next == INT_8 || next == INT_16 || next == INT_32 ||
|
||||||
next == INT_64;
|
next == INT_64;
|
||||||
}
|
}
|
||||||
|
|
||||||
public long readInteger() throws IOException {
|
public long readLong() throws IOException {
|
||||||
if (!hasInteger()) throw new FormatException();
|
if (!hasLong()) throw new FormatException();
|
||||||
hasLookahead = false;
|
hasLookahead = false;
|
||||||
if (next == INT_8) return readInt8();
|
if (next == INT_8) return readInt8();
|
||||||
if (next == INT_16) return readInt16();
|
if (next == INT_16) return readInt16();
|
||||||
@@ -169,8 +187,8 @@ class BdfReaderImpl implements BdfReader {
|
|||||||
return value;
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void skipInteger() throws IOException {
|
public void skipLong() throws IOException {
|
||||||
if (!hasInteger()) throw new FormatException();
|
if (!hasLong()) throw new FormatException();
|
||||||
if (next == INT_8) skip(1);
|
if (next == INT_8) skip(1);
|
||||||
else if (next == INT_16) skip(2);
|
else if (next == INT_16) skip(2);
|
||||||
else if (next == INT_32) skip(4);
|
else if (next == INT_32) skip(4);
|
||||||
@@ -178,14 +196,14 @@ class BdfReaderImpl implements BdfReader {
|
|||||||
hasLookahead = false;
|
hasLookahead = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasFloat() throws IOException {
|
public boolean hasDouble() throws IOException {
|
||||||
if (!hasLookahead) readLookahead();
|
if (!hasLookahead) readLookahead();
|
||||||
if (eof) return false;
|
if (eof) return false;
|
||||||
return next == FLOAT_64;
|
return next == FLOAT_64;
|
||||||
}
|
}
|
||||||
|
|
||||||
public double readFloat() throws IOException {
|
public double readDouble() throws IOException {
|
||||||
if (!hasFloat()) throw new FormatException();
|
if (!hasDouble()) throw new FormatException();
|
||||||
hasLookahead = false;
|
hasLookahead = false;
|
||||||
readIntoBuffer(8);
|
readIntoBuffer(8);
|
||||||
long value = 0;
|
long value = 0;
|
||||||
@@ -193,8 +211,8 @@ class BdfReaderImpl implements BdfReader {
|
|||||||
return Double.longBitsToDouble(value);
|
return Double.longBitsToDouble(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void skipFloat() throws IOException {
|
public void skipDouble() throws IOException {
|
||||||
if (!hasFloat()) throw new FormatException();
|
if (!hasDouble()) throw new FormatException();
|
||||||
skip(8);
|
skip(8);
|
||||||
hasLookahead = false;
|
hasLookahead = false;
|
||||||
}
|
}
|
||||||
@@ -268,6 +286,15 @@ class BdfReaderImpl implements BdfReader {
|
|||||||
return next == LIST;
|
return next == LIST;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BdfList readList() throws IOException {
|
||||||
|
if (!hasList()) throw new FormatException();
|
||||||
|
BdfList list = new BdfList();
|
||||||
|
readListStart();
|
||||||
|
while (!hasListEnd()) list.add(readObject());
|
||||||
|
readListEnd();
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
|
||||||
public void readListStart() throws IOException {
|
public void readListStart() throws IOException {
|
||||||
if (!hasList()) throw new FormatException();
|
if (!hasList()) throw new FormatException();
|
||||||
hasLookahead = false;
|
hasLookahead = false;
|
||||||
@@ -305,6 +332,16 @@ class BdfReaderImpl implements BdfReader {
|
|||||||
return next == DICTIONARY;
|
return next == DICTIONARY;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BdfDictionary readDictionary() throws IOException {
|
||||||
|
if (!hasDictionary()) throw new FormatException();
|
||||||
|
BdfDictionary dictionary = new BdfDictionary();
|
||||||
|
readDictionaryStart();
|
||||||
|
while (!hasDictionaryEnd())
|
||||||
|
dictionary.put(readString(Integer.MAX_VALUE), readObject());
|
||||||
|
readDictionaryEnd();
|
||||||
|
return dictionary;
|
||||||
|
}
|
||||||
|
|
||||||
public void readDictionaryStart() throws IOException {
|
public void readDictionaryStart() throws IOException {
|
||||||
if (!hasDictionary()) throw new FormatException();
|
if (!hasDictionary()) throw new FormatException();
|
||||||
hasLookahead = false;
|
hasLookahead = false;
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
|
||||||
|
import static org.briarproject.api.data.BdfDictionary.NULL_VALUE;
|
||||||
import static org.briarproject.data.Types.DICTIONARY;
|
import static org.briarproject.data.Types.DICTIONARY;
|
||||||
import static org.briarproject.data.Types.END;
|
import static org.briarproject.data.Types.END;
|
||||||
import static org.briarproject.data.Types.FALSE;
|
import static org.briarproject.data.Types.FALSE;
|
||||||
@@ -55,7 +56,7 @@ class BdfWriterImpl implements BdfWriter {
|
|||||||
else out.write(FALSE);
|
else out.write(FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeInteger(long i) throws IOException {
|
public void writeLong(long i) throws IOException {
|
||||||
if (i >= Byte.MIN_VALUE && i <= Byte.MAX_VALUE) {
|
if (i >= Byte.MIN_VALUE && i <= Byte.MAX_VALUE) {
|
||||||
out.write(INT_8);
|
out.write(INT_8);
|
||||||
out.write((byte) i);
|
out.write((byte) i);
|
||||||
@@ -94,7 +95,7 @@ class BdfWriterImpl implements BdfWriter {
|
|||||||
out.write((byte) ((i << 56) >> 56));
|
out.write((byte) ((i << 56) >> 56));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void writeFloat(double d) throws IOException {
|
public void writeDouble(double d) throws IOException {
|
||||||
out.write(FLOAT_64);
|
out.write(FLOAT_64);
|
||||||
writeInt64(Double.doubleToRawLongBits(d));
|
writeInt64(Double.doubleToRawLongBits(d));
|
||||||
}
|
}
|
||||||
@@ -135,14 +136,14 @@ class BdfWriterImpl implements BdfWriter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void writeObject(Object o) throws IOException {
|
private void writeObject(Object o) throws IOException {
|
||||||
if (o == null) writeNull();
|
if (o == null || o == NULL_VALUE) writeNull();
|
||||||
else if (o instanceof Boolean) writeBoolean((Boolean) o);
|
else if (o instanceof Boolean) writeBoolean((Boolean) o);
|
||||||
else if (o instanceof Byte) writeInteger((Byte) o);
|
else if (o instanceof Byte) writeLong((Byte) o);
|
||||||
else if (o instanceof Short) writeInteger((Short) o);
|
else if (o instanceof Short) writeLong((Short) o);
|
||||||
else if (o instanceof Integer) writeInteger((Integer) o);
|
else if (o instanceof Integer) writeLong((Integer) o);
|
||||||
else if (o instanceof Long) writeInteger((Long) o);
|
else if (o instanceof Long) writeLong((Long) o);
|
||||||
else if (o instanceof Float) writeFloat((Float) o);
|
else if (o instanceof Float) writeDouble((Float) o);
|
||||||
else if (o instanceof Double) writeFloat((Double) o);
|
else if (o instanceof Double) writeDouble((Double) o);
|
||||||
else if (o instanceof String) writeString((String) o);
|
else if (o instanceof String) writeString((String) o);
|
||||||
else if (o instanceof byte[]) writeRaw((byte[]) o);
|
else if (o instanceof byte[]) writeRaw((byte[]) o);
|
||||||
else if (o instanceof Bytes) writeRaw(((Bytes) o).getBytes());
|
else if (o instanceof Bytes) writeRaw(((Bytes) o).getBytes());
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ class ForumListValidator implements MessageValidator {
|
|||||||
MESSAGE_HEADER_LENGTH, raw.length - MESSAGE_HEADER_LENGTH);
|
MESSAGE_HEADER_LENGTH, raw.length - MESSAGE_HEADER_LENGTH);
|
||||||
BdfReader r = bdfReaderFactory.createReader(in);
|
BdfReader r = bdfReaderFactory.createReader(in);
|
||||||
r.readListStart();
|
r.readListStart();
|
||||||
long version = r.readInteger();
|
long version = r.readLong();
|
||||||
if (version < 0) throw new FormatException();
|
if (version < 0) throw new FormatException();
|
||||||
r.readListStart();
|
r.readListStart();
|
||||||
while (!r.hasListEnd()) {
|
while (!r.hasListEnd()) {
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ class ForumPostFactoryImpl implements ForumPostFactory {
|
|||||||
BdfWriter w = bdfWriterFactory.createWriter(out);
|
BdfWriter w = bdfWriterFactory.createWriter(out);
|
||||||
w.writeListStart();
|
w.writeListStart();
|
||||||
w.writeRaw(groupId.getBytes());
|
w.writeRaw(groupId.getBytes());
|
||||||
w.writeInteger(timestamp);
|
w.writeLong(timestamp);
|
||||||
if (parent == null) w.writeNull();
|
if (parent == null) w.writeNull();
|
||||||
else w.writeRaw(parent.getBytes());
|
else w.writeRaw(parent.getBytes());
|
||||||
writeAuthor(w, author);
|
writeAuthor(w, author);
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ class ForumPostValidator implements MessageValidator {
|
|||||||
BdfWriter w = bdfWriterFactory.createWriter(out);
|
BdfWriter w = bdfWriterFactory.createWriter(out);
|
||||||
w.writeListStart();
|
w.writeListStart();
|
||||||
w.writeRaw(m.getGroupId().getBytes());
|
w.writeRaw(m.getGroupId().getBytes());
|
||||||
w.writeInteger(m.getTimestamp());
|
w.writeLong(m.getTimestamp());
|
||||||
if (parent == null) w.writeNull();
|
if (parent == null) w.writeNull();
|
||||||
else w.writeRaw(parent.getBytes());
|
else w.writeRaw(parent.getBytes());
|
||||||
writeAuthor(w, author);
|
writeAuthor(w, author);
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package org.briarproject.forum;
|
|||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
|
||||||
import org.briarproject.api.FormatException;
|
import org.briarproject.api.FormatException;
|
||||||
|
import org.briarproject.api.clients.PrivateGroupFactory;
|
||||||
import org.briarproject.api.contact.Contact;
|
import org.briarproject.api.contact.Contact;
|
||||||
import org.briarproject.api.contact.ContactId;
|
import org.briarproject.api.contact.ContactId;
|
||||||
import org.briarproject.api.contact.ContactManager.AddContactHook;
|
import org.briarproject.api.contact.ContactManager.AddContactHook;
|
||||||
@@ -28,7 +29,6 @@ import org.briarproject.api.sync.GroupId;
|
|||||||
import org.briarproject.api.sync.Message;
|
import org.briarproject.api.sync.Message;
|
||||||
import org.briarproject.api.sync.MessageFactory;
|
import org.briarproject.api.sync.MessageFactory;
|
||||||
import org.briarproject.api.sync.MessageId;
|
import org.briarproject.api.sync.MessageId;
|
||||||
import org.briarproject.api.sync.PrivateGroupFactory;
|
|
||||||
import org.briarproject.api.sync.ValidationManager.ValidationHook;
|
import org.briarproject.api.sync.ValidationManager.ValidationHook;
|
||||||
import org.briarproject.api.system.Clock;
|
import org.briarproject.api.system.Clock;
|
||||||
import org.briarproject.util.StringUtils;
|
import org.briarproject.util.StringUtils;
|
||||||
@@ -345,7 +345,7 @@ class ForumSharingManagerImpl implements ForumSharingManager, AddContactHook,
|
|||||||
BdfReader r = bdfReaderFactory.createReader(in);
|
BdfReader r = bdfReaderFactory.createReader(in);
|
||||||
try {
|
try {
|
||||||
r.readListStart();
|
r.readListStart();
|
||||||
r.skipInteger(); // Version
|
r.skipLong(); // Version
|
||||||
r.readListStart();
|
r.readListStart();
|
||||||
while (!r.hasListEnd()) {
|
while (!r.hasListEnd()) {
|
||||||
r.readListStart();
|
r.readListStart();
|
||||||
@@ -387,7 +387,7 @@ class ForumSharingManagerImpl implements ForumSharingManager, AddContactHook,
|
|||||||
BdfWriter w = bdfWriterFactory.createWriter(out);
|
BdfWriter w = bdfWriterFactory.createWriter(out);
|
||||||
try {
|
try {
|
||||||
w.writeListStart();
|
w.writeListStart();
|
||||||
w.writeInteger(version);
|
w.writeLong(version);
|
||||||
w.writeListStart();
|
w.writeListStart();
|
||||||
for (Forum f : forums) {
|
for (Forum f : forums) {
|
||||||
w.writeListStart();
|
w.writeListStart();
|
||||||
|
|||||||
@@ -196,13 +196,13 @@ abstract class Connector extends Thread {
|
|||||||
|
|
||||||
protected void sendTimestamp(BdfWriter w, long timestamp)
|
protected void sendTimestamp(BdfWriter w, long timestamp)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
w.writeInteger(timestamp);
|
w.writeLong(timestamp);
|
||||||
w.flush();
|
w.flush();
|
||||||
if (LOG.isLoggable(INFO)) LOG.info(pluginName + " sent timestamp");
|
if (LOG.isLoggable(INFO)) LOG.info(pluginName + " sent timestamp");
|
||||||
}
|
}
|
||||||
|
|
||||||
protected long receiveTimestamp(BdfReader r) throws IOException {
|
protected long receiveTimestamp(BdfReader r) throws IOException {
|
||||||
long timestamp = r.readInteger();
|
long timestamp = r.readLong();
|
||||||
if (timestamp < 0) throw new FormatException();
|
if (timestamp < 0) throw new FormatException();
|
||||||
if (LOG.isLoggable(INFO)) LOG.info(pluginName + " received timestamp");
|
if (LOG.isLoggable(INFO)) LOG.info(pluginName + " received timestamp");
|
||||||
return timestamp;
|
return timestamp;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package org.briarproject.messaging;
|
|||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
|
||||||
import org.briarproject.api.FormatException;
|
import org.briarproject.api.FormatException;
|
||||||
|
import org.briarproject.api.clients.PrivateGroupFactory;
|
||||||
import org.briarproject.api.contact.Contact;
|
import org.briarproject.api.contact.Contact;
|
||||||
import org.briarproject.api.contact.ContactId;
|
import org.briarproject.api.contact.ContactId;
|
||||||
import org.briarproject.api.contact.ContactManager.AddContactHook;
|
import org.briarproject.api.contact.ContactManager.AddContactHook;
|
||||||
@@ -24,7 +25,6 @@ import org.briarproject.api.sync.Group;
|
|||||||
import org.briarproject.api.sync.GroupId;
|
import org.briarproject.api.sync.GroupId;
|
||||||
import org.briarproject.api.sync.MessageId;
|
import org.briarproject.api.sync.MessageId;
|
||||||
import org.briarproject.api.sync.MessageStatus;
|
import org.briarproject.api.sync.MessageStatus;
|
||||||
import org.briarproject.api.sync.PrivateGroupFactory;
|
|
||||||
import org.briarproject.util.StringUtils;
|
import org.briarproject.util.StringUtils;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import com.google.inject.Inject;
|
|||||||
import org.briarproject.api.DeviceId;
|
import org.briarproject.api.DeviceId;
|
||||||
import org.briarproject.api.FormatException;
|
import org.briarproject.api.FormatException;
|
||||||
import org.briarproject.api.TransportId;
|
import org.briarproject.api.TransportId;
|
||||||
|
import org.briarproject.api.clients.PrivateGroupFactory;
|
||||||
import org.briarproject.api.contact.Contact;
|
import org.briarproject.api.contact.Contact;
|
||||||
import org.briarproject.api.contact.ContactId;
|
import org.briarproject.api.contact.ContactId;
|
||||||
import org.briarproject.api.contact.ContactManager.AddContactHook;
|
import org.briarproject.api.contact.ContactManager.AddContactHook;
|
||||||
@@ -30,7 +31,6 @@ import org.briarproject.api.sync.GroupId;
|
|||||||
import org.briarproject.api.sync.Message;
|
import org.briarproject.api.sync.Message;
|
||||||
import org.briarproject.api.sync.MessageFactory;
|
import org.briarproject.api.sync.MessageFactory;
|
||||||
import org.briarproject.api.sync.MessageId;
|
import org.briarproject.api.sync.MessageId;
|
||||||
import org.briarproject.api.sync.PrivateGroupFactory;
|
|
||||||
import org.briarproject.api.system.Clock;
|
import org.briarproject.api.system.Clock;
|
||||||
import org.briarproject.util.StringUtils;
|
import org.briarproject.util.StringUtils;
|
||||||
|
|
||||||
@@ -288,7 +288,7 @@ class TransportPropertyManagerImpl implements TransportPropertyManager,
|
|||||||
w.writeListStart();
|
w.writeListStart();
|
||||||
w.writeRaw(dev.getBytes());
|
w.writeRaw(dev.getBytes());
|
||||||
w.writeString(t.getString());
|
w.writeString(t.getString());
|
||||||
w.writeInteger(version);
|
w.writeLong(version);
|
||||||
w.writeDictionary(p);
|
w.writeDictionary(p);
|
||||||
w.writeListEnd();
|
w.writeListEnd();
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
@@ -342,7 +342,7 @@ class TransportPropertyManagerImpl implements TransportPropertyManager,
|
|||||||
r.readListStart();
|
r.readListStart();
|
||||||
r.skipRaw(); // Device ID
|
r.skipRaw(); // Device ID
|
||||||
r.skipString(); // Transport ID
|
r.skipString(); // Transport ID
|
||||||
r.skipInteger(); // Version
|
r.skipLong(); // Version
|
||||||
r.readDictionaryStart();
|
r.readDictionaryStart();
|
||||||
while (!r.hasDictionaryEnd()) {
|
while (!r.hasDictionaryEnd()) {
|
||||||
String key = r.readString(MAX_PROPERTY_LENGTH);
|
String key = r.readString(MAX_PROPERTY_LENGTH);
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ class TransportPropertyValidator implements MessageValidator {
|
|||||||
if (deviceId.length != UniqueId.LENGTH) throw new FormatException();
|
if (deviceId.length != UniqueId.LENGTH) throw new FormatException();
|
||||||
String transportId = r.readString(MAX_TRANSPORT_ID_LENGTH);
|
String transportId = r.readString(MAX_TRANSPORT_ID_LENGTH);
|
||||||
if (transportId.length() == 0) throw new FormatException();
|
if (transportId.length() == 0) throw new FormatException();
|
||||||
long version = r.readInteger();
|
long version = r.readLong();
|
||||||
if (version < 0) throw new FormatException();
|
if (version < 0) throw new FormatException();
|
||||||
r.readDictionaryStart();
|
r.readDictionaryStart();
|
||||||
for (int i = 0; !r.hasDictionaryEnd(); i++) {
|
for (int i = 0; !r.hasDictionaryEnd(); i++) {
|
||||||
|
|||||||
@@ -9,7 +9,6 @@ import org.briarproject.api.sync.GroupFactory;
|
|||||||
import org.briarproject.api.sync.MessageFactory;
|
import org.briarproject.api.sync.MessageFactory;
|
||||||
import org.briarproject.api.sync.PacketReaderFactory;
|
import org.briarproject.api.sync.PacketReaderFactory;
|
||||||
import org.briarproject.api.sync.PacketWriterFactory;
|
import org.briarproject.api.sync.PacketWriterFactory;
|
||||||
import org.briarproject.api.sync.PrivateGroupFactory;
|
|
||||||
import org.briarproject.api.sync.SyncSessionFactory;
|
import org.briarproject.api.sync.SyncSessionFactory;
|
||||||
import org.briarproject.api.sync.ValidationManager;
|
import org.briarproject.api.sync.ValidationManager;
|
||||||
|
|
||||||
@@ -23,7 +22,6 @@ public class SyncModule extends AbstractModule {
|
|||||||
bind(MessageFactory.class).to(MessageFactoryImpl.class);
|
bind(MessageFactory.class).to(MessageFactoryImpl.class);
|
||||||
bind(PacketReaderFactory.class).to(PacketReaderFactoryImpl.class);
|
bind(PacketReaderFactory.class).to(PacketReaderFactoryImpl.class);
|
||||||
bind(PacketWriterFactory.class).to(PacketWriterFactoryImpl.class);
|
bind(PacketWriterFactory.class).to(PacketWriterFactoryImpl.class);
|
||||||
bind(PrivateGroupFactory.class).to(PrivateGroupFactoryImpl.class);
|
|
||||||
bind(SyncSessionFactory.class).to(
|
bind(SyncSessionFactory.class).to(
|
||||||
SyncSessionFactoryImpl.class).in(Singleton.class);
|
SyncSessionFactoryImpl.class).in(Singleton.class);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
package org.briarproject.clients;
|
||||||
|
|
||||||
|
import org.briarproject.BriarTestCase;
|
||||||
|
import org.junit.Test;
|
||||||
|
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
public class ClientHelperImplTest extends BriarTestCase {
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUnitTestsExist() {
|
||||||
|
fail(); // FIXME: Write tests
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -3,11 +3,14 @@ package org.briarproject.data;
|
|||||||
import org.briarproject.BriarTestCase;
|
import org.briarproject.BriarTestCase;
|
||||||
import org.briarproject.TestUtils;
|
import org.briarproject.TestUtils;
|
||||||
import org.briarproject.api.FormatException;
|
import org.briarproject.api.FormatException;
|
||||||
|
import org.briarproject.api.data.BdfDictionary;
|
||||||
|
import org.briarproject.api.data.BdfList;
|
||||||
import org.briarproject.util.StringUtils;
|
import org.briarproject.util.StringUtils;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
|
|
||||||
|
import static org.briarproject.api.data.BdfDictionary.NULL_VALUE;
|
||||||
import static org.junit.Assert.assertArrayEquals;
|
import static org.junit.Assert.assertArrayEquals;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
@@ -54,100 +57,102 @@ public class BdfReaderImplTest extends BriarTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testReadInt8() throws Exception {
|
public void testReadLong8() throws Exception {
|
||||||
setContents("21" + "00" + "21" + "FF"
|
setContents("21" + "00" + "21" + "FF"
|
||||||
+ "21" + "7F" + "21" + "80");
|
+ "21" + "7F" + "21" + "80");
|
||||||
assertEquals(0, r.readInteger());
|
assertEquals(0, r.readLong());
|
||||||
assertEquals(-1, r.readInteger());
|
assertEquals(-1, r.readLong());
|
||||||
assertEquals(Byte.MAX_VALUE, r.readInteger());
|
assertEquals(Byte.MAX_VALUE, r.readLong());
|
||||||
assertEquals(Byte.MIN_VALUE, r.readInteger());
|
assertEquals(Byte.MIN_VALUE, r.readLong());
|
||||||
assertTrue(r.eof());
|
assertTrue(r.eof());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSkipInt8() throws Exception {
|
public void testSkipLong8() throws Exception {
|
||||||
setContents("21" + "00");
|
setContents("21" + "00");
|
||||||
r.skipInteger();
|
r.skipLong();
|
||||||
assertTrue(r.eof());
|
assertTrue(r.eof());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testReadInt16() throws Exception {
|
public void testReadLong16() throws Exception {
|
||||||
setContents("22" + "0080" + "22" + "FF7F"
|
setContents("22" + "0080" + "22" + "FF7F"
|
||||||
+ "22" + "7FFF" + "22" + "8000");
|
+ "22" + "7FFF" + "22" + "8000");
|
||||||
assertEquals(Byte.MAX_VALUE + 1, r.readInteger());
|
assertEquals(Byte.MAX_VALUE + 1, r.readLong());
|
||||||
assertEquals(Byte.MIN_VALUE - 1, r.readInteger());
|
assertEquals(Byte.MIN_VALUE - 1, r.readLong());
|
||||||
assertEquals(Short.MAX_VALUE, r.readInteger());
|
assertEquals(Short.MAX_VALUE, r.readLong());
|
||||||
assertEquals(Short.MIN_VALUE, r.readInteger());
|
assertEquals(Short.MIN_VALUE, r.readLong());
|
||||||
assertTrue(r.eof());
|
assertTrue(r.eof());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSkipInt16() throws Exception {
|
public void testSkipLong16() throws Exception {
|
||||||
setContents("22" + "0080");
|
setContents("22" + "0080");
|
||||||
r.skipInteger();
|
r.skipLong();
|
||||||
assertTrue(r.eof());
|
assertTrue(r.eof());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testReadInt32() throws Exception {
|
public void testReadLong32() throws Exception {
|
||||||
setContents("24" + "00008000" + "24" + "FFFF7FFF"
|
setContents("24" + "00008000" + "24" + "FFFF7FFF"
|
||||||
+ "24" + "7FFFFFFF" + "24" + "80000000");
|
+ "24" + "7FFFFFFF" + "24" + "80000000");
|
||||||
assertEquals(Short.MAX_VALUE + 1, r.readInteger());
|
assertEquals(Short.MAX_VALUE + 1, r.readLong());
|
||||||
assertEquals(Short.MIN_VALUE - 1, r.readInteger());
|
assertEquals(Short.MIN_VALUE - 1, r.readLong());
|
||||||
assertEquals(Integer.MAX_VALUE, r.readInteger());
|
assertEquals(Integer.MAX_VALUE, r.readLong());
|
||||||
assertEquals(Integer.MIN_VALUE, r.readInteger());
|
assertEquals(Integer.MIN_VALUE, r.readLong());
|
||||||
assertTrue(r.eof());
|
assertTrue(r.eof());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSkipInt32() throws Exception {
|
public void testSkipLong32() throws Exception {
|
||||||
setContents("24" + "00008000");
|
setContents("24" + "00008000");
|
||||||
r.skipInteger();
|
r.skipLong();
|
||||||
assertTrue(r.eof());
|
assertTrue(r.eof());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testReadInt64() throws Exception {
|
public void testReadLong64() throws Exception {
|
||||||
setContents("28" + "0000000080000000" + "28" + "FFFFFFFF7FFFFFFF"
|
setContents("28" + "0000000080000000" + "28" + "FFFFFFFF7FFFFFFF"
|
||||||
+ "28" + "7FFFFFFFFFFFFFFF" + "28" + "8000000000000000");
|
+ "28" + "7FFFFFFFFFFFFFFF" + "28" + "8000000000000000");
|
||||||
assertEquals(Integer.MAX_VALUE + 1L, r.readInteger());
|
assertEquals(Integer.MAX_VALUE + 1L, r.readLong());
|
||||||
assertEquals(Integer.MIN_VALUE - 1L, r.readInteger());
|
assertEquals(Integer.MIN_VALUE - 1L, r.readLong());
|
||||||
assertEquals(Long.MAX_VALUE, r.readInteger());
|
assertEquals(Long.MAX_VALUE, r.readLong());
|
||||||
assertEquals(Long.MIN_VALUE, r.readInteger());
|
assertEquals(Long.MIN_VALUE, r.readLong());
|
||||||
assertTrue(r.eof());
|
assertTrue(r.eof());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSkipInt64() throws Exception {
|
public void testSkipLong() throws Exception {
|
||||||
setContents("28" + "0000000080000000");
|
setContents("28" + "0000000080000000");
|
||||||
r.skipInteger();
|
r.skipLong();
|
||||||
assertTrue(r.eof());
|
assertTrue(r.eof());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testReadFloat() throws Exception {
|
public void testReadDouble() throws Exception {
|
||||||
// http://babbage.cs.qc.edu/IEEE-754/Decimal.html
|
// http://babbage.cs.qc.edu/IEEE-754/Decimal.html
|
||||||
// http://steve.hollasch.net/cgindex/coding/ieeefloat.html
|
// http://steve.hollasch.net/cgindex/coding/ieeefloat.html
|
||||||
setContents("38" + "0000000000000000" + "38" + "3FF0000000000000"
|
setContents("38" + "0000000000000000" + "38" + "3FF0000000000000"
|
||||||
+ "38" + "4000000000000000" + "38" + "BFF0000000000000"
|
+ "38" + "4000000000000000" + "38" + "BFF0000000000000"
|
||||||
+ "38" + "8000000000000000" + "38" + "FFF0000000000000"
|
+ "38" + "8000000000000000" + "38" + "FFF0000000000000"
|
||||||
+ "38" + "7FF0000000000000" + "38" + "7FF8000000000000");
|
+ "38" + "7FF0000000000000" + "38" + "7FF8000000000000");
|
||||||
assertEquals(0, Double.compare(0.0, r.readFloat()));
|
assertEquals(0, Double.compare(0.0, r.readDouble()));
|
||||||
assertEquals(0, Double.compare(1.0, r.readFloat()));
|
assertEquals(0, Double.compare(1.0, r.readDouble()));
|
||||||
assertEquals(0, Double.compare(2.0, r.readFloat()));
|
assertEquals(0, Double.compare(2.0, r.readDouble()));
|
||||||
assertEquals(0, Double.compare(-1.0, r.readFloat()));
|
assertEquals(0, Double.compare(-1.0, r.readDouble()));
|
||||||
assertEquals(0, Double.compare(-0.0, r.readFloat()));
|
assertEquals(0, Double.compare(-0.0, r.readDouble()));
|
||||||
assertEquals(0, Double.compare(Double.NEGATIVE_INFINITY, r.readFloat()));
|
assertEquals(0, Double.compare(Double.NEGATIVE_INFINITY,
|
||||||
assertEquals(0, Double.compare(Double.POSITIVE_INFINITY, r.readFloat()));
|
r.readDouble()));
|
||||||
assertTrue(Double.isNaN(r.readFloat()));
|
assertEquals(0, Double.compare(Double.POSITIVE_INFINITY,
|
||||||
|
r.readDouble()));
|
||||||
|
assertTrue(Double.isNaN(r.readDouble()));
|
||||||
assertTrue(r.eof());
|
assertTrue(r.eof());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSkipFloat() throws Exception {
|
public void testSkipFloat() throws Exception {
|
||||||
setContents("38" + "0000000000000000");
|
setContents("38" + "0000000000000000");
|
||||||
r.skipFloat();
|
r.skipDouble();
|
||||||
assertTrue(r.eof());
|
assertTrue(r.eof());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -377,17 +382,31 @@ public class BdfReaderImplTest extends BriarTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testReadList() throws Exception {
|
public void testReadList() throws Exception {
|
||||||
// A list containing 1, "foo", and 128
|
// A list containing 1, "foo", and null
|
||||||
setContents("60" + "21" + "01" +
|
setContents("60" + "21" + "01" +
|
||||||
"41" + "03" + "666F6F" +
|
"41" + "03" + "666F6F" +
|
||||||
"22" + "0080" + "80");
|
"00" + "80");
|
||||||
|
BdfList list = r.readList();
|
||||||
|
assertEquals(3, list.size());
|
||||||
|
assertEquals(1L, list.get(0));
|
||||||
|
assertEquals("foo", list.get(1));
|
||||||
|
assertEquals(NULL_VALUE, list.get(2));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testReadListManually() throws Exception {
|
||||||
|
// A list containing 1, "foo", and null
|
||||||
|
setContents("60" + "21" + "01" +
|
||||||
|
"41" + "03" + "666F6F" +
|
||||||
|
"00" + "80");
|
||||||
r.readListStart();
|
r.readListStart();
|
||||||
assertFalse(r.hasListEnd());
|
assertFalse(r.hasListEnd());
|
||||||
assertEquals(1, r.readInteger());
|
assertEquals(1, r.readLong());
|
||||||
assertFalse(r.hasListEnd());
|
assertFalse(r.hasListEnd());
|
||||||
assertEquals("foo", r.readString(1000));
|
assertEquals("foo", r.readString(1000));
|
||||||
assertFalse(r.hasListEnd());
|
assertFalse(r.hasListEnd());
|
||||||
assertEquals(128, r.readInteger());
|
assertTrue(r.hasNull());
|
||||||
|
r.readNull();
|
||||||
assertTrue(r.hasListEnd());
|
assertTrue(r.hasListEnd());
|
||||||
r.readListEnd();
|
r.readListEnd();
|
||||||
assertTrue(r.eof());
|
assertTrue(r.eof());
|
||||||
@@ -405,6 +424,19 @@ public class BdfReaderImplTest extends BriarTestCase {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testReadDictionary() throws Exception {
|
public void testReadDictionary() throws Exception {
|
||||||
|
// A dictionary containing "foo" -> 123 and "bar" -> null
|
||||||
|
setContents("70" + "41" + "03" + "666F6F" + "21" + "7B" +
|
||||||
|
"41" + "03" + "626172" + "00" + "80");
|
||||||
|
BdfDictionary dictionary = r.readDictionary();
|
||||||
|
assertEquals(2, dictionary.size());
|
||||||
|
assertTrue(dictionary.containsKey("foo"));
|
||||||
|
assertEquals(123L, dictionary.get("foo"));
|
||||||
|
assertTrue(dictionary.containsKey("bar"));
|
||||||
|
assertEquals(NULL_VALUE, dictionary.get("bar"));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testReadDictionaryManually() throws Exception {
|
||||||
// A dictionary containing "foo" -> 123 and "bar" -> null
|
// A dictionary containing "foo" -> 123 and "bar" -> null
|
||||||
setContents("70" + "41" + "03" + "666F6F" + "21" + "7B" +
|
setContents("70" + "41" + "03" + "666F6F" + "21" + "7B" +
|
||||||
"41" + "03" + "626172" + "00" + "80");
|
"41" + "03" + "626172" + "00" + "80");
|
||||||
@@ -412,7 +444,7 @@ public class BdfReaderImplTest extends BriarTestCase {
|
|||||||
assertFalse(r.hasDictionaryEnd());
|
assertFalse(r.hasDictionaryEnd());
|
||||||
assertEquals("foo", r.readString(1000));
|
assertEquals("foo", r.readString(1000));
|
||||||
assertFalse(r.hasDictionaryEnd());
|
assertFalse(r.hasDictionaryEnd());
|
||||||
assertEquals(123, r.readInteger());
|
assertEquals(123, r.readLong());
|
||||||
assertFalse(r.hasDictionaryEnd());
|
assertFalse(r.hasDictionaryEnd());
|
||||||
assertEquals("bar", r.readString(1000));
|
assertEquals("bar", r.readString(1000));
|
||||||
assertFalse(r.hasDictionaryEnd());
|
assertFalse(r.hasDictionaryEnd());
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import java.util.LinkedHashMap;
|
|||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.briarproject.api.data.BdfDictionary.NULL_VALUE;
|
||||||
import static org.junit.Assert.assertArrayEquals;
|
import static org.junit.Assert.assertArrayEquals;
|
||||||
|
|
||||||
public class BdfWriterImplTest extends BriarTestCase {
|
public class BdfWriterImplTest extends BriarTestCase {
|
||||||
@@ -41,17 +42,17 @@ public class BdfWriterImplTest extends BriarTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testWriteInteger() throws IOException {
|
public void testWriteLong() throws IOException {
|
||||||
w.writeInteger(0);
|
w.writeLong(0);
|
||||||
w.writeInteger(-1);
|
w.writeLong(-1);
|
||||||
w.writeInteger(Byte.MAX_VALUE);
|
w.writeLong(Byte.MAX_VALUE);
|
||||||
w.writeInteger(Byte.MIN_VALUE);
|
w.writeLong(Byte.MIN_VALUE);
|
||||||
w.writeInteger(Short.MAX_VALUE);
|
w.writeLong(Short.MAX_VALUE);
|
||||||
w.writeInteger(Short.MIN_VALUE);
|
w.writeLong(Short.MIN_VALUE);
|
||||||
w.writeInteger(Integer.MAX_VALUE);
|
w.writeLong(Integer.MAX_VALUE);
|
||||||
w.writeInteger(Integer.MIN_VALUE);
|
w.writeLong(Integer.MIN_VALUE);
|
||||||
w.writeInteger(Long.MAX_VALUE);
|
w.writeLong(Long.MAX_VALUE);
|
||||||
w.writeInteger(Long.MIN_VALUE);
|
w.writeLong(Long.MIN_VALUE);
|
||||||
// INTEGER_8 tag, 0, INTEGER_8 tag, -1, etc
|
// INTEGER_8 tag, 0, INTEGER_8 tag, -1, etc
|
||||||
checkContents("21" + "00" + "21" + "FF" +
|
checkContents("21" + "00" + "21" + "FF" +
|
||||||
"21" + "7F" + "21" + "80" +
|
"21" + "7F" + "21" + "80" +
|
||||||
@@ -61,17 +62,17 @@ public class BdfWriterImplTest extends BriarTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testWriteFloat() throws IOException {
|
public void testWriteDouble() throws IOException {
|
||||||
// http://babbage.cs.qc.edu/IEEE-754/Decimal.html
|
// http://babbage.cs.qc.edu/IEEE-754/Decimal.html
|
||||||
// 1 bit for sign, 11 for exponent, 52 for significand
|
// 1 bit for sign, 11 for exponent, 52 for significand
|
||||||
w.writeFloat(0.0); // 0 0 0 -> 0x0000000000000000
|
w.writeDouble(0.0); // 0 0 0 -> 0x0000000000000000
|
||||||
w.writeFloat(1.0); // 0 1023 1 -> 0x3FF0000000000000
|
w.writeDouble(1.0); // 0 1023 1 -> 0x3FF0000000000000
|
||||||
w.writeFloat(2.0); // 0 1024 1 -> 0x4000000000000000
|
w.writeDouble(2.0); // 0 1024 1 -> 0x4000000000000000
|
||||||
w.writeFloat(-1.0); // 1 1023 1 -> 0xBFF0000000000000
|
w.writeDouble(-1.0); // 1 1023 1 -> 0xBFF0000000000000
|
||||||
w.writeFloat(-0.0); // 1 0 0 -> 0x8000000000000000
|
w.writeDouble(-0.0); // 1 0 0 -> 0x8000000000000000
|
||||||
w.writeFloat(Double.NEGATIVE_INFINITY); // 1 2047 0 -> 0xFFF00000...
|
w.writeDouble(Double.NEGATIVE_INFINITY); // 1 2047 0 -> 0xFFF00000...
|
||||||
w.writeFloat(Double.POSITIVE_INFINITY); // 0 2047 0 -> 0x7FF00000...
|
w.writeDouble(Double.POSITIVE_INFINITY); // 0 2047 0 -> 0x7FF00000...
|
||||||
w.writeFloat(Double.NaN); // 0 2047 1 -> 0x7FF8000000000000
|
w.writeDouble(Double.NaN); // 0 2047 1 -> 0x7FF8000000000000
|
||||||
checkContents("38" + "0000000000000000" + "38" + "3FF0000000000000"
|
checkContents("38" + "0000000000000000" + "38" + "3FF0000000000000"
|
||||||
+ "38" + "4000000000000000" + "38" + "BFF0000000000000"
|
+ "38" + "4000000000000000" + "38" + "BFF0000000000000"
|
||||||
+ "38" + "8000000000000000" + "38" + "FFF0000000000000"
|
+ "38" + "8000000000000000" + "38" + "FFF0000000000000"
|
||||||
@@ -122,7 +123,7 @@ public class BdfWriterImplTest extends BriarTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testWriteBytes8() throws IOException {
|
public void testWriteRaw8() throws IOException {
|
||||||
byte[] longest = new byte[Byte.MAX_VALUE];
|
byte[] longest = new byte[Byte.MAX_VALUE];
|
||||||
String longHex = StringUtils.toHexString(longest);
|
String longHex = StringUtils.toHexString(longest);
|
||||||
w.writeRaw(new byte[] {1, 2, 3});
|
w.writeRaw(new byte[] {1, 2, 3});
|
||||||
@@ -132,7 +133,7 @@ public class BdfWriterImplTest extends BriarTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testWriteBytes16() throws IOException {
|
public void testWriteRaw16() throws IOException {
|
||||||
byte[] shortest = new byte[Byte.MAX_VALUE + 1];
|
byte[] shortest = new byte[Byte.MAX_VALUE + 1];
|
||||||
String shortHex = StringUtils.toHexString(shortest);
|
String shortHex = StringUtils.toHexString(shortest);
|
||||||
byte[] longest = new byte[Short.MAX_VALUE];
|
byte[] longest = new byte[Short.MAX_VALUE];
|
||||||
@@ -144,7 +145,7 @@ public class BdfWriterImplTest extends BriarTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testWriteBytes32() throws IOException {
|
public void testWriteRaw32() throws IOException {
|
||||||
byte[] shortest = new byte[Short.MAX_VALUE + 1];
|
byte[] shortest = new byte[Short.MAX_VALUE + 1];
|
||||||
String shortHex = StringUtils.toHexString(shortest);
|
String shortHex = StringUtils.toHexString(shortest);
|
||||||
w.writeRaw(shortest);
|
w.writeRaw(shortest);
|
||||||
@@ -166,10 +167,11 @@ public class BdfWriterImplTest extends BriarTestCase {
|
|||||||
List<Object> l = new ArrayList<Object>();
|
List<Object> l = new ArrayList<Object>();
|
||||||
l.add(1);
|
l.add(1);
|
||||||
l.add(null);
|
l.add(null);
|
||||||
|
l.add(NULL_VALUE);
|
||||||
l.add(2);
|
l.add(2);
|
||||||
w.writeList(l);
|
w.writeList(l);
|
||||||
// LIST tag, 1 as integer, NULL tag, 2 as integer, END tag
|
// LIST tag, 1 as integer, NULL tag, NULL tag, 2 as integer, END tag
|
||||||
checkContents("60" + "21" + "01" + "00" + "21" + "02" + "80");
|
checkContents("60" + "21" + "01" + "00" + "00" + "21" + "02" + "80");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -188,9 +190,9 @@ public class BdfWriterImplTest extends BriarTestCase {
|
|||||||
@Test
|
@Test
|
||||||
public void testWriteDelimitedList() throws IOException {
|
public void testWriteDelimitedList() throws IOException {
|
||||||
w.writeListStart();
|
w.writeListStart();
|
||||||
w.writeInteger(1);
|
w.writeLong(1);
|
||||||
w.writeString("foo");
|
w.writeString("foo");
|
||||||
w.writeInteger(128);
|
w.writeLong(128);
|
||||||
w.writeListEnd();
|
w.writeListEnd();
|
||||||
// LIST tag, 1 as integer, "foo" as string, 128 as integer, END tag
|
// LIST tag, 1 as integer, "foo" as string, 128 as integer, END tag
|
||||||
checkContents("60" + "21" + "01" +
|
checkContents("60" + "21" + "01" +
|
||||||
@@ -202,7 +204,7 @@ public class BdfWriterImplTest extends BriarTestCase {
|
|||||||
public void testWriteDelimitedDictionary() throws IOException {
|
public void testWriteDelimitedDictionary() throws IOException {
|
||||||
w.writeDictionaryStart();
|
w.writeDictionaryStart();
|
||||||
w.writeString("foo");
|
w.writeString("foo");
|
||||||
w.writeInteger(123);
|
w.writeLong(123);
|
||||||
w.writeString("bar");
|
w.writeString("bar");
|
||||||
w.writeNull();
|
w.writeNull();
|
||||||
w.writeDictionaryEnd();
|
w.writeDictionaryEnd();
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import org.briarproject.api.messaging.PrivateMessage;
|
|||||||
import org.briarproject.api.messaging.PrivateMessageFactory;
|
import org.briarproject.api.messaging.PrivateMessageFactory;
|
||||||
import org.briarproject.api.sync.GroupId;
|
import org.briarproject.api.sync.GroupId;
|
||||||
import org.briarproject.api.sync.MessageId;
|
import org.briarproject.api.sync.MessageId;
|
||||||
|
import org.briarproject.clients.ClientsModule;
|
||||||
import org.briarproject.contact.ContactModule;
|
import org.briarproject.contact.ContactModule;
|
||||||
import org.briarproject.crypto.CryptoModule;
|
import org.briarproject.crypto.CryptoModule;
|
||||||
import org.briarproject.data.DataModule;
|
import org.briarproject.data.DataModule;
|
||||||
@@ -56,10 +57,10 @@ public class ConstantsTest extends BriarTestCase {
|
|||||||
public ConstantsTest() throws Exception {
|
public ConstantsTest() throws Exception {
|
||||||
Injector i = Guice.createInjector(new TestDatabaseModule(),
|
Injector i = Guice.createInjector(new TestDatabaseModule(),
|
||||||
new TestLifecycleModule(), new TestSystemModule(),
|
new TestLifecycleModule(), new TestSystemModule(),
|
||||||
new ContactModule(), new CryptoModule(), new DatabaseModule(),
|
new ClientsModule(), new ContactModule(), new CryptoModule(),
|
||||||
new DataModule(), new EventModule(), new ForumModule(),
|
new DatabaseModule(), new DataModule(), new EventModule(),
|
||||||
new IdentityModule(), new MessagingModule(), new SyncModule(),
|
new ForumModule(), new IdentityModule(), new MessagingModule(),
|
||||||
new TransportModule());
|
new SyncModule(), new TransportModule());
|
||||||
crypto = i.getInstance(CryptoComponent.class);
|
crypto = i.getInstance(CryptoComponent.class);
|
||||||
authorFactory = i.getInstance(AuthorFactory.class);
|
authorFactory = i.getInstance(AuthorFactory.class);
|
||||||
privateMessageFactory = i.getInstance(PrivateMessageFactory.class);
|
privateMessageFactory = i.getInstance(PrivateMessageFactory.class);
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ import org.briarproject.api.transport.KeyManager;
|
|||||||
import org.briarproject.api.transport.StreamContext;
|
import org.briarproject.api.transport.StreamContext;
|
||||||
import org.briarproject.api.transport.StreamReaderFactory;
|
import org.briarproject.api.transport.StreamReaderFactory;
|
||||||
import org.briarproject.api.transport.StreamWriterFactory;
|
import org.briarproject.api.transport.StreamWriterFactory;
|
||||||
|
import org.briarproject.clients.ClientsModule;
|
||||||
import org.briarproject.contact.ContactModule;
|
import org.briarproject.contact.ContactModule;
|
||||||
import org.briarproject.crypto.CryptoModule;
|
import org.briarproject.crypto.CryptoModule;
|
||||||
import org.briarproject.data.DataModule;
|
import org.briarproject.data.DataModule;
|
||||||
@@ -86,10 +87,11 @@ public class SimplexMessagingIntegrationTest extends BriarTestCase {
|
|||||||
|
|
||||||
private Injector createInjector(File dir) {
|
private Injector createInjector(File dir) {
|
||||||
return Guice.createInjector(new TestDatabaseModule(dir),
|
return Guice.createInjector(new TestDatabaseModule(dir),
|
||||||
new TestSystemModule(), new ContactModule(), new CryptoModule(),
|
new TestSystemModule(), new ClientsModule(),
|
||||||
new DatabaseModule(), new DataModule(), new EventModule(),
|
new ContactModule(), new CryptoModule(), new DatabaseModule(),
|
||||||
new IdentityModule(), new LifecycleModule(),
|
new DataModule(), new EventModule(), new IdentityModule(),
|
||||||
new MessagingModule(), new SyncModule(), new TransportModule());
|
new LifecycleModule(), new MessagingModule(), new SyncModule(),
|
||||||
|
new TransportModule());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user