Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

test: use assert_greater_than util #30019

Open
wants to merge 3 commits into
base: master
Choose a base branch
from

Conversation

kevkevinpal
Copy link
Contributor

@kevkevinpal kevkevinpal commented May 2, 2024

In the functional tests there are lots of cases where we assert < which we now swap with assert_greater_than to be more readable

This is motivated/uses logic from this PR which was closed #28528
This partially helps #23119

I've broken it up to just assert_greater_than to keep the PR smaller as suggested in #28528 (comment)

Similar change for assert_not_equal

I did not use the scripted-diff for the last commit since it either included a <= or there was already a () which did not match the pattern of the rest

if you run this command on this branch it should come back empty
git grep -nri -e "assert .*< " --and --not -e "assert .*!=" -- ./test/functional

@DrahtBot
Copy link
Contributor

DrahtBot commented May 2, 2024

The following sections might be updated with supplementary metadata relevant to reviewers and maintainers.

Code Coverage

For detailed information about the code coverage, see the test coverage report.

Reviews

See the guideline for information on the review process.

Type Reviewers
Concept ACK edilmedeiros

If your review is incorrectly listed, please react with 👎 to this comment and the bot will ignore it on the next update.

Conflicts

Reviewers, this pull request conflicts with the following ones:

  • #29680 (wallet: fix unrelated parent conflict doesn't cause child tx to be marked as conflict by Eunovo)
  • #29500 (test: create assert_not_equal util by kevkevinpal)
  • #28307 (rpc, wallet: fix incorrect segwit redeem script size limit by furszy)

If you consider this pull request important, please also help to review the conflicting pull requests. Ideally, start with the one that should be merged first.

@DrahtBot DrahtBot added the Tests label May 2, 2024
Copy link
Contributor

@paplorinc paplorinc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure I understand what's wrong with the original operators, this seems less readable to me

Comment on lines 342 to 343
assert size > 6400
assert size < 64000
assert_less_than(size, 64000)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This looks worse now

@@ -78,6 +78,10 @@ def assert_greater_than(thing1, thing2):
if thing1 <= thing2:
raise AssertionError("%s <= %s" % (str(thing1), str(thing2)))

def assert_less_than(*args):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why so general, the previous one was a simple operator, why obfuscate it as such?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

that is fair I initially did it like this because there was one scenario where we used two < operators but I now switched to using assert_greater_than and now broke that statement up to two statements

Copy link
Member

@glozow glozow left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why not just use assert_greater_than and assert_greater_than_or_equal?

In the functional tests there are lots of cases where we assert < which
this util will replace, we also are adding the imports and the
following commit will add the assertion
-BEGIN VERIFY SCRIPT-
git grep -l -E "assert .*<{1} [\=\<]{0}" -- ':(exclude)*script.py' ':(exclude)*rpc_createmultisig.py' ':(exclude)*feature_taproot.py' ':(exclude)*wallet_create_tx.py' ':(exclude)*p2p.py' ./test/functional | xargs sed -i.bak -e "/assert .*< / s/assert \(.*\) <\([^#]*\)/assert\2 < \1/"
git grep -l -E "assert .*<{1} [\=\<]{0}" -- ':(exclude)*script.py' ':(exclude)*rpc_createmultisig.py' ':(exclude)*feature_taproot.py' ':(exclude)*wallet_create_tx.py' ':(exclude)*p2p.py' ./test/functional | xargs sed -i.bak -e "/assert .*< / s/assert \(.*\) <\([^#]*\)/assert_greater_than(\1,\2)/g" -e "s/assert_greater_than(\(.*\)\(#.*\)/assert_greater_than(\1 \2/g" -e "/assert_greater_than(/ s/\ \ ,/,/g"
-END VERIFY SCRIPT-
For the cases which the scripted diff did not make sense these were
manually updated, like if we had multiple operators on one line or if it
was wrapped in () already
@kevkevinpal kevkevinpal changed the title test: create assert_less_than util test: use assert_greater_than util May 3, 2024
@kevkevinpal
Copy link
Contributor Author

pushed to fe07516

we now use assert_greater_than instead of creating a new util

04d8f07 contains a scripted-diff which looks for assert.*< and then swaps the two values and replaces the assert with assert_greater_than

