@@ -1796,17 +1796,17 @@ macro_rules! expect_payment_failed {
1796
1796
}
1797
1797
1798
1798
pub fn expect_payment_failed_conditions_event < ' a , ' b , ' c , ' d , ' e > (
1799
- node : & ' a Node < ' b , ' c , ' d > , payment_failed_event : Event , expected_payment_hash : PaymentHash ,
1799
+ payment_failed_events : Vec < Event > , expected_payment_hash : PaymentHash ,
1800
1800
expected_payment_failed_permanently : bool , conditions : PaymentFailedConditions < ' e >
1801
1801
) {
1802
- let expected_payment_id = match payment_failed_event {
1802
+ let expected_payment_id = match & payment_failed_events [ 0 ] {
1803
1803
Event :: PaymentPathFailed { payment_hash, payment_failed_permanently, path, retry, payment_id, network_update, short_channel_id,
1804
1804
#[ cfg( test) ]
1805
1805
error_code,
1806
1806
#[ cfg( test) ]
1807
1807
error_data, .. } => {
1808
- assert_eq ! ( payment_hash, expected_payment_hash, "unexpected payment_hash" ) ;
1809
- assert_eq ! ( payment_failed_permanently, expected_payment_failed_permanently, "unexpected payment_failed_permanently value" ) ;
1808
+ assert_eq ! ( * payment_hash, expected_payment_hash, "unexpected payment_hash" ) ;
1809
+ assert_eq ! ( * payment_failed_permanently, expected_payment_failed_permanently, "unexpected payment_failed_permanently value" ) ;
1810
1810
assert ! ( retry. is_some( ) , "expected retry.is_some()" ) ;
1811
1811
assert_eq ! ( retry. as_ref( ) . unwrap( ) . final_value_msat, path. last( ) . unwrap( ) . fee_msat, "Retry amount should match last hop in path" ) ;
1812
1812
assert_eq ! ( retry. as_ref( ) . unwrap( ) . payment_params. payee_pubkey, path. last( ) . unwrap( ) . pubkey, "Retry payee node_id should match last hop in path" ) ;
@@ -1835,7 +1835,7 @@ pub fn expect_payment_failed_conditions_event<'a, 'b, 'c, 'd, 'e>(
1835
1835
} ,
1836
1836
Some ( NetworkUpdate :: ChannelFailure { short_channel_id, is_permanent } ) if chan_closed => {
1837
1837
if let Some ( scid) = conditions. expected_blamed_scid {
1838
- assert_eq ! ( short_channel_id, scid) ;
1838
+ assert_eq ! ( * short_channel_id, scid) ;
1839
1839
}
1840
1840
assert ! ( is_permanent) ;
1841
1841
} ,
@@ -1849,10 +1849,7 @@ pub fn expect_payment_failed_conditions_event<'a, 'b, 'c, 'd, 'e>(
1849
1849
_ => panic ! ( "Unexpected event" ) ,
1850
1850
} ;
1851
1851
if !conditions. expected_mpp_parts_remain {
1852
- node. node . abandon_payment ( expected_payment_id) ;
1853
- let events = node. node . get_and_clear_pending_events ( ) ;
1854
- assert_eq ! ( events. len( ) , 1 ) ;
1855
- match events[ 0 ] {
1852
+ match & payment_failed_events[ 1 ] {
1856
1853
Event :: PaymentFailed { ref payment_hash, ref payment_id } => {
1857
1854
assert_eq ! ( * payment_hash, expected_payment_hash, "unexpected second payment_hash" ) ;
1858
1855
assert_eq ! ( * payment_id, expected_payment_id) ;
@@ -1866,9 +1863,9 @@ pub fn expect_payment_failed_conditions<'a, 'b, 'c, 'd, 'e>(
1866
1863
node : & ' a Node < ' b , ' c , ' d > , expected_payment_hash : PaymentHash , expected_payment_failed_permanently : bool ,
1867
1864
conditions : PaymentFailedConditions < ' e >
1868
1865
) {
1869
- let mut events = node. node . get_and_clear_pending_events ( ) ;
1870
- assert_eq ! ( events. len( ) , 1 ) ;
1871
- expect_payment_failed_conditions_event ( node , events. pop ( ) . unwrap ( ) , expected_payment_hash, expected_payment_failed_permanently, conditions) ;
1866
+ let events = node. node . get_and_clear_pending_events ( ) ;
1867
+ if conditions . expected_mpp_parts_remain { assert_eq ! ( events. len( ) , 1 ) ; } else { assert_eq ! ( events . len ( ) , 2 ) ; }
1868
+ expect_payment_failed_conditions_event ( events, expected_payment_hash, expected_payment_failed_permanently, conditions) ;
1872
1869
}
1873
1870
1874
1871
pub fn send_along_route_with_secret < ' a , ' b , ' c > ( origin_node : & Node < ' a , ' b , ' c > , route : Route , expected_paths : & [ & [ & Node < ' a , ' b , ' c > ] ] , recv_value : u64 , our_payment_hash : PaymentHash , our_payment_secret : PaymentSecret ) -> PaymentId {
@@ -2155,22 +2152,6 @@ pub fn fail_payment_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expe
2155
2152
}
2156
2153
2157
2154
pub fn pass_failed_payment_back < ' a , ' b , ' c > ( origin_node : & Node < ' a , ' b , ' c > , expected_paths_slice : & [ & [ & Node < ' a , ' b , ' c > ] ] , skip_last : bool , our_payment_hash : PaymentHash ) {
2158
- let expected_payment_id = pass_failed_payment_back_no_abandon ( origin_node, expected_paths_slice, skip_last, our_payment_hash) ;
2159
- if !skip_last {
2160
- origin_node. node . abandon_payment ( expected_payment_id. unwrap ( ) ) ;
2161
- let events = origin_node. node . get_and_clear_pending_events ( ) ;
2162
- assert_eq ! ( events. len( ) , 1 ) ;
2163
- match events[ 0 ] {
2164
- Event :: PaymentFailed { ref payment_hash, ref payment_id } => {
2165
- assert_eq ! ( * payment_hash, our_payment_hash, "unexpected second payment_hash" ) ;
2166
- assert_eq ! ( * payment_id, expected_payment_id. unwrap( ) ) ;
2167
- }
2168
- _ => panic ! ( "Unexpected second event" ) ,
2169
- }
2170
- }
2171
- }
2172
-
2173
- pub fn pass_failed_payment_back_no_abandon < ' a , ' b , ' c > ( origin_node : & Node < ' a , ' b , ' c > , expected_paths_slice : & [ & [ & Node < ' a , ' b , ' c > ] ] , skip_last : bool , our_payment_hash : PaymentHash ) -> Option < PaymentId > {
2174
2155
let mut expected_paths: Vec < _ > = expected_paths_slice. iter ( ) . collect ( ) ;
2175
2156
check_added_monitors ! ( expected_paths[ 0 ] . last( ) . unwrap( ) , expected_paths. len( ) ) ;
2176
2157
@@ -2194,8 +2175,6 @@ pub fn pass_failed_payment_back_no_abandon<'a, 'b, 'c>(origin_node: &Node<'a, 'b
2194
2175
per_path_msgs. sort_unstable_by ( |( _, node_id_a) , ( _, node_id_b) | node_id_a. cmp ( node_id_b) ) ;
2195
2176
expected_paths. sort_unstable_by ( |path_a, path_b| path_a[ path_a. len ( ) - 2 ] . node . get_our_node_id ( ) . cmp ( & path_b[ path_b. len ( ) - 2 ] . node . get_our_node_id ( ) ) ) ;
2196
2177
2197
- let mut expected_payment_id = None ;
2198
-
2199
2178
for ( i, ( expected_route, ( path_msgs, next_hop) ) ) in expected_paths. iter ( ) . zip ( per_path_msgs. drain ( ..) ) . enumerate ( ) {
2200
2179
let mut next_msgs = Some ( path_msgs) ;
2201
2180
let mut expected_next_node = next_hop;
@@ -2243,8 +2222,9 @@ pub fn pass_failed_payment_back_no_abandon<'a, 'b, 'c>(origin_node: &Node<'a, 'b
2243
2222
assert ! ( origin_node. node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
2244
2223
commitment_signed_dance ! ( origin_node, prev_node, next_msgs. as_ref( ) . unwrap( ) . 1 , false ) ;
2245
2224
let events = origin_node. node . get_and_clear_pending_events ( ) ;
2246
- assert_eq ! ( events. len( ) , 1 ) ;
2247
- expected_payment_id = Some ( match events[ 0 ] {
2225
+ if i == expected_paths. len ( ) - 1 { assert_eq ! ( events. len( ) , 2 ) ; } else { assert_eq ! ( events. len( ) , 1 ) ; }
2226
+
2227
+ let expected_payment_id = match events[ 0 ] {
2248
2228
Event :: PaymentPathFailed { payment_hash, payment_failed_permanently, all_paths_failed, ref path, ref payment_id, .. } => {
2249
2229
assert_eq ! ( payment_hash, our_payment_hash) ;
2250
2230
assert ! ( payment_failed_permanently) ;
@@ -2255,7 +2235,16 @@ pub fn pass_failed_payment_back_no_abandon<'a, 'b, 'c>(origin_node: &Node<'a, 'b
2255
2235
payment_id. unwrap ( )
2256
2236
} ,
2257
2237
_ => panic ! ( "Unexpected event" ) ,
2258
- } ) ;
2238
+ } ;
2239
+ if i == expected_paths. len ( ) - 1 {
2240
+ match events[ 1 ] {
2241
+ Event :: PaymentFailed { ref payment_hash, ref payment_id } => {
2242
+ assert_eq ! ( * payment_hash, our_payment_hash, "unexpected second payment_hash" ) ;
2243
+ assert_eq ! ( * payment_id, expected_payment_id) ;
2244
+ }
2245
+ _ => panic ! ( "Unexpected second event" ) ,
2246
+ }
2247
+ }
2259
2248
}
2260
2249
}
2261
2250
@@ -2264,8 +2253,6 @@ pub fn pass_failed_payment_back_no_abandon<'a, 'b, 'c>(origin_node: &Node<'a, 'b
2264
2253
assert ! ( expected_paths[ 0 ] . last( ) . unwrap( ) . node. get_and_clear_pending_events( ) . is_empty( ) ) ;
2265
2254
assert ! ( expected_paths[ 0 ] . last( ) . unwrap( ) . node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
2266
2255
check_added_monitors ! ( expected_paths[ 0 ] . last( ) . unwrap( ) , 0 ) ;
2267
-
2268
- expected_payment_id
2269
2256
}
2270
2257
2271
2258
pub fn fail_payment < ' a , ' b , ' c > ( origin_node : & Node < ' a , ' b , ' c > , expected_path : & [ & Node < ' a , ' b , ' c > ] , our_payment_hash : PaymentHash ) {
0 commit comments