@@ -2872,7 +2872,6 @@ fn test_v2_eth_eth_kickstart() {
28722872}
28732873
28742874#[ test]
2875- #[ ignore]
28762875fn test_maker_order_recovery_on_tpu ( ) {
28772876 // Initialize swap addresses and configurations
28782877 let swap_addresses = SwapAddresses :: init ( ) ;
@@ -2906,52 +2905,105 @@ fn test_maker_order_recovery_on_tpu() {
29062905 }
29072906 } ;
29082907
2909- // start Bob and Alice
2908+ // start Bob, Alice and Onur
29102909 let ( _, bob_priv_key) =
29112910 eth_coin_v2_activation_with_random_privkey ( & MM_CTX , ETH , & eth_dev_conf ( ) , swap_addresses, false ) ;
29122911 let ( _, alice_priv_key) =
29132912 eth_coin_v2_activation_with_random_privkey ( & MM_CTX1 , ETH1 , & eth1_dev_conf ( ) , swap_addresses, false ) ;
2913+ let ( _, onur_priv_key) =
2914+ eth_coin_v2_activation_with_random_privkey ( & MM_CTX1 , ETH1 , & eth1_dev_conf ( ) , swap_addresses, false ) ;
2915+
29142916 let coins = json ! ( [ eth_dev_conf( ) , eth1_dev_conf( ) ] ) ;
29152917
29162918 let bob_conf = Mm2TestConf :: seednode_trade_v2 ( & format ! ( "0x{}" , hex:: encode( bob_priv_key) ) , & coins) ;
2917- let mut mm_bob = MarketMakerIt :: start ( bob_conf. conf . clone ( ) , bob_conf. rpc_password , None ) . unwrap ( ) ;
2918- let ( _bob_dump_log, _bob_dump_dashboard) = mm_dump ( & mm_bob. log_path ) ;
2919- log ! ( "Bob log path: {}" , mm_bob. log_path. display( ) ) ;
2919+ let mut mm_bob = block_on ( MarketMakerIt :: start_with_envs (
2920+ bob_conf. conf . clone ( ) ,
2921+ bob_conf. rpc_password ,
2922+ None ,
2923+ & [ ( "ABORT_SWAP_FOR_TEST" , "1" ) ] ,
2924+ ) )
2925+ . unwrap ( ) ;
29202926
29212927 let alice_conf =
29222928 Mm2TestConf :: light_node_trade_v2 ( & format ! ( "0x{}" , hex:: encode( alice_priv_key) ) , & coins, & [ & mm_bob
29232929 . ip
29242930 . to_string ( ) ] ) ;
29252931 let mut mm_alice = MarketMakerIt :: start ( alice_conf. conf . clone ( ) , alice_conf. rpc_password , None ) . unwrap ( ) ;
2926- let ( _alice_dump_log, _alice_dump_dashboard) = mm_dump ( & mm_alice. log_path ) ;
2927- log ! ( "Alice log path: {}" , mm_alice. log_path. display( ) ) ;
2932+
2933+ let onur_conf = Mm2TestConf :: light_node_trade_v2 ( & format ! ( "0x{}" , hex:: encode( onur_priv_key) ) , & coins, & [ & mm_bob
2934+ . ip
2935+ . to_string ( ) ] ) ;
2936+ let mm_onur = MarketMakerIt :: start ( onur_conf. conf . clone ( ) , onur_conf. rpc_password , None ) . unwrap ( ) ;
29282937
29292938 // Enable ETH and ETH1 for both Bob and Alice
29302939 enable_coins ( & mm_bob, & [ ETH , ETH1 ] ) ;
29312940 enable_coins ( & mm_alice, & [ ETH , ETH1 ] ) ;
2941+ enable_coins ( & mm_onur, & [ ETH , ETH1 ] ) ;
29322942
29332943 let uuids = block_on ( start_swaps ( & mut mm_bob, & mut mm_alice, & [ ( ETH , ETH1 ) ] , 1.0 , 1.0 , 77. ) ) ;
29342944 block_on ( mm_bob. wait_for_log ( 30. , |log| {
29352945 log. contains ( & format ! ( "Maker swap {} has successfully started" , uuids[ 0 ] ) )
29362946 } ) )
29372947 . unwrap ( ) ;
29382948
2939- // Stop alice right after swap start
2940- block_on ( mm_alice. stop ( ) ) . unwrap ( ) ;
2949+ let send_my_orders_rpc = |mm : & MarketMakerIt | -> MyOrdersRpcResult {
2950+ let rc = block_on ( mm. rpc ( & json ! ( {
2951+ "userpass" : mm. userpass,
2952+ "method" : "my_orders" ,
2953+ } ) ) )
2954+ . unwrap ( ) ;
2955+ assert ! ( rc. 0 . is_success( ) , "!my_orders: {}" , rc. 1 ) ;
29412956
2942- // TODO:
2943- // Wait T amount of seconds to timeout the swap.
2944- // Verify bob order recovery.
2957+ serde_json:: from_str ( & rc. 1 ) . unwrap ( )
2958+ } ;
29452959
2946- let rc = block_on ( mm_bob. rpc ( & json ! ( {
2947- "userpass" : mm_bob. userpass,
2948- "method" : "my_orders" ,
2949- } ) ) )
2950- . unwrap ( ) ;
2951- assert ! ( rc. 0 . is_success( ) , "!my_orders: {}" , rc. 1 ) ;
2960+ let send_orderbook_rpc = |mm : & MarketMakerIt | -> Json {
2961+ let rc = block_on ( mm. rpc ( & json ! ( {
2962+ "userpass" : mm. userpass,
2963+ "method" : "orderbook" ,
2964+ "mmrpc" : "2.0" ,
2965+ "params" : {
2966+ "base" : "ETH" ,
2967+ "rel" : "ETH1" ,
2968+ } ,
2969+ } ) ) )
2970+ . unwrap ( ) ;
2971+ assert ! ( rc. 0 . is_success( ) , "!orderbook: {}" , rc. 1 ) ;
2972+
2973+ serde_json:: from_str ( & rc. 1 ) . unwrap ( )
2974+ } ;
2975+
2976+ let my_orders_rpc = send_my_orders_rpc ( & mm_bob) ;
2977+ assert ! (
2978+ my_orders_rpc. result. maker_orders. is_empty( ) ,
2979+ "Maker order must be invisible (locked)."
2980+ ) ;
2981+
2982+ let orderbook_result = send_orderbook_rpc ( & mm_onur) ;
2983+ let asks = orderbook_result[ "result" ] [ "asks" ] . as_array ( ) . unwrap ( ) ;
2984+ assert ! (
2985+ asks. is_empty( ) ,
2986+ "Onur ETH/ETH1 orderbook shouldn't see Bob's locked order."
2987+ ) ;
29522988
2953- let res: MyOrdersRpcResult = serde_json:: from_str ( & rc. 1 ) . unwrap ( ) ;
2954- assert ! ( !res. result. maker_orders. is_empty( ) , "Maker order must be recovered." ) ;
2989+ block_on ( mm_bob. wait_for_log ( 30. , |log| log. contains ( "Aborting it intentionally." ) ) ) . unwrap ( ) ;
2990+
2991+ // Swap will be aborted. Stop Alice to prevent her from taking the order again.
2992+ block_on ( mm_alice. stop ( ) ) . unwrap ( ) ;
2993+
2994+ let my_orders_rpc = send_my_orders_rpc ( & mm_bob) ;
2995+ assert ! (
2996+ !my_orders_rpc. result. maker_orders. is_empty( ) ,
2997+ "Maker order must be visible again (recovered)."
2998+ ) ;
2999+
3000+ let orderbook_result = send_orderbook_rpc ( & mm_onur) ;
3001+ let asks = orderbook_result[ "result" ] [ "asks" ] . as_array ( ) . unwrap ( ) ;
3002+ assert_eq ! (
3003+ asks. len( ) ,
3004+ 1 ,
3005+ "Onur ETH/ETH1 orderbook must see Bob's recovered order again."
3006+ ) ;
29553007}
29563008
29573009fn log_swap_status_before_stop ( mm : & MarketMakerIt , uuid : & str , role : & str ) {
0 commit comments