Copy link
Contributor

@paplorinc paplorinc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The errors will improve this way, even though I wouldn't call the code more readable.
And to not make it less readable, I suggested a few other places where these changes could be applied.

@@ -45,7 +46,8 @@ def test_anti_fee_sniping(self):
self.generate(self.nodes[0], 1)
txid = self.nodes[0].sendtoaddress(self.nodes[0].getnewaddress(), 1)
tx = self.nodes[0].gettransaction(txid=txid, verbose=True)['decoded']
assert 0 < tx['locktime'] <= 201
assert_greater_than(tx['locktime'], 0)
assert tx['locktime'] <= 201
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
assert tx['locktime'] <= 201
assert_greater_than(202, tx['locktime'])

@@ -104,7 +105,7 @@ def test_block_conflicts(self):

self.log.info("Verify, after the reorg, that Tx_A was accepted, and tx_AB and its Child_Tx are conflicting now")
# Tx A was accepted, Tx AB was not.
assert conflicted_AB_tx["confirmations"] < 0
assert_greater_than(0, conflicted_AB_tx["confirmations"])
assert conflicted_A_tx["confirmations"] > 0
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this looks like an actual assert_greater_than

Suggested change
assert conflicted_A_tx["confirmations"] > 0
assert_greater_than(conflicted_A_tx["confirmations"], 0)

@@ -744,7 +745,8 @@ def listen(cls, p2p, callback, port=None, addr=None, idx=1):
for connections, call `callback`."""

if port is None:
assert 0 < idx <= MAX_NODES
assert_greater_than(idx, 0)
assert idx <= MAX_NODES
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
assert idx <= MAX_NODES
assert_greater_than(MAX_NODES + 1, idx)

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why MAX_NODES + 1?

Copy link
Contributor

@paplorinc paplorinc May 8, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

idx can equal MAX_NODES according to the code - alternatively could use assert_greater_than_or_equal, if that's more readable

@@ -53,7 +54,7 @@ def run_test(self):
assert_raises_rpc_error(-5, 'Transaction not eligible for abandonment', lambda: alice.abandontransaction(txid=txA))

newbalance = alice.getbalance()
assert balance - newbalance < Decimal("0.001") #no more than fees lost
assert_greater_than(Decimal("0.001"), balance - newbalance) #no more than fees lost
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is needed as this specific test is full of Decimal objects. This is what you get if you take it out.

❯ test/functional/wallet_abandonconflict.py
2024-05-07T21:36:52.495000Z TestFramework (INFO): PRNG seed is: 7791852828985173276
2024-05-07T21:36:52.495000Z TestFramework (INFO): Initializing test directory /var/folders/pk/trlzyy614z11wn_y1t8vhsz80000gn/T/bitcoin_func_test_8oozog30
2024-05-07T21:36:55.004000Z TestFramework (ERROR): Unexpected exception caught during testing
Traceback (most recent call last):
  File "/Users/jose.edil/2-development/bitcoin/bitcoin-core/test/functional/test_framework/test_framework.py", line 132, in main
    self.run_test()
  File "/Users/jose.edil/2-development/bitcoin/bitcoin-core/test/functional/wallet_abandonconflict.py", line 57, in run_test
    assert_greater_than("0.001", balance - newbalance) #no more than fees lost
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jose.edil/2-development/bitcoin/bitcoin-core/test/functional/test_framework/util.py", line 78, in assert_greater_than
    if thing1 <= thing2:
       ^^^^^^^^^^^^^^^^
TypeError: '<=' not supported between instances of 'str' and 'decimal.Decimal'
2024-05-07T21:36:55.057000Z TestFramework (INFO): Stopping nodes
2024-05-07T21:36:55.165000Z TestFramework (WARNING): Not cleaning up dir /var/folders/pk/trlzyy614z11wn_y1t8vhsz80000gn/T/bitcoin_func_test_8oozog30
2024-05-07T21:36:55.165000Z TestFramework (ERROR): Test failed. Test logging available at /var/folders/pk/trlzyy614z11wn_y1t8vhsz80000gn/T/bitcoin_func_test_8oozog30/test_framework.log
2024-05-07T21:36:55.165000Z TestFramework (ERROR):
2024-05-07T21:36:55.165000Z TestFramework (ERROR): Hint: Call /Users/jose.edil/2-development/bitcoin/bitcoin-core/test/functional/combine_logs.py '/var/folders/pk/trlzyy614z11wn_y1t8vhsz80000gn/T/bitcoin_func_test_8oozog30' to consolidate all logs
2024-05-07T21:36:55.165000Z TestFramework (ERROR):
2024-05-07T21:36:55.165000Z TestFramework (ERROR): If this failure happened unexpectedly or intermittently, please file a bug and provide a link or upload of the combined log.
2024-05-07T21:36:55.165000Z TestFramework (ERROR): https://github.com/bitcoin/bitcoin/issues
2024-05-07T21:36:55.166000Z TestFramework (ERROR):

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see you are a newcomer too. When reviewing code, better to open the files in the text editor and check for a broader context than what the github interface will present.

In my case, I use emacs with ediff, but all major IDEs will have a nice diff interface to inspect the PRs.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see you are a newcomer too.

this isn't necessary...

assert_greater_than("0.001", balance - newbalance)

I wasn't suggesting comparing it to a string, of course, but to a decimal, as in the example I've provided, i.e.:

assert_greater_than(0.001, balance - newbalance)

This seems to be working for me, is it failing for you?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh, I see.

Still, better to leave to preserve potential bugs since this is refactoring.

@@ -339,7 +339,7 @@ def _test_gettxoutsetinfo(self):
assert_equal(res['bestblock'], node.getblockhash(HEIGHT))
size = res['disk_size']
assert size > 6400
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
assert size > 6400
assert_greater_than(size, 6400)

@@ -813,7 +814,7 @@ def BIP341_sha_outputs(txTo):

def TaprootSignatureMsg(txTo, spent_utxos, hash_type, input_index = 0, scriptpath = False, script = CScript(), codeseparator_pos = -1, annex = None, leaf_ver = LEAF_VERSION_TAPSCRIPT):
assert (len(txTo.vin) == len(spent_utxos))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
assert (len(txTo.vin) == len(spent_utxos))
assert_equal(len(txTo.vin), len(spent_utxos))

Copy link
Contributor

@edilmedeiros edilmedeiros left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Concept ACK.

I have run all the tests that have changed, it seems ok.

Thanks for the contribution. But, since you are already refactoring this out, I believe it would be way better to not leave any more assert behind that could be changed to assert_equal or assert_greater_than. Otherwise, looks like we are not improving the code base as there will be more than one style of asserts in some files.

See the diffs in the comments to find some suggestions.

To find others, grep each file for 'assert ' (with the space).

Comment on lines 150 to 151
assert bal1 == 0
assert bal2 == self.moved
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Change these to assert_equal is an easy gain here.

@@ -744,7 +745,8 @@ def listen(cls, p2p, callback, port=None, addr=None, idx=1):
for connections, call `callback`."""

