@Test
public void testIndirectReplication1() throws Exception {
final CountDownLatch latch = new CountDownLatch(1);
final AtomicBoolean testCopied = new AtomicBoolean();
PeerDHT master = null;
try {
AutomaticFuture af = new AutomaticFuture() {
@SuppressWarnings("unchecked")
@Override
public void futureCreated(BaseFuture future) {
if(future instanceof FutureDone) {
final FutureDone<SyncStat> f = (FutureDone<SyncStat>) future;
f.addListener(new BaseFutureAdapter<BaseFuture>() {
@Override
public void operationComplete(BaseFuture future)
throws Exception {
if(future.isFailed()) {
System.err.println(future.failedReason());
}
System.err.println(future.isSuccess() +"/"+ f.object());
if(!testCopied.get()) {
testCopied.set(f.object().dataCopy() == 52);
}
latch.countDown();
}
});
}
}
};
PeerDHT[] peers = Utils2.createNodes(N, rnd, port, af, true, false, true);
master = peers[0];
final Number160 locationKey = new Number160(12345);
NavigableSet<PeerAddress> closestPeersIndexes = findTheClosestPeer(peers, locationKey);
Iterator<PeerAddress> iterator = closestPeersIndexes.iterator();
PeerAddress Pa = iterator.next();
PeerAddress Pb = iterator.next();
PeerAddress Pc = iterator.next();
PeerDHT A = find(peers, Pa);
PeerDHT B = find(peers, Pb);
PeerDHT C = find(peers, Pc);
System.err.println("peer A "+A.peerAddress());
System.err.println("peer B "+B.peerAddress());
System.err.println("peer C "+C.peerAddress());
Data data1 = new Data("CommunicationSystemsDatabaseSoftwareEngineeringRequirementsAnalysis..");
Data data2 = new Data("CommunicationSystemsDatabaseSoftwarasdfkjasdklfjasdfklajsdfaslkjfsdfd");
Data data3 = new Data(
"oesauhtnoaetnsuuhooaeuoaeuoauoaeuoaeuoaeuaetnsauosanuhatns");
//Data data3 = new Data("CommunicationSystemsDatabaseSoftwarasdfkjasdklfjasdfklajsdfaslkjfsdfa");
//A.getPeerBean().storage().put(new Number640(locationKey, Number160.ZERO, Number160.ZERO, Number160.ZERO), data1, null, false, false);
//B.getPeerBean().storage().put(new Number640(locationKey, Number160.ZERO, Number160.ZERO, Number160.ZERO), data2, null, false, false);
//C.getPeerBean().storage().put(new Number640(locationKey, Number160.ZERO, Number160.ZERO, Number160.ZERO), data3, null, false, false);
A.put(locationKey).data(data1).start().awaitUninterruptibly();
B.put(locationKey).data(data2).start().awaitUninterruptibly();
C.put(locationKey).data(data3).start().awaitUninterruptibly();
Utils2.perfectRouting(peers);
Data data = A.storageLayer().get(new Number640(locationKey, Number160.ZERO, Number160.ZERO, Number160.ZERO));
byte[] valueOfA = data.toBytes();
data = B.storageLayer().get(new Number640(locationKey, Number160.ZERO, Number160.ZERO, Number160.ZERO));
byte[] valueOfB = data.toBytes();
data = C.storageLayer().get(new Number640(locationKey, Number160.ZERO, Number160.ZERO, Number160.ZERO));
byte[] valueOfC = data.toBytes();
Assert.assertArrayEquals(valueOfA, valueOfB);
Assert.assertArrayEquals(valueOfA, valueOfC);
latch.await();