@@ -927,6 +927,7 @@ mod tests {
927927 }
928928
929929 struct TestSession {
930+ description : & ' static str ,
930931 inputs_a : Vec < ( TxIn , TransactionU16LenLimited ) > ,
931932 outputs_a : Vec < TxOut > ,
932933 inputs_b : Vec < ( TxIn , TransactionU16LenLimited ) > ,
@@ -1016,7 +1017,12 @@ mod tests {
10161017 } ,
10171018 _ => ErrorCulprit :: NodeA ,
10181019 } ;
1019- assert_eq ! ( Some ( ( abort_reason, error_culprit) ) , session. expect_error) ;
1020+ assert_eq ! (
1021+ Some ( ( abort_reason, error_culprit) ) ,
1022+ session. expect_error,
1023+ "Test: {}" ,
1024+ session. description
1025+ ) ;
10201026 assert ! ( message_send_b. is_none( ) ) ;
10211027 return ;
10221028 } ,
@@ -1035,7 +1041,12 @@ mod tests {
10351041 } ,
10361042 _ => ErrorCulprit :: NodeB ,
10371043 } ;
1038- assert_eq ! ( Some ( ( abort_reason, error_culprit) ) , session. expect_error) ;
1044+ assert_eq ! (
1045+ Some ( ( abort_reason, error_culprit) ) ,
1046+ session. expect_error,
1047+ "Test: {}" ,
1048+ session. description
1049+ ) ;
10391050 assert ! ( message_send_a. is_none( ) ) ;
10401051 return ;
10411052 } ,
@@ -1154,56 +1165,55 @@ mod tests {
11541165
11551166 #[ test]
11561167 fn test_interactive_tx_constructor ( ) {
1157- // No contributions.
11581168 do_test_interactive_tx_constructor ( TestSession {
1169+ description : "No contributions" ,
11591170 inputs_a : vec ! [ ] ,
11601171 outputs_a : vec ! [ ] ,
11611172 inputs_b : vec ! [ ] ,
11621173 outputs_b : vec ! [ ] ,
11631174 expect_error : Some ( ( AbortReason :: InsufficientFees , ErrorCulprit :: NodeA ) ) ,
11641175 } ) ;
1165- // Single contribution, no initiator inputs.
11661176 do_test_interactive_tx_constructor ( TestSession {
1177+ description : "Single contribution, no initiator inputs" ,
11671178 inputs_a : vec ! [ ] ,
11681179 outputs_a : generate_outputs ( & [ 1_000_000 ] ) ,
11691180 inputs_b : vec ! [ ] ,
11701181 outputs_b : vec ! [ ] ,
11711182 expect_error : Some ( ( AbortReason :: OutputsValueExceedsInputsValue , ErrorCulprit :: NodeA ) ) ,
11721183 } ) ;
1173- // Single contribution, no initiator outputs.
11741184 do_test_interactive_tx_constructor ( TestSession {
1185+ description : "Single contribution, no initiator outputs" ,
11751186 inputs_a : generate_inputs ( & [ 1_000_000 ] ) ,
11761187 outputs_a : vec ! [ ] ,
11771188 inputs_b : vec ! [ ] ,
11781189 outputs_b : vec ! [ ] ,
11791190 expect_error : None ,
11801191 } ) ;
1181- // Single contribution, insufficient fees.
11821192 do_test_interactive_tx_constructor ( TestSession {
1193+ description : "Single contribution, insufficient fees" ,
11831194 inputs_a : generate_inputs ( & [ 1_000_000 ] ) ,
11841195 outputs_a : generate_outputs ( & [ 1_000_000 ] ) ,
11851196 inputs_b : vec ! [ ] ,
11861197 outputs_b : vec ! [ ] ,
11871198 expect_error : Some ( ( AbortReason :: InsufficientFees , ErrorCulprit :: NodeA ) ) ,
11881199 } ) ;
1189- // Initiator contributes sufficient fees, but non-initiator does not.
11901200 do_test_interactive_tx_constructor ( TestSession {
1201+ description : "Initiator contributes sufficient fees, but non-initiator does not" ,
11911202 inputs_a : generate_inputs ( & [ 1_000_000 ] ) ,
11921203 outputs_a : vec ! [ ] ,
11931204 inputs_b : generate_inputs ( & [ 100_000 ] ) ,
11941205 outputs_b : generate_outputs ( & [ 100_000 ] ) ,
11951206 expect_error : Some ( ( AbortReason :: InsufficientFees , ErrorCulprit :: NodeB ) ) ,
11961207 } ) ;
1197- // Multi-input-output contributions from both sides.
11981208 do_test_interactive_tx_constructor ( TestSession {
1209+ description : "Multi-input-output contributions from both sides" ,
11991210 inputs_a : generate_inputs ( & [ 1_000_000 , 1_000_000 ] ) ,
12001211 outputs_a : generate_outputs ( & [ 1_000_000 , 200_000 ] ) ,
12011212 inputs_b : generate_inputs ( & [ 1_000_000 , 500_000 ] ) ,
12021213 outputs_b : generate_outputs ( & [ 1_000_000 , 400_000 ] ) ,
12031214 expect_error : None ,
12041215 } ) ;
12051216
1206- // Prevout from initiator is not a witness program
12071217 let non_segwit_output_tx = {
12081218 let mut tx = generate_tx ( & [ 1_000_000 ] ) ;
12091219 tx. output . push ( TxOut {
@@ -1225,64 +1235,65 @@ mod tests {
12251235 ..Default :: default ( )
12261236 } ;
12271237 do_test_interactive_tx_constructor ( TestSession {
1238+ description : "Prevout from initiator is not a witness program" ,
12281239 inputs_a : vec ! [ ( non_segwit_input, non_segwit_output_tx) ] ,
12291240 outputs_a : vec ! [ ] ,
12301241 inputs_b : vec ! [ ] ,
12311242 outputs_b : vec ! [ ] ,
12321243 expect_error : Some ( ( AbortReason :: PrevTxOutInvalid , ErrorCulprit :: NodeA ) ) ,
12331244 } ) ;
12341245
1235- // Invalid input sequence from initiator.
12361246 let tx = TransactionU16LenLimited :: new ( generate_tx ( & [ 1_000_000 ] ) ) . unwrap ( ) ;
12371247 let invalid_sequence_input = TxIn {
12381248 previous_output : OutPoint { txid : tx. as_transaction ( ) . txid ( ) , vout : 0 } ,
12391249 ..Default :: default ( )
12401250 } ;
12411251 do_test_interactive_tx_constructor ( TestSession {
1252+ description : "Invalid input sequence from initiator" ,
12421253 inputs_a : vec ! [ ( invalid_sequence_input, tx. clone( ) ) ] ,
12431254 outputs_a : generate_outputs ( & [ 1_000_000 ] ) ,
12441255 inputs_b : vec ! [ ] ,
12451256 outputs_b : vec ! [ ] ,
12461257 expect_error : Some ( ( AbortReason :: IncorrectInputSequenceValue , ErrorCulprit :: NodeA ) ) ,
12471258 } ) ;
1248- // Duplicate prevout from initiator.
12491259 let duplicate_input = TxIn {
12501260 previous_output : OutPoint { txid : tx. as_transaction ( ) . txid ( ) , vout : 0 } ,
12511261 sequence : Sequence :: ENABLE_RBF_NO_LOCKTIME ,
12521262 ..Default :: default ( )
12531263 } ;
12541264 do_test_interactive_tx_constructor ( TestSession {
1265+ description : "Duplicate prevout from initiator" ,
12551266 inputs_a : vec ! [ ( duplicate_input. clone( ) , tx. clone( ) ) , ( duplicate_input, tx. clone( ) ) ] ,
12561267 outputs_a : generate_outputs ( & [ 1_000_000 ] ) ,
12571268 inputs_b : vec ! [ ] ,
12581269 outputs_b : vec ! [ ] ,
12591270 expect_error : Some ( ( AbortReason :: PrevTxOutInvalid , ErrorCulprit :: NodeB ) ) ,
12601271 } ) ;
1261- // Non-initiator uses same prevout as initiator.
12621272 let duplicate_input = TxIn {
12631273 previous_output : OutPoint { txid : tx. as_transaction ( ) . txid ( ) , vout : 0 } ,
12641274 sequence : Sequence :: ENABLE_RBF_NO_LOCKTIME ,
12651275 ..Default :: default ( )
12661276 } ;
12671277 do_test_interactive_tx_constructor ( TestSession {
1278+ description : "Non-initiator uses same prevout as initiator" ,
12681279 inputs_a : vec ! [ ( duplicate_input. clone( ) , tx. clone( ) ) ] ,
12691280 outputs_a : generate_outputs ( & [ 1_000_000 ] ) ,
12701281 inputs_b : vec ! [ ( duplicate_input. clone( ) , tx. clone( ) ) ] ,
12711282 outputs_b : vec ! [ ] ,
12721283 expect_error : Some ( ( AbortReason :: PrevTxOutInvalid , ErrorCulprit :: NodeA ) ) ,
12731284 } ) ;
1274- // Initiator sends too many TxAddInputs
12751285 do_test_interactive_tx_constructor ( TestSession {
1286+ description : "Initiator sends too many TxAddInputs" ,
12761287 inputs_a : generate_fixed_number_of_inputs ( MAX_RECEIVED_TX_ADD_INPUT_COUNT + 1 ) ,
12771288 outputs_a : vec ! [ ] ,
12781289 inputs_b : vec ! [ ] ,
12791290 outputs_b : vec ! [ ] ,
12801291 expect_error : Some ( ( AbortReason :: ReceivedTooManyTxAddInputs , ErrorCulprit :: NodeA ) ) ,
12811292 } ) ;
1282- // Attempt to queue up two inputs with duplicate serial ids. We use a deliberately bad
1283- // entropy source, `DuplicateEntropySource` to simulate this.
12841293 do_test_interactive_tx_constructor_with_entropy_source (
12851294 TestSession {
1295+ // We use a deliberately bad entropy source, `DuplicateEntropySource` to simulate this.
1296+ description : "Attempt to queue up two inputs with duplicate serial ids" ,
12861297 inputs_a : generate_fixed_number_of_inputs ( 2 ) ,
12871298 outputs_a : vec ! [ ] ,
12881299 inputs_b : vec ! [ ] ,
@@ -1291,42 +1302,42 @@ mod tests {
12911302 } ,
12921303 & DuplicateEntropySource ,
12931304 ) ;
1294- // Initiator sends too many TxAddOutputs.
12951305 do_test_interactive_tx_constructor ( TestSession {
1306+ description : "Initiator sends too many TxAddOutputs" ,
12961307 inputs_a : vec ! [ ] ,
12971308 outputs_a : generate_fixed_number_of_outputs ( MAX_RECEIVED_TX_ADD_OUTPUT_COUNT + 1 ) ,
12981309 inputs_b : vec ! [ ] ,
12991310 outputs_b : vec ! [ ] ,
13001311 expect_error : Some ( ( AbortReason :: ReceivedTooManyTxAddOutputs , ErrorCulprit :: NodeA ) ) ,
13011312 } ) ;
1302- // Initiator sends an output below dust value.
13031313 do_test_interactive_tx_constructor ( TestSession {
1314+ description : "Initiator sends an output below dust value" ,
13041315 inputs_a : vec ! [ ] ,
13051316 outputs_a : generate_outputs ( & [ 1 ] ) ,
13061317 inputs_b : vec ! [ ] ,
13071318 outputs_b : vec ! [ ] ,
13081319 expect_error : Some ( ( AbortReason :: BelowDustLimit , ErrorCulprit :: NodeA ) ) ,
13091320 } ) ;
1310- // Initiator sends an output above maximum sats allowed.
13111321 do_test_interactive_tx_constructor ( TestSession {
1322+ description : "Initiator sends an output above maximum sats allowed" ,
13121323 inputs_a : vec ! [ ] ,
13131324 outputs_a : generate_outputs ( & [ TOTAL_BITCOIN_SUPPLY_SATOSHIS + 1 ] ) ,
13141325 inputs_b : vec ! [ ] ,
13151326 outputs_b : vec ! [ ] ,
13161327 expect_error : Some ( ( AbortReason :: ExceededMaximumSatsAllowed , ErrorCulprit :: NodeA ) ) ,
13171328 } ) ;
1318- // Initiator sends an output without a witness program.
13191329 do_test_interactive_tx_constructor ( TestSession {
1330+ description : "Initiator sends an output without a witness program" ,
13201331 inputs_a : vec ! [ ] ,
13211332 outputs_a : vec ! [ generate_non_witness_output( 1_000_000 ) ] ,
13221333 inputs_b : vec ! [ ] ,
13231334 outputs_b : vec ! [ ] ,
13241335 expect_error : Some ( ( AbortReason :: InvalidOutputScript , ErrorCulprit :: NodeA ) ) ,
13251336 } ) ;
1326- // Attempt to queue up two outputs with duplicate serial ids. We use a deliberately bad
1327- // entropy source, `DuplicateEntropySource` to simulate this.
13281337 do_test_interactive_tx_constructor_with_entropy_source (
13291338 TestSession {
1339+ // We use a deliberately bad entropy source, `DuplicateEntropySource` to simulate this.
1340+ description : "Attempt to queue up two outputs with duplicate serial ids" ,
13301341 inputs_a : vec ! [ ] ,
13311342 outputs_a : generate_fixed_number_of_outputs ( 2 ) ,
13321343 inputs_b : vec ! [ ] ,
@@ -1336,17 +1347,17 @@ mod tests {
13361347 & DuplicateEntropySource ,
13371348 ) ;
13381349
1339- // Peer contributed more output value than inputs
13401350 do_test_interactive_tx_constructor ( TestSession {
1351+ description : "Peer contributed more output value than inputs" ,
13411352 inputs_a : generate_inputs ( & [ 100_000 ] ) ,
13421353 outputs_a : generate_outputs ( & [ 1_000_000 ] ) ,
13431354 inputs_b : vec ! [ ] ,
13441355 outputs_b : vec ! [ ] ,
13451356 expect_error : Some ( ( AbortReason :: OutputsValueExceedsInputsValue , ErrorCulprit :: NodeA ) ) ,
13461357 } ) ;
13471358
1348- // Peer contributed more than allowed number of inputs.
13491359 do_test_interactive_tx_constructor ( TestSession {
1360+ description : "Peer contributed more than allowed number of inputs" ,
13501361 inputs_a : generate_fixed_number_of_inputs ( MAX_INPUTS_OUTPUTS_COUNT as u16 + 1 ) ,
13511362 outputs_a : vec ! [ ] ,
13521363 inputs_b : vec ! [ ] ,
@@ -1356,8 +1367,8 @@ mod tests {
13561367 ErrorCulprit :: Indeterminate ,
13571368 ) ) ,
13581369 } ) ;
1359- // Peer contributed more than allowed number of outputs.
13601370 do_test_interactive_tx_constructor ( TestSession {
1371+ description : "Peer contributed more than allowed number of outputs" ,
13611372 inputs_a : generate_inputs ( & [ TOTAL_BITCOIN_SUPPLY_SATOSHIS ] ) ,
13621373 outputs_a : generate_fixed_number_of_outputs ( MAX_INPUTS_OUTPUTS_COUNT as u16 + 1 ) ,
13631374 inputs_b : vec ! [ ] ,
0 commit comments