Add logging to p2p-segwit.py

This commit is contained in:
John Newbery 2017-02-15 11:48:54 -05:00
parent 0e6d23dd53
commit 553a976929

View File

@ -70,7 +70,6 @@ class TestNode(NodeConnCB):
def on_reject(self, conn, message): def on_reject(self, conn, message):
self.last_reject = message self.last_reject = message
#print (message)
# Syncing helpers # Syncing helpers
def sync(self, test_function, timeout=60): def sync(self, test_function, timeout=60):
@ -224,7 +223,7 @@ class SegWitTest(BitcoinTestFramework):
''' Individual tests ''' ''' Individual tests '''
def test_witness_services(self): def test_witness_services(self):
print("\tVerifying NODE_WITNESS service bit") self.log.info("Verifying NODE_WITNESS service bit")
assert((self.test_node.connection.nServices & NODE_WITNESS) != 0) assert((self.test_node.connection.nServices & NODE_WITNESS) != 0)
@ -233,7 +232,7 @@ class SegWitTest(BitcoinTestFramework):
def test_non_witness_transaction(self): def test_non_witness_transaction(self):
# Mine a block with an anyone-can-spend coinbase, # Mine a block with an anyone-can-spend coinbase,
# let it mature, then try to spend it. # let it mature, then try to spend it.
print("\tTesting non-witness transaction") self.log.info("Testing non-witness transaction")
block = self.build_next_block(nVersion=1) block = self.build_next_block(nVersion=1)
block.solve() block.solve()
self.test_node.send_message(msg_block(block)) self.test_node.send_message(msg_block(block))
@ -262,7 +261,7 @@ class SegWitTest(BitcoinTestFramework):
# Verify that blocks with witnesses are rejected before activation. # Verify that blocks with witnesses are rejected before activation.
def test_unnecessary_witness_before_segwit_activation(self): def test_unnecessary_witness_before_segwit_activation(self):
print("\tTesting behavior of unnecessary witnesses") self.log.info("Testing behavior of unnecessary witnesses")
# For now, rely on earlier tests to have created at least one utxo for # For now, rely on earlier tests to have created at least one utxo for
# us to use # us to use
assert(len(self.utxo) > 0) assert(len(self.utxo) > 0)
@ -389,7 +388,7 @@ class SegWitTest(BitcoinTestFramework):
# This test can only be run after segwit has activated # This test can only be run after segwit has activated
def test_witness_commitments(self): def test_witness_commitments(self):
print("\tTesting witness commitments") self.log.info("Testing witness commitments")
# First try a correct witness commitment. # First try a correct witness commitment.
block = self.build_next_block() block = self.build_next_block()
@ -478,7 +477,7 @@ class SegWitTest(BitcoinTestFramework):
def test_block_malleability(self): def test_block_malleability(self):
print("\tTesting witness block malleability") self.log.info("Testing witness block malleability")
# Make sure that a block that has too big a virtual size # Make sure that a block that has too big a virtual size
# because of a too-large coinbase witness is not permanently # because of a too-large coinbase witness is not permanently
@ -519,7 +518,7 @@ class SegWitTest(BitcoinTestFramework):
def test_witness_block_size(self): def test_witness_block_size(self):
print("\tTesting witness block size limit") self.log.info("Testing witness block size limit")
# TODO: Test that non-witness carrying blocks can't exceed 1MB # TODO: Test that non-witness carrying blocks can't exceed 1MB
# Skipping this test for now; this is covered in p2p-fullblocktest.py # Skipping this test for now; this is covered in p2p-fullblocktest.py
@ -636,7 +635,7 @@ class SegWitTest(BitcoinTestFramework):
# Consensus tests of extra witness data in a transaction. # Consensus tests of extra witness data in a transaction.
def test_extra_witness_data(self): def test_extra_witness_data(self):
print("\tTesting extra witness data in tx") self.log.info("Testing extra witness data in tx")
assert(len(self.utxo) > 0) assert(len(self.utxo) > 0)
@ -712,7 +711,7 @@ class SegWitTest(BitcoinTestFramework):
def test_max_witness_push_length(self): def test_max_witness_push_length(self):
''' Should only allow up to 520 byte pushes in witness stack ''' ''' Should only allow up to 520 byte pushes in witness stack '''
print("\tTesting maximum witness push size") self.log.info("Testing maximum witness push size")
MAX_SCRIPT_ELEMENT_SIZE = 520 MAX_SCRIPT_ELEMENT_SIZE = 520
assert(len(self.utxo)) assert(len(self.utxo))
@ -752,7 +751,7 @@ class SegWitTest(BitcoinTestFramework):
def test_max_witness_program_length(self): def test_max_witness_program_length(self):
# Can create witness outputs that are long, but can't be greater than # Can create witness outputs that are long, but can't be greater than
# 10k bytes to successfully spend # 10k bytes to successfully spend
print("\tTesting maximum witness program length") self.log.info("Testing maximum witness program length")
assert(len(self.utxo)) assert(len(self.utxo))
MAX_PROGRAM_LENGTH = 10000 MAX_PROGRAM_LENGTH = 10000
@ -801,7 +800,7 @@ class SegWitTest(BitcoinTestFramework):
def test_witness_input_length(self): def test_witness_input_length(self):
''' Ensure that vin length must match vtxinwit length ''' ''' Ensure that vin length must match vtxinwit length '''
print("\tTesting witness input length") self.log.info("Testing witness input length")
assert(len(self.utxo)) assert(len(self.utxo))
witness_program = CScript([OP_DROP, OP_TRUE]) witness_program = CScript([OP_DROP, OP_TRUE])
@ -884,7 +883,7 @@ class SegWitTest(BitcoinTestFramework):
def test_witness_tx_relay_before_segwit_activation(self): def test_witness_tx_relay_before_segwit_activation(self):
print("\tTesting relay of witness transactions") self.log.info("Testing relay of witness transactions")
# Generate a transaction that doesn't require a witness, but send it # Generate a transaction that doesn't require a witness, but send it
# with a witness. Should be rejected for premature-witness, but should # with a witness. Should be rejected for premature-witness, but should
# not be added to recently rejected list. # not be added to recently rejected list.
@ -908,7 +907,7 @@ class SegWitTest(BitcoinTestFramework):
# a witness transaction ought not result in a getdata. # a witness transaction ought not result in a getdata.
try: try:
self.test_node.announce_tx_and_wait_for_getdata(tx, timeout=2) self.test_node.announce_tx_and_wait_for_getdata(tx, timeout=2)
print("Error: duplicate tx getdata!") self.log.error("Error: duplicate tx getdata!")
assert(False) assert(False)
except AssertionError as e: except AssertionError as e:
pass pass
@ -936,7 +935,7 @@ class SegWitTest(BitcoinTestFramework):
# - accepts transactions with valid witnesses # - accepts transactions with valid witnesses
# and that witness transactions are relayed to non-upgraded peers. # and that witness transactions are relayed to non-upgraded peers.
def test_tx_relay_after_segwit_activation(self): def test_tx_relay_after_segwit_activation(self):
print("\tTesting relay of witness transactions") self.log.info("Testing relay of witness transactions")
# Generate a transaction that doesn't require a witness, but send it # Generate a transaction that doesn't require a witness, but send it
# with a witness. Should be rejected because we can't use a witness # with a witness. Should be rejected because we can't use a witness
# when spending a non-witness output. # when spending a non-witness output.
@ -1025,7 +1024,7 @@ class SegWitTest(BitcoinTestFramework):
# This is true regardless of segwit activation. # This is true regardless of segwit activation.
# Also test that we don't ask for blocks from unupgraded peers # Also test that we don't ask for blocks from unupgraded peers
def test_block_relay(self, segwit_activated): def test_block_relay(self, segwit_activated):
print("\tTesting block relay") self.log.info("Testing block relay")
blocktype = 2|MSG_WITNESS_FLAG blocktype = 2|MSG_WITNESS_FLAG
@ -1113,7 +1112,7 @@ class SegWitTest(BitcoinTestFramework):
# V0 segwit outputs should be standard after activation, but not before. # V0 segwit outputs should be standard after activation, but not before.
def test_standardness_v0(self, segwit_activated): def test_standardness_v0(self, segwit_activated):
print("\tTesting standardness of v0 outputs (%s activation)" % ("after" if segwit_activated else "before")) self.log.info("Testing standardness of v0 outputs (%s activation)" % ("after" if segwit_activated else "before"))
assert(len(self.utxo)) assert(len(self.utxo))
witness_program = CScript([OP_TRUE]) witness_program = CScript([OP_TRUE])
@ -1190,7 +1189,7 @@ class SegWitTest(BitcoinTestFramework):
# Verify that future segwit upgraded transactions are non-standard, # Verify that future segwit upgraded transactions are non-standard,
# but valid in blocks. Can run this before and after segwit activation. # but valid in blocks. Can run this before and after segwit activation.
def test_segwit_versions(self): def test_segwit_versions(self):
print("\tTesting standardness/consensus for segwit versions (0-16)") self.log.info("Testing standardness/consensus for segwit versions (0-16)")
assert(len(self.utxo)) assert(len(self.utxo))
NUM_TESTS = 17 # will test OP_0, OP1, ..., OP_16 NUM_TESTS = 17 # will test OP_0, OP1, ..., OP_16
if (len(self.utxo) < NUM_TESTS): if (len(self.utxo) < NUM_TESTS):
@ -1274,7 +1273,7 @@ class SegWitTest(BitcoinTestFramework):
def test_premature_coinbase_witness_spend(self): def test_premature_coinbase_witness_spend(self):
print("\tTesting premature coinbase witness spend") self.log.info("Testing premature coinbase witness spend")
block = self.build_next_block() block = self.build_next_block()
# Change the output of the block to be a witness output. # Change the output of the block to be a witness output.
witness_program = CScript([OP_TRUE]) witness_program = CScript([OP_TRUE])
@ -1309,7 +1308,7 @@ class SegWitTest(BitcoinTestFramework):
def test_signature_version_1(self): def test_signature_version_1(self):
print("\tTesting segwit signature hash version 1") self.log.info("Testing segwit signature hash version 1")
key = CECKey() key = CECKey()
key.set_secretbytes(b"9") key.set_secretbytes(b"9")
pubkey = CPubKey(key.get_pubkey()) pubkey = CPubKey(key.get_pubkey())
@ -1491,7 +1490,7 @@ class SegWitTest(BitcoinTestFramework):
# Test P2SH wrapped witness programs. # Test P2SH wrapped witness programs.
def test_p2sh_witness(self, segwit_activated): def test_p2sh_witness(self, segwit_activated):
print("\tTesting P2SH witness transactions") self.log.info("Testing P2SH witness transactions")
assert(len(self.utxo)) assert(len(self.utxo))
@ -1564,7 +1563,7 @@ class SegWitTest(BitcoinTestFramework):
# To enable this test, pass --oldbinary=<path-to-pre-segwit-bitcoind> to # To enable this test, pass --oldbinary=<path-to-pre-segwit-bitcoind> to
# the test. # the test.
def test_upgrade_after_activation(self, node, node_id): def test_upgrade_after_activation(self, node, node_id):
print("\tTesting software upgrade after softfork activation") self.log.info("Testing software upgrade after softfork activation")
assert(node_id != 0) # node0 is assumed to be a segwit-active bitcoind assert(node_id != 0) # node0 is assumed to be a segwit-active bitcoind
@ -1592,7 +1591,7 @@ class SegWitTest(BitcoinTestFramework):
def test_witness_sigops(self): def test_witness_sigops(self):
'''Ensure sigop counting is correct inside witnesses.''' '''Ensure sigop counting is correct inside witnesses.'''
print("\tTesting sigops limit") self.log.info("Testing sigops limit")
assert(len(self.utxo)) assert(len(self.utxo))
@ -1694,7 +1693,7 @@ class SegWitTest(BitcoinTestFramework):
# TODO: test p2sh sigop counting # TODO: test p2sh sigop counting
def test_getblocktemplate_before_lockin(self): def test_getblocktemplate_before_lockin(self):
print("\tTesting getblocktemplate setting of segwit versionbit (before lockin)") self.log.info("Testing getblocktemplate setting of segwit versionbit (before lockin)")
# Node0 is segwit aware, node2 is not. # Node0 is segwit aware, node2 is not.
for node in [self.nodes[0], self.nodes[2]]: for node in [self.nodes[0], self.nodes[2]]:
gbt_results = node.getblocktemplate() gbt_results = node.getblocktemplate()
@ -1746,7 +1745,7 @@ class SegWitTest(BitcoinTestFramework):
# Uncompressed pubkeys are no longer supported in default relay policy, # Uncompressed pubkeys are no longer supported in default relay policy,
# but (for now) are still valid in blocks. # but (for now) are still valid in blocks.
def test_uncompressed_pubkey(self): def test_uncompressed_pubkey(self):
print("\tTesting uncompressed pubkeys") self.log.info("Testing uncompressed pubkeys")
# Segwit transactions using uncompressed pubkeys are not accepted # Segwit transactions using uncompressed pubkeys are not accepted
# under default policy, but should still pass consensus. # under default policy, but should still pass consensus.
key = CECKey() key = CECKey()
@ -1848,7 +1847,7 @@ class SegWitTest(BitcoinTestFramework):
self.utxo.append(UTXO(tx5.sha256, 0, tx5.vout[0].nValue)) self.utxo.append(UTXO(tx5.sha256, 0, tx5.vout[0].nValue))
def test_non_standard_witness(self): def test_non_standard_witness(self):
print("\tTesting detection of non-standard P2WSH witness") self.log.info("Testing detection of non-standard P2WSH witness")
pad = chr(1).encode('latin-1') pad = chr(1).encode('latin-1')
# Create scripts for tests # Create scripts for tests
@ -1972,7 +1971,7 @@ class SegWitTest(BitcoinTestFramework):
# Test logic begins here # Test logic begins here
self.test_node.wait_for_verack() self.test_node.wait_for_verack()
print("\nStarting tests before segwit lock in:") self.log.info("Starting tests before segwit lock in:")
self.test_witness_services() # Verifies NODE_WITNESS self.test_witness_services() # Verifies NODE_WITNESS
self.test_non_witness_transaction() # non-witness tx's are accepted self.test_non_witness_transaction() # non-witness tx's are accepted
@ -1987,7 +1986,7 @@ class SegWitTest(BitcoinTestFramework):
sync_blocks(self.nodes) sync_blocks(self.nodes)
# At lockin, nothing should change. # At lockin, nothing should change.
print("\nTesting behavior post lockin, pre-activation") self.log.info("Testing behavior post lockin, pre-activation")
self.advance_to_segwit_lockin() self.advance_to_segwit_lockin()
# Retest unnecessary witnesses # Retest unnecessary witnesses
@ -2000,7 +1999,7 @@ class SegWitTest(BitcoinTestFramework):
sync_blocks(self.nodes) sync_blocks(self.nodes)
# Now activate segwit # Now activate segwit
print("\nTesting behavior after segwit activation") self.log.info("Testing behavior after segwit activation")
self.advance_to_segwit_active() self.advance_to_segwit_active()
sync_blocks(self.nodes) sync_blocks(self.nodes)