Files
view/backend/tests/sync_full_history_test.rs
T
0xcathiefish b33ef907d4 Upload files.
2026-02-12 08:11:37 +00:00

66 lines
1.9 KiB
Rust

use backend::{BinanceCollector, CandleData};
use tokio::sync::mpsc;
use dotenv::dotenv;
use log::info;
#[tokio::test]
async fn test_sync_full_history_single_symbol() {
dotenv().ok();
env_logger::init();
// 1. Get all symbols
let symbol_vec = BinanceCollector::get_symbol().await.unwrap();
info!("Got {} symbols", symbol_vec.len());
// 2. Find ETHUSDT start time
let test_symbol = "ETHUSDT";
let test_start_time = symbol_vec
.iter()
.find(|item| item.symbol == test_symbol)
.map(|item| item.start_timestamp)
.expect("ETHUSDT not found");
info!("{} start_timestamp: {}", test_symbol, test_start_time);
// 3. Build clients (all clients work together on this symbol)
let clients = BinanceCollector::build_clients().await;
info!("Built {} clients", clients.len());
assert!(!clients.is_empty(), "Need at least 1 client");
// 4. Create channel
let (tx, mut rx) = mpsc::channel::<CandleData>(100000);
// 5. Sync from scratch (all clients work in parallel on different time segments)
info!("Starting full history sync for {} with {} clients...", test_symbol, clients.len());
let sync_handle = tokio::spawn(async move {
BinanceCollector::sync_from_scratch(
test_symbol.to_string(),
test_start_time,
clients, // Pass all clients
tx,
).await
});
// 6. Consume and count
let mut count = 0u64;
let mut last_ts = 0i64;
while let Some(candle) = rx.recv().await {
count += 1;
last_ts = candle.timestamp;
if count % 100000 == 0 {
info!("Progress: {} candles, last_ts: {}", count, last_ts);
}
}
let result = sync_handle.await.unwrap();
info!("Sync result: {:?}", result);
info!("Total received: {} candles", count);
info!("Last timestamp: {}", last_ts);
assert!(count > 0, "Should have synced some candles");
}