mirror of
https://github.com/Qortal/altcoinj.git
synced 2025-11-02 05:27:17 +00:00
PeerGroup: fix a regression that stopped Bloom filters being sent when a key is added, and add a unit test covering that behaviour.
Resolves issue 524.
This commit is contained in:
@@ -805,11 +805,12 @@ public class PeerGroup extends AbstractExecutionThreadService implements Transac
|
||||
BloomFilter filter = new BloomFilter(lastBloomFilterElementCount, bloomFilterFPRate, bloomFilterTweak, bloomFlags);
|
||||
for (PeerFilterProvider p : peerFilterProviders)
|
||||
filter.merge(p.getBloomFilter(lastBloomFilterElementCount, bloomFilterFPRate, bloomFilterTweak));
|
||||
bloomFilter = filter;
|
||||
|
||||
boolean changed = !filter.equals(bloomFilter);
|
||||
boolean send = false;
|
||||
|
||||
bloomFilter = filter;
|
||||
|
||||
switch (mode) {
|
||||
case SEND_IF_CHANGED: send = changed; break;
|
||||
case DONT_SEND: send = false; break;
|
||||
|
||||
@@ -540,4 +540,29 @@ public class PeerGroupTest extends TestWithPeerGroup {
|
||||
assertTrue(p3.lastReceivedFilter.contains(key.getPubKey()));
|
||||
assertTrue(p3.lastReceivedFilter.contains(outpoint.bitcoinSerialize()));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testBloomResendOnNewKey() throws Exception {
|
||||
// Check that when we add a new key to the wallet, the Bloom filter is re-calculated and re-sent.
|
||||
peerGroup.startAndWait();
|
||||
// Create a couple of peers.
|
||||
InboundMessageQueuer p1 = connectPeer(1);
|
||||
InboundMessageQueuer p2 = connectPeer(2);
|
||||
BloomFilter f1 = p1.lastReceivedFilter;
|
||||
BloomFilter f2 = p2.lastReceivedFilter;
|
||||
final ECKey key = new ECKey();
|
||||
wallet.addKey(key);
|
||||
peerGroup.waitForJobQueue();
|
||||
BloomFilter f3 = (BloomFilter) outbound(p1);
|
||||
BloomFilter f4 = (BloomFilter) outbound(p2);
|
||||
assertTrue(outbound(p1) instanceof MemoryPoolMessage);
|
||||
assertTrue(outbound(p2) instanceof MemoryPoolMessage);
|
||||
assertNotEquals(f1, f3);
|
||||
assertNotEquals(f2, f4);
|
||||
assertEquals(f3, f4);
|
||||
assertTrue(f3.contains(key.getPubKey()));
|
||||
assertTrue(f3.contains(key.getPubKeyHash()));
|
||||
assertFalse(f1.contains(key.getPubKey()));
|
||||
assertFalse(f1.contains(key.getPubKeyHash()));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user