mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-10 05:09:22 +00:00
* Route validators for any active set through sc-authority-discovery Additionally adds an RPC route to retrieve their P2P addresses. * Have the coordinator get peers from substrate * Have the RPC return one address, not up to 3 Prevents the coordinator from believing it has 3 peers when it has one. * Add missing feature to serai-client * Correct network argument in serai-client for p2p_validators call * Add a test in serai-client to check DHT population with a much quicker failure than the coordinator tests * Update to latest Substrate Removes distinguishing BABE/AuthorityDiscovery keys which causes sc_authority_discovery to populate as desired. * Update to a properly tagged substrate commit * Add all dialed to peers to GossipSub * cargo fmt * Reduce common code in serai-coordinator-tests with amore involved new_test * Use a recursive async function to spawn `n` DockerTests with the necessary networking configuration * Merge UNIQUE_ID and ONE_AT_A_TIME * Tidy up the new recursive code in tests/coordinator * Use a Mutex in CONTEXT to let it be set multiple times * Make complimentary edits to full-stack tests * Augment coordinator P2p connection logs * Drop lock acquisitions before recursing * Better scope lock acquisitions in full-stack, preventing a deadlock * Ensure OUTER_OPS is reset across the test boundary * Add cargo deny allowance for dockertest fork
74 lines
2.2 KiB
Rust
74 lines
2.2 KiB
Rust
use std::time::Duration;
|
|
|
|
use serai_client::Serai;
|
|
|
|
use dockertest::DockerOperations;
|
|
|
|
use serai_processor_tests::{RPC_USER, RPC_PASS};
|
|
|
|
#[cfg(test)]
|
|
mod tests;
|
|
|
|
#[allow(unused)]
|
|
#[derive(Clone, Debug)]
|
|
pub struct Handles {
|
|
bitcoin: (String, u32),
|
|
bitcoin_processor: String,
|
|
monero: (String, u32),
|
|
monero_processor: String,
|
|
message_queue: String,
|
|
serai: String,
|
|
}
|
|
|
|
impl Handles {
|
|
pub async fn serai(&self, ops: &DockerOperations) -> Serai {
|
|
let serai_rpc = ops.handle(&self.serai).host_port(9944).unwrap();
|
|
let serai_rpc = format!("http://{}:{}", serai_rpc.0, serai_rpc.1);
|
|
|
|
// If the RPC server has yet to start, sleep for up to 60s until it does
|
|
for _ in 0 .. 60 {
|
|
tokio::time::sleep(Duration::from_secs(1)).await;
|
|
let Ok(client) = Serai::new(serai_rpc.clone()).await else { continue };
|
|
if client.latest_finalized_block_hash().await.is_err() {
|
|
continue;
|
|
}
|
|
return client;
|
|
}
|
|
panic!("serai RPC server wasn't available after 60s");
|
|
}
|
|
|
|
pub async fn bitcoin(&self, ops: &DockerOperations) -> bitcoin_serai::rpc::Rpc {
|
|
let rpc = ops.handle(&self.bitcoin.0).host_port(self.bitcoin.1).unwrap();
|
|
let rpc = format!("http://{RPC_USER}:{RPC_PASS}@{}:{}", rpc.0, rpc.1);
|
|
|
|
// If the RPC server has yet to start, sleep for up to 60s until it does
|
|
for _ in 0 .. 60 {
|
|
tokio::time::sleep(Duration::from_secs(1)).await;
|
|
let Ok(client) = bitcoin_serai::rpc::Rpc::new(rpc.clone()).await else { continue };
|
|
return client;
|
|
}
|
|
panic!("bitcoin RPC server wasn't available after 60s");
|
|
}
|
|
|
|
pub async fn monero(
|
|
&self,
|
|
ops: &DockerOperations,
|
|
) -> monero_serai::rpc::Rpc<monero_serai::rpc::HttpRpc> {
|
|
use monero_serai::rpc::HttpRpc;
|
|
|
|
let rpc = ops.handle(&self.monero.0).host_port(self.monero.1).unwrap();
|
|
let rpc = format!("http://{RPC_USER}:{RPC_PASS}@{}:{}", rpc.0, rpc.1);
|
|
|
|
// If the RPC server has yet to start, sleep for up to 60s until it does
|
|
for _ in 0 .. 60 {
|
|
tokio::time::sleep(Duration::from_secs(1)).await;
|
|
let Ok(client) = HttpRpc::new(rpc.clone()).await else { continue };
|
|
if client.get_height().await.is_err() {
|
|
continue;
|
|
}
|
|
return client;
|
|
}
|
|
panic!("monero RPC server wasn't available after 60s");
|
|
}
|
|
}
|