if port is None:
assert 0 < idx <= MAX_NODES
assert_greater_than(idx, 0)
assert idx <= MAX_NODES
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why MAX_NODES + 1?

@@ -53,7 +54,7 @@ def run_test(self):
assert_raises_rpc_error(-5, 'Transaction not eligible for abandonment', lambda: alice.abandontransaction(txid=txA))

newbalance = alice.getbalance()
assert balance - newbalance < Decimal("0.001") #no more than fees lost
assert_greater_than(Decimal("0.001"), balance - newbalance) #no more than fees lost
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is needed as this specific test is full of Decimal objects. This is what you get if you take it out.

❯ test/functional/wallet_abandonconflict.py
2024-05-07T21:36:52.495000Z TestFramework (INFO): PRNG seed is: 7791852828985173276
2024-05-07T21:36:52.495000Z TestFramework (INFO): Initializing test directory /var/folders/pk/trlzyy614z11wn_y1t8vhsz80000gn/T/bitcoin_func_test_8oozog30
2024-05-07T21:36:55.004000Z TestFramework (ERROR): Unexpected exception caught during testing
Traceback (most recent call last):
  File "/Users/jose.edil/2-development/bitcoin/bitcoin-core/test/functional/test_framework/test_framework.py", line 132, in main
    self.run_test()
  File "/Users/jose.edil/2-development/bitcoin/bitcoin-core/test/functional/wallet_abandonconflict.py", line 57, in run_test
    assert_greater_than("0.001", balance - newbalance) #no more than fees lost
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/jose.edil/2-development/bitcoin/bitcoin-core/test/functional/test_framework/util.py", line 78, in assert_greater_than
    if thing1 <= thing2:
       ^^^^^^^^^^^^^^^^
