Successful full-project build.

Still untested Bulletin Board Client.
Bulletin-Board-Client-phase_1
Arbel Deutsch Peled 2015-12-12 13:12:35 +02:00
parent 975ad340be
commit 13733e6610
2 changed files with 111 additions and 31 deletions

View File

@ -77,52 +77,52 @@ public class BulletinClientWorker implements Callable<BulletinClientJobResult> {
WebTarget webTarget; WebTarget webTarget;
Response response; Response response;
job.shuffleAddresses(); // This is done to randomize the order of access to servers primarily for READ operations
String requestPath; String requestPath;
Message msg; Message msg;
Message payload = job.getPayload();
BulletinBoardMessageList msgList; BulletinBoardMessageList msgList;
int count = 0; // Used to count number of servers which contain the required message in a GET_REDUNDANCY request. int count = 0; // Used to count number of servers which contain the required message in a GET_REDUNDANCY request.
job.shuffleAddresses(); // This is done to randomize the order of access to servers primarily for READ operations
// Prepare the request. // Prepare the request.
switch(job.getJobType()) { switch(job.getJobType()) {
case POST_MESSAGE: case POST_MESSAGE:
// Make sure the payload is a BulletinBoardMessage // Make sure the payload is a BulletinBoardMessage
if (!(job.getPayload() instanceof BulletinBoardMessage)) { if (!(payload instanceof BulletinBoardMessage)) {
throw new IllegalArgumentException("Cannot post an object that is not an instance of BulletinBoardMessage"); throw new IllegalArgumentException("Cannot post an object that is not an instance of BulletinBoardMessage");
} }
msg = job.getPayload(); msg = payload;
requestPath = Constants.POST_MESSAGE_PATH; requestPath = Constants.POST_MESSAGE_PATH;
break; break;
case READ_MESSAGES: case READ_MESSAGES:
// Make sure the payload is a MessageFilterList // Make sure the payload is a MessageFilterList
if (!(job.getPayload() instanceof MessageFilterList)) { if (!(payload instanceof MessageFilterList)) {
throw new IllegalArgumentException("Read failed: an instance of MessageFilterList is required as payload for a READ_MESSAGES operation"); throw new IllegalArgumentException("Read failed: an instance of MessageFilterList is required as payload for a READ_MESSAGES operation");
} }
msg = job.getPayload(); msg = payload;
requestPath = Constants.READ_MESSAGES_PATH; requestPath = Constants.READ_MESSAGES_PATH;
break; break;
case GET_REDUNDANCY: case GET_REDUNDANCY:
// Make sure the payload is a BulletinBoardMessage // Make sure the payload is a MessageId
if (!(job.getPayload() instanceof BulletinBoardMessage)) { if (!(payload instanceof MessageID)) {
throw new IllegalArgumentException("Cannot search for an object that is not an instance of BulletinBoardMessage"); throw new IllegalArgumentException("Cannot search for an object that is not an instance of BulletinBoardMessage");
} }
requestPath = Constants.READ_MESSAGES_PATH; requestPath = Constants.READ_MESSAGES_PATH;
// Create a MsgID from the
digest.update((BulletinBoardMessage) job.getPayload());
msg = MessageFilterList.newBuilder() msg = MessageFilterList.newBuilder()
.addFilter(MessageFilter.newBuilder() .addFilter(MessageFilter.newBuilder()
.setType(FilterType.MSG_ID) .setType(FilterType.MSG_ID)
.setId(ByteString.copyFrom(digest.digest())) .setId(payload.toByteString())
.build() .build()
).build(); ).build();

View File

@ -1,17 +1,24 @@
import com.google.protobuf.ByteString; import com.google.protobuf.ByteString;
import com.google.protobuf.Message;
import meerkat.bulletinboard.BulletinBoardClient; import meerkat.bulletinboard.BulletinBoardClient;
import meerkat.bulletinboard.SimpleBulletinBoardClient; import meerkat.bulletinboard.BulletinBoardClient.ClientCallback;
import meerkat.comm.CommunicationException; import meerkat.bulletinboard.ThreadedBulletinBoardClient;
import meerkat.protobuf.BulletinBoardAPI.*; import meerkat.protobuf.BulletinBoardAPI.*;
import meerkat.protobuf.Crypto; import meerkat.protobuf.Crypto;
import meerkat.protobuf.Voting.*;
import meerkat.util.BulletinBoardMessageComparator; import meerkat.util.BulletinBoardMessageComparator;
import org.junit.Before; import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import static java.lang.Thread.sleep;
import static org.junit.Assert.*; import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*; import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.number.OrderingComparison.*;
import java.util.Comparator; import java.util.Comparator;
import java.util.Iterator;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
@ -20,8 +27,74 @@ import java.util.List;
*/ */
public class BulletinBoardClientIntegrationTest { public class BulletinBoardClientIntegrationTest {
private class PostCallback implements ClientCallback<Object>{
@Override
public void handleCallback(Object msg) {}
@Override
public void handleFailure(Throwable t) {
System.err.println(t.getCause() + "\n" + t.getMessage());
assert false;
}
}
private class RedundancyCallback implements ClientCallback<Float>{
private float minRedundancy;
public RedundancyCallback(float minRedundancy) {
this.minRedundancy = minRedundancy;
}
@Override
public void handleCallback(Float redundancy) {
assertThat(redundancy, greaterThanOrEqualTo(minRedundancy));
}
@Override
public void handleFailure(Throwable t) {
System.err.println(t.getCause() + "\n" + t.getMessage());
assert false;
}
}
private class ReadCallback implements ClientCallback<List<BulletinBoardMessage>>{
private List<BulletinBoardMessage> expectedMsgList;
public ReadCallback(List<BulletinBoardMessage> expectedMsgList) {
this.expectedMsgList = expectedMsgList;
}
@Override
public void handleCallback(List<BulletinBoardMessage> messages) {
BulletinBoardMessageComparator msgComparator = new BulletinBoardMessageComparator();
assertThat(messages.size(), is(expectedMsgList.size()));
Iterator<BulletinBoardMessage> expectedMessageIterator = expectedMsgList.iterator();
Iterator<BulletinBoardMessage> receivedMessageIterator = messages.iterator();
while (expectedMessageIterator.hasNext()) {
assertThat(msgComparator.compare(expectedMessageIterator.next(), receivedMessageIterator.next()), is(0));
}
}
@Override
public void handleFailure(Throwable t) {
System.err.println(t.getCause() + "\n" + t.getMessage());
assert false;
}
}
private BulletinBoardClient bulletinBoardClient; private BulletinBoardClient bulletinBoardClient;
private PostCallback postCallback;
private RedundancyCallback redundancyCallback;
private ReadCallback readCallback;
private static String PROP_GETTY_URL = "gretty.httpBaseURI"; private static String PROP_GETTY_URL = "gretty.httpBaseURI";
private static String DEFAULT_BASE_URL = "http://localhost:8081"; private static String DEFAULT_BASE_URL = "http://localhost:8081";
private static String BASE_URL = System.getProperty(PROP_GETTY_URL, DEFAULT_BASE_URL); private static String BASE_URL = System.getProperty(PROP_GETTY_URL, DEFAULT_BASE_URL);
@ -29,17 +102,23 @@ public class BulletinBoardClientIntegrationTest {
@Before @Before
public void init(){ public void init(){
bulletinBoardClient = new SimpleBulletinBoardClient(); bulletinBoardClient = new ThreadedBulletinBoardClient();
List<String> testDB = new LinkedList<String>(); List<String> testDB = new LinkedList<String>();
testDB.add(BASE_URL); testDB.add(BASE_URL);
bulletinBoardClient.init(testDB); bulletinBoardClient.init(BulletinBoardClientParams.newBuilder()
.addBulletinBoardAddress("http://localhost:8081")
.setMinRedundancy((float) 1.0)
.build());
postCallback = new PostCallback();
redundancyCallback = new RedundancyCallback((float) 1.0);
} }
@Test @Test
public void postTest(){ public void postTest() {
byte[] b1 = {(byte) 1, (byte) 2, (byte) 3, (byte) 4}; byte[] b1 = {(byte) 1, (byte) 2, (byte) 3, (byte) 4};
byte[] b2 = {(byte) 11, (byte) 12, (byte) 13, (byte) 14}; byte[] b2 = {(byte) 11, (byte) 12, (byte) 13, (byte) 14};
@ -73,15 +152,15 @@ public class BulletinBoardClientIntegrationTest {
.build()) .build())
.build(); .build();
messageID = bulletinBoardClient.postMessage(msg,postCallback);
try { try {
messageID = bulletinBoardClient.postMessage(msg); sleep(2000);
} catch (CommunicationException e) { } catch (InterruptedException e) {
System.err.println("Error posting to BB Server: " + e.getMessage()); e.printStackTrace();
assert false;
return;
} }
assertThat(bulletinBoardClient.getRedundancy(messageID), is((float) 1.00)); bulletinBoardClient.getRedundancy(messageID,redundancyCallback);
filterList = MessageFilterList.newBuilder() filterList = MessageFilterList.newBuilder()
.addFilter( .addFilter(
@ -90,19 +169,20 @@ public class BulletinBoardClientIntegrationTest {
.setTag("Signature") .setTag("Signature")
.build() .build()
) )
// .addFilter( .addFilter(
// MessageFilter.newBuilder() MessageFilter.newBuilder()
// .setType(FilterType.TAG) .setType(FilterType.TAG)
// .setTag("Trustee") .setTag("Trustee")
// .build() .build()
// ) )
.build(); .build();
msgList = bulletinBoardClient.readMessages(filterList); msgList = new LinkedList<BulletinBoardMessage>();
msgList.add(msg);
assertThat(msgList.size(), is(1)); readCallback = new ReadCallback(msgList);
assertThat(msgComparator.compare(msgList.iterator().next(), msg), is(0)); bulletinBoardClient.readMessages(filterList, readCallback);
} }