| 
									
										
										
										
											2019-09-18 13:10:50 -07:00
										 |  |  | use serial_test_derive::serial;
 | 
					
						
							|  |  |  | use solana_bench_tps::bench::{do_bench_tps, generate_and_fund_keypairs};
 | 
					
						
							|  |  |  | use solana_bench_tps::cli::Config;
 | 
					
						
							|  |  |  | use solana_client::thin_client::create_client;
 | 
					
						
							| 
									
										
										
										
											2019-10-10 17:33:00 -06:00
										 |  |  | use solana_core::cluster_info::VALIDATOR_PORT_RANGE;
 | 
					
						
							| 
									
										
										
										
											2019-09-18 13:10:50 -07:00
										 |  |  | use solana_core::validator::ValidatorConfig;
 | 
					
						
							| 
									
										
										
										
											2021-01-28 12:11:53 -08:00
										 |  |  | use solana_faucet::faucet::run_local_faucet_with_port;
 | 
					
						
							| 
									
										
										
										
											2019-11-12 20:30:35 -07:00
										 |  |  | use solana_local_cluster::local_cluster::{ClusterConfig, LocalCluster};
 | 
					
						
							| 
									
										
										
										
											2020-02-20 14:28:55 -07:00
										 |  |  | use solana_sdk::signature::{Keypair, Signer};
 | 
					
						
							| 
									
										
										
										
											2020-01-17 10:35:12 +08:00
										 |  |  | use std::sync::{mpsc::channel, Arc};
 | 
					
						
							| 
									
										
										
										
											2019-09-18 13:10:50 -07:00
										 |  |  | use std::time::Duration;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | fn test_bench_tps_local_cluster(config: Config) {
 | 
					
						
							| 
									
										
										
										
											2019-09-27 12:19:06 -07:00
										 |  |  |     let native_instruction_processors = vec![];
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-09-18 13:10:50 -07:00
										 |  |  |     solana_logger::setup();
 | 
					
						
							|  |  |  |     const NUM_NODES: usize = 1;
 | 
					
						
							| 
									
										
										
										
											2020-11-20 03:17:19 -08:00
										 |  |  |     let cluster = LocalCluster::new(&mut ClusterConfig {
 | 
					
						
							| 
									
										
										
										
											2019-09-18 13:10:50 -07:00
										 |  |  |         node_stakes: vec![999_990; NUM_NODES],
 | 
					
						
							|  |  |  |         cluster_lamports: 200_000_000,
 | 
					
						
							|  |  |  |         validator_configs: vec![ValidatorConfig::default(); NUM_NODES],
 | 
					
						
							| 
									
										
										
										
											2019-09-27 12:19:06 -07:00
										 |  |  |         native_instruction_processors,
 | 
					
						
							| 
									
										
										
										
											2019-09-18 13:10:50 -07:00
										 |  |  |         ..ClusterConfig::default()
 | 
					
						
							|  |  |  |     });
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-16 14:05:17 -07:00
										 |  |  |     let faucet_keypair = Keypair::new();
 | 
					
						
							| 
									
										
										
										
											2019-09-18 13:10:50 -07:00
										 |  |  |     cluster.transfer(
 | 
					
						
							|  |  |  |         &cluster.funding_keypair,
 | 
					
						
							| 
									
										
										
										
											2019-12-16 14:05:17 -07:00
										 |  |  |         &faucet_keypair.pubkey(),
 | 
					
						
							| 
									
										
										
										
											2019-09-18 13:10:50 -07:00
										 |  |  |         100_000_000,
 | 
					
						
							|  |  |  |     );
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-01-17 10:35:12 +08:00
										 |  |  |     let client = Arc::new(create_client(
 | 
					
						
							| 
									
										
										
										
											2019-09-18 13:10:50 -07:00
										 |  |  |         (cluster.entry_point_info.rpc, cluster.entry_point_info.tpu),
 | 
					
						
							| 
									
										
										
										
											2019-10-10 17:33:00 -06:00
										 |  |  |         VALIDATOR_PORT_RANGE,
 | 
					
						
							| 
									
										
										
										
											2020-01-17 10:35:12 +08:00
										 |  |  |     ));
 | 
					
						
							| 
									
										
										
										
											2019-09-18 13:10:50 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     let (addr_sender, addr_receiver) = channel();
 | 
					
						
							| 
									
										
										
										
											2021-01-28 12:11:53 -08:00
										 |  |  |     run_local_faucet_with_port(faucet_keypair, addr_sender, None, 0);
 | 
					
						
							|  |  |  |     let faucet_addr = addr_receiver
 | 
					
						
							|  |  |  |         .recv_timeout(Duration::from_secs(2))
 | 
					
						
							|  |  |  |         .expect("run_local_faucet")
 | 
					
						
							|  |  |  |         .expect("faucet_addr");
 | 
					
						
							| 
									
										
										
										
											2019-09-18 13:10:50 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  |     let lamports_per_account = 100;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-12-18 23:50:17 -05:00
										 |  |  |     let keypair_count = config.tx_count * config.keypair_multiplier;
 | 
					
						
							| 
									
										
										
										
											2020-07-23 15:08:59 -06:00
										 |  |  |     let keypairs = generate_and_fund_keypairs(
 | 
					
						
							| 
									
										
										
										
											2020-01-17 10:35:12 +08:00
										 |  |  |         client.clone(),
 | 
					
						
							| 
									
										
										
										
											2019-12-16 14:05:17 -07:00
										 |  |  |         Some(faucet_addr),
 | 
					
						
							| 
									
										
										
										
											2019-09-18 13:10:50 -07:00
										 |  |  |         &config.id,
 | 
					
						
							| 
									
										
										
										
											2019-12-18 23:50:17 -05:00
										 |  |  |         keypair_count,
 | 
					
						
							| 
									
										
										
										
											2019-09-18 13:10:50 -07:00
										 |  |  |         lamports_per_account,
 | 
					
						
							|  |  |  |     )
 | 
					
						
							|  |  |  |     .unwrap();
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-07-23 15:08:59 -06:00
										 |  |  |     let _total = do_bench_tps(client, config, keypairs);
 | 
					
						
							| 
									
										
										
										
											2019-11-18 16:47:01 -08:00
										 |  |  | 
 | 
					
						
							|  |  |  |     #[cfg(not(debug_assertions))]
 | 
					
						
							|  |  |  |     assert!(_total > 100);
 | 
					
						
							| 
									
										
										
										
											2019-09-18 13:10:50 -07:00
										 |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #[test]
 | 
					
						
							|  |  |  | #[serial]
 | 
					
						
							|  |  |  | fn test_bench_tps_local_cluster_solana() {
 | 
					
						
							| 
									
										
										
										
											2020-12-13 17:26:34 -08:00
										 |  |  |     test_bench_tps_local_cluster(Config {
 | 
					
						
							|  |  |  |         tx_count: 100,
 | 
					
						
							|  |  |  |         duration: Duration::from_secs(10),
 | 
					
						
							|  |  |  |         ..Config::default()
 | 
					
						
							|  |  |  |     });
 | 
					
						
							| 
									
										
										
										
											2019-09-18 13:10:50 -07:00
										 |  |  | }
 |