TypeError: '<=' not supported between instances of 'str' and 'decimal.Decimal'
2024-05-07T21:36:55.057000Z TestFramework (INFO): Stopping nodes
2024-05-07T21:36:55.165000Z TestFramework (WARNING): Not cleaning up dir /var/folders/pk/trlzyy614z11wn_y1t8vhsz80000gn/T/bitcoin_func_test_8oozog30
2024-05-07T21:36:55.165000Z TestFramework (ERROR): Test failed. Test logging available at /var/folders/pk/trlzyy614z11wn_y1t8vhsz80000gn/T/bitcoin_func_test_8oozog30/test_framework.log
2024-05-07T21:36:55.165000Z TestFramework (ERROR):
2024-05-07T21:36:55.165000Z TestFramework (ERROR): Hint: Call /Users/jose.edil/2-development/bitcoin/bitcoin-core/test/functional/combine_logs.py '/var/folders/pk/trlzyy614z11wn_y1t8vhsz80000gn/T/bitcoin_func_test_8oozog30' to consolidate all logs
2024-05-07T21:36:55.165000Z TestFramework (ERROR):
2024-05-07T21:36:55.165000Z TestFramework (ERROR): If this failure happened unexpectedly or intermittently, please file a bug and provide a link or upload of the combined log.
2024-05-07T21:36:55.165000Z TestFramework (ERROR): https://github.com/bitcoin/bitcoin/issues
2024-05-07T21:36:55.166000Z TestFramework (ERROR):

@@ -53,7 +54,7 @@ def run_test(self):
assert_raises_rpc_error(-5, 'Transaction not eligible for abandonment', lambda: alice.abandontransaction(txid=txA))

newbalance = alice.getbalance()
assert balance - newbalance < Decimal("0.001") #no more than fees lost
assert_greater_than(Decimal("0.001"), balance - newbalance) #no more than fees lost
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I see you are a newcomer too. When reviewing code, better to open the files in the text editor and check for a broader context than what the github interface will present.

In my case, I use emacs with ediff, but all major IDEs will have a nice diff interface to inspect the PRs.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

diff --git a/test/functional/feature_rbf.py b/test/functional/feature_rbf.py
index cf48826e6a..415e4f1b95 100755
--- a/test/functional/feature_rbf.py
+++ b/test/functional/feature_rbf.py
@@ -15,6 +15,7 @@ from test_framework.test_framework import BitcoinTestFramework
 from test_framework.util import (
     assert_equal,
     assert_greater_than,
+    assert_greater_than_or_equal,
     assert_raises_rpc_error,
 )
 from test_framework.wallet import MiniWallet
@@ -446,9 +447,9 @@ class ReplaceByFeeTest(BitcoinTestFramework):
             num_txs_invalidated = len(root_utxos) + (num_tx_graphs * txs_per_graph)

             if failure_expected:
-                assert num_txs_invalidated > MAX_REPLACEMENT_LIMIT
+                assert_greater_than(num_txs_invalidated, MAX_REPLACEMENT_LIMIT)
             else:
-                assert num_txs_invalidated <= MAX_REPLACEMENT_LIMIT
+                assert_greater_than_or_equal(MAX_REPLACEMENT_LIMIT, num_txs_invalidated)

             # Now attempt to submit a tx that double-spends all the root tx inputs, which
             # would invalidate `num_txs_invalidated` transactions.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

index ff67207c4e..2a4cc9dfba 100755
--- a/test/functional/p2p_segwit.py
+++ b/test/functional/p2p_segwit.py
@@ -85,6 +85,7 @@ from test_framework.test_framework import BitcoinTestFramework
 from test_framework.util import (
     assert_equal,
     assert_greater_than,
+    assert_greater_than_or_equal,
     softfork_active,
     assert_raises_rpc_error,
 )
