package jReto.integration;
import jReto.meta.PeerConfiguration;
import jReto.util.TestData;
import org.junit.Test;
import de.tum.in.www1.jReto.Connection;
import de.tum.in.www1.jReto.LocalPeer;
import de.tum.in.www1.jReto.util.CountDown;
/**
* Tests whether data is actually transferred correctly.
* */
public class TransferDataIntegrityTest {
@Test(timeout=1000)
public void testTransferDataIntegrityDirect() {
new TransferDataIntegrityTest().testTransferDataIntegrity(PeerConfiguration.directNeighborConfiguration());
}
@Test(timeout=1000)
public void testTransferDataIntegrity2Hop() {
new TransferDataIntegrityTest().testTransferDataIntegrity(PeerConfiguration.twoHopRoutedConfiguration());
}
@Test(timeout=1000)
public void testTransferDataIntegrity4Hop() {
new TransferDataIntegrityTest().testTransferDataIntegrity(PeerConfiguration.fourHopRoutedConfiguration());
}
@Test(timeout=1000)
public void testTransferDataIntegrityNontrivial() {
new TransferDataIntegrityTest().testTransferDataIntegrity(PeerConfiguration.nontrivial2HopNetworkConfiguration());
}
@Test(timeout=1000)
public void testTransferDataIntegrityDisconnectedPeers() {
new TransferDataIntegrityTest().testTransferDataIntegrity(PeerConfiguration.configurationWithDisconnectedPeers());
}
@Test(timeout=1000)
public void testTransferDataIntegrity2HopMulticast() {
new TransferDataIntegrityTest().testTransferDataIntegrity(PeerConfiguration.twoHopRoutedMulticastConfiguration());
}
@Test(timeout=1000)
public void testTransferDataIntegrity4HopMulticast() {
new TransferDataIntegrityTest().testTransferDataIntegrity(PeerConfiguration.fourHopRoutedMulticastConfiguration());
}
@Test(timeout=1000)
public void testTransferDataIntegrityNontrivialMulticast() {
new TransferDataIntegrityTest().testTransferDataIntegrity(PeerConfiguration.nontrivial2HopNetworkMulticastConfiguration());
}
@Test(timeout=1000)
public void testTransferDataIntegrityDisconnectedPeersMulticast() {
new TransferDataIntegrityTest().testTransferDataIntegrity(PeerConfiguration.multicastConfigurationWithDisconnectedPeers());
}
public void testTransferDataIntegrity(final PeerConfiguration peerConfiguration) {
final int dataLength = 10000;
final CountDown stopCountdown = new CountDown(peerConfiguration.destinations.size(), new Runnable() {
@Override
public void run() {
peerConfiguration.runloop.stop();
}
});
peerConfiguration.startAndExecuteAfterDiscovery(() -> {
for (LocalPeer peer: peerConfiguration.destinations) {
peer.setIncomingConnectionHandler((connectingPeer, connection) -> {
connection.setOnTransfer((transferConnection, transfer) -> {
transfer.setOnCompleteData((completeTransfer, data) -> {
TestData.verify(data, dataLength);
stopCountdown.countDown();
});
});
});
}
Connection connection = peerConfiguration.peer1.connect(peerConfiguration.getMulticastDestinations(peerConfiguration.peer1));
connection.send(TestData.generate(dataLength));
});
}
}