3
0
mirror of https://github.com/Qortal/altcoinj.git synced 2025-02-12 10:15:52 +00:00

Refactor TestWithPeerGroup a bit to make it more reusable in apps.

This commit is contained in:
Mike Hearn 2014-05-20 16:36:29 +02:00
parent 9e5a06120a
commit 2548076fa6
4 changed files with 42 additions and 30 deletions

View File

@ -14,20 +14,20 @@
* limitations under the License.
*/
package com.google.bitcoin.core;
package com.google.bitcoin.testing;
import com.google.bitcoin.core.*;
import com.google.bitcoin.net.BlockingClientManager;
import com.google.bitcoin.net.NioClientManager;
import com.google.bitcoin.params.UnitTestParams;
import com.google.bitcoin.store.BlockStore;
import com.google.bitcoin.testing.InboundMessageQueuer;
import com.google.bitcoin.testing.TestWithNetworkConnections;
import com.google.bitcoin.store.MemoryBlockStore;
import com.google.common.base.Preconditions;
import java.net.InetSocketAddress;
import static com.google.common.base.Preconditions.checkArgument;
import static org.junit.Assert.assertTrue;
import static com.google.common.base.Preconditions.checkState;
/**
* Utility class that makes it easy to work with mock NetworkConnections in PeerGroups.
@ -46,6 +46,11 @@ public class TestWithPeerGroup extends TestWithNetworkConnections {
this.clientType = clientType;
}
@Override
public void setUp() throws Exception {
setUp(new MemoryBlockStore(params));
}
public void setUp(BlockStore blockStore) throws Exception {
super.setUp(blockStore);
@ -55,12 +60,25 @@ public class TestWithPeerGroup extends TestWithNetworkConnections {
initPeerGroup();
}
@Override
public void tearDown() {
try {
super.tearDown();
Utils.finishMockSleep();
peerGroup.stopAsync();
peerGroup.awaitTerminated();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
protected void initPeerGroup() {
if (clientType == ClientType.NIO_CLIENT_MANAGER)
peerGroup = new PeerGroup(unitTestParams, blockChain, new NioClientManager());
else
peerGroup = new PeerGroup(unitTestParams, blockChain, new BlockingClientManager());
peerGroup.setPingIntervalMsec(0); // Disable the pings as they just get in the way of most tests.
peerGroup.addWallet(wallet);
}
protected InboundMessageQueuer connectPeerWithoutVersionExchange(int id) throws Exception {
@ -82,12 +100,7 @@ public class TestWithPeerGroup extends TestWithNetworkConnections {
// Complete handshake with the peer - send/receive version(ack)s, receive bloom filter
writeTarget.sendMessage(versionMessage);
writeTarget.sendMessage(new VersionAck());
assertTrue(writeTarget.nextMessageBlocking() instanceof VersionMessage);
assertTrue(writeTarget.nextMessageBlocking() instanceof VersionAck);
if (versionMessage.isBloomFilteringSupported()) {
assertTrue(writeTarget.nextMessageBlocking() instanceof BloomFilter);
assertTrue(writeTarget.nextMessageBlocking() instanceof MemoryPoolMessage);
}
stepThroughInit(versionMessage, writeTarget);
return writeTarget;
}
@ -103,12 +116,16 @@ public class TestWithPeerGroup extends TestWithNetworkConnections {
// Complete handshake with the peer - send/receive version(ack)s, receive bloom filter
writeTarget.sendMessage(versionMessage);
writeTarget.sendMessage(new VersionAck());
assertTrue(writeTarget.nextMessageBlocking() instanceof VersionMessage);
assertTrue(writeTarget.nextMessageBlocking() instanceof VersionAck);
if (versionMessage.isBloomFilteringSupported()) {
assertTrue(writeTarget.nextMessageBlocking() instanceof BloomFilter);
assertTrue(writeTarget.nextMessageBlocking() instanceof MemoryPoolMessage);
}
stepThroughInit(versionMessage, writeTarget);
return writeTarget;
}
private void stepThroughInit(VersionMessage versionMessage, InboundMessageQueuer writeTarget) throws InterruptedException {
checkState(writeTarget.nextMessageBlocking() instanceof VersionMessage);
checkState(writeTarget.nextMessageBlocking() instanceof VersionAck);
if (versionMessage.isBloomFilteringSupported()) {
checkState(writeTarget.nextMessageBlocking() instanceof BloomFilter);
checkState(writeTarget.nextMessageBlocking() instanceof MemoryPoolMessage);
}
}
}

View File

@ -21,6 +21,7 @@ import com.google.bitcoin.core.TransactionConfidence.ConfidenceType;
import com.google.bitcoin.params.UnitTestParams;
import com.google.bitcoin.store.MemoryBlockStore;
import com.google.bitcoin.testing.InboundMessageQueuer;
import com.google.bitcoin.testing.TestWithPeerGroup;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;

View File

@ -20,9 +20,9 @@ package com.google.bitcoin.core;
import com.google.bitcoin.net.discovery.PeerDiscovery;
import com.google.bitcoin.net.discovery.PeerDiscoveryException;
import com.google.bitcoin.params.UnitTestParams;
import com.google.bitcoin.store.MemoryBlockStore;
import com.google.bitcoin.testing.FakeTxBuilder;
import com.google.bitcoin.testing.InboundMessageQueuer;
import com.google.bitcoin.testing.TestWithPeerGroup;
import com.google.bitcoin.utils.Threading;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
@ -70,6 +70,7 @@ public class PeerGroupTest extends TestWithPeerGroup {
@Override
@Before
public void setUp() throws Exception {
super.setUp();
peerToMessageCount = new HashMap<Peer, AtomicInteger>();
connectedPeers = new LinkedBlockingQueue<Peer>();
disconnectedPeers = new LinkedBlockingQueue<Peer>();
@ -96,16 +97,12 @@ public class PeerGroupTest extends TestWithPeerGroup {
return m;
}
};
super.setUp(new MemoryBlockStore(UnitTestParams.get()));
peerGroup.addWallet(wallet);
}
@Override
@After
public void tearDown() throws Exception {
public void tearDown() {
super.tearDown();
Utils.finishMockSleep();
peerGroup.stopAsync();
peerGroup.awaitTerminated();
}
@Test

View File

@ -18,9 +18,9 @@
package com.google.bitcoin.core;
import com.google.bitcoin.params.UnitTestParams;
import com.google.bitcoin.store.MemoryBlockStore;
import com.google.bitcoin.testing.FakeTxBuilder;
import com.google.bitcoin.testing.InboundMessageQueuer;
import com.google.bitcoin.testing.TestWithPeerGroup;
import com.google.bitcoin.utils.Threading;
import com.google.common.util.concurrent.ListenableFuture;
import org.junit.After;
@ -35,7 +35,6 @@ import java.util.Random;
import static com.google.common.base.Preconditions.checkNotNull;
import static org.junit.Assert.*;
import static org.junit.Assert.assertEquals;
@RunWith(value = Parameterized.class)
public class TransactionBroadcastTest extends TestWithPeerGroup {
@ -55,8 +54,7 @@ public class TransactionBroadcastTest extends TestWithPeerGroup {
@Before
public void setUp() throws Exception {
Utils.setMockClock(); // Use mock clock
super.setUp(new MemoryBlockStore(UnitTestParams.get()));
peerGroup.addWallet(wallet);
super.setUp();
// Fix the random permutation that TransactionBroadcast uses to shuffle the peers.
TransactionBroadcast.random = new Random(0);
peerGroup.setMinBroadcastConnections(2);
@ -64,11 +62,10 @@ public class TransactionBroadcastTest extends TestWithPeerGroup {
peerGroup.awaitRunning();
}
@Override
@After
public void tearDown() throws Exception {
public void tearDown() {
super.tearDown();
peerGroup.stopAsync();
peerGroup.awaitTerminated();
}
@Test