diff --git a/Cargo.lock b/Cargo.lock index f4697d3a..69a2748c 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3840,6 +3840,7 @@ dependencies = [ "lazy_static", "prometheus", "ractor", + "rand", "reqwest 0.12.9", "rstest 0.24.0", "ruint", diff --git a/crates/tap-agent/Cargo.toml b/crates/tap-agent/Cargo.toml index f91cbca8..3596e2c5 100644 --- a/crates/tap-agent/Cargo.toml +++ b/crates/tap-agent/Cargo.toml @@ -9,7 +9,7 @@ name = "indexer-tap-agent" path = "src/main.rs" [features] -test = ["dep:test-assets"] +test = ["dep:test-assets", "dep:rand"] [dependencies] indexer-monitor = { path = "../monitor" } @@ -51,6 +51,7 @@ tap_aggregator.workspace = true futures = { version = "0.3.30", default-features = false } bon = "3.3" test-assets = { path = "../test-assets", optional = true } +rand = { version = "0.8", optional = true } [dev-dependencies] # Release-please breaks with cyclical dependencies if dev-dependencies diff --git a/crates/tap-agent/src/agent/sender_account.rs b/crates/tap-agent/src/agent/sender_account.rs index 2516302f..6d3d2464 100644 --- a/crates/tap-agent/src/agent/sender_account.rs +++ b/crates/tap-agent/src/agent/sender_account.rs @@ -1281,7 +1281,6 @@ pub mod tests { #![allow(missing_docs)] use std::{ collections::{HashMap, HashSet}, - sync::atomic::AtomicU32, time::{Duration, SystemTime, UNIX_EPOCH}, }; @@ -1358,7 +1357,6 @@ pub mod tests { } /// Prefix shared between tests so we don't have conflicts in the global registry - pub static PREFIX_ID: AtomicU32 = AtomicU32::new(0); const ESCROW_VALUE: u128 = 1000; const BUFFER_DURATION: Duration = Duration::from_millis(100); const RETRY_DURATION: Duration = Duration::from_millis(1000); diff --git a/crates/tap-agent/src/agent/sender_accounts_manager.rs b/crates/tap-agent/src/agent/sender_accounts_manager.rs index 58549f2c..e1d0b46c 100644 --- a/crates/tap-agent/src/agent/sender_accounts_manager.rs +++ b/crates/tap-agent/src/agent/sender_accounts_manager.rs @@ -701,14 +701,15 @@ mod tests { use super::{new_receipts_watcher, SenderAccountsManagerMessage, State}; use crate::{ agent::{ - sender_account::{tests::PREFIX_ID, SenderAccountMessage}, + sender_account::SenderAccountMessage, sender_accounts_manager::{handle_notification, AllocationId, NewReceiptNotification}, }, test::{ actors::{DummyActor, MockSenderAccount, MockSenderAllocation, TestableActor}, - create_rav, create_received_receipt, create_sender_accounts_manager, get_grpc_url, - get_sender_account_config, store_rav, store_receipt, ALLOCATION_ID_0, ALLOCATION_ID_1, - INDEXER, SENDER_2, TAP_EIP712_DOMAIN_SEPARATOR, + create_rav, create_received_receipt, create_sender_accounts_manager, + generate_random_prefix, get_grpc_url, get_sender_account_config, store_rav, + store_receipt, ALLOCATION_ID_0, ALLOCATION_ID_1, INDEXER, SENDER_2, + TAP_EIP712_DOMAIN_SEPARATOR, }, }; const DUMMY_URL: &str = "http://localhost:1234"; @@ -737,10 +738,7 @@ mod tests { let senders_to_signers = vec![(SENDER.1, vec![SIGNER.1])].into_iter().collect(); let escrow_accounts = EscrowAccounts::new(HashMap::new(), senders_to_signers); - let prefix = format!( - "test-{}", - PREFIX_ID.fetch_add(1, std::sync::atomic::Ordering::SeqCst) - ); + let prefix = generate_random_prefix(); ( prefix.clone(), State { @@ -866,10 +864,7 @@ mod tests { #[sqlx::test(migrations = "../../migrations")] async fn test_receive_notifications(pgpool: PgPool) { - let prefix = format!( - "test-{}", - PREFIX_ID.fetch_add(1, std::sync::atomic::Ordering::SeqCst) - ); + let prefix = generate_random_prefix(); // create dummy allocation let (mock_sender_allocation, mut receipts) = MockSenderAllocation::new_with_receipts(); @@ -968,10 +963,7 @@ mod tests { let escrow_accounts = EscrowAccounts::new(HashMap::new(), senders_to_signers); let escrow_accounts = watch::channel(escrow_accounts).1; - let prefix = format!( - "test-{}", - PREFIX_ID.fetch_add(1, std::sync::atomic::Ordering::SeqCst) - ); + let prefix = generate_random_prefix(); let (last_message_emitted, mut rx) = mpsc::channel(64); diff --git a/crates/tap-agent/src/test.rs b/crates/tap-agent/src/test.rs index 2a301224..857fdb6f 100644 --- a/crates/tap-agent/src/test.rs +++ b/crates/tap-agent/src/test.rs @@ -5,7 +5,7 @@ use std::{ collections::{HashMap, HashSet}, net::SocketAddr, - sync::{atomic::AtomicU32, Arc}, + sync::Arc, time::Duration, }; @@ -16,6 +16,7 @@ use indexer_monitor::{DeploymentDetails, EscrowAccounts, SubgraphClient}; use indexer_receipt::TapReceipt; use lazy_static::lazy_static; use ractor::{concurrency::JoinHandle, Actor, ActorRef}; +use rand::{distributions::Alphanumeric, thread_rng, Rng}; use reqwest::Url; use sqlx::{types::BigDecimal, PgPool}; use tap_aggregator::server::run_server; @@ -60,8 +61,6 @@ lazy_static! { tap_eip712_domain(1, Address::from([0x11u8; 20]),); } -pub static PREFIX_ID: AtomicU32 = AtomicU32::new(0); - pub const TRIGGER_VALUE: u128 = 500; pub const RECEIPT_LIMIT: u64 = 10000; pub const DUMMY_URL: &str = "http://localhost:1234"; @@ -74,6 +73,16 @@ const TAP_SENDER_TIMEOUT: Duration = Duration::from_secs(30); const RAV_REQUEST_BUFFER: Duration = Duration::from_secs(60); const ESCROW_POLLING_INTERVAL: Duration = Duration::from_secs(30); +/// Generates a random prefix to be used for actor registry +pub fn generate_random_prefix() -> String { + const SIZE: usize = 16; + thread_rng() + .sample_iter(&Alphanumeric) + .take(SIZE) + .map(char::from) + .collect() +} + pub fn get_sender_account_config() -> &'static SenderAccountConfig { Box::leak(Box::new(SenderAccountConfig { rav_request_buffer: RAV_REQUEST_BUFFER, @@ -143,10 +152,7 @@ pub async fn create_sender_account( )) .expect("Failed to update escrow_accounts channel"); - let prefix = format!( - "test-{}", - PREFIX_ID.fetch_add(1, std::sync::atomic::Ordering::SeqCst) - ); + let prefix = generate_random_prefix(); let aggregator_url = match aggregator_endpoint { Some(url) => url, @@ -217,10 +223,7 @@ pub async fn create_sender_accounts_manager( )) .expect("Failed to update escrow_accounts channel"); - let prefix = format!( - "test-{}", - PREFIX_ID.fetch_add(1, std::sync::atomic::Ordering::SeqCst) - ); + let prefix = generate_random_prefix(); let args = SenderAccountsManagerArgs { config, domain_separator: TAP_EIP712_DOMAIN_SEPARATOR.clone(),