@@ -376,14 +377,14 @@ class SegWitTest(BitcoinTestFramework):
         self.test_node.send_message(msg_headers())

         self.test_node.announce_block_and_wait_for_getdata(block1, use_header=False)
-        assert self.test_node.last_message["getdata"].inv[0].type == blocktype
+        assert_equal(self.test_node.last_message["getdata"].inv[0].type, blocktype)
         test_witness_block(self.nodes[0], self.test_node, block1, True)

         block2 = self.build_next_block()
         block2.solve()

         self.test_node.announce_block_and_wait_for_getdata(block2, use_header=True)
-        assert self.test_node.last_message["getdata"].inv[0].type == blocktype
+        assert_equal(self.test_node.last_message["getdata"].inv[0].type, blocktype)
         test_witness_block(self.nodes[0], self.test_node, block2, True)

         # Check that we can getdata for witness blocks or regular blocks,
@@ -412,8 +413,8 @@ class SegWitTest(BitcoinTestFramework):
             block = self.build_next_block()
             self.update_witness_block_with_transactions(block, [])
             # This gives us a witness commitment.
-            assert len(block.vtx[0].wit.vtxinwit) == 1
-            assert len(block.vtx[0].wit.vtxinwit[0].scriptWitness.stack) == 1
+            assert_equal(len(block.vtx[0].wit.vtxinwit), 1)
+            assert_equal(len(block.vtx[0].wit.vtxinwit[0].scriptWitness.stack), 1)
             test_witness_block(self.nodes[0], self.test_node, block, accepted=True)
             # Now try to retrieve it...
             rpc_block = self.nodes[0].getblock(block.hash, False)
@@ -539,7 +540,7 @@ class SegWitTest(BitcoinTestFramework):
         # Verify that if a peer doesn't set nServices to include NODE_WITNESS,
         # the getdata is just for the non-witness portion.
         self.old_node.announce_tx_and_wait_for_getdata(tx)
-        assert self.old_node.last_message["getdata"].inv[0].type == MSG_TX
+        assert_equal(self.old_node.last_message["getdata"].inv[0].type, MSG_TX)

         # Since we haven't delivered the tx yet, inv'ing the same tx from
         # a witness transaction ought not result in a getdata.
@@ -807,7 +808,7 @@ class SegWitTest(BitcoinTestFramework):
         block_3.vtx[0].vout[-1].nValue += 1
         block_3.vtx[0].rehash()
         block_3.hashMerkleRoot = block_3.calc_merkle_root()
-        assert len(block_3.vtx[0].vout) == 4  # 3 OP_returns
+        assert_equal(len(block_3.vtx[0].vout), 4)  # 3 OP_returns
         block_3.solve()
         test_witness_block(self.nodes[0], self.test_node, block_3, accepted=True)

@@ -838,7 +839,7 @@ class SegWitTest(BitcoinTestFramework):
         block.solve()

         block.vtx[0].wit.vtxinwit[0].scriptWitness.stack.append(b'a' * 5000000)
-        assert block.get_weight() > MAX_BLOCK_WEIGHT
+        assert_greater_than(block.get_weight(), MAX_BLOCK_WEIGHT)

         # We can't send over the p2p network, because this is too big to relay
         # TODO: repeat this test with a block that can be relayed
@@ -850,7 +851,7 @@ class SegWitTest(BitcoinTestFramework):
         assert_greater_than(MAX_BLOCK_WEIGHT, block.get_weight())
         assert_equal(None, self.nodes[0].submitblock(block.serialize().hex()))

-        assert self.nodes[0].getbestblockhash() == block.hash
+        assert_equal(self.nodes[0].getbestblockhash(), block.hash)

         # Now make sure that malleating the witness reserved value doesn't
         # result in a block permanently marked bad.
@@ -875,7 +876,7 @@ class SegWitTest(BitcoinTestFramework):
         # Test that witness-bearing blocks are limited at ceil(base + wit/4) <= 1MB.
         block = self.build_next_block()

-        assert len(self.utxo) > 0
+        assert_greater_than(len(self.utxo), 0)

         # Create a P2WSH transaction.
         # The witness script will be a bunch of OP_2DROP's, followed by OP_TRUE.
@@ -896,7 +897,7 @@ class SegWitTest(BitcoinTestFramework):
         for _ in range(NUM_OUTPUTS):
             parent_tx.vout.append(CTxOut(child_value, script_pubkey))
         parent_tx.vout[0].nValue -= 50000
