lite-rpc/tests/workers.rs

90 lines
2.7 KiB
Rust
Raw Normal View History

2023-01-12 00:55:30 -08:00
use std::{sync::Arc, time::Duration};
2022-12-16 18:35:49 -08:00
2023-01-12 00:55:30 -08:00
use bench::helpers::BenchHelper;
2022-12-23 11:58:42 -08:00
use futures::future::try_join_all;
2022-12-16 18:35:49 -08:00
use lite_rpc::{
encoding::BinaryEncoding,
2023-01-16 23:05:24 -08:00
tpu_manager::TpuManager,
2022-12-16 18:35:49 -08:00
workers::{BlockListener, TxSender},
2023-01-09 23:06:24 -08:00
DEFAULT_LITE_RPC_ADDR, DEFAULT_RPC_ADDR, DEFAULT_TX_BATCH_INTERVAL_MS, DEFAULT_TX_BATCH_SIZE,
DEFAULT_WS_ADDR,
2022-12-16 18:35:49 -08:00
};
2023-01-16 23:06:00 -08:00
use solana_client::nonblocking::{pubsub_client::PubsubClient, rpc_client::RpcClient};
2022-12-16 18:35:49 -08:00
2023-01-16 21:32:19 -08:00
use solana_sdk::commitment_config::CommitmentConfig;
2023-01-08 06:13:33 -08:00
use solana_transaction_status::TransactionConfirmationStatus;
2022-12-16 18:35:49 -08:00
#[tokio::test]
async fn send_and_confirm_txs() {
let rpc_client = Arc::new(RpcClient::new(DEFAULT_RPC_ADDR.to_string()));
let lite_client = Arc::new(RpcClient::new(DEFAULT_LITE_RPC_ADDR.to_string()));
let bench_helper = BenchHelper::new(lite_client.clone());
2022-12-27 02:11:06 -08:00
2022-12-16 18:35:49 -08:00
let tpu_client = Arc::new(
2023-01-16 23:05:24 -08:00
TpuManager::new(
rpc_client.clone(),
DEFAULT_WS_ADDR.into(),
Default::default(),
)
.await
.unwrap(),
2022-12-16 18:35:49 -08:00
);
2023-01-08 06:13:33 -08:00
let pub_sub_client = Arc::new(PubsubClient::new(DEFAULT_WS_ADDR).await.unwrap());
2023-01-09 23:06:24 -08:00
let tx_sender = TxSender::new(tpu_client);
2023-01-08 06:13:33 -08:00
2023-01-04 02:58:25 -08:00
let block_listener = BlockListener::new(
2023-01-08 06:13:33 -08:00
pub_sub_client.clone(),
2023-01-04 02:58:25 -08:00
rpc_client.clone(),
2023-01-10 06:56:41 -08:00
tx_sender.clone(),
2023-01-04 02:58:25 -08:00
CommitmentConfig::confirmed(),
)
.await
.unwrap();
2022-12-16 18:35:49 -08:00
2022-12-23 11:58:42 -08:00
let services = try_join_all(vec![
2023-01-04 02:58:25 -08:00
block_listener.clone().listen(),
2023-01-09 23:06:24 -08:00
tx_sender.clone().execute(
DEFAULT_TX_BATCH_SIZE,
Duration::from_millis(DEFAULT_TX_BATCH_INTERVAL_MS),
),
2022-12-23 11:58:42 -08:00
]);
2022-12-16 18:35:49 -08:00
let confirm = tokio::spawn(async move {
2023-01-16 21:32:19 -08:00
let funded_payer = bench_helper.get_payer().await.unwrap();
2022-12-16 18:35:49 -08:00
let blockhash = rpc_client.get_latest_blockhash().await.unwrap();
let tx = bench_helper.create_transaction(&funded_payer, blockhash);
2022-12-16 18:35:49 -08:00
let sig = tx.signatures[0];
let tx = BinaryEncoding::Base58.encode(bincode::serialize(&tx).unwrap());
let sig = sig.to_string();
2023-01-12 04:28:59 -08:00
tx_sender
.enqnueue_tx(sig.clone(), tx.as_bytes().to_vec())
.await;
2023-01-09 23:06:24 -08:00
2022-12-16 18:35:49 -08:00
for _ in 0..2 {
2023-01-09 23:06:24 -08:00
let tx_status = tx_sender.txs_sent.get(&sig).unwrap();
2023-01-08 06:13:33 -08:00
2023-01-10 06:56:41 -08:00
if let Some(tx_status) = &tx_status.value().status {
2023-01-08 09:36:37 -08:00
if tx_status.confirmation_status() == TransactionConfirmationStatus::Confirmed {
2023-01-08 06:13:33 -08:00
return;
}
2022-12-16 18:35:49 -08:00
}
tokio::time::sleep(Duration::from_millis(800)).await;
}
panic!("Tx {sig} not confirmed in 1600ms");
});
tokio::select! {
_ = services => {
panic!("Services stopped unexpectedly")
},
_ = confirm => {}
}
}