Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- @Test
- public void deconstructedPeerBondedObserverTriggered() throws Exception {
- final Map<BytesValue, MockPeerDiscoveryAgent> agents = new HashMap<>();
- final AtomicInteger nextAvailablePort = new AtomicInteger(1);
- final PeerBlacklist peerBlacklist = new PeerBlacklist();
- // Start an agent.
- final DiscoveryConfiguration discoveryConfiguration_0 = new DiscoveryConfiguration();
- discoveryConfiguration_0.setBindPort(nextAvailablePort.incrementAndGet());
- discoveryConfiguration_0.setActive(true);
- final PeerDiscoveryAgent peerDiscoveryAgent_0 =
- new MockPeerDiscoveryAgent(
- SECP256K1.KeyPair.generate(),
- discoveryConfiguration_0,
- () -> true,
- peerBlacklist,
- new NodeWhitelistController(PermissioningConfiguration.createDefault()),
- agents);
- peerDiscoveryAgent_0.start().get(5, TimeUnit.SECONDS);
- final BytesValue id_0 = peerDiscoveryAgent_0.getAdvertisedPeer().getId();
- // Start an agent.
- final DiscoveryConfiguration discoveryConfiguration_1 = new DiscoveryConfiguration();
- discoveryConfiguration_1.setBindPort(nextAvailablePort.incrementAndGet());
- discoveryConfiguration_1.setActive(true);
- final PeerDiscoveryAgent peerDiscoveryAgent_1 =
- new MockPeerDiscoveryAgent(
- SECP256K1.KeyPair.generate(),
- discoveryConfiguration_1,
- () -> true,
- peerBlacklist,
- new NodeWhitelistController(PermissioningConfiguration.createDefault()),
- agents);
- peerDiscoveryAgent_1.start().get(5, TimeUnit.SECONDS);
- final BytesValue id_1 = peerDiscoveryAgent_1.getAdvertisedPeer().getId();
- // Start an agent.
- final DiscoveryConfiguration discoveryConfiguration_2 = new DiscoveryConfiguration();
- discoveryConfiguration_2.setBindPort(1);
- final PeerDiscoveryAgent peerDiscoveryAgent_2 =
- new MockPeerDiscoveryAgent(
- SECP256K1.KeyPair.generate(),
- discoveryConfiguration_2,
- () -> true,
- peerBlacklist,
- new NodeWhitelistController(PermissioningConfiguration.createDefault()),
- agents);
- peerDiscoveryAgent_2.start().get(5, TimeUnit.SECONDS);
- final BytesValue id_2 = peerDiscoveryAgent_2.getAdvertisedPeer().getId();
- // A list of the above peers.
- final List<DiscoveryPeer> peerDiscoveryAgentList_A = Arrays.asList(peerDiscoveryAgent_0.getAdvertisedPeer(), peerDiscoveryAgent_1.getAdvertisedPeer(), peerDiscoveryAgent_2.getAdvertisedPeer());
- // Start an agent.
- final DiscoveryConfiguration discoveryConfiguration_3 = new DiscoveryConfiguration();
- discoveryConfiguration_3.setBootstrapPeers(peerDiscoveryAgentList_A);
- discoveryConfiguration_3.setBindPort(nextAvailablePort.incrementAndGet());
- discoveryConfiguration_3.setActive(true);
- final PeerDiscoveryAgent peerDiscoveryAgent_3 =
- new MockPeerDiscoveryAgent(
- SECP256K1.KeyPair.generate(),
- discoveryConfiguration_3,
- () -> true,
- peerBlacklist,
- new NodeWhitelistController(PermissioningConfiguration.createDefault()),
- agents);
- peerDiscoveryAgent_3.start().get(5, TimeUnit.SECONDS);
- final BytesValue id_3 = peerDiscoveryAgent_3.getAdvertisedPeer().getId();
- // Start an agent.
- final DiscoveryConfiguration discoveryConfiguration_4 = new DiscoveryConfiguration();
- discoveryConfiguration_4.setBootstrapPeers(peerDiscoveryAgentList_A);
- discoveryConfiguration_4.setBindPort(nextAvailablePort.incrementAndGet());
- discoveryConfiguration_4.setActive(true);
- final PeerDiscoveryAgent peerDiscoveryAgent_4 =
- new MockPeerDiscoveryAgent(
- SECP256K1.KeyPair.generate(),
- discoveryConfiguration_4,
- () -> true,
- peerBlacklist,
- new NodeWhitelistController(PermissioningConfiguration.createDefault()),
- agents);
- peerDiscoveryAgent_4.start().get(5, TimeUnit.SECONDS);
- final BytesValue id_4 = peerDiscoveryAgent_4.getAdvertisedPeer().getId();
- // A list of these two peers.
- final List<DiscoveryPeer> peerDiscoveryAgentList_B = Arrays.asList(peerDiscoveryAgent_3.getAdvertisedPeer(), peerDiscoveryAgent_4.getAdvertisedPeer());
- // ...
- final DiscoveryConfiguration discoveryConfiguration_TEST = new DiscoveryConfiguration();
- discoveryConfiguration_TEST.setBootstrapPeers(peerDiscoveryAgentList_B);
- discoveryConfiguration_TEST.setBindPort(nextAvailablePort.incrementAndGet());
- discoveryConfiguration_TEST.setActive(true);
- final PeerDiscoveryAgent peerDiscoveryAgent_TEST =
- new MockPeerDiscoveryAgent(
- SECP256K1.KeyPair.generate(),
- discoveryConfiguration_TEST,
- () -> true,
- peerBlacklist,
- new NodeWhitelistController(PermissioningConfiguration.createDefault()),
- agents);
- // A queue for storing peer bonded events.
- final ArrayBlockingQueue<PeerBondedEvent> peerBondedEventQueue = new ArrayBlockingQueue<>(10);
- peerDiscoveryAgent_TEST.observePeerBondedEvents(peerBondedEventQueue::add);
- assertThatCode(() -> peerDiscoveryAgent_TEST.start().get(5, TimeUnit.SECONDS))
- .doesNotThrowAnyException();
- // Wait until we've received 5 events.
- try {
- await()
- .atMost(5, TimeUnit.SECONDS)
- .untilAsserted(() -> assertThat(peerBondedEventQueue.size()).isEqualTo(5));
- } catch (final ConditionTimeoutException | AssertionError e) {
- final List<String> events = new ArrayList<>();
- peerBondedEventQueue.forEach(evt -> events.add(evt.toString()));
- LOG.error("Queue:\n" + String.join("\n", events), e);
- throw e;
- }
- // Wait one second and check we've received no more events.
- Thread.sleep(1000);
- assertThat(peerBondedEventQueue.size()).isEqualTo(5);
- // Extract all events and perform asserts on them.
- final List<PeerBondedEvent> events = new ArrayList<>(5);
- peerBondedEventQueue.drainTo(events, 5);
- final List<DiscoveryPeer> peerDiscoveryAgentList = Arrays.asList(peerDiscoveryAgent_0.getAdvertisedPeer(),
- peerDiscoveryAgent_1.getAdvertisedPeer(),
- peerDiscoveryAgent_2.getAdvertisedPeer(),
- peerDiscoveryAgent_3.getAdvertisedPeer(),
- peerDiscoveryAgent_4.getAdvertisedPeer());
- assertThat(events)
- .extracting(PeerDiscoveryEvent::getPeer)
- .extracting(DiscoveryPeer::getId)
- .containsExactlyInAnyOrderElementsOf(
- peerDiscoveryAgentList.stream().map(DiscoveryPeer::getId).collect(Collectors.toList()));
- assertThat(events).extracting(PeerDiscoveryEvent::getTimestamp).isSorted();
- }
Add Comment
Please, Sign In to add comment