mirror of
https://github.com/comit-network/xmr-btc-swap.git
synced 2024-08-21 17:55:59 +00:00
![Thomas Eizinger](/assets/img/avatar_default.png)
1. Split up image::Monero into Monerod and MoneroWalletRpc 2. Don't use `bash` to run the internal command. Instead we disable the entrypoint script as per https://github.com/XMRto/monero#raw-commands 3. Remove the start up delay by listening for the correct log message. To make this more resilient, we make the log level NOT configurable and instead always log verbosely.
70 lines
2.2 KiB
Rust
70 lines
2.2 KiB
Rust
use monero_harness::{Monero, MoneroWalletRpc};
|
|
use monero_rpc::wallet::MoneroWalletRpc as _;
|
|
use spectral::prelude::*;
|
|
use std::time::Duration;
|
|
use testcontainers::clients::Cli;
|
|
use tokio::time::sleep;
|
|
use tracing_subscriber::util::SubscriberInitExt;
|
|
|
|
#[tokio::test]
|
|
async fn fund_transfer_and_check_tx_key() {
|
|
let _guard = tracing_subscriber::fmt()
|
|
.with_env_filter("warn,test=debug,monero_harness=debug,monero_rpc=debug")
|
|
.set_default();
|
|
|
|
let fund_alice: u64 = 1_000_000_000_000;
|
|
let fund_bob = 0;
|
|
let send_to_bob = 5_000_000_000;
|
|
|
|
let tc = Cli::default();
|
|
let (monero, _monerod_container, _wallet_containers) =
|
|
Monero::new(&tc, vec!["alice", "bob"]).await.unwrap();
|
|
let alice_wallet = monero.wallet("alice").unwrap();
|
|
let bob_wallet = monero.wallet("bob").unwrap();
|
|
|
|
monero.init_miner().await.unwrap();
|
|
monero.init_wallet("alice", vec![fund_alice]).await.unwrap();
|
|
monero.init_wallet("bob", vec![fund_bob]).await.unwrap();
|
|
monero.start_miner().await.unwrap();
|
|
|
|
// check alice balance
|
|
let got_alice_balance = alice_wallet.balance().await.unwrap();
|
|
assert_that(&got_alice_balance).is_equal_to(fund_alice);
|
|
|
|
// transfer from alice to bob
|
|
let bob_address = bob_wallet.address().await.unwrap().address;
|
|
let transfer = alice_wallet
|
|
.transfer(&bob_address, send_to_bob)
|
|
.await
|
|
.unwrap();
|
|
|
|
wait_for_wallet_to_catch_up(bob_wallet, send_to_bob).await;
|
|
|
|
let got_bob_balance = bob_wallet.balance().await.unwrap();
|
|
assert_that(&got_bob_balance).is_equal_to(send_to_bob);
|
|
|
|
// check if tx was actually seen
|
|
let tx_id = transfer.tx_hash;
|
|
let tx_key = transfer.tx_key.unwrap().to_string();
|
|
let res = bob_wallet
|
|
.client()
|
|
.check_tx_key(tx_id, tx_key, bob_address)
|
|
.await
|
|
.expect("failed to check tx by key");
|
|
|
|
assert_that!(res.received).is_equal_to(send_to_bob);
|
|
}
|
|
|
|
async fn wait_for_wallet_to_catch_up(wallet: &MoneroWalletRpc, expected_balance: u64) {
|
|
let max_retry = 15;
|
|
let mut retry = 0;
|
|
loop {
|
|
retry += 1;
|
|
let balance = wallet.balance().await.unwrap();
|
|
if balance == expected_balance || max_retry == retry {
|
|
break;
|
|
}
|
|
sleep(Duration::from_secs(1)).await;
|
|
}
|
|
}
|