updating rpc-server tests

This commit is contained in:
Lorenzo Tucci 2023-01-09 19:03:22 +01:00
parent d416095146
commit 5d301ebbb1
No known key found for this signature in database
GPG Key ID: D98C4FA2CDF590A0
2 changed files with 177 additions and 15 deletions

2
Cargo.lock generated
View File

@ -1886,7 +1886,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a4e70b4439a751a5de7dd5ed55eacff78ebf4ffe0fc009cb1ebb11417f5b536b"
dependencies = [
"anyhow",
"arrayvec 0.7.2",
"arrayvec",
"async-lock",
"async-trait",
"beef",

View File

@ -20,7 +20,14 @@ use sequential_test::sequential;
#[cfg(test)]
// to be replaced with actual "real" testing values
// need to create some kind of swap database and bitcoin environment with some funds
const SERVER_ADDRESS: &str = "127.0.0.1:1234";
const BITCOIN_ADDR: &str = "valid_address";
const MONERO_ADDR: &str = "valid_address";
const SELLER: &str = "some_seller";
const SWAP_ID: &str = "valid_swap_id";
pub async fn initialize_context() -> (Arc<Context>, Request) {
let (is_testnet, debug, json) = (true, false, false);
@ -162,7 +169,7 @@ pub async fn get_seller() {
}
let mut params = ObjectParams::new();
params.insert("swap_id", "invalid_swap_000");
params.insert("swap_id", "invalid_swap");
let response: Result<HashMap<String, String>, _> = client.request("get_seller", params).await;
@ -172,7 +179,7 @@ pub async fn get_seller() {
}
let mut params = ObjectParams::new();
params.insert("swap_id", "existing_swap");
params.insert("swap_id", SWAP_ID);
let response: Result<HashMap<String, String>, _> = client.request("get_seller", params).await;
@ -200,17 +207,13 @@ pub async fn get_swap_start_date() {
let response: Result<HashMap<String, String>, _> = client.request("get_swap_start_date", params).await;
// We should ideally match the expected error and panic if it's different one, but the request returns a custom error (to investigate)
// Err(jsonrpsee_core::Error::Call(CallError::InvalidParams(e))) => (),
// Err(e) => panic!("ErrorType was not ParseError but {e:?}"),
match response {
Err(e) => (),
_ => panic!("Expected an error when swap_id is missing"),
}
let mut params = ObjectParams::new();
params.insert("swap_id", "invalid_swap_000");
params.insert("swap_id", "invalid_swap");
let response: Result<HashMap<String, String>, _> = client.request("get_swap_start_date", params).await;
@ -220,7 +223,7 @@ pub async fn get_swap_start_date() {
}
let mut params = ObjectParams::new();
params.insert("swap_id", "existing_swap");
params.insert("swap_id", SWAP_ID);
let response: Result<HashMap<String, String>, _> = client.request("get_swap_start_date", params).await;
@ -248,17 +251,13 @@ pub async fn resume_swap() {
let response: Result<HashMap<String, String>, _> = client.request("get_swap_start_date", params).await;
// We should ideally match the expected error and panic if it's different one, but the request returns a custom error (to investigate)
// Err(jsonrpsee_core::Error::Call(CallError::InvalidParams(e))) => (),
// Err(e) => panic!("ErrorType was not ParseError but {e:?}"),
match response {
Err(e) => (),
_ => panic!("Expected an error when swap_id is missing"),
}
let mut params = ObjectParams::new();
params.insert("swap_id", "invalid_swap_000");
params.insert("swap_id", "invalid_swap");
let response: Result<HashMap<String, String>, _> = client.request("get_swap_start_date", params).await;
@ -268,7 +267,7 @@ pub async fn resume_swap() {
}
let mut params = ObjectParams::new();
params.insert("swap_id", "existing_swap");
params.insert("swap_id", SWAP_ID);
let response: Result<HashMap<String, String>, _> = client.request("get_swap_start_date", params).await;
@ -278,3 +277,166 @@ pub async fn resume_swap() {
}
ctx.shutdown.send(());
}
#[tokio::test]
#[sequential]
pub async fn withdraw_btc() {
let (ctx, mut request) = initialize_context().await;
let move_ctx = Arc::clone(&ctx);
tokio::spawn(async move {
request.call(Arc::clone(&move_ctx)).await;
});
let url = format!("ws://{}", SERVER_ADDRESS);
tokio::time::sleep(Duration::from_secs(3)).await;
let client = WsClientBuilder::default().build(&url).await.unwrap();
let mut params = ObjectParams::new();
let response: Result<HashMap<String, String>, _> = client.request("withdraw_btc", params).await;
match response {
Err(e) => (),
_ => panic!("Expected an error when withdraw_address is missing"),
}
let mut params = ObjectParams::new();
params.insert("address", "invalid_address");
let response: Result<HashMap<String, String>, _> = client.request("withdraw_btc", params).await;
match response {
Err(e) => (),
_ => panic!("Expected an error when withdraw_address is malformed"),
}
let mut params = ObjectParams::new();
params.insert("address", BITCOIN_ADDR);
params.insert("amount", "0");
let response: Result<HashMap<String, String>, _> = client.request("withdraw_btc", params).await;
match response {
Err(e) => (),
_ => panic!("Expected an error when amount is 0"),
}
let mut params = ObjectParams::new();
params.insert("address", BITCOIN_ADDR);
params.insert("amount", "0.1");
let response: Result<HashMap<String, String>, _> = client.request("withdraw_btc", params).await;
match response {
Ok(hash) => (),
Err(e) => panic!("Expected a HashMap, got an error: {}", e),
}
ctx.shutdown.send(());
}
#[tokio::test]
#[sequential]
pub async fn buy_xmr() {
let (ctx, mut request) = initialize_context().await;
let move_ctx = Arc::clone(&ctx);
tokio::spawn(async move {
request.call(Arc::clone(&move_ctx)).await;
});
let url = format!("ws://{}", SERVER_ADDRESS);
tokio::time::sleep(Duration::from_secs(3)).await;
let client = WsClientBuilder::default().build(&url).await.unwrap();
let mut params = ObjectParams::new();
let response: Result<HashMap<String, String>, _> = client.request("buy_xmr", params).await;
match response {
Err(e) => (),
_ => panic!("Expected an error when no params are given"),
}
let mut params = ObjectParams::new();
params.insert("bitcoin_change_address", BITCOIN_ADDR);
params.insert("monero_receive_address", MONERO_ADDR);
let response: Result<HashMap<String, String>, _> = client.request("buy_xmr", params).await;
match response {
Err(e) => (),
_ => panic!("Expected an error when seller is missing"),
}
let mut params = ObjectParams::new();
params.insert("bitcoin_change_address", BITCOIN_ADDR);
params.insert("seller", SELLER);
let response: Result<HashMap<String, String>, _> = client.request("buy_xmr", params).await;
match response {
Err(e) => (),
_ => panic!("Expected an error when monero_receive_address is missing"),
}
let mut params = ObjectParams::new();
params.insert("monero_receive_address", MONERO_ADDR);
params.insert("seller", SELLER);
let response: Result<HashMap<String, String>, _> = client.request("buy_xmr", params).await;
match response {
Err(e) => (),
_ => panic!("Expected an error when bitcoin_change_address is missing"),
}
let mut params = ObjectParams::new();
params.insert("bitcoin_change_address", "invalid_address");
params.insert("monero_receive_address", MONERO_ADDR);
params.insert("seller", SELLER);
let response: Result<HashMap<String, String>, _> = client.request("buy_xmr", params).await;
match response {
Err(e) => (),
_ => panic!("Expected an error when bitcoin_change_address is malformed"),
}
let mut params = ObjectParams::new();
params.insert("bitcoin_change_address", BITCOIN_ADDR);
params.insert("monero_receive_address", "invalid_address");
params.insert("seller", SELLER);
let response: Result<HashMap<String, String>, _> = client.request("buy_xmr", params).await;
match response {
Err(e) => (),
_ => panic!("Expected an error when monero_receive_address is malformed"),
}
let mut params = ObjectParams::new();
params.insert("bitcoin_change_address", BITCOIN_ADDR);
params.insert("monero_receive_address", MONERO_ADDR);
params.insert("seller", "invalid_seller");
let response: Result<HashMap<String, String>, _> = client.request("buy_xmr", params).await;
match response {
Err(e) => (),
_ => panic!("Expected an error when seller is malformed"),
}
let mut params = ObjectParams::new();
params.insert("bitcoin_change_address", BITCOIN_ADDR);
params.insert("monero_receive_address", MONERO_ADDR);
params.insert("seller", SELLER);
let response: Result<HashMap<String, String>, _> = client.request("buy_xmr", params).await;
match response {
Ok(hash) => (),
Err(e) => panic!("Expected a HashMap, got an error: {}", e),
}
ctx.shutdown.send(());
}