package jReto.integration; import java.util.Arrays; import jReto.module.dummy.DummyAddress; import jReto.module.dummy.DummyConnection; import jReto.module.dummy.DummyModule; import jReto.module.dummy.DummyNetworkInterface; import jReto.util.Condition; import jReto.util.RunLoop; import jReto.util.TestData; import org.junit.Test; import de.tum.in.www1.jReto.Connection; import de.tum.in.www1.jReto.LocalPeer; public class AutoConnectionUpgradeTest { Condition createdFastConnection = new Condition("created fast connection"); Condition closedSlowConnection = new Condition("closed slow connection"); RunLoop runloop = new RunLoop(false); DummyNetworkInterface slowInterface = new DummyNetworkInterface("testSlow", runloop, 1024, 2); DummyNetworkInterface fastInterface = new DummyNetworkInterface("testFast", runloop, 1024, 1); LocalPeer localPeer1; LocalPeer localPeer2; int dataLength = 1000000; boolean addedFastInterface = false; @Test(timeout=1000000) public void testAutoConnectionUpgrade() { fastInterface.connectionCreatedHook = new DummyNetworkInterface.DummyConnectionCreatedHook() { @Override public void createdConnection(DummyAddress address, DummyConnection connection) { createdFastConnection.confirm(); } }; slowInterface.connectionClosedHook = new DummyNetworkInterface.DummyConnectionClosedHook() { @Override public void closedConnections(DummyAddress address, DummyConnection outConnection, DummyConnection inConnection) { closedSlowConnection.confirm(); } }; localPeer1 = new LocalPeer(Arrays.asList(new DummyModule(slowInterface, runloop)), runloop); localPeer2 = new LocalPeer(Arrays.asList(new DummyModule(slowInterface, runloop)), runloop); localPeer1.start(discoveredPeer -> { Connection connection = discoveredPeer.connect(); connection.send(TestData.generate(dataLength)); }, p -> {}); localPeer2.start(p -> {}, p -> {}, (p, connection) -> { connection.setOnTransfer((c, transfer) -> { transfer.setOnCompleteData((t, d) -> { TestData.verify(d, dataLength); Condition.verifyAll(createdFastConnection, closedSlowConnection); runloop.stop(); }); transfer.setOnProgress(t -> { if (!addedFastInterface) { addedFastInterface = true; localPeer1.addModule(new DummyModule(fastInterface, runloop)); localPeer2.addModule(new DummyModule(fastInterface, runloop)); } }); }); }); } }