Clean up test and add signature return to rpc send tx
This commit is contained in:
16
src/rpc.rs
16
src/rpc.rs
@ -194,7 +194,21 @@ impl RpcSol for RpcSolImpl {
|
|||||||
debug!("send_transaction: send_to error: {:?}", err);
|
debug!("send_transaction: send_to error: {:?}", err);
|
||||||
Error::internal_error()
|
Error::internal_error()
|
||||||
})?;
|
})?;
|
||||||
Ok(bs58::encode(tx.signature).into_string())
|
let now = Instant::now();
|
||||||
|
let mut signature_status;
|
||||||
|
loop {
|
||||||
|
signature_status = meta
|
||||||
|
.request_processor
|
||||||
|
.get_signature_status(tx.signature)
|
||||||
|
.map_err(|_| Error::internal_error())?;
|
||||||
|
|
||||||
|
if signature_status {
|
||||||
|
return Ok(bs58::encode(tx.signature).into_string());
|
||||||
|
} else if now.elapsed().as_secs() > 5 {
|
||||||
|
return Err(Error::internal_error());
|
||||||
|
}
|
||||||
|
sleep(Duration::from_millis(100));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
|
@ -670,6 +670,7 @@ mod tests {
|
|||||||
use ledger::LedgerWriter;
|
use ledger::LedgerWriter;
|
||||||
use mint::Mint;
|
use mint::Mint;
|
||||||
use signature::{read_keypair, read_pkcs8, Keypair, KeypairUtil};
|
use signature::{read_keypair, read_pkcs8, Keypair, KeypairUtil};
|
||||||
|
use std::fs::remove_dir_all;
|
||||||
use std::sync::mpsc::channel;
|
use std::sync::mpsc::channel;
|
||||||
|
|
||||||
fn tmp_ledger(name: &str, mint: &Mint) -> String {
|
fn tmp_ledger(name: &str, mint: &Mint) -> String {
|
||||||
@ -744,7 +745,6 @@ mod tests {
|
|||||||
Arg::with_name("timestamp")
|
Arg::with_name("timestamp")
|
||||||
.long("after")
|
.long("after")
|
||||||
.value_name("DATETIME")
|
.value_name("DATETIME")
|
||||||
.allow_hyphen_values(true)
|
|
||||||
.takes_value(true)
|
.takes_value(true)
|
||||||
.help("A timestamp after which transaction will execute"),
|
.help("A timestamp after which transaction will execute"),
|
||||||
).arg(
|
).arg(
|
||||||
@ -763,10 +763,9 @@ mod tests {
|
|||||||
.use_delimiter(true)
|
.use_delimiter(true)
|
||||||
.help("Any third party signatures required to unlock the tokens"),
|
.help("Any third party signatures required to unlock the tokens"),
|
||||||
).arg(
|
).arg(
|
||||||
Arg::with_name("cancellable")
|
Arg::with_name("cancelable")
|
||||||
.long("cancellable")
|
.long("cancelable")
|
||||||
.takes_value(false)
|
.takes_value(false),
|
||||||
.requires("witness"),
|
|
||||||
),
|
),
|
||||||
).subcommand(
|
).subcommand(
|
||||||
SubCommand::with_name("send-signature")
|
SubCommand::with_name("send-signature")
|
||||||
@ -977,7 +976,7 @@ mod tests {
|
|||||||
assert!(parse_command(pubkey, &test_bad_timestamp).is_err());
|
assert!(parse_command(pubkey, &test_bad_timestamp).is_err());
|
||||||
}
|
}
|
||||||
#[test]
|
#[test]
|
||||||
fn test_process_command() {
|
fn test_wallet_process_command() {
|
||||||
let leader_keypair = Keypair::new();
|
let leader_keypair = Keypair::new();
|
||||||
let leader = Node::new_localhost_with_pubkey(leader_keypair.pubkey());
|
let leader = Node::new_localhost_with_pubkey(leader_keypair.pubkey());
|
||||||
|
|
||||||
@ -986,12 +985,12 @@ mod tests {
|
|||||||
let bob_pubkey = Keypair::new().pubkey();
|
let bob_pubkey = Keypair::new().pubkey();
|
||||||
let leader_data = leader.info.clone();
|
let leader_data = leader.info.clone();
|
||||||
let leader_data1 = leader.info.clone();
|
let leader_data1 = leader.info.clone();
|
||||||
let ledger_path = tmp_ledger("thin_client", &alice);
|
let ledger_path = tmp_ledger("wallet_process_command", &alice);
|
||||||
|
|
||||||
let mut config = WalletConfig::default();
|
let mut config = WalletConfig::default();
|
||||||
let rpc_port = 12345; // Needs to be distinct known number to not conflict with other tests
|
let rpc_port = 12345; // Needs to be distinct known number to not conflict with other tests
|
||||||
|
|
||||||
let _server = Fullnode::new_with_bank(
|
let server = Fullnode::new_with_bank(
|
||||||
leader_keypair,
|
leader_keypair,
|
||||||
bank,
|
bank,
|
||||||
0,
|
0,
|
||||||
@ -1003,7 +1002,7 @@ mod tests {
|
|||||||
None,
|
None,
|
||||||
Some(rpc_port),
|
Some(rpc_port),
|
||||||
);
|
);
|
||||||
sleep(Duration::from_millis(200));
|
sleep(Duration::from_millis(900));
|
||||||
|
|
||||||
let (sender, receiver) = channel();
|
let (sender, receiver) = channel();
|
||||||
run_local_drone(alice.keypair(), leader_data.contact_info.ncp, sender);
|
run_local_drone(alice.keypair(), leader_data.contact_info.ncp, sender);
|
||||||
@ -1036,7 +1035,6 @@ mod tests {
|
|||||||
config.command = WalletCommand::Pay(10, bob_pubkey, None, None, None, None);
|
config.command = WalletCommand::Pay(10, bob_pubkey, None, None, None, None);
|
||||||
let sig_response = process_command(&config);
|
let sig_response = process_command(&config);
|
||||||
assert!(sig_response.is_ok());
|
assert!(sig_response.is_ok());
|
||||||
sleep(Duration::from_millis(100));
|
|
||||||
|
|
||||||
let signatures = bs58::decode(sig_response.unwrap())
|
let signatures = bs58::decode(sig_response.unwrap())
|
||||||
.into_vec()
|
.into_vec()
|
||||||
@ -1050,9 +1048,12 @@ mod tests {
|
|||||||
process_command(&config).unwrap(),
|
process_command(&config).unwrap(),
|
||||||
format!("Your balance is: {:?}", tokens - 10)
|
format!("Your balance is: {:?}", tokens - 10)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
server.close().unwrap();
|
||||||
|
remove_dir_all(ledger_path).unwrap();
|
||||||
}
|
}
|
||||||
#[test]
|
#[test]
|
||||||
fn test_request_airdrop() {
|
fn test_wallet_request_airdrop() {
|
||||||
let leader_keypair = Keypair::new();
|
let leader_keypair = Keypair::new();
|
||||||
let leader = Node::new_localhost_with_pubkey(leader_keypair.pubkey());
|
let leader = Node::new_localhost_with_pubkey(leader_keypair.pubkey());
|
||||||
|
|
||||||
@ -1060,11 +1061,11 @@ mod tests {
|
|||||||
let bank = Bank::new(&alice);
|
let bank = Bank::new(&alice);
|
||||||
let bob_pubkey = Keypair::new().pubkey();
|
let bob_pubkey = Keypair::new().pubkey();
|
||||||
let leader_data = leader.info.clone();
|
let leader_data = leader.info.clone();
|
||||||
let ledger_path = tmp_ledger("thin_client", &alice);
|
let ledger_path = tmp_ledger("wallet_request_airdrop", &alice);
|
||||||
|
|
||||||
let rpc_port = 11111; // Needs to be distinct known number to not conflict with other tests
|
let rpc_port = 11111; // Needs to be distinct known number to not conflict with other tests
|
||||||
|
|
||||||
let _server = Fullnode::new_with_bank(
|
let server = Fullnode::new_with_bank(
|
||||||
leader_keypair,
|
leader_keypair,
|
||||||
bank,
|
bank,
|
||||||
0,
|
0,
|
||||||
@ -1076,7 +1077,7 @@ mod tests {
|
|||||||
None,
|
None,
|
||||||
Some(rpc_port),
|
Some(rpc_port),
|
||||||
);
|
);
|
||||||
sleep(Duration::from_millis(200));
|
sleep(Duration::from_millis(900));
|
||||||
|
|
||||||
let (sender, receiver) = channel();
|
let (sender, receiver) = channel();
|
||||||
run_local_drone(alice.keypair(), leader_data.contact_info.ncp, sender);
|
run_local_drone(alice.keypair(), leader_data.contact_info.ncp, sender);
|
||||||
@ -1095,9 +1096,12 @@ mod tests {
|
|||||||
.as_bool()
|
.as_bool()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert!(confirmation);
|
assert!(confirmation);
|
||||||
|
|
||||||
|
server.close().unwrap();
|
||||||
|
remove_dir_all(ledger_path).unwrap();
|
||||||
}
|
}
|
||||||
#[test]
|
#[test]
|
||||||
fn test_gen_keypair_file() {
|
fn test_wallet_gen_keypair_file() {
|
||||||
let outfile = "test_gen_keypair_file.json";
|
let outfile = "test_gen_keypair_file.json";
|
||||||
let serialized_keypair = gen_keypair_file(outfile.to_string()).unwrap();
|
let serialized_keypair = gen_keypair_file(outfile.to_string()).unwrap();
|
||||||
let keypair_vec: Vec<u8> = serde_json::from_str(&serialized_keypair).unwrap();
|
let keypair_vec: Vec<u8> = serde_json::from_str(&serialized_keypair).unwrap();
|
||||||
@ -1112,7 +1116,7 @@ mod tests {
|
|||||||
assert!(!Path::new(outfile).exists());
|
assert!(!Path::new(outfile).exists());
|
||||||
}
|
}
|
||||||
#[test]
|
#[test]
|
||||||
fn test_timestamp_tx() {
|
fn test_wallet_timestamp_tx() {
|
||||||
let leader_keypair = Keypair::new();
|
let leader_keypair = Keypair::new();
|
||||||
let leader = Node::new_localhost_with_pubkey(leader_keypair.pubkey());
|
let leader = Node::new_localhost_with_pubkey(leader_keypair.pubkey());
|
||||||
|
|
||||||
@ -1122,13 +1126,13 @@ mod tests {
|
|||||||
let leader_data = leader.info.clone();
|
let leader_data = leader.info.clone();
|
||||||
let leader_data1 = leader.info.clone();
|
let leader_data1 = leader.info.clone();
|
||||||
let leader_data2 = leader.info.clone();
|
let leader_data2 = leader.info.clone();
|
||||||
let ledger_path = tmp_ledger("thin_client", &alice);
|
let ledger_path = tmp_ledger("wallet_timestamp_tx", &alice);
|
||||||
|
|
||||||
let mut config_payer = WalletConfig::default();
|
let mut config_payer = WalletConfig::default();
|
||||||
let mut config_witness = WalletConfig::default();
|
let mut config_witness = WalletConfig::default();
|
||||||
let rpc_port = 13579; // Needs to be distinct known number to not conflict with other tests
|
let rpc_port = 13579; // Needs to be distinct known number to not conflict with other tests
|
||||||
|
|
||||||
let _server = Fullnode::new_with_bank(
|
let server = Fullnode::new_with_bank(
|
||||||
leader_keypair,
|
leader_keypair,
|
||||||
bank,
|
bank,
|
||||||
0,
|
0,
|
||||||
@ -1140,7 +1144,7 @@ mod tests {
|
|||||||
None,
|
None,
|
||||||
Some(rpc_port),
|
Some(rpc_port),
|
||||||
);
|
);
|
||||||
sleep(Duration::from_millis(200));
|
sleep(Duration::from_millis(900));
|
||||||
|
|
||||||
let (sender, receiver) = channel();
|
let (sender, receiver) = channel();
|
||||||
run_local_drone(alice.keypair(), leader_data.contact_info.ncp, sender);
|
run_local_drone(alice.keypair(), leader_data.contact_info.ncp, sender);
|
||||||
@ -1227,9 +1231,12 @@ mod tests {
|
|||||||
.as_i64()
|
.as_i64()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(recipient_balance, 10);
|
assert_eq!(recipient_balance, 10);
|
||||||
|
|
||||||
|
server.close().unwrap();
|
||||||
|
remove_dir_all(ledger_path).unwrap();
|
||||||
}
|
}
|
||||||
#[test]
|
#[test]
|
||||||
fn test_witness_tx() {
|
fn test_wallet_witness_tx() {
|
||||||
let leader_keypair = Keypair::new();
|
let leader_keypair = Keypair::new();
|
||||||
let leader = Node::new_localhost_with_pubkey(leader_keypair.pubkey());
|
let leader = Node::new_localhost_with_pubkey(leader_keypair.pubkey());
|
||||||
|
|
||||||
@ -1239,13 +1246,13 @@ mod tests {
|
|||||||
let leader_data = leader.info.clone();
|
let leader_data = leader.info.clone();
|
||||||
let leader_data1 = leader.info.clone();
|
let leader_data1 = leader.info.clone();
|
||||||
let leader_data2 = leader.info.clone();
|
let leader_data2 = leader.info.clone();
|
||||||
let ledger_path = tmp_ledger("thin_client", &alice);
|
let ledger_path = tmp_ledger("wallet_witness_tx", &alice);
|
||||||
|
|
||||||
let mut config_payer = WalletConfig::default();
|
let mut config_payer = WalletConfig::default();
|
||||||
let mut config_witness = WalletConfig::default();
|
let mut config_witness = WalletConfig::default();
|
||||||
let rpc_port = 11223; // Needs to be distinct known number to not conflict with other tests
|
let rpc_port = 11223; // Needs to be distinct known number to not conflict with other tests
|
||||||
|
|
||||||
let _server = Fullnode::new_with_bank(
|
let server = Fullnode::new_with_bank(
|
||||||
leader_keypair,
|
leader_keypair,
|
||||||
bank,
|
bank,
|
||||||
0,
|
0,
|
||||||
@ -1257,7 +1264,7 @@ mod tests {
|
|||||||
None,
|
None,
|
||||||
Some(rpc_port),
|
Some(rpc_port),
|
||||||
);
|
);
|
||||||
sleep(Duration::from_millis(200));
|
sleep(Duration::from_millis(900));
|
||||||
|
|
||||||
let (sender, receiver) = channel();
|
let (sender, receiver) = channel();
|
||||||
run_local_drone(alice.keypair(), leader_data.contact_info.ncp, sender);
|
run_local_drone(alice.keypair(), leader_data.contact_info.ncp, sender);
|
||||||
@ -1342,9 +1349,12 @@ mod tests {
|
|||||||
.as_i64()
|
.as_i64()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(recipient_balance, 10);
|
assert_eq!(recipient_balance, 10);
|
||||||
|
|
||||||
|
server.close().unwrap();
|
||||||
|
remove_dir_all(ledger_path).unwrap();
|
||||||
}
|
}
|
||||||
#[test]
|
#[test]
|
||||||
fn test_cancel_tx() {
|
fn test_wallet_cancel_tx() {
|
||||||
let leader_keypair = Keypair::new();
|
let leader_keypair = Keypair::new();
|
||||||
let leader = Node::new_localhost_with_pubkey(leader_keypair.pubkey());
|
let leader = Node::new_localhost_with_pubkey(leader_keypair.pubkey());
|
||||||
|
|
||||||
@ -1354,13 +1364,13 @@ mod tests {
|
|||||||
let leader_data = leader.info.clone();
|
let leader_data = leader.info.clone();
|
||||||
let leader_data1 = leader.info.clone();
|
let leader_data1 = leader.info.clone();
|
||||||
let leader_data2 = leader.info.clone();
|
let leader_data2 = leader.info.clone();
|
||||||
let ledger_path = tmp_ledger("thin_client", &alice);
|
let ledger_path = tmp_ledger("wallet_cancel_tx", &alice);
|
||||||
|
|
||||||
let mut config_payer = WalletConfig::default();
|
let mut config_payer = WalletConfig::default();
|
||||||
let mut config_witness = WalletConfig::default();
|
let mut config_witness = WalletConfig::default();
|
||||||
let rpc_port = 13456; // Needs to be distinct known number to not conflict with other tests
|
let rpc_port = 13456; // Needs to be distinct known number to not conflict with other tests
|
||||||
|
|
||||||
let _server = Fullnode::new_with_bank(
|
let server = Fullnode::new_with_bank(
|
||||||
leader_keypair,
|
leader_keypair,
|
||||||
bank,
|
bank,
|
||||||
0,
|
0,
|
||||||
@ -1372,7 +1382,7 @@ mod tests {
|
|||||||
None,
|
None,
|
||||||
Some(rpc_port),
|
Some(rpc_port),
|
||||||
);
|
);
|
||||||
sleep(Duration::from_millis(200));
|
sleep(Duration::from_millis(900));
|
||||||
|
|
||||||
let (sender, receiver) = channel();
|
let (sender, receiver) = channel();
|
||||||
run_local_drone(alice.keypair(), leader_data.contact_info.ncp, sender);
|
run_local_drone(alice.keypair(), leader_data.contact_info.ncp, sender);
|
||||||
@ -1457,5 +1467,8 @@ mod tests {
|
|||||||
.as_i64()
|
.as_i64()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert_eq!(recipient_balance, 0);
|
assert_eq!(recipient_balance, 0);
|
||||||
|
|
||||||
|
server.close().unwrap();
|
||||||
|
remove_dir_all(ledger_path).unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user