Rework discover to handle additional parameters, and be unit-testable
This commit is contained in:
parent
5b7d5e2e02
commit
6ff2a0a75e
|
@ -5,7 +5,7 @@ use rayon::prelude::*;
|
||||||
use solana::cluster_info::FULLNODE_PORT_RANGE;
|
use solana::cluster_info::FULLNODE_PORT_RANGE;
|
||||||
use solana::contact_info::ContactInfo;
|
use solana::contact_info::ContactInfo;
|
||||||
use solana::gen_keys::GenKeys;
|
use solana::gen_keys::GenKeys;
|
||||||
use solana::gossip_service::discover;
|
use solana::gossip_service::discover_nodes;
|
||||||
use solana_client::thin_client::create_client;
|
use solana_client::thin_client::create_client;
|
||||||
use solana_client::thin_client::ThinClient;
|
use solana_client::thin_client::ThinClient;
|
||||||
use solana_drone::drone::request_airdrop_transaction;
|
use solana_drone::drone::request_airdrop_transaction;
|
||||||
|
@ -55,7 +55,7 @@ pub fn do_bench_tps(config: Config) {
|
||||||
converge_only,
|
converge_only,
|
||||||
} = config;
|
} = config;
|
||||||
|
|
||||||
let nodes = discover(&network, num_nodes).unwrap_or_else(|err| {
|
let nodes = discover_nodes(&network, num_nodes).unwrap_or_else(|err| {
|
||||||
eprintln!("Failed to discover {} nodes: {:?}", num_nodes, err);
|
eprintln!("Failed to discover {} nodes: {:?}", num_nodes, err);
|
||||||
exit(1);
|
exit(1);
|
||||||
});
|
});
|
||||||
|
|
|
@ -51,10 +51,10 @@ At test start, the cluster has already been established and is fully connected.
|
||||||
The test can discover most of the available nodes over a few second.
|
The test can discover most of the available nodes over a few second.
|
||||||
|
|
||||||
```rust,ignore
|
```rust,ignore
|
||||||
use crate::gossip_service::discover;
|
use crate::gossip_service::discover_nodes;
|
||||||
|
|
||||||
// Discover the cluster over a few seconds.
|
// Discover the cluster over a few seconds.
|
||||||
let cluster_nodes = discover(&entry_point_info, num_nodes);
|
let cluster_nodes = discover_nodes(&entry_point_info, num_nodes);
|
||||||
```
|
```
|
||||||
|
|
||||||
## Cluster Configuration
|
## Cluster Configuration
|
||||||
|
@ -99,7 +99,7 @@ pub fn test_large_invalid_gossip_nodes(
|
||||||
funding_keypair: &Keypair,
|
funding_keypair: &Keypair,
|
||||||
num_nodes: usize,
|
num_nodes: usize,
|
||||||
) {
|
) {
|
||||||
let cluster = discover(&entry_point_info, num_nodes);
|
let cluster = discover_nodes(&entry_point_info, num_nodes);
|
||||||
|
|
||||||
// Poison the cluster.
|
// Poison the cluster.
|
||||||
let client = create_client(entry_point_info.client_facing_addr(), FULLNODE_PORT_RANGE);
|
let client = create_client(entry_point_info.client_facing_addr(), FULLNODE_PORT_RANGE);
|
||||||
|
|
|
@ -6,7 +6,7 @@ use crate::blocktree::Blocktree;
|
||||||
use crate::cluster_info::FULLNODE_PORT_RANGE;
|
use crate::cluster_info::FULLNODE_PORT_RANGE;
|
||||||
use crate::contact_info::ContactInfo;
|
use crate::contact_info::ContactInfo;
|
||||||
use crate::entry::{Entry, EntrySlice};
|
use crate::entry::{Entry, EntrySlice};
|
||||||
use crate::gossip_service::discover;
|
use crate::gossip_service::discover_nodes;
|
||||||
use crate::locktower::VOTE_THRESHOLD_DEPTH;
|
use crate::locktower::VOTE_THRESHOLD_DEPTH;
|
||||||
use crate::poh_service::PohServiceConfig;
|
use crate::poh_service::PohServiceConfig;
|
||||||
use solana_client::thin_client::create_client;
|
use solana_client::thin_client::create_client;
|
||||||
|
@ -28,7 +28,7 @@ pub fn spend_and_verify_all_nodes(
|
||||||
funding_keypair: &Keypair,
|
funding_keypair: &Keypair,
|
||||||
nodes: usize,
|
nodes: usize,
|
||||||
) {
|
) {
|
||||||
let cluster_nodes = discover(&entry_point_info.gossip, nodes).unwrap();
|
let cluster_nodes = discover_nodes(&entry_point_info.gossip, nodes).unwrap();
|
||||||
assert!(cluster_nodes.len() >= nodes);
|
assert!(cluster_nodes.len() >= nodes);
|
||||||
for ingress_node in &cluster_nodes {
|
for ingress_node in &cluster_nodes {
|
||||||
let random_keypair = Keypair::new();
|
let random_keypair = Keypair::new();
|
||||||
|
@ -77,7 +77,7 @@ pub fn send_many_transactions(node: &ContactInfo, funding_keypair: &Keypair, num
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn fullnode_exit(entry_point_info: &ContactInfo, nodes: usize) {
|
pub fn fullnode_exit(entry_point_info: &ContactInfo, nodes: usize) {
|
||||||
let cluster_nodes = discover(&entry_point_info.gossip, nodes).unwrap();
|
let cluster_nodes = discover_nodes(&entry_point_info.gossip, nodes).unwrap();
|
||||||
assert!(cluster_nodes.len() >= nodes);
|
assert!(cluster_nodes.len() >= nodes);
|
||||||
for node in &cluster_nodes {
|
for node in &cluster_nodes {
|
||||||
let client = create_client(node.client_facing_addr(), FULLNODE_PORT_RANGE);
|
let client = create_client(node.client_facing_addr(), FULLNODE_PORT_RANGE);
|
||||||
|
@ -148,7 +148,7 @@ pub fn kill_entry_and_spend_and_verify_rest(
|
||||||
nodes: usize,
|
nodes: usize,
|
||||||
) {
|
) {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
let cluster_nodes = discover(&entry_point_info.gossip, nodes).unwrap();
|
let cluster_nodes = discover_nodes(&entry_point_info.gossip, nodes).unwrap();
|
||||||
assert!(cluster_nodes.len() >= nodes);
|
assert!(cluster_nodes.len() >= nodes);
|
||||||
let client = create_client(entry_point_info.client_facing_addr(), FULLNODE_PORT_RANGE);
|
let client = create_client(entry_point_info.client_facing_addr(), FULLNODE_PORT_RANGE);
|
||||||
info!("sleeping for 2 leader fortnights");
|
info!("sleeping for 2 leader fortnights");
|
||||||
|
|
|
@ -6,6 +6,7 @@ use crate::cluster_info::ClusterInfo;
|
||||||
use crate::contact_info::ContactInfo;
|
use crate::contact_info::ContactInfo;
|
||||||
use crate::service::Service;
|
use crate::service::Service;
|
||||||
use crate::streamer;
|
use crate::streamer;
|
||||||
|
use solana_sdk::pubkey::Pubkey;
|
||||||
use solana_sdk::signature::{Keypair, KeypairUtil};
|
use solana_sdk::signature::{Keypair, KeypairUtil};
|
||||||
use std::net::SocketAddr;
|
use std::net::SocketAddr;
|
||||||
use std::net::UdpSocket;
|
use std::net::UdpSocket;
|
||||||
|
@ -51,31 +52,95 @@ impl GossipService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn discover(gossip_addr: &SocketAddr, num_nodes: usize) -> std::io::Result<Vec<ContactInfo>> {
|
pub fn discover_nodes(
|
||||||
|
gossip_addr: &SocketAddr,
|
||||||
|
num_nodes: usize,
|
||||||
|
) -> std::io::Result<Vec<ContactInfo>> {
|
||||||
|
discover(gossip_addr, Some(num_nodes), Some(30), None)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn discover(
|
||||||
|
gossip_addr: &SocketAddr,
|
||||||
|
num_nodes: Option<usize>,
|
||||||
|
timeout: Option<u64>,
|
||||||
|
find_node: Option<Pubkey>,
|
||||||
|
) -> std::io::Result<Vec<ContactInfo>> {
|
||||||
let exit = Arc::new(AtomicBool::new(false));
|
let exit = Arc::new(AtomicBool::new(false));
|
||||||
let (gossip_service, spy_ref) = make_spy_node(gossip_addr, &exit);
|
let (gossip_service, spy_ref) = make_spy_node(gossip_addr, &exit);
|
||||||
let id = spy_ref.read().unwrap().keypair.pubkey();
|
let id = spy_ref.read().unwrap().keypair.pubkey();
|
||||||
trace!(
|
trace!(
|
||||||
"discover: spy_node {} looking for at least {} nodes",
|
"discover: spy_node {} looking for at least {:?} nodes",
|
||||||
id,
|
id,
|
||||||
num_nodes
|
num_nodes
|
||||||
);
|
);
|
||||||
|
|
||||||
// Wait for the cluster to converge
|
let (met_criteria, secs, tvu_peers) = spy(spy_ref.clone(), num_nodes, timeout, find_node);
|
||||||
let now = Instant::now();
|
|
||||||
let mut i = 0;
|
|
||||||
while now.elapsed() < Duration::from_secs(30) {
|
|
||||||
let tvu_peers = spy_ref.read().unwrap().tvu_peers();
|
|
||||||
if tvu_peers.len() >= num_nodes {
|
|
||||||
info!(
|
|
||||||
"discover success in {}s...\n{}",
|
|
||||||
now.elapsed().as_secs(),
|
|
||||||
spy_ref.read().unwrap().contact_info_trace()
|
|
||||||
);
|
|
||||||
|
|
||||||
exit.store(true, Ordering::Relaxed);
|
exit.store(true, Ordering::Relaxed);
|
||||||
gossip_service.join().unwrap();
|
gossip_service.join().unwrap();
|
||||||
return Ok(tvu_peers);
|
|
||||||
|
if met_criteria {
|
||||||
|
info!(
|
||||||
|
"discover success in {}s...\n{}",
|
||||||
|
secs,
|
||||||
|
spy_ref.read().unwrap().contact_info_trace()
|
||||||
|
);
|
||||||
|
return Ok(tvu_peers);
|
||||||
|
}
|
||||||
|
|
||||||
|
if !tvu_peers.is_empty() {
|
||||||
|
info!(
|
||||||
|
"discover failed to match criteria by timeout...\n{}",
|
||||||
|
spy_ref.read().unwrap().contact_info_trace()
|
||||||
|
);
|
||||||
|
return Ok(tvu_peers);
|
||||||
|
}
|
||||||
|
|
||||||
|
info!(
|
||||||
|
"discover failed...\n{}",
|
||||||
|
spy_ref.read().unwrap().contact_info_trace()
|
||||||
|
);
|
||||||
|
Err(std::io::Error::new(
|
||||||
|
std::io::ErrorKind::Other,
|
||||||
|
"Failed to converge",
|
||||||
|
))
|
||||||
|
}
|
||||||
|
|
||||||
|
fn spy(
|
||||||
|
spy_ref: Arc<RwLock<ClusterInfo>>,
|
||||||
|
num_nodes: Option<usize>,
|
||||||
|
timeout: Option<u64>,
|
||||||
|
find_node: Option<Pubkey>,
|
||||||
|
) -> (bool, u64, Vec<ContactInfo>) {
|
||||||
|
let now = Instant::now();
|
||||||
|
let mut met_criteria = false;
|
||||||
|
let mut tvu_peers: Vec<ContactInfo> = Vec::new();
|
||||||
|
let mut i = 0;
|
||||||
|
loop {
|
||||||
|
if let Some(secs) = timeout {
|
||||||
|
if now.elapsed() >= Duration::from_secs(secs) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
tvu_peers = spy_ref.read().unwrap().tvu_peers();
|
||||||
|
if let Some(num) = num_nodes {
|
||||||
|
if tvu_peers.len() >= num {
|
||||||
|
if let Some(pubkey) = find_node {
|
||||||
|
if tvu_peers.iter().any(|x| x.id == pubkey) {
|
||||||
|
met_criteria = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
met_criteria = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let Some(pubkey) = find_node {
|
||||||
|
if num_nodes.is_none() && tvu_peers.iter().any(|x| x.id == pubkey) {
|
||||||
|
met_criteria = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if i % 20 == 0 {
|
if i % 20 == 0 {
|
||||||
info!(
|
info!(
|
||||||
|
@ -88,17 +153,7 @@ pub fn discover(gossip_addr: &SocketAddr, num_nodes: usize) -> std::io::Result<V
|
||||||
));
|
));
|
||||||
i += 1;
|
i += 1;
|
||||||
}
|
}
|
||||||
|
(met_criteria, now.elapsed().as_secs(), tvu_peers)
|
||||||
exit.store(true, Ordering::Relaxed);
|
|
||||||
gossip_service.join().unwrap();
|
|
||||||
info!(
|
|
||||||
"discover failed...\n{}",
|
|
||||||
spy_ref.read().unwrap().contact_info_trace()
|
|
||||||
);
|
|
||||||
Err(std::io::Error::new(
|
|
||||||
std::io::ErrorKind::Other,
|
|
||||||
"Failed to converge",
|
|
||||||
))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn make_spy_node(
|
fn make_spy_node(
|
||||||
|
@ -145,4 +200,44 @@ mod tests {
|
||||||
exit.store(true, Ordering::Relaxed);
|
exit.store(true, Ordering::Relaxed);
|
||||||
d.join().unwrap();
|
d.join().unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_gossip_services_spy() {
|
||||||
|
let keypair = Keypair::new();
|
||||||
|
let peer0 = Pubkey::new_rand();
|
||||||
|
let peer1 = Pubkey::new_rand();
|
||||||
|
let contact_info = ContactInfo::new_localhost(&keypair.pubkey(), 0);
|
||||||
|
let peer0_info = ContactInfo::new_localhost(&peer0, 0);
|
||||||
|
let peer1_info = ContactInfo::new_localhost(&peer1, 0);
|
||||||
|
let mut cluster_info = ClusterInfo::new(contact_info.clone(), Arc::new(keypair));
|
||||||
|
cluster_info.insert_info(peer0_info);
|
||||||
|
cluster_info.insert_info(peer1_info);
|
||||||
|
|
||||||
|
let spy_ref = Arc::new(RwLock::new(cluster_info));
|
||||||
|
|
||||||
|
let (met_criteria, secs, tvu_peers) = spy(spy_ref.clone(), None, Some(1), None);
|
||||||
|
assert_eq!(met_criteria, false);
|
||||||
|
assert_eq!(secs, 1);
|
||||||
|
assert_eq!(tvu_peers, spy_ref.read().unwrap().tvu_peers());
|
||||||
|
|
||||||
|
// Find num_nodes
|
||||||
|
let (met_criteria, _, _) = spy(spy_ref.clone(), Some(1), None, None);
|
||||||
|
assert_eq!(met_criteria, true);
|
||||||
|
let (met_criteria, _, _) = spy(spy_ref.clone(), Some(2), None, None);
|
||||||
|
assert_eq!(met_criteria, true);
|
||||||
|
|
||||||
|
// Find specific node by pubkey
|
||||||
|
let (met_criteria, _, _) = spy(spy_ref.clone(), None, None, Some(peer0));
|
||||||
|
assert_eq!(met_criteria, true);
|
||||||
|
let (met_criteria, _, _) = spy(spy_ref.clone(), None, Some(0), Some(Pubkey::new_rand()));
|
||||||
|
assert_eq!(met_criteria, false);
|
||||||
|
|
||||||
|
// Find num_nodes *and* specific node by pubkey
|
||||||
|
let (met_criteria, _, _) = spy(spy_ref.clone(), Some(1), None, Some(peer0));
|
||||||
|
assert_eq!(met_criteria, true);
|
||||||
|
let (met_criteria, _, _) = spy(spy_ref.clone(), Some(3), Some(0), Some(peer0));
|
||||||
|
assert_eq!(met_criteria, false);
|
||||||
|
let (met_criteria, _, _) = spy(spy_ref.clone(), Some(1), Some(0), Some(Pubkey::new_rand()));
|
||||||
|
assert_eq!(met_criteria, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@ use crate::cluster::Cluster;
|
||||||
use crate::cluster_info::{Node, FULLNODE_PORT_RANGE};
|
use crate::cluster_info::{Node, FULLNODE_PORT_RANGE};
|
||||||
use crate::contact_info::ContactInfo;
|
use crate::contact_info::ContactInfo;
|
||||||
use crate::fullnode::{Fullnode, FullnodeConfig};
|
use crate::fullnode::{Fullnode, FullnodeConfig};
|
||||||
use crate::gossip_service::discover;
|
use crate::gossip_service::discover_nodes;
|
||||||
use crate::replicator::Replicator;
|
use crate::replicator::Replicator;
|
||||||
use crate::service::Service;
|
use crate::service::Service;
|
||||||
use solana_client::thin_client::create_client;
|
use solana_client::thin_client::create_client;
|
||||||
|
@ -156,13 +156,13 @@ impl LocalCluster {
|
||||||
cluster.add_validator(&fullnode_config, *stake);
|
cluster.add_validator(&fullnode_config, *stake);
|
||||||
}
|
}
|
||||||
|
|
||||||
discover(&cluster.entry_point_info.gossip, node_stakes.len()).unwrap();
|
discover_nodes(&cluster.entry_point_info.gossip, node_stakes.len()).unwrap();
|
||||||
|
|
||||||
for _ in 0..num_replicators {
|
for _ in 0..num_replicators {
|
||||||
cluster.add_replicator();
|
cluster.add_replicator();
|
||||||
}
|
}
|
||||||
|
|
||||||
discover(
|
discover_nodes(
|
||||||
&cluster.entry_point_info.gossip,
|
&cluster.entry_point_info.gossip,
|
||||||
node_stakes.len() + num_replicators,
|
node_stakes.len() + num_replicators,
|
||||||
)
|
)
|
||||||
|
|
|
@ -215,7 +215,7 @@ impl Replicator {
|
||||||
);
|
);
|
||||||
|
|
||||||
info!("Looking for leader at {:?}", cluster_entrypoint);
|
info!("Looking for leader at {:?}", cluster_entrypoint);
|
||||||
crate::gossip_service::discover(&cluster_entrypoint.gossip, 1)?;
|
crate::gossip_service::discover_nodes(&cluster_entrypoint.gossip, 1)?;
|
||||||
|
|
||||||
let (storage_blockhash, storage_entry_height) =
|
let (storage_blockhash, storage_entry_height) =
|
||||||
Self::poll_for_blockhash_and_entry_height(&cluster_info)?;
|
Self::poll_for_blockhash_and_entry_height(&cluster_info)?;
|
||||||
|
|
|
@ -3,7 +3,7 @@ extern crate solana;
|
||||||
use solana::cluster::Cluster;
|
use solana::cluster::Cluster;
|
||||||
use solana::cluster_tests;
|
use solana::cluster_tests;
|
||||||
use solana::fullnode::FullnodeConfig;
|
use solana::fullnode::FullnodeConfig;
|
||||||
use solana::gossip_service::discover;
|
use solana::gossip_service::discover_nodes;
|
||||||
use solana::local_cluster::LocalCluster;
|
use solana::local_cluster::LocalCluster;
|
||||||
use solana::poh_service::PohServiceConfig;
|
use solana::poh_service::PohServiceConfig;
|
||||||
use solana_sdk::timing;
|
use solana_sdk::timing;
|
||||||
|
@ -115,7 +115,7 @@ fn test_forwarding() {
|
||||||
let fullnode_config = FullnodeConfig::default();
|
let fullnode_config = FullnodeConfig::default();
|
||||||
let cluster = LocalCluster::new_with_config(&[999_990, 3], 2_000_000, &fullnode_config);
|
let cluster = LocalCluster::new_with_config(&[999_990, 3], 2_000_000, &fullnode_config);
|
||||||
|
|
||||||
let cluster_nodes = discover(&cluster.entry_point_info.gossip, 2).unwrap();
|
let cluster_nodes = discover_nodes(&cluster.entry_point_info.gossip, 2).unwrap();
|
||||||
assert!(cluster_nodes.len() >= 2);
|
assert!(cluster_nodes.len() >= 2);
|
||||||
|
|
||||||
let leader_id = cluster.entry_point_info.id;
|
let leader_id = cluster.entry_point_info.id;
|
||||||
|
|
|
@ -9,7 +9,7 @@ use solana::blocktree::{create_new_tmp_ledger, Blocktree};
|
||||||
use solana::cluster_info::{ClusterInfo, Node, FULLNODE_PORT_RANGE};
|
use solana::cluster_info::{ClusterInfo, Node, FULLNODE_PORT_RANGE};
|
||||||
use solana::contact_info::ContactInfo;
|
use solana::contact_info::ContactInfo;
|
||||||
use solana::fullnode::FullnodeConfig;
|
use solana::fullnode::FullnodeConfig;
|
||||||
use solana::gossip_service::discover;
|
use solana::gossip_service::discover_nodes;
|
||||||
use solana::local_cluster::LocalCluster;
|
use solana::local_cluster::LocalCluster;
|
||||||
use solana::replicator::Replicator;
|
use solana::replicator::Replicator;
|
||||||
use solana::replicator::ReplicatorRequest;
|
use solana::replicator::ReplicatorRequest;
|
||||||
|
@ -116,7 +116,7 @@ fn run_replicator_startup_basic(num_nodes: usize, num_replicators: usize) {
|
||||||
DEFAULT_SLOTS_PER_EPOCH,
|
DEFAULT_SLOTS_PER_EPOCH,
|
||||||
);
|
);
|
||||||
|
|
||||||
let cluster_nodes = discover(
|
let cluster_nodes = discover_nodes(
|
||||||
&cluster.entry_point_info.gossip,
|
&cluster.entry_point_info.gossip,
|
||||||
num_nodes + num_replicators,
|
num_nodes + num_replicators,
|
||||||
)
|
)
|
||||||
|
@ -230,7 +230,7 @@ fn test_account_setup() {
|
||||||
DEFAULT_SLOTS_PER_EPOCH,
|
DEFAULT_SLOTS_PER_EPOCH,
|
||||||
);
|
);
|
||||||
|
|
||||||
let _ = discover(
|
let _ = discover_nodes(
|
||||||
&cluster.entry_point_info.gossip,
|
&cluster.entry_point_info.gossip,
|
||||||
num_nodes + num_replicators,
|
num_nodes + num_replicators,
|
||||||
)
|
)
|
||||||
|
|
|
@ -2,7 +2,7 @@ use bincode::{deserialize, serialize};
|
||||||
use log::*;
|
use log::*;
|
||||||
use solana::cluster_info::FULLNODE_PORT_RANGE;
|
use solana::cluster_info::FULLNODE_PORT_RANGE;
|
||||||
use solana::fullnode::new_fullnode_for_tests;
|
use solana::fullnode::new_fullnode_for_tests;
|
||||||
use solana::gossip_service::discover;
|
use solana::gossip_service::discover_nodes;
|
||||||
use solana_client::thin_client::create_client;
|
use solana_client::thin_client::create_client;
|
||||||
use solana_client::thin_client::ThinClient;
|
use solana_client::thin_client::ThinClient;
|
||||||
use solana_logger;
|
use solana_logger;
|
||||||
|
@ -41,7 +41,7 @@ fn test_thin_client_basic() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
let (server, leader_data, alice, ledger_path) = new_fullnode_for_tests();
|
let (server, leader_data, alice, ledger_path) = new_fullnode_for_tests();
|
||||||
let bob_pubkey = Pubkey::new_rand();
|
let bob_pubkey = Pubkey::new_rand();
|
||||||
discover(&leader_data.gossip, 1).unwrap();
|
discover_nodes(&leader_data.gossip, 1).unwrap();
|
||||||
|
|
||||||
let client = create_client(leader_data.client_facing_addr(), FULLNODE_PORT_RANGE);
|
let client = create_client(leader_data.client_facing_addr(), FULLNODE_PORT_RANGE);
|
||||||
|
|
||||||
|
@ -70,7 +70,7 @@ fn test_bad_sig() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
let (server, leader_data, alice, ledger_path) = new_fullnode_for_tests();
|
let (server, leader_data, alice, ledger_path) = new_fullnode_for_tests();
|
||||||
let bob_pubkey = Pubkey::new_rand();
|
let bob_pubkey = Pubkey::new_rand();
|
||||||
discover(&leader_data.gossip, 1).unwrap();
|
discover_nodes(&leader_data.gossip, 1).unwrap();
|
||||||
|
|
||||||
let client = create_client(leader_data.client_facing_addr(), FULLNODE_PORT_RANGE);
|
let client = create_client(leader_data.client_facing_addr(), FULLNODE_PORT_RANGE);
|
||||||
|
|
||||||
|
@ -101,7 +101,7 @@ fn test_bad_sig() {
|
||||||
fn test_register_vote_account() {
|
fn test_register_vote_account() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
let (server, leader_data, alice, ledger_path) = new_fullnode_for_tests();
|
let (server, leader_data, alice, ledger_path) = new_fullnode_for_tests();
|
||||||
discover(&leader_data.gossip, 1).unwrap();
|
discover_nodes(&leader_data.gossip, 1).unwrap();
|
||||||
|
|
||||||
let client = create_client(leader_data.client_facing_addr(), FULLNODE_PORT_RANGE);
|
let client = create_client(leader_data.client_facing_addr(), FULLNODE_PORT_RANGE);
|
||||||
|
|
||||||
|
@ -178,7 +178,7 @@ fn test_zero_balance_after_nonzero() {
|
||||||
solana_logger::setup();
|
solana_logger::setup();
|
||||||
let (server, leader_data, alice, ledger_path) = new_fullnode_for_tests();
|
let (server, leader_data, alice, ledger_path) = new_fullnode_for_tests();
|
||||||
let bob_keypair = Keypair::new();
|
let bob_keypair = Keypair::new();
|
||||||
discover(&leader_data.gossip, 1).unwrap();
|
discover_nodes(&leader_data.gossip, 1).unwrap();
|
||||||
|
|
||||||
let client = create_client(leader_data.client_facing_addr(), FULLNODE_PORT_RANGE);
|
let client = create_client(leader_data.client_facing_addr(), FULLNODE_PORT_RANGE);
|
||||||
let blockhash = client.get_recent_blockhash().unwrap();
|
let blockhash = client.get_recent_blockhash().unwrap();
|
||||||
|
|
Loading…
Reference in New Issue