@@ -943,6 +943,7 @@ mod tests {
943
943
}
944
944
945
945
struct TestSession {
946
+ description : & ' static str ,
946
947
inputs_a : Vec < ( TxIn , TransactionU16LenLimited ) > ,
947
948
outputs_a : Vec < TxOut > ,
948
949
inputs_b : Vec < ( TxIn , TransactionU16LenLimited ) > ,
@@ -1034,7 +1035,12 @@ mod tests {
1034
1035
} ,
1035
1036
_ => ErrorCulprit :: NodeA ,
1036
1037
} ;
1037
- assert_eq ! ( Some ( ( abort_reason, error_culprit) ) , session. expect_error) ;
1038
+ assert_eq ! (
1039
+ Some ( ( abort_reason, error_culprit) ) ,
1040
+ session. expect_error,
1041
+ "Test: {}" ,
1042
+ session. description
1043
+ ) ;
1038
1044
assert ! ( message_send_b. is_none( ) ) ;
1039
1045
return ;
1040
1046
} ,
@@ -1053,7 +1059,12 @@ mod tests {
1053
1059
} ,
1054
1060
_ => ErrorCulprit :: NodeB ,
1055
1061
} ;
1056
- assert_eq ! ( Some ( ( abort_reason, error_culprit) ) , session. expect_error) ;
1062
+ assert_eq ! (
1063
+ Some ( ( abort_reason, error_culprit) ) ,
1064
+ session. expect_error,
1065
+ "Test: {}" ,
1066
+ session. description
1067
+ ) ;
1057
1068
assert ! ( message_send_a. is_none( ) ) ;
1058
1069
return ;
1059
1070
} ,
@@ -1172,56 +1183,55 @@ mod tests {
1172
1183
1173
1184
#[ test]
1174
1185
fn test_interactive_tx_constructor ( ) {
1175
- // No contributions.
1176
1186
do_test_interactive_tx_constructor ( TestSession {
1187
+ description : "No contributions" ,
1177
1188
inputs_a : vec ! [ ] ,
1178
1189
outputs_a : vec ! [ ] ,
1179
1190
inputs_b : vec ! [ ] ,
1180
1191
outputs_b : vec ! [ ] ,
1181
1192
expect_error : Some ( ( AbortReason :: InsufficientFees , ErrorCulprit :: NodeA ) ) ,
1182
1193
} ) ;
1183
- // Single contribution, no initiator inputs.
1184
1194
do_test_interactive_tx_constructor ( TestSession {
1195
+ description : "Single contribution, no initiator inputs" ,
1185
1196
inputs_a : vec ! [ ] ,
1186
1197
outputs_a : generate_outputs ( & [ 1_000_000 ] ) ,
1187
1198
inputs_b : vec ! [ ] ,
1188
1199
outputs_b : vec ! [ ] ,
1189
1200
expect_error : Some ( ( AbortReason :: OutputsValueExceedsInputsValue , ErrorCulprit :: NodeA ) ) ,
1190
1201
} ) ;
1191
- // Single contribution, no initiator outputs.
1192
1202
do_test_interactive_tx_constructor ( TestSession {
1203
+ description : "Single contribution, no initiator outputs" ,
1193
1204
inputs_a : generate_inputs ( & [ 1_000_000 ] ) ,
1194
1205
outputs_a : vec ! [ ] ,
1195
1206
inputs_b : vec ! [ ] ,
1196
1207
outputs_b : vec ! [ ] ,
1197
1208
expect_error : None ,
1198
1209
} ) ;
1199
- // Single contribution, insufficient fees.
1200
1210
do_test_interactive_tx_constructor ( TestSession {
1211
+ description : "Single contribution, insufficient fees" ,
1201
1212
inputs_a : generate_inputs ( & [ 1_000_000 ] ) ,
1202
1213
outputs_a : generate_outputs ( & [ 1_000_000 ] ) ,
1203
1214
inputs_b : vec ! [ ] ,
1204
1215
outputs_b : vec ! [ ] ,
1205
1216
expect_error : Some ( ( AbortReason :: InsufficientFees , ErrorCulprit :: NodeA ) ) ,
1206
1217
} ) ;
1207
- // Initiator contributes sufficient fees, but non-initiator does not.
1208
1218
do_test_interactive_tx_constructor ( TestSession {
1219
+ description : "Initiator contributes sufficient fees, but non-initiator does not" ,
1209
1220
inputs_a : generate_inputs ( & [ 1_000_000 ] ) ,
1210
1221
outputs_a : vec ! [ ] ,
1211
1222
inputs_b : generate_inputs ( & [ 100_000 ] ) ,
1212
1223
outputs_b : generate_outputs ( & [ 100_000 ] ) ,
1213
1224
expect_error : Some ( ( AbortReason :: InsufficientFees , ErrorCulprit :: NodeB ) ) ,
1214
1225
} ) ;
1215
- // Multi-input-output contributions from both sides.
1216
1226
do_test_interactive_tx_constructor ( TestSession {
1227
+ description : "Multi-input-output contributions from both sides" ,
1217
1228
inputs_a : generate_inputs ( & [ 1_000_000 , 1_000_000 ] ) ,
1218
1229
outputs_a : generate_outputs ( & [ 1_000_000 , 200_000 ] ) ,
1219
1230
inputs_b : generate_inputs ( & [ 1_000_000 , 500_000 ] ) ,
1220
1231
outputs_b : generate_outputs ( & [ 1_000_000 , 400_000 ] ) ,
1221
1232
expect_error : None ,
1222
1233
} ) ;
1223
1234
1224
- // Prevout from initiator is not a witness program
1225
1235
let non_segwit_output_tx = {
1226
1236
let mut tx = generate_tx ( & [ 1_000_000 ] ) ;
1227
1237
tx. output . push ( TxOut {
@@ -1243,64 +1253,65 @@ mod tests {
1243
1253
..Default :: default ( )
1244
1254
} ;
1245
1255
do_test_interactive_tx_constructor ( TestSession {
1256
+ description : "Prevout from initiator is not a witness program" ,
1246
1257
inputs_a : vec ! [ ( non_segwit_input, non_segwit_output_tx) ] ,
1247
1258
outputs_a : vec ! [ ] ,
1248
1259
inputs_b : vec ! [ ] ,
1249
1260
outputs_b : vec ! [ ] ,
1250
1261
expect_error : Some ( ( AbortReason :: PrevTxOutInvalid , ErrorCulprit :: NodeA ) ) ,
1251
1262
} ) ;
1252
1263
1253
- // Invalid input sequence from initiator.
1254
1264
let tx = TransactionU16LenLimited :: new ( generate_tx ( & [ 1_000_000 ] ) ) . unwrap ( ) ;
1255
1265
let invalid_sequence_input = TxIn {
1256
1266
previous_output : OutPoint { txid : tx. as_transaction ( ) . txid ( ) , vout : 0 } ,
1257
1267
..Default :: default ( )
1258
1268
} ;
1259
1269
do_test_interactive_tx_constructor ( TestSession {
1270
+ description : "Invalid input sequence from initiator" ,
1260
1271
inputs_a : vec ! [ ( invalid_sequence_input, tx. clone( ) ) ] ,
1261
1272
outputs_a : generate_outputs ( & [ 1_000_000 ] ) ,
1262
1273
inputs_b : vec ! [ ] ,
1263
1274
outputs_b : vec ! [ ] ,
1264
1275
expect_error : Some ( ( AbortReason :: IncorrectInputSequenceValue , ErrorCulprit :: NodeA ) ) ,
1265
1276
} ) ;
1266
- // Duplicate prevout from initiator.
1267
1277
let duplicate_input = TxIn {
1268
1278
previous_output : OutPoint { txid : tx. as_transaction ( ) . txid ( ) , vout : 0 } ,
1269
1279
sequence : Sequence :: ENABLE_RBF_NO_LOCKTIME ,
1270
1280
..Default :: default ( )
1271
1281
} ;
1272
1282
do_test_interactive_tx_constructor ( TestSession {
1283
+ description : "Duplicate prevout from initiator" ,
1273
1284
inputs_a : vec ! [ ( duplicate_input. clone( ) , tx. clone( ) ) , ( duplicate_input, tx. clone( ) ) ] ,
1274
1285
outputs_a : generate_outputs ( & [ 1_000_000 ] ) ,
1275
1286
inputs_b : vec ! [ ] ,
1276
1287
outputs_b : vec ! [ ] ,
1277
1288
expect_error : Some ( ( AbortReason :: PrevTxOutInvalid , ErrorCulprit :: NodeB ) ) ,
1278
1289
} ) ;
1279
- // Non-initiator uses same prevout as initiator.
1280
1290
let duplicate_input = TxIn {
1281
1291
previous_output : OutPoint { txid : tx. as_transaction ( ) . txid ( ) , vout : 0 } ,
1282
1292
sequence : Sequence :: ENABLE_RBF_NO_LOCKTIME ,
1283
1293
..Default :: default ( )
1284
1294
} ;
1285
1295
do_test_interactive_tx_constructor ( TestSession {
1296
+ description : "Non-initiator uses same prevout as initiator" ,
1286
1297
inputs_a : vec ! [ ( duplicate_input. clone( ) , tx. clone( ) ) ] ,
1287
1298
outputs_a : generate_outputs ( & [ 1_000_000 ] ) ,
1288
1299
inputs_b : vec ! [ ( duplicate_input. clone( ) , tx. clone( ) ) ] ,
1289
1300
outputs_b : vec ! [ ] ,
1290
1301
expect_error : Some ( ( AbortReason :: PrevTxOutInvalid , ErrorCulprit :: NodeA ) ) ,
1291
1302
} ) ;
1292
- // Initiator sends too many TxAddInputs
1293
1303
do_test_interactive_tx_constructor ( TestSession {
1304
+ description : "Initiator sends too many TxAddInputs" ,
1294
1305
inputs_a : generate_fixed_number_of_inputs ( MAX_RECEIVED_TX_ADD_INPUT_COUNT + 1 ) ,
1295
1306
outputs_a : vec ! [ ] ,
1296
1307
inputs_b : vec ! [ ] ,
1297
1308
outputs_b : vec ! [ ] ,
1298
1309
expect_error : Some ( ( AbortReason :: ReceivedTooManyTxAddInputs , ErrorCulprit :: NodeA ) ) ,
1299
1310
} ) ;
1300
- // Attempt to queue up two inputs with duplicate serial ids. We use a deliberately bad
1301
- // entropy source, `DuplicateEntropySource` to simulate this.
1302
1311
do_test_interactive_tx_constructor_with_entropy_source (
1303
1312
TestSession {
1313
+ // We use a deliberately bad entropy source, `DuplicateEntropySource` to simulate this.
1314
+ description : "Attempt to queue up two inputs with duplicate serial ids" ,
1304
1315
inputs_a : generate_fixed_number_of_inputs ( 2 ) ,
1305
1316
outputs_a : vec ! [ ] ,
1306
1317
inputs_b : vec ! [ ] ,
@@ -1309,42 +1320,42 @@ mod tests {
1309
1320
} ,
1310
1321
& DuplicateEntropySource ,
1311
1322
) ;
1312
- // Initiator sends too many TxAddOutputs.
1313
1323
do_test_interactive_tx_constructor ( TestSession {
1324
+ description : "Initiator sends too many TxAddOutputs" ,
1314
1325
inputs_a : vec ! [ ] ,
1315
1326
outputs_a : generate_fixed_number_of_outputs ( MAX_RECEIVED_TX_ADD_OUTPUT_COUNT + 1 ) ,
1316
1327
inputs_b : vec ! [ ] ,
1317
1328
outputs_b : vec ! [ ] ,
1318
1329
expect_error : Some ( ( AbortReason :: ReceivedTooManyTxAddOutputs , ErrorCulprit :: NodeA ) ) ,
1319
1330
} ) ;
1320
- // Initiator sends an output below dust value.
1321
1331
do_test_interactive_tx_constructor ( TestSession {
1332
+ description : "Initiator sends an output below dust value" ,
1322
1333
inputs_a : vec ! [ ] ,
1323
1334
outputs_a : generate_outputs ( & [ 1 ] ) ,
1324
1335
inputs_b : vec ! [ ] ,
1325
1336
outputs_b : vec ! [ ] ,
1326
1337
expect_error : Some ( ( AbortReason :: BelowDustLimit , ErrorCulprit :: NodeA ) ) ,
1327
1338
} ) ;
1328
- // Initiator sends an output above maximum sats allowed.
1329
1339
do_test_interactive_tx_constructor ( TestSession {
1340
+ description : "Initiator sends an output above maximum sats allowed" ,
1330
1341
inputs_a : vec ! [ ] ,
1331
1342
outputs_a : generate_outputs ( & [ TOTAL_BITCOIN_SUPPLY_SATOSHIS + 1 ] ) ,
1332
1343
inputs_b : vec ! [ ] ,
1333
1344
outputs_b : vec ! [ ] ,
1334
1345
expect_error : Some ( ( AbortReason :: ExceededMaximumSatsAllowed , ErrorCulprit :: NodeA ) ) ,
1335
1346
} ) ;
1336
- // Initiator sends an output without a witness program.
1337
1347
do_test_interactive_tx_constructor ( TestSession {
1348
+ description : "Initiator sends an output without a witness program" ,
1338
1349
inputs_a : vec ! [ ] ,
1339
1350
outputs_a : vec ! [ generate_non_witness_output( 1_000_000 ) ] ,
1340
1351
inputs_b : vec ! [ ] ,
1341
1352
outputs_b : vec ! [ ] ,
1342
1353
expect_error : Some ( ( AbortReason :: InvalidOutputScript , ErrorCulprit :: NodeA ) ) ,
1343
1354
} ) ;
1344
- // Attempt to queue up two outputs with duplicate serial ids. We use a deliberately bad
1345
- // entropy source, `DuplicateEntropySource` to simulate this.
1346
1355
do_test_interactive_tx_constructor_with_entropy_source (
1347
1356
TestSession {
1357
+ // We use a deliberately bad entropy source, `DuplicateEntropySource` to simulate this.
1358
+ description : "Attempt to queue up two outputs with duplicate serial ids" ,
1348
1359
inputs_a : vec ! [ ] ,
1349
1360
outputs_a : generate_fixed_number_of_outputs ( 2 ) ,
1350
1361
inputs_b : vec ! [ ] ,
@@ -1354,17 +1365,17 @@ mod tests {
1354
1365
& DuplicateEntropySource ,
1355
1366
) ;
1356
1367
1357
- // Peer contributed more output value than inputs
1358
1368
do_test_interactive_tx_constructor ( TestSession {
1369
+ description : "Peer contributed more output value than inputs" ,
1359
1370
inputs_a : generate_inputs ( & [ 100_000 ] ) ,
1360
1371
outputs_a : generate_outputs ( & [ 1_000_000 ] ) ,
1361
1372
inputs_b : vec ! [ ] ,
1362
1373
outputs_b : vec ! [ ] ,
1363
1374
expect_error : Some ( ( AbortReason :: OutputsValueExceedsInputsValue , ErrorCulprit :: NodeA ) ) ,
1364
1375
} ) ;
1365
1376
1366
- // Peer contributed more than allowed number of inputs.
1367
1377
do_test_interactive_tx_constructor ( TestSession {
1378
+ description : "Peer contributed more than allowed number of inputs" ,
1368
1379
inputs_a : generate_fixed_number_of_inputs ( MAX_INPUTS_OUTPUTS_COUNT as u16 + 1 ) ,
1369
1380
outputs_a : vec ! [ ] ,
1370
1381
inputs_b : vec ! [ ] ,
@@ -1374,8 +1385,8 @@ mod tests {
1374
1385
ErrorCulprit :: Indeterminate ,
1375
1386
) ) ,
1376
1387
} ) ;
1377
- // Peer contributed more than allowed number of outputs.
1378
1388
do_test_interactive_tx_constructor ( TestSession {
1389
+ description : "Peer contributed more than allowed number of outputs" ,
1379
1390
inputs_a : generate_inputs ( & [ TOTAL_BITCOIN_SUPPLY_SATOSHIS ] ) ,
1380
1391
outputs_a : generate_fixed_number_of_outputs ( MAX_INPUTS_OUTPUTS_COUNT as u16 + 1 ) ,
1381
1392
inputs_b : vec ! [ ] ,
0 commit comments