#![cfg(target_arch = "wasm32")]
use absurder_sql::Database;
use wasm_bindgen_test::*;
wasm_bindgen_test_configure!(run_in_browser);
#[wasm_bindgen_test]
async fn test_concurrent_is_leader_calls() {
console_log::init_with_level(log::Level::Debug).ok();
let mut db1 = Database::new_wasm("concurrent_1".to_string())
.await
.unwrap();
let mut db2 = Database::new_wasm("concurrent_2".to_string())
.await
.unwrap();
let mut db3 = Database::new_wasm("concurrent_3".to_string())
.await
.unwrap();
let mut db4 = Database::new_wasm("concurrent_4".to_string())
.await
.unwrap();
let mut db5 = Database::new_wasm("concurrent_5".to_string())
.await
.unwrap();
let mut db6 = Database::new_wasm("concurrent_6".to_string())
.await
.unwrap();
let (r1, r2, r3, r4, r5, r6) = futures::join!(
db1.is_leader(),
db2.is_leader(),
db3.is_leader(),
db4.is_leader(),
db5.is_leader(),
db6.is_leader(),
);
let results = vec![r1, r2, r3, r4, r5, r6];
let failures: Vec<_> = results
.iter()
.enumerate()
.filter_map(|(i, r)| {
if r.is_err() {
Some((i, r.as_ref().unwrap_err()))
} else {
None
}
})
.collect();
if !failures.is_empty() {
panic!(
"RED PHASE CONFIRMED: {} isLeader() calls failed:\n{:?}",
failures.len(),
failures
);
}
db1.close().await.ok();
db2.close().await.ok();
db3.close().await.ok();
db4.close().await.ok();
db5.close().await.ok();
db6.close().await.ok();
Database::delete_database("concurrent_1".to_string())
.await
.ok();
Database::delete_database("concurrent_2".to_string())
.await
.ok();
Database::delete_database("concurrent_3".to_string())
.await
.ok();
Database::delete_database("concurrent_4".to_string())
.await
.ok();
Database::delete_database("concurrent_5".to_string())
.await
.ok();
Database::delete_database("concurrent_6".to_string())
.await
.ok();
}