@@ -1603,33 +1603,53 @@ pub(crate) mod tests {
1603
1603
1604
1604
use super :: * ;
1605
1605
use crate :: builder:: ClientBuilder ;
1606
- use futures:: future;
1607
1606
use std:: sync:: Arc ;
1608
1607
use xmtp_cryptography:: utils:: generate_local_wallet;
1609
1608
1610
- #[ cfg_attr( target_arch = "wasm32" , wasm_bindgen_test:: wasm_bindgen_test) ]
1611
- #[ cfg_attr( not( target_arch = "wasm32" ) , tokio:: test( flavor = "multi_thread" ) ) ]
1609
+ /// This test is not reproducible in webassembly, b/c webassembly has only one thread.
1610
+ #[ cfg_attr(
1611
+ not( target_arch = "wasm32" ) ,
1612
+ tokio:: test( flavor = "multi_thread" , worker_threads = 10 )
1613
+ ) ]
1614
+ #[ cfg( not( target_family = "wasm" ) ) ]
1612
1615
async fn publish_intents_worst_case_scenario ( ) {
1613
1616
let wallet = generate_local_wallet ( ) ;
1614
- let amal = Arc :: new ( ClientBuilder :: new_test_client ( & wallet) . await ) ;
1615
- let amal_group : Arc < MlsGroup < _ > > =
1616
- Arc :: new ( amal . create_group ( None , Default :: default ( ) ) . unwrap ( ) ) ;
1617
+ let amal_a = Arc :: new ( ClientBuilder :: new_test_client ( & wallet) . await ) ;
1618
+ let amal_group_a : Arc < MlsGroup < _ > > =
1619
+ Arc :: new ( amal_a . create_group ( None , Default :: default ( ) ) . unwrap ( ) ) ;
1617
1620
1618
- amal_group. send_message_optimistic ( b"1" ) . unwrap ( ) ;
1619
- amal_group. send_message_optimistic ( b"2" ) . unwrap ( ) ;
1620
- amal_group. send_message_optimistic ( b"3" ) . unwrap ( ) ;
1621
- amal_group. send_message_optimistic ( b"4" ) . unwrap ( ) ;
1622
- amal_group. send_message_optimistic ( b"5" ) . unwrap ( ) ;
1623
- amal_group. send_message_optimistic ( b"6" ) . unwrap ( ) ;
1621
+ let conn = amal_a. context ( ) . store ( ) . conn ( ) . unwrap ( ) ;
1622
+ let provider: Arc < XmtpOpenMlsProvider > = Arc :: new ( conn. into ( ) ) ;
1624
1623
1625
- let conn = amal. context ( ) . store ( ) . conn ( ) . unwrap ( ) ;
1626
- let provider: XmtpOpenMlsProvider = conn. into ( ) ;
1624
+ // create group intent
1625
+ amal_group_a. sync ( ) . await . unwrap ( ) ;
1626
+ assert_eq ! ( provider. conn_ref( ) . intents_deleted( ) , 1 ) ;
1627
1627
1628
- let mut futures = vec ! [ ] ;
1629
- for _ in 0 ..10 {
1630
- futures. push ( amal_group. publish_intents ( & provider) )
1628
+ for _ in 0 ..100 {
1629
+ let s = xmtp_common:: rand_string :: < 100 > ( ) ;
1630
+ amal_group_a. send_message_optimistic ( s. as_bytes ( ) ) . unwrap ( ) ;
1631
+ }
1632
+
1633
+ let mut set = tokio:: task:: JoinSet :: new ( ) ;
1634
+ for _ in 0 ..50 {
1635
+ let g = amal_group_a. clone ( ) ;
1636
+ let p = provider. clone ( ) ;
1637
+ set. spawn ( async move { g. publish_intents ( & p) . await } ) ;
1638
+ }
1639
+
1640
+ let res = set. join_all ( ) . await ;
1641
+ let errs: Vec < & Result < _ , _ > > = res. iter ( ) . filter ( |r| r. is_err ( ) ) . collect ( ) ;
1642
+ errs. iter ( ) . for_each ( |e| {
1643
+ tracing:: error!( "{}" , e. as_ref( ) . unwrap_err( ) ) ;
1644
+ } ) ;
1645
+
1646
+ let published = provider. conn_ref ( ) . intents_published ( ) ;
1647
+ assert_eq ! ( published, 101 ) ;
1648
+ let created = provider. conn_ref ( ) . intents_created ( ) ;
1649
+ assert_eq ! ( created, 101 ) ;
1650
+ if !errs. is_empty ( ) {
1651
+ panic ! ( "Errors during publish" ) ;
1631
1652
}
1632
- future:: join_all ( futures) . await ;
1633
1653
}
1634
1654
1635
1655
#[ cfg_attr( target_arch = "wasm32" , wasm_bindgen_test:: wasm_bindgen_test) ]
0 commit comments