@@ -1221,64 +1221,82 @@ fn test_send_notifications_and_peer_connected_resets_cooldown() {
1221
1221
}
1222
1222
}
1223
1223
1224
- #[ test]
1225
- fn dos_protection ( ) {
1226
- let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
1227
- let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
1228
- let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
1229
- let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
1230
- let ( lsps_nodes, _) = lsps5_test_setup ( nodes, Arc :: new ( DefaultTimeProvider ) ) ;
1231
- let LSPSNodes { service_node, client_node } = lsps_nodes;
1232
- let client_node_id = client_node. inner . node . get_our_node_id ( ) ;
1233
- let service_node_id = service_node. inner . node . get_our_node_id ( ) ;
1234
-
1235
- let client_handler = client_node. liquidity_manager . lsps5_client_handler ( ) . unwrap ( ) ;
1236
-
1237
- let assert_reject = || -> ( ) {
1238
- let _ = client_handler
1224
+ macro_rules! assert_lsps5_reject {
1225
+ ( $client_handler: expr, $service_node: expr, $client_node: expr, $service_node_id: expr, $client_node_id: expr) => { {
1226
+ let _ = $client_handler
1239
1227
. set_webhook(
1240
- service_node_id,
1228
+ $ service_node_id,
1241
1229
"App" . to_string( ) ,
1242
1230
"https://example.org/webhook" . to_string( ) ,
1243
1231
)
1244
1232
. expect( "Request should send" ) ;
1245
- let request = get_lsps_message ! ( client_node, service_node_id) ;
1233
+ let request = get_lsps_message!( $ client_node, $ service_node_id) ;
1246
1234
1247
- let result = service_node. liquidity_manager . handle_custom_message ( request, client_node_id) ;
1235
+ let result =
1236
+ $service_node. liquidity_manager. handle_custom_message( request, $client_node_id) ;
1248
1237
assert!( result. is_err( ) , "Service should reject request without prior interaction" ) ;
1249
1238
1250
- assert ! ( service_node. liquidity_manager. get_and_clear_pending_msg( ) . is_empty( ) ) ;
1251
- } ;
1239
+ assert!( $service_node. liquidity_manager. get_and_clear_pending_msg( ) . is_empty( ) ) ;
1240
+ } } ;
1241
+ }
1252
1242
1253
- let assert_accept = || -> ( ) {
1254
- let _ = client_handler
1243
+ macro_rules! assert_lsps5_accept {
1244
+ ( $client_handler: expr, $service_node: expr, $client_node: expr, $service_node_id: expr, $client_node_id: expr) => { {
1245
+ let _ = $client_handler
1255
1246
. set_webhook(
1256
- service_node_id,
1247
+ $ service_node_id,
1257
1248
"App" . to_string( ) ,
1258
1249
"https://example.org/webhook" . to_string( ) ,
1259
1250
)
1260
1251
. expect( "Request should send" ) ;
1261
- let request = get_lsps_message ! ( client_node, service_node_id) ;
1252
+ let request = get_lsps_message!( $ client_node, $ service_node_id) ;
1262
1253
1263
- let result = service_node. liquidity_manager . handle_custom_message ( request, client_node_id) ;
1254
+ let result =
1255
+ $service_node. liquidity_manager. handle_custom_message( request, $client_node_id) ;
1264
1256
assert!( result. is_ok( ) , "Service should accept request after prior interaction" ) ;
1265
- let _ = service_node. liquidity_manager . next_event ( ) . unwrap ( ) ;
1266
- let response = get_lsps_message ! ( service_node, client_node_id) ;
1267
- client_node
1257
+ let _ = $ service_node. liquidity_manager. next_event( ) . unwrap( ) ;
1258
+ let response = get_lsps_message!( $ service_node, $ client_node_id) ;
1259
+ $ client_node
1268
1260
. liquidity_manager
1269
- . handle_custom_message ( response, service_node_id)
1261
+ . handle_custom_message( response, $ service_node_id)
1270
1262
. expect( "Client should handle response" ) ;
1271
- let _ = client_node. liquidity_manager . next_event ( ) . unwrap ( ) ;
1272
- } ;
1263
+ let _ = $client_node. liquidity_manager. next_event( ) . unwrap( ) ;
1264
+ } } ;
1265
+ }
1266
+
1267
+ #[ test]
1268
+ fn dos_protection ( ) {
1269
+ let chanmon_cfgs = create_chanmon_cfgs ( 2 ) ;
1270
+ let node_cfgs = create_node_cfgs ( 2 , & chanmon_cfgs) ;
1271
+ let node_chanmgrs = create_node_chanmgrs ( 2 , & node_cfgs, & [ None , None ] ) ;
1272
+ let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
1273
+ let ( lsps_nodes, _) = lsps5_test_setup ( nodes, Arc :: new ( DefaultTimeProvider ) ) ;
1274
+ let LSPSNodes { service_node, client_node } = lsps_nodes;
1275
+ let client_node_id = client_node. inner . node . get_our_node_id ( ) ;
1276
+ let service_node_id = service_node. inner . node . get_our_node_id ( ) ;
1277
+
1278
+ let client_handler = client_node. liquidity_manager . lsps5_client_handler ( ) . unwrap ( ) ;
1273
1279
1274
1280
// no channel is open so far -> should reject
1275
- assert_reject ( ) ;
1281
+ assert_lsps5_reject ! (
1282
+ client_handler,
1283
+ service_node,
1284
+ client_node,
1285
+ service_node_id,
1286
+ client_node_id
1287
+ ) ;
1276
1288
1277
1289
let ( _, _, _, channel_id, funding_tx) =
1278
1290
create_chan_between_nodes ( & service_node. inner , & client_node. inner ) ;
1279
1291
1280
1292
// now that a channel is open, should accept
1281
- assert_accept ( ) ;
1293
+ assert_lsps5_accept ! (
1294
+ client_handler,
1295
+ service_node,
1296
+ client_node,
1297
+ service_node_id,
1298
+ client_node_id
1299
+ ) ;
1282
1300
1283
1301
close_channel ( & service_node. inner , & client_node. inner , & channel_id, funding_tx, true ) ;
1284
1302
let node_a_reason = ClosureReason :: CounterpartyInitiatedCooperativeClosure ;
@@ -1287,7 +1305,13 @@ fn dos_protection() {
1287
1305
check_closed_event ! ( client_node. inner, 1 , node_b_reason, [ service_node_id] , 100000 ) ;
1288
1306
1289
1307
// channel is now closed again -> should reject
1290
- assert_reject ( ) ;
1308
+ assert_lsps5_reject ! (
1309
+ client_handler,
1310
+ service_node,
1311
+ client_node,
1312
+ service_node_id,
1313
+ client_node_id
1314
+ ) ;
1291
1315
}
1292
1316
1293
1317
#[ test]
@@ -1298,20 +1322,28 @@ fn lsps2_state_allows_lsps5_request() {
1298
1322
let nodes = create_network ( 2 , & node_cfgs, & node_chanmgrs) ;
1299
1323
1300
1324
let ( lsps_nodes, _) = lsps5_lsps2_test_setup ( nodes, Arc :: new ( DefaultTimeProvider ) ) ;
1301
- establish_lsps2_prior_interaction ( & lsps_nodes) ;
1302
1325
1303
- let LSPSNodes { service_node , client_node } = lsps_nodes;
1304
- let service_node_id = service_node. inner . node . get_our_node_id ( ) ;
1305
- let client_node_id = client_node. inner . node . get_our_node_id ( ) ;
1326
+ let client_node_id = lsps_nodes. client_node . inner . node . get_our_node_id ( ) ;
1327
+ let service_node_id = lsps_nodes . service_node . inner . node . get_our_node_id ( ) ;
1328
+ let client_handler = lsps_nodes . client_node . liquidity_manager . lsps5_client_handler ( ) . unwrap ( ) ;
1306
1329
1307
- let lsps5_client = client_node. liquidity_manager . lsps5_client_handler ( ) . unwrap ( ) ;
1330
+ assert_lsps5_reject ! (
1331
+ client_handler,
1332
+ lsps_nodes. service_node,
1333
+ lsps_nodes. client_node,
1334
+ service_node_id,
1335
+ client_node_id
1336
+ ) ;
1308
1337
1309
- let _ = lsps5_client
1310
- . set_webhook ( service_node_id, "App" . to_string ( ) , "https://example.org/webhook" . to_string ( ) )
1311
- . expect ( "Request should send" ) ;
1312
- let request = get_lsps_message ! ( client_node, service_node_id) ;
1313
- let result = service_node. liquidity_manager . handle_custom_message ( request, client_node_id) ;
1314
- assert ! ( result. is_ok( ) , "Service should accept request based on LSPS2 state" ) ;
1338
+ establish_lsps2_prior_interaction ( & lsps_nodes) ;
1339
+
1340
+ assert_lsps5_accept ! (
1341
+ client_handler,
1342
+ lsps_nodes. service_node,
1343
+ lsps_nodes. client_node,
1344
+ service_node_id,
1345
+ client_node_id
1346
+ ) ;
1315
1347
}
1316
1348
1317
1349
fn establish_lsps2_prior_interaction ( lsps_nodes : & LSPSNodes ) {
0 commit comments