@@ -1800,17 +1800,18 @@ macro_rules! expect_payment_failed {
1800
1800
}
1801
1801
1802
1802
pub fn expect_payment_failed_conditions_event < ' a , ' b , ' c , ' d , ' e > (
1803
- node : & ' a Node < ' b , ' c , ' d > , payment_failed_event : Event , expected_payment_hash : PaymentHash ,
1803
+ payment_failed_events : Vec < Event > , expected_payment_hash : PaymentHash ,
1804
1804
expected_payment_failed_permanently : bool , conditions : PaymentFailedConditions < ' e >
1805
1805
) {
1806
- let expected_payment_id = match payment_failed_event {
1806
+ if conditions. expected_mpp_parts_remain { assert_eq ! ( payment_failed_events. len( ) , 1 ) ; } else { assert_eq ! ( payment_failed_events. len( ) , 2 ) ; }
1807
+ let expected_payment_id = match & payment_failed_events[ 0 ] {
1807
1808
Event :: PaymentPathFailed { payment_hash, payment_failed_permanently, path, retry, payment_id, network_update, short_channel_id,
1808
1809
#[ cfg( test) ]
1809
1810
error_code,
1810
1811
#[ cfg( test) ]
1811
1812
error_data, .. } => {
1812
- assert_eq ! ( payment_hash, expected_payment_hash, "unexpected payment_hash" ) ;
1813
- assert_eq ! ( payment_failed_permanently, expected_payment_failed_permanently, "unexpected payment_failed_permanently value" ) ;
1813
+ assert_eq ! ( * payment_hash, expected_payment_hash, "unexpected payment_hash" ) ;
1814
+ assert_eq ! ( * payment_failed_permanently, expected_payment_failed_permanently, "unexpected payment_failed_permanently value" ) ;
1814
1815
assert ! ( retry. is_some( ) , "expected retry.is_some()" ) ;
1815
1816
assert_eq ! ( retry. as_ref( ) . unwrap( ) . final_value_msat, path. last( ) . unwrap( ) . fee_msat, "Retry amount should match last hop in path" ) ;
1816
1817
assert_eq ! ( retry. as_ref( ) . unwrap( ) . payment_params. payee_pubkey, path. last( ) . unwrap( ) . pubkey, "Retry payee node_id should match last hop in path" ) ;
@@ -1839,7 +1840,7 @@ pub fn expect_payment_failed_conditions_event<'a, 'b, 'c, 'd, 'e>(
1839
1840
} ,
1840
1841
Some ( NetworkUpdate :: ChannelFailure { short_channel_id, is_permanent } ) if chan_closed => {
1841
1842
if let Some ( scid) = conditions. expected_blamed_scid {
1842
- assert_eq ! ( short_channel_id, scid) ;
1843
+ assert_eq ! ( * short_channel_id, scid) ;
1843
1844
}
1844
1845
assert ! ( is_permanent) ;
1845
1846
} ,
@@ -1853,10 +1854,7 @@ pub fn expect_payment_failed_conditions_event<'a, 'b, 'c, 'd, 'e>(
1853
1854
_ => panic ! ( "Unexpected event" ) ,
1854
1855
} ;
1855
1856
if !conditions. expected_mpp_parts_remain {
1856
- node. node . abandon_payment ( expected_payment_id) ;
1857
- let events = node. node . get_and_clear_pending_events ( ) ;
1858
- assert_eq ! ( events. len( ) , 1 ) ;
1859
- match events[ 0 ] {
1857
+ match & payment_failed_events[ 1 ] {
1860
1858
Event :: PaymentFailed { ref payment_hash, ref payment_id } => {
1861
1859
assert_eq ! ( * payment_hash, expected_payment_hash, "unexpected second payment_hash" ) ;
1862
1860
assert_eq ! ( * payment_id, expected_payment_id) ;
@@ -1870,9 +1868,8 @@ pub fn expect_payment_failed_conditions<'a, 'b, 'c, 'd, 'e>(
1870
1868
node : & ' a Node < ' b , ' c , ' d > , expected_payment_hash : PaymentHash , expected_payment_failed_permanently : bool ,
1871
1869
conditions : PaymentFailedConditions < ' e >
1872
1870
) {
1873
- let mut events = node. node . get_and_clear_pending_events ( ) ;
1874
- assert_eq ! ( events. len( ) , 1 ) ;
1875
- expect_payment_failed_conditions_event ( node, events. pop ( ) . unwrap ( ) , expected_payment_hash, expected_payment_failed_permanently, conditions) ;
1871
+ let events = node. node . get_and_clear_pending_events ( ) ;
1872
+ expect_payment_failed_conditions_event ( events, expected_payment_hash, expected_payment_failed_permanently, conditions) ;
1876
1873
}
1877
1874
1878
1875
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 {
@@ -2157,22 +2154,6 @@ pub fn fail_payment_along_route<'a, 'b, 'c>(origin_node: &Node<'a, 'b, 'c>, expe
2157
2154
}
2158
2155
2159
2156
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 ) {
2160
- let expected_payment_id = pass_failed_payment_back_no_abandon ( origin_node, expected_paths_slice, skip_last, our_payment_hash) ;
2161
- if !skip_last {
2162
- origin_node. node . abandon_payment ( expected_payment_id. unwrap ( ) ) ;
2163
- let events = origin_node. node . get_and_clear_pending_events ( ) ;
2164
- assert_eq ! ( events. len( ) , 1 ) ;
2165
- match events[ 0 ] {
2166
- Event :: PaymentFailed { ref payment_hash, ref payment_id } => {
2167
- assert_eq ! ( * payment_hash, our_payment_hash, "unexpected second payment_hash" ) ;
2168
- assert_eq ! ( * payment_id, expected_payment_id. unwrap( ) ) ;
2169
- }
2170
- _ => panic ! ( "Unexpected second event" ) ,
2171
- }
2172
- }
2173
- }
2174
-
2175
- 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 > {
2176
2157
let mut expected_paths: Vec < _ > = expected_paths_slice. iter ( ) . collect ( ) ;
2177
2158
check_added_monitors ! ( expected_paths[ 0 ] . last( ) . unwrap( ) , expected_paths. len( ) ) ;
2178
2159
@@ -2196,8 +2177,6 @@ pub fn pass_failed_payment_back_no_abandon<'a, 'b, 'c>(origin_node: &Node<'a, 'b
2196
2177
per_path_msgs. sort_unstable_by ( |( _, node_id_a) , ( _, node_id_b) | node_id_a. cmp ( node_id_b) ) ;
2197
2178
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 ( ) ) ) ;
2198
2179
2199
- let mut expected_payment_id = None ;
2200
-
2201
2180
for ( i, ( expected_route, ( path_msgs, next_hop) ) ) in expected_paths. iter ( ) . zip ( per_path_msgs. drain ( ..) ) . enumerate ( ) {
2202
2181
let mut next_msgs = Some ( path_msgs) ;
2203
2182
let mut expected_next_node = next_hop;
@@ -2245,8 +2224,9 @@ pub fn pass_failed_payment_back_no_abandon<'a, 'b, 'c>(origin_node: &Node<'a, 'b
2245
2224
assert ! ( origin_node. node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
2246
2225
commitment_signed_dance ! ( origin_node, prev_node, next_msgs. as_ref( ) . unwrap( ) . 1 , false ) ;
2247
2226
let events = origin_node. node . get_and_clear_pending_events ( ) ;
2248
- assert_eq ! ( events. len( ) , 1 ) ;
2249
- expected_payment_id = Some ( match events[ 0 ] {
2227
+ if i == expected_paths. len ( ) - 1 { assert_eq ! ( events. len( ) , 2 ) ; } else { assert_eq ! ( events. len( ) , 1 ) ; }
2228
+
2229
+ let expected_payment_id = match events[ 0 ] {
2250
2230
Event :: PaymentPathFailed { payment_hash, payment_failed_permanently, all_paths_failed, ref path, ref payment_id, .. } => {
2251
2231
assert_eq ! ( payment_hash, our_payment_hash) ;
2252
2232
assert ! ( payment_failed_permanently) ;
@@ -2257,7 +2237,16 @@ pub fn pass_failed_payment_back_no_abandon<'a, 'b, 'c>(origin_node: &Node<'a, 'b
2257
2237
payment_id. unwrap ( )
2258
2238
} ,
2259
2239
_ => panic ! ( "Unexpected event" ) ,
2260
- } ) ;
2240
+ } ;
2241
+ if i == expected_paths. len ( ) - 1 {
2242
+ match events[ 1 ] {
2243
+ Event :: PaymentFailed { ref payment_hash, ref payment_id } => {
2244
+ assert_eq ! ( * payment_hash, our_payment_hash, "unexpected second payment_hash" ) ;
2245
+ assert_eq ! ( * payment_id, expected_payment_id) ;
2246
+ }
2247
+ _ => panic ! ( "Unexpected second event" ) ,
2248
+ }
2249
+ }
2261
2250
}
2262
2251
}
2263
2252
@@ -2266,8 +2255,6 @@ pub fn pass_failed_payment_back_no_abandon<'a, 'b, 'c>(origin_node: &Node<'a, 'b
2266
2255
assert ! ( expected_paths[ 0 ] . last( ) . unwrap( ) . node. get_and_clear_pending_events( ) . is_empty( ) ) ;
2267
2256
assert ! ( expected_paths[ 0 ] . last( ) . unwrap( ) . node. get_and_clear_pending_msg_events( ) . is_empty( ) ) ;
2268
2257
check_added_monitors ! ( expected_paths[ 0 ] . last( ) . unwrap( ) , 0 ) ;
2269
-
2270
- expected_payment_id
2271
2258
}
2272
2259
2273
2260
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