-        assert parent_tx.vout[0].nValue > 0
+        assert_greater_than(parent_tx.vout[0].nValue, 0)
         parent_tx.rehash()

         child_tx = CTransaction()
@@ -924,7 +925,7 @@ class SegWitTest(BitcoinTestFramework):
         assert_equal(block.get_weight(), MAX_BLOCK_WEIGHT + 1)
         # Make sure that our test case would exceed the old max-network-message
         # limit
-        assert len(block.serialize()) > 2 * 1024 * 1024
+        assert_greater_than(len(block.serialize()), 2 * 1024 * 1024)

         test_witness_block(self.nodes[0], self.test_node, block, accepted=False, reason='bad-blk-we
ight')

@@ -934,7 +935,7 @@ class SegWitTest(BitcoinTestFramework):
         block.vtx[0].vout.pop()
         add_witness_commitment(block)
         block.solve()
-        assert block.get_weight() == MAX_BLOCK_WEIGHT
+        assert_equal(block.get_weight(), MAX_BLOCK_WEIGHT)

         test_witness_block(self.nodes[0], self.test_node, block, accepted=True)

@@ -1098,7 +1099,7 @@ class SegWitTest(BitcoinTestFramework):

         # This script is 19 max pushes (9937 bytes), then 64 more opcode-bytes.
         long_witness_script = CScript([b'a' * MAX_SCRIPT_ELEMENT_SIZE] * 19 + [OP_DROP] * 63 + [OP_
TRUE])
-        assert len(long_witness_script) == MAX_WITNESS_SCRIPT_LENGTH + 1
+        assert_equal(len(long_witness_script), MAX_WITNESS_SCRIPT_LENGTH + 1)
         long_script_pubkey = script_to_p2wsh_script(long_witness_script)

         block = self.build_next_block()
@@ -1122,7 +1123,7 @@ class SegWitTest(BitcoinTestFramework):

         # Try again with one less byte in the witness script
         witness_script = CScript([b'a' * MAX_SCRIPT_ELEMENT_SIZE] * 19 + [OP_DROP] * 62 + [OP_TRUE]
)
-        assert len(witness_script) == MAX_WITNESS_SCRIPT_LENGTH
+        assert_equal(len(witness_script), MAX_WITNESS_SCRIPT_LENGTH)
         script_pubkey = script_to_p2wsh_script(witness_script)

         tx.vout[0] = CTxOut(tx.vout[0].nValue, script_pubkey)
@@ -1151,7 +1152,7 @@ class SegWitTest(BitcoinTestFramework):
         for _ in range(10):
             tx.vout.append(CTxOut(int(value / 10), script_pubkey))
         tx.vout[0].nValue -= 1000
-        assert tx.vout[0].nValue >= 0
+        assert_greater_than_or_equal(tx.vout[0].nValue, 0)

         block = self.build_next_block()
         self.update_witness_block_with_transactions(block, [tx])
@@ -1358,7 +1359,7 @@ class SegWitTest(BitcoinTestFramework):
             temp_utxo.append(UTXO(tx.sha256, 0, tx.vout[0].nValue))

         self.generate(self.nodes[0], 1)  # Mine all the transactions
-        assert len(self.nodes[0].getrawmempool()) == 0
+        assert_equal(len(self.nodes[0].getrawmempool()), 0)

         # Finally, verify that version 0 -> version 2 transactions
         # are standard
@@ -1622,7 +1623,7 @@ class SegWitTest(BitcoinTestFramework):
             # Create a slight bias for producing more utxos
             num_outputs = random.randint(1, 11)
             random.shuffle(temp_utxos)
-            assert len(temp_utxos) > num_inputs
+            assert_greater_than(len(temp_utxos), num_inputs)
             tx = CTransaction()
             total_value = 0
             for i in range(num_inputs):

Copy link
Contributor

@edilmedeiros edilmedeiros left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Another thing: I have the impression that the individual commits do not work individually. If so, think about squashing them all together. I don't think this will break the bank for other reviewers.

@edilmedeiros
Copy link
Contributor

All right, better than my review would be to convert this to a scripted diff as you are doing in #29500.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants