From 5d301ebbb1c60e39332e179550ecea16a85da761 Mon Sep 17 00:00:00 2001 From: Lorenzo Tucci Date: Mon, 9 Jan 2023 19:03:22 +0100 Subject: [PATCH] updating rpc-server tests --- Cargo.lock | 2 +- swap/tests/rpc.rs | 190 ++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 177 insertions(+), 15 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index f59c2f90..4ee776ea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -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", diff --git a/swap/tests/rpc.rs b/swap/tests/rpc.rs index 6fb1b43b..59f2b3d9 100644 --- a/swap/tests/rpc.rs +++ b/swap/tests/rpc.rs @@ -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, 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, _> = 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, _> = client.request("get_seller", params).await; @@ -200,17 +207,13 @@ pub async fn get_swap_start_date() { let response: Result, _> = 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, _> = 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, _> = client.request("get_swap_start_date", params).await; @@ -248,17 +251,13 @@ pub async fn resume_swap() { let response: Result, _> = 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, _> = 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, _> = 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, _> = 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, _> = 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, _> = 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, _> = 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, _> = 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, _> = 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, _> = 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, _> = 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, _> = 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, _> = 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, _> = 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, _> = client.request("buy_xmr", params).await; + + match response { + Ok(hash) => (), + Err(e) => panic!("Expected a HashMap, got an error: {}", e), + } + + ctx.shutdown.send(()); +}