Browse Source

[qa] Remove hardcoded "4 nodes" from test_framework

tags/v0.15.1
MarcoFalke 5 years ago
parent
commit
fac9349798
58 changed files with 291 additions and 138 deletions
  1. 4
    0
      qa/rpc-tests/abandonconflict.py
  2. 2
    1
      qa/rpc-tests/bip65-cltv-p2p.py
  3. 4
    0
      qa/rpc-tests/bip65-cltv.py
  4. 2
    1
      qa/rpc-tests/bip68-112-113-p2p.py
  5. 4
    0
      qa/rpc-tests/bip68-sequence.py
  6. 2
    1
      qa/rpc-tests/bip9-softforks.py
  7. 2
    1
      qa/rpc-tests/bipdersig-p2p.py
  8. 4
    0
      qa/rpc-tests/bipdersig.py
  9. 5
    5
      qa/rpc-tests/blockchain.py
  10. 5
    4
      qa/rpc-tests/decodescript.py
  11. 5
    4
      qa/rpc-tests/disablewallet.py
  12. 5
    0
      qa/rpc-tests/forknotify.py
  13. 6
    5
      qa/rpc-tests/fundrawtransaction.py
  14. 5
    0
      qa/rpc-tests/getblocktemplate_longpoll.py
  15. 9
    0
      qa/rpc-tests/getblocktemplate_proposals.py
  16. 4
    1
      qa/rpc-tests/getchaintips.py
  17. 7
    2
      qa/rpc-tests/httpbasics.py
  18. 5
    4
      qa/rpc-tests/importprunedfunds.py
  19. 5
    4
      qa/rpc-tests/invalidateblock.py
  20. 1
    0
      qa/rpc-tests/invalidblockrequest.py
  21. 1
    0
      qa/rpc-tests/invalidtxrequest.py
  22. 5
    6
      qa/rpc-tests/keypool.py
  23. 5
    1
      qa/rpc-tests/listtransactions.py
  24. 5
    4
      qa/rpc-tests/maxblocksinflight.py
  25. 7
    5
      qa/rpc-tests/maxuploadtarget.py
  26. 6
    6
      qa/rpc-tests/mempool_limit.py
  27. 4
    0
      qa/rpc-tests/mempool_packages.py
  28. 4
    0
      qa/rpc-tests/mempool_reorg.py
  29. 5
    0
      qa/rpc-tests/mempool_resurrect_test.py
  30. 5
    0
      qa/rpc-tests/mempool_spendcoinbase.py
  31. 4
    3
      qa/rpc-tests/merkle_blocks.py
  32. 11
    5
      qa/rpc-tests/multi_rpc.py
  33. 6
    0
      qa/rpc-tests/nodehandling.py
  34. 4
    2
      qa/rpc-tests/p2p-acceptblock.py
  35. 6
    0
      qa/rpc-tests/p2p-feefilter.py
  36. 1
    0
      qa/rpc-tests/p2p-fullblocktest.py
  37. 4
    2
      qa/rpc-tests/p2p-versionbits-warning.py
  38. 4
    4
      qa/rpc-tests/prioritise_transaction.py
  39. 5
    1
      qa/rpc-tests/proxy_test.py
  40. 4
    4
      qa/rpc-tests/pruning.py
  41. 5
    4
      qa/rpc-tests/rawtransactions.py
  42. 6
    1
      qa/rpc-tests/receivedby.py
  43. 4
    3
      qa/rpc-tests/reindex.py
  44. 5
    0
      qa/rpc-tests/replace-by-fee.py
  45. 5
    4
      qa/rpc-tests/rest.py
  46. 2
    2
      qa/rpc-tests/rpcbind_test.py
  47. 5
    3
      qa/rpc-tests/sendheaders.py
  48. 5
    4
      qa/rpc-tests/signmessages.py
  49. 5
    4
      qa/rpc-tests/signrawtransactions.py
  50. 5
    0
      qa/rpc-tests/smartfees.py
  51. 13
    12
      qa/rpc-tests/test_framework/test_framework.py
  52. 20
    13
      qa/rpc-tests/test_framework/util.py
  53. 5
    0
      qa/rpc-tests/txn_clone.py
  54. 5
    0
      qa/rpc-tests/txn_doublespend.py
  55. 4
    3
      qa/rpc-tests/wallet.py
  56. 5
    4
      qa/rpc-tests/walletbackup.py
  57. 5
    4
      qa/rpc-tests/zapwallettxes.py
  58. 5
    1
      qa/rpc-tests/zmq_test.py

+ 4
- 0
qa/rpc-tests/abandonconflict.py View File

@@ -9,6 +9,10 @@ from test_framework.util import *
import urllib.parse

class AbandonConflictTest(BitcoinTestFramework):
def __init__(self):
super().__init__()
self.num_nodes = 2
self.setup_clean_chain = False

def setup_network(self):
self.nodes = []

+ 2
- 1
qa/rpc-tests/bip65-cltv-p2p.py View File

@@ -37,11 +37,12 @@ Mine 1 old version block, see that the node rejects.
class BIP65Test(ComparisonTestFramework):

def __init__(self):
super().__init__()
self.num_nodes = 1

def setup_network(self):
# Must set the blockversion for this test
self.nodes = start_nodes(1, self.options.tmpdir,
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir,
extra_args=[['-debug', '-whitelist=127.0.0.1', '-blockversion=3']],
binary=[self.options.testbinary])


+ 4
- 0
qa/rpc-tests/bip65-cltv.py View File

@@ -11,6 +11,10 @@ from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import *

class BIP65Test(BitcoinTestFramework):
def __init__(self):
super().__init__()
self.num_nodes = 3
self.setup_clean_chain = False

def setup_network(self):
self.nodes = []

+ 2
- 1
qa/rpc-tests/bip68-112-113-p2p.py View File

@@ -94,11 +94,12 @@ def all_rlt_txs(txarray):

class BIP68_112_113Test(ComparisonTestFramework):
def __init__(self):
super().__init__()
self.num_nodes = 1

def setup_network(self):
# Must set the blockversion for this test
self.nodes = start_nodes(1, self.options.tmpdir,
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir,
extra_args=[['-debug', '-whitelist=127.0.0.1', '-blockversion=4']],
binary=[self.options.testbinary])


+ 4
- 0
qa/rpc-tests/bip68-sequence.py View File

@@ -22,6 +22,10 @@ SEQUENCE_LOCKTIME_MASK = 0x0000ffff
NOT_FINAL_ERROR = "64: non-BIP68-final"

class BIP68Test(BitcoinTestFramework):
def __init__(self):
super().__init__()
self.num_nodes = 2
self.setup_clean_chain = False

def setup_network(self):
self.nodes = []

+ 2
- 1
qa/rpc-tests/bip9-softforks.py View File

@@ -32,10 +32,11 @@ test that enforcement has triggered
class BIP9SoftForksTest(ComparisonTestFramework):

def __init__(self):
super().__init__()
self.num_nodes = 1

def setup_network(self):
self.nodes = start_nodes(1, self.options.tmpdir,
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir,
extra_args=[['-debug', '-whitelist=127.0.0.1']],
binary=[self.options.testbinary])


+ 2
- 1
qa/rpc-tests/bipdersig-p2p.py View File

@@ -45,11 +45,12 @@ Mine 1 old version block, see that the node rejects.
class BIP66Test(ComparisonTestFramework):

def __init__(self):
super().__init__()
self.num_nodes = 1

def setup_network(self):
# Must set the blockversion for this test
self.nodes = start_nodes(1, self.options.tmpdir,
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir,
extra_args=[['-debug', '-whitelist=127.0.0.1', '-blockversion=2']],
binary=[self.options.testbinary])


+ 4
- 0
qa/rpc-tests/bipdersig.py View File

@@ -11,6 +11,10 @@ from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import *

class BIP66Test(BitcoinTestFramework):
def __init__(self):
super().__init__()
self.num_nodes = 3
self.setup_clean_chain = False

def setup_network(self):
self.nodes = []

+ 5
- 5
qa/rpc-tests/blockchain.py View File

@@ -13,7 +13,6 @@ from decimal import Decimal
from test_framework.test_framework import BitcoinTestFramework
from test_framework.authproxy import JSONRPCException
from test_framework.util import (
initialize_chain,
assert_equal,
assert_raises,
assert_is_hex_string,
@@ -32,12 +31,13 @@ class BlockchainTest(BitcoinTestFramework):

"""

def setup_chain(self):
print("Initializing test directory " + self.options.tmpdir)
initialize_chain(self.options.tmpdir)
def __init__(self):
super().__init__()
self.setup_clean_chain = False
self.num_nodes = 2

def setup_network(self, split=False):
self.nodes = start_nodes(2, self.options.tmpdir)
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir)
connect_nodes_bi(self.nodes, 0, 1)
self.is_network_split = False
self.sync_all()

+ 5
- 4
qa/rpc-tests/decodescript.py View File

@@ -11,12 +11,13 @@ from io import BytesIO
class DecodeScriptTest(BitcoinTestFramework):
"""Tests decoding scripts via RPC command "decodescript"."""

def setup_chain(self):
print('Initializing test directory ' + self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 1)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 1

def setup_network(self, split=False):
self.nodes = start_nodes(1, self.options.tmpdir)
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir)
self.is_network_split = False

def decodescript_script_sig(self):

+ 5
- 4
qa/rpc-tests/disablewallet.py View File

@@ -13,12 +13,13 @@ from test_framework.util import *

class DisableWalletTest (BitcoinTestFramework):

def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 1)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 1

def setup_network(self, split=False):
self.nodes = start_nodes(1, self.options.tmpdir, [['-disablewallet']])
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, [['-disablewallet']])
self.is_network_split = False
self.sync_all()


+ 5
- 0
qa/rpc-tests/forknotify.py View File

@@ -12,6 +12,11 @@ from test_framework.util import *

class ForkNotifyTest(BitcoinTestFramework):

def __init__(self):
super().__init__()
self.num_nodes = 2
self.setup_clean_chain = False

alert_filename = None # Set by setup_network

def setup_network(self):

+ 6
- 5
qa/rpc-tests/fundrawtransaction.py View File

@@ -9,12 +9,13 @@ from test_framework.util import *
# Create one-input, one-output, no-fee transaction:
class RawTransactionsTest(BitcoinTestFramework):

def setup_chain(self):
print(("Initializing test directory "+self.options.tmpdir))
initialize_chain_clean(self.options.tmpdir, 4)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 4

def setup_network(self, split=False):
self.nodes = start_nodes(4, self.options.tmpdir)
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir)

connect_nodes_bi(self.nodes,0,1)
connect_nodes_bi(self.nodes,1,2)
@@ -521,7 +522,7 @@ class RawTransactionsTest(BitcoinTestFramework):
stop_nodes(self.nodes)
wait_bitcoinds()

self.nodes = start_nodes(4, self.options.tmpdir)
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir)
# This test is not meant to test fee estimation and we'd like
# to be sure all txs are sent at a consistent desired feerate
for node in self.nodes:

+ 5
- 0
qa/rpc-tests/getblocktemplate_longpoll.py View File

@@ -26,6 +26,11 @@ class GetBlockTemplateLPTest(BitcoinTestFramework):
Test longpolling with getblocktemplate.
'''

def __init__(self):
super().__init__()
self.num_nodes = 4
self.setup_clean_chain = False

def run_test(self):
print("Warning: this test will take about 70 seconds in the best case. Be patient.")
self.nodes[0].generate(10)

+ 9
- 0
qa/rpc-tests/getblocktemplate_proposals.py View File

@@ -70,6 +70,15 @@ class GetBlockTemplateProposalTest(BitcoinTestFramework):
Test block proposals with getblocktemplate.
'''

def __init__(self):
super().__init__()
self.num_nodes = 2
self.setup_clean_chain = False

def setup_network(self):
self.nodes = self.setup_nodes()
connect_nodes_bi(self.nodes, 0, 1)

def run_test(self):
node = self.nodes[0]
node.generate(1) # Mine a block to leave initial block download

+ 4
- 1
qa/rpc-tests/getchaintips.py View File

@@ -11,9 +11,12 @@ from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import assert_equal

class GetChainTipsTest (BitcoinTestFramework):
def __init__(self):
super().__init__()
self.num_nodes = 4
self.setup_clean_chain = False

def run_test (self):
BitcoinTestFramework.run_test (self)

tips = self.nodes[0].getchaintips ()
assert_equal (len (tips), 1)

+ 7
- 2
qa/rpc-tests/httpbasics.py View File

@@ -14,8 +14,13 @@ import http.client
import urllib.parse

class HTTPBasicsTest (BitcoinTestFramework):
def setup_nodes(self):
return start_nodes(4, self.options.tmpdir)
def __init__(self):
super().__init__()
self.num_nodes = 3
self.setup_clean_chain = False

def setup_network(self):
self.nodes = self.setup_nodes()

def run_test(self):


+ 5
- 4
qa/rpc-tests/importprunedfunds.py View File

@@ -9,12 +9,13 @@ import decimal

class ImportPrunedFundsTest(BitcoinTestFramework):

def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 4)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 4

def setup_network(self, split=False):
self.nodes = start_nodes(2, self.options.tmpdir)
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir)
connect_nodes_bi(self.nodes,0,1)
self.is_network_split=False
self.sync_all()

+ 5
- 4
qa/rpc-tests/invalidateblock.py View File

@@ -13,10 +13,11 @@ from test_framework.util import *
class InvalidateTest(BitcoinTestFramework):
def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 3)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 3

def setup_network(self):
self.nodes = []
self.is_network_split = False

+ 1
- 0
qa/rpc-tests/invalidblockrequest.py View File

@@ -25,6 +25,7 @@ class InvalidBlockRequestTest(ComparisonTestFramework):
''' Can either run this test as 1 node with expected answers, or two and compare them.
Change the "outcome" variable from each TestInstance object to only do the comparison. '''
def __init__(self):
super().__init__()
self.num_nodes = 1

def run_test(self):

+ 1
- 0
qa/rpc-tests/invalidtxrequest.py View File

@@ -19,6 +19,7 @@ class InvalidTxRequestTest(ComparisonTestFramework):
''' Can either run this test as 1 node with expected answers, or two and compare them.
Change the "outcome" variable from each TestInstance object to only do the comparison. '''
def __init__(self):
super().__init__()
self.num_nodes = 1

def run_test(self):

+ 5
- 6
qa/rpc-tests/keypool.py View File

@@ -5,8 +5,6 @@

# Exercise the wallet keypool, and interaction with wallet encryption/locking

# Add python-bitcoinrpc to module search path:

from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import *

@@ -65,12 +63,13 @@ class KeyPoolTest(BitcoinTestFramework):
except JSONRPCException as e:
assert(e.error['code']==-12)

def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain(self.options.tmpdir)
def __init__(self):
super().__init__()
self.setup_clean_chain = False
self.num_nodes = 1

def setup_network(self):
self.nodes = start_nodes(1, self.options.tmpdir)
self.nodes = self.setup_nodes()

if __name__ == '__main__':
KeyPoolTest().main()

+ 5
- 1
qa/rpc-tests/listtransactions.py View File

@@ -17,11 +17,15 @@ def txFromHex(hexstring):
return tx

class ListTransactionsTest(BitcoinTestFramework):
def __init__(self):
super().__init__()
self.num_nodes = 4
self.setup_clean_chain = False

def setup_nodes(self):
#This test requires mocktime
enable_mocktime()
return start_nodes(4, self.options.tmpdir)
return start_nodes(self.num_nodes, self.options.tmpdir)

def run_test(self):
# Simple send, 0 to 1:

+ 5
- 4
qa/rpc-tests/maxblocksinflight.py View File

@@ -76,12 +76,13 @@ class MaxBlocksInFlightTest(BitcoinTestFramework):
default=os.getenv("BITCOIND", "bitcoind"),
help="Binary to test max block requests behavior")

def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 1)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 1

def setup_network(self):
self.nodes = start_nodes(1, self.options.tmpdir,
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir,
extra_args=[['-debug', '-whitelist=127.0.0.1']],
binary=[self.options.testbinary])


+ 7
- 5
qa/rpc-tests/maxuploadtarget.py View File

@@ -80,17 +80,19 @@ class TestNode(NodeConnCB):
return success

class MaxUploadTest(BitcoinTestFramework):
def __init__(self):
self.utxo = []
self.txouts = gen_return_txouts()
def add_options(self, parser):
parser.add_option("--testbinary", dest="testbinary",
default=os.getenv("BITCOIND", "bitcoind"),
help="bitcoind binary to test")

def setup_chain(self):
initialize_chain_clean(self.options.tmpdir, 2)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 2

self.utxo = []
self.txouts = gen_return_txouts()

def setup_network(self):
# Start a node with maxuploadtarget of 200 MB (/24h)

+ 6
- 6
qa/rpc-tests/mempool_limit.py View File

@@ -10,9 +10,6 @@ from test_framework.util import *

class MempoolLimitTest(BitcoinTestFramework):

def __init__(self):
self.txouts = gen_return_txouts()

def setup_network(self):
self.nodes = []
self.nodes.append(start_node(0, self.options.tmpdir, ["-maxmempool=5", "-spendzeroconfchange=0", "-debug"]))
@@ -20,9 +17,12 @@ class MempoolLimitTest(BitcoinTestFramework):
self.sync_all()
self.relayfee = self.nodes[0].getnetworkinfo()['relayfee']

def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 2)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 2

self.txouts = gen_return_txouts()

def run_test(self):
txids = []

+ 4
- 0
qa/rpc-tests/mempool_packages.py View File

@@ -13,6 +13,10 @@ MAX_ANCESTORS = 25
MAX_DESCENDANTS = 25

class MempoolPackagesTest(BitcoinTestFramework):
def __init__(self):
super().__init__()
self.num_nodes = 2
self.setup_clean_chain = False

def setup_network(self):
self.nodes = []

+ 4
- 0
qa/rpc-tests/mempool_reorg.py View File

@@ -13,6 +13,10 @@ from test_framework.util import *

# Create one-input, one-output, no-fee transaction:
class MempoolCoinbaseTest(BitcoinTestFramework):
def __init__(self):
super().__init__()
self.num_nodes = 2
self.setup_clean_chain = False

alert_filename = None # Set by setup_network


+ 5
- 0
qa/rpc-tests/mempool_resurrect_test.py View File

@@ -14,6 +14,11 @@ from test_framework.util import *
# Create one-input, one-output, no-fee transaction:
class MempoolCoinbaseTest(BitcoinTestFramework):

def __init__(self):
super().__init__()
self.num_nodes = 1
self.setup_clean_chain = False

def setup_network(self):
# Just need one node for this test
args = ["-checkmempool", "-debug=mempool"]

+ 5
- 0
qa/rpc-tests/mempool_spendcoinbase.py View File

@@ -19,6 +19,11 @@ from test_framework.util import *
# Create one-input, one-output, no-fee transaction:
class MempoolSpendCoinbaseTest(BitcoinTestFramework):

def __init__(self):
super().__init__()
self.num_nodes = 1
self.setup_clean_chain = False

def setup_network(self):
# Just need one node for this test
args = ["-checkmempool", "-debug=mempool"]

+ 4
- 3
qa/rpc-tests/merkle_blocks.py View File

@@ -12,9 +12,10 @@ from test_framework.util import *

class MerkleBlockTest(BitcoinTestFramework):

def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 4)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 4

def setup_network(self):
self.nodes = []

+ 11
- 5
qa/rpc-tests/multi_rpc.py View File

@@ -8,18 +8,21 @@
#

from test_framework.test_framework import BitcoinTestFramework
from test_framework.util import *
from test_framework.util import str_to_b64str, assert_equal

import os
import http.client
import urllib.parse

class HTTPBasicsTest (BitcoinTestFramework):
def setup_nodes(self):
return start_nodes(4, self.options.tmpdir)

def __init__(self):
super().__init__()
self.setup_clean_chain = False
self.num_nodes = 1

def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain(self.options.tmpdir)
super().setup_chain()
#Append rpcauth to bitcoin.conf before initialization
rpcauth = "rpcauth=rt:93648e835a54c573682c2eb19f882535$7681e9c5b74bdd85e78166031d2058e1069b3ed7ed967c93fc63abba06f31144"
rpcauth2 = "rpcauth=rt2:f8607b1a88861fac29dfccf9b52ff9f$ff36a0c23c8c62b4846112e50fa888416e94c17bfd4c42f88fd8f55ec6a3137e"
@@ -27,6 +30,9 @@ class HTTPBasicsTest (BitcoinTestFramework):
f.write(rpcauth+"\n")
f.write(rpcauth2+"\n")

def setup_network(self):
self.nodes = self.setup_nodes()

def run_test(self):

##################################################

+ 6
- 0
qa/rpc-tests/nodehandling.py View File

@@ -14,6 +14,12 @@ import http.client
import urllib.parse

class NodeHandlingTest (BitcoinTestFramework):

def __init__(self):
super().__init__()
self.num_nodes = 4
self.setup_clean_chain = False

def run_test(self):
###########################
# setban/listbanned tests #

+ 4
- 2
qa/rpc-tests/p2p-acceptblock.py View File

@@ -111,8 +111,10 @@ class AcceptBlockTest(BitcoinTestFramework):
default=os.getenv("BITCOIND", "bitcoind"),
help="bitcoind binary to test")

def setup_chain(self):
initialize_chain_clean(self.options.tmpdir, 2)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 2

def setup_network(self):
# Node0 will be used to test behavior of processing unrequested blocks

+ 6
- 0
qa/rpc-tests/p2p-feefilter.py View File

@@ -46,6 +46,12 @@ class TestNode(SingleNodeConnCB):
self.sync_with_ping()

class FeeFilterTest(BitcoinTestFramework):

def __init__(self):
super().__init__()
self.num_nodes = 2
self.setup_clean_chain = False

def setup_network(self):
# Node1 will be used to generate txs which should be relayed from Node0
# to our test node

+ 1
- 0
qa/rpc-tests/p2p-fullblocktest.py View File

@@ -29,6 +29,7 @@ class FullBlockTest(ComparisonTestFramework):
''' Can either run this test as 1 node with expected answers, or two and compare them.
Change the "outcome" variable from each TestInstance object to only do the comparison. '''
def __init__(self):
super().__init__()
self.num_nodes = 1
self.block_heights = {}
self.coinbase_key = CECKey()

+ 4
- 2
qa/rpc-tests/p2p-versionbits-warning.py View File

@@ -59,8 +59,10 @@ class TestNode(NodeConnCB):


class VersionBitsWarningTest(BitcoinTestFramework):
def setup_chain(self):
initialize_chain_clean(self.options.tmpdir, 1)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 1

def setup_network(self):
self.nodes = []

+ 4
- 4
qa/rpc-tests/prioritise_transaction.py View File

@@ -14,11 +14,11 @@ from test_framework.mininode import COIN, MAX_BLOCK_SIZE
class PrioritiseTransactionTest(BitcoinTestFramework):

def __init__(self):
self.txouts = gen_return_txouts()
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 1

def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 1)
self.txouts = gen_return_txouts()

def setup_network(self):
self.nodes = []

+ 5
- 1
qa/rpc-tests/proxy_test.py View File

@@ -36,6 +36,10 @@ addnode connect to generic DNS name

class ProxyTest(BitcoinTestFramework):
def __init__(self):
super().__init__()
self.num_nodes = 4
self.setup_clean_chain = False

self.have_ipv6 = test_ipv6_local()
# Create two proxies on different ports
# ... one unauthenticated
@@ -77,7 +81,7 @@ class ProxyTest(BitcoinTestFramework):
]
if self.have_ipv6:
args[3] = ['-listen', '-debug=net', '-debug=proxy', '-proxy=[%s]:%i' % (self.conf3.addr),'-proxyrandomize=0', '-noonion']
return start_nodes(4, self.options.tmpdir, extra_args=args)
return start_nodes(self.num_nodes, self.options.tmpdir, extra_args=args)

def node_test(self, node, proxies, auth, test_onion=True):
rv = []

+ 4
- 4
qa/rpc-tests/pruning.py View File

@@ -20,14 +20,14 @@ def calc_usage(blockdir):
class PruneTest(BitcoinTestFramework):

def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 3

self.utxo = []
self.address = ["",""]
self.txouts = gen_return_txouts()

def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 3)

def setup_network(self):
self.nodes = []
self.is_network_split = False

+ 5
- 4
qa/rpc-tests/rawtransactions.py View File

@@ -14,12 +14,13 @@ from test_framework.util import *
# Create one-input, one-output, no-fee transaction:
class RawTransactionsTest(BitcoinTestFramework):

def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 3)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 3

def setup_network(self, split=False):
self.nodes = start_nodes(3, self.options.tmpdir)
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir)

#connect to a local machine for debugging
#url = "http://bitcoinrpc:DP6DvqZtqXarpeNWyN3LZTFchCCyCUuHwNF7E8pX99x1@%s:%d" % ('127.0.0.1', 18332)

+ 6
- 1
qa/rpc-tests/receivedby.py View File

@@ -27,10 +27,15 @@ def get_sub_array_from_array(object_array, to_match):

class ReceivedByTest(BitcoinTestFramework):

def __init__(self):
super().__init__()
self.num_nodes = 4
self.setup_clean_chain = False

def setup_nodes(self):
#This test requires mocktime
enable_mocktime()
return start_nodes(4, self.options.tmpdir)
return start_nodes(self.num_nodes, self.options.tmpdir)

def run_test(self):
'''

+ 4
- 3
qa/rpc-tests/reindex.py View File

@@ -11,9 +11,10 @@ from test_framework.util import *

class ReindexTest(BitcoinTestFramework):

def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 1)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 1

def setup_network(self):
self.nodes = []

+ 5
- 0
qa/rpc-tests/replace-by-fee.py View File

@@ -68,6 +68,11 @@ def make_utxo(node, amount, confirmed=True, scriptPubKey=CScript([1])):

class ReplaceByFeeTest(BitcoinTestFramework):

def __init__(self):
super().__init__()
self.num_nodes = 1
self.setup_clean_chain = False

def setup_network(self):
self.nodes = []
self.nodes.append(start_node(0, self.options.tmpdir, ["-maxorphantx=1000", "-debug",

+ 5
- 4
qa/rpc-tests/rest.py View File

@@ -47,12 +47,13 @@ def http_post_call(host, port, path, requestdata = '', response_object = 0):
class RESTTest (BitcoinTestFramework):
FORMAT_SEPARATOR = "."

def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 3)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 3

def setup_network(self, split=False):
self.nodes = start_nodes(3, self.options.tmpdir)
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir)
connect_nodes_bi(self.nodes,0,1)
connect_nodes_bi(self.nodes,1,2)
connect_nodes_bi(self.nodes,0,2)

+ 2
- 2
qa/rpc-tests/rpcbind_test.py View File

@@ -24,7 +24,7 @@ def run_bind_test(tmpdir, allow_ips, connect_to, addresses, expected):
if allow_ips:
base_args += ['-rpcallowip=' + x for x in allow_ips]
binds = ['-rpcbind='+addr for addr in addresses]
nodes = start_nodes(1, tmpdir, [base_args + binds], connect_to)
nodes = start_nodes(self.num_nodes, tmpdir, [base_args + binds], connect_to)
try:
pid = bitcoind_processes[0].pid
assert_equal(set(get_bind_addrs(pid)), set(expected))
@@ -38,7 +38,7 @@ def run_allowip_test(tmpdir, allow_ips, rpchost, rpcport):
at a non-localhost IP.
'''
base_args = ['-disablewallet', '-nolisten'] + ['-rpcallowip='+x for x in allow_ips]
nodes = start_nodes(1, tmpdir, [base_args])
nodes = start_nodes(self.num_nodes, tmpdir, [base_args])
try:
# connect to node through non-loopback interface
url = "http://rt:rt@%s:%d" % (rpchost, rpcport,)

+ 5
- 3
qa/rpc-tests/sendheaders.py View File

@@ -208,12 +208,14 @@ class TestNode(BaseNode):
BaseNode.__init__(self)

class SendHeadersTest(BitcoinTestFramework):
def setup_chain(self):
initialize_chain_clean(self.options.tmpdir, 2)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 2

def setup_network(self):
self.nodes = []
self.nodes = start_nodes(2, self.options.tmpdir, [["-debug", "-logtimemicros=1"]]*2)
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, [["-debug", "-logtimemicros=1"]]*2)
connect_nodes(self.nodes[0], 1)

# mine count blocks and return the new tip

+ 5
- 4
qa/rpc-tests/signmessages.py View File

@@ -10,12 +10,13 @@ from test_framework.util import *
class SignMessagesTest(BitcoinTestFramework):
"""Tests RPC commands for signing and verifying messages."""

def setup_chain(self):
print('Initializing test directory ' + self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 1)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 1

def setup_network(self, split=False):
self.nodes = start_nodes(1, self.options.tmpdir)
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir)
self.is_network_split = False

def run_test(self):

+ 5
- 4
qa/rpc-tests/signrawtransactions.py View File

@@ -10,12 +10,13 @@ from test_framework.util import *
class SignRawTransactionsTest(BitcoinTestFramework):
"""Tests transaction signing via RPC command "signrawtransaction"."""

def setup_chain(self):
print('Initializing test directory ' + self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 1)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 1

def setup_network(self, split=False):
self.nodes = start_nodes(1, self.options.tmpdir)
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir)
self.is_network_split = False

def successful_signing_test(self):

+ 5
- 0
qa/rpc-tests/smartfees.py View File

@@ -145,6 +145,11 @@ def check_estimates(node, fees_seen, max_invalid, print_estimates = True):

class EstimateFeeTest(BitcoinTestFramework):

def __init__(self):
super().__init__()
self.num_nodes = 3
self.setup_clean_chain = False

def setup_network(self):
'''
We'll setup the network to have 3 nodes that all mine with different parameters.

+ 13
- 12
qa/rpc-tests/test_framework/test_framework.py View File

@@ -15,7 +15,6 @@ import traceback

from .util import (
initialize_chain,
assert_equal,
start_nodes,
connect_nodes_bi,
sync_blocks,
@@ -32,21 +31,26 @@ from .authproxy import JSONRPCException

class BitcoinTestFramework(object):

# These may be over-ridden by subclasses:
def __init__(self):
self.num_nodes = 4
self.setup_clean_chain = False
self.nodes = None

def run_test(self):
for node in self.nodes:
assert_equal(node.getblockcount(), 200)
assert_equal(node.getbalance(), 25*50)
raise NotImplementedError

def add_options(self, parser):
pass

def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain(self.options.tmpdir)
if self.setup_clean_chain:
initialize_chain_clean(self.options.tmpdir, self.num_nodes)
else:
initialize_chain(self.options.tmpdir, self.num_nodes)

def setup_nodes(self):
return start_nodes(4, self.options.tmpdir)
return start_nodes(self.num_nodes, self.options.tmpdir)

def setup_network(self, split = False):
self.nodes = self.setup_nodes()
@@ -181,9 +185,10 @@ class BitcoinTestFramework(object):

class ComparisonTestFramework(BitcoinTestFramework):

# Can override the num_nodes variable to indicate how many nodes to run.
def __init__(self):
super().__init__()
self.num_nodes = 2
self.setup_clean_chain = True

def add_options(self, parser):
parser.add_option("--testbinary", dest="testbinary",
@@ -193,10 +198,6 @@ class ComparisonTestFramework(BitcoinTestFramework):
default=os.getenv("BITCOIND", "bitcoind"),
help="bitcoind binary to use for reference nodes (if any)")

def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, self.num_nodes)

def setup_network(self):
self.nodes = start_nodes(
self.num_nodes, self.options.tmpdir,

+ 20
- 13
qa/rpc-tests/test_framework/util.py View File

@@ -182,24 +182,28 @@ def wait_for_bitcoind_start(process, url, i):
raise # unkown JSON RPC exception
time.sleep(0.25)

def initialize_chain(test_dir):
def initialize_chain(test_dir, num_nodes):
"""
Create (or copy from cache) a 200-block-long chain and
4 wallets.
Create a cache of a 200-block-long chain (with wallet) for MAX_NODES
Afterward, create num_nodes copies from the cache
"""

if (not os.path.isdir(os.path.join("cache","node0"))
or not os.path.isdir(os.path.join("cache","node1"))
or not os.path.isdir(os.path.join("cache","node2"))
or not os.path.isdir(os.path.join("cache","node3"))):
assert num_nodes <= MAX_NODES
create_cache = False
for i in range(MAX_NODES):
if not os.path.isdir(os.path.join('cache', 'node'+str(i))):
create_cache = True
break

if create_cache:

#find and delete old cache directories if any exist
for i in range(4):
for i in range(MAX_NODES):
if os.path.isdir(os.path.join("cache","node"+str(i))):
shutil.rmtree(os.path.join("cache","node"+str(i)))

# Create cache directories, run bitcoinds:
for i in range(4):
for i in range(MAX_NODES):
datadir=initialize_datadir("cache", i)
args = [ os.getenv("BITCOIND", "bitcoind"), "-server", "-keypool=1", "-datadir="+datadir, "-discover=0" ]
if i > 0:
@@ -212,15 +216,18 @@ def initialize_chain(test_dir):
print("initialize_chain: RPC succesfully started")

rpcs = []
for i in range(4):
for i in range(MAX_NODES):
try:
rpcs.append(get_rpc_proxy(rpc_url(i), i))
except:
sys.stderr.write("Error connecting to "+url+"\n")
sys.exit(1)

# Create a 200-block-long chain; each of the 4 nodes
# Create a 200-block-long chain; each of the 4 first nodes
# gets 25 mature blocks and 25 immature.
# Note: To preserve compatibility with older versions of
# initialize_chain, only 4 nodes will generate coins.
#
# blocks are created with timestamps 10 minutes apart
# starting from 2010 minutes in the past
enable_mocktime()
@@ -238,13 +245,13 @@ def initialize_chain(test_dir):
stop_nodes(rpcs)
wait_bitcoinds()
disable_mocktime()
for i in range(4):
for i in range(MAX_NODES):
os.remove(log_filename("cache", i, "debug.log"))
os.remove(log_filename("cache", i, "db.log"))
os.remove(log_filename("cache", i, "peers.dat"))
os.remove(log_filename("cache", i, "fee_estimates.dat"))

for i in range(4):
for i in range(num_nodes):
from_dir = os.path.join("cache", "node"+str(i))
to_dir = os.path.join(test_dir, "node"+str(i))
shutil.copytree(from_dir, to_dir)

+ 5
- 0
qa/rpc-tests/txn_clone.py View File

@@ -12,6 +12,11 @@ from test_framework.util import *

class TxnMallTest(BitcoinTestFramework):

def __init__(self):
super().__init__()
self.num_nodes = 4
self.setup_clean_chain = False

def add_options(self, parser):
parser.add_option("--mineblock", dest="mine_block", default=False, action="store_true",
help="Test double-spend of 1-confirmed transaction")

+ 5
- 0
qa/rpc-tests/txn_doublespend.py View File

@@ -12,6 +12,11 @@ from test_framework.util import *

class TxnMallTest(BitcoinTestFramework):

def __init__(self):
super().__init__()
self.num_nodes = 4
self.setup_clean_chain = False

def add_options(self, parser):
parser.add_option("--mineblock", dest="mine_block", default=False, action="store_true",
help="Test double-spend of 1-confirmed transaction")

+ 4
- 3
qa/rpc-tests/wallet.py View File

@@ -19,9 +19,10 @@ class WalletTest (BitcoinTestFramework):
raise AssertionError("Fee of %s BTC too high! (Should be %s BTC)"%(str(fee), str(target_fee)))
return curr_balance

def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 4)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 4

def setup_network(self, split=False):
self.nodes = start_nodes(3, self.options.tmpdir)

+ 5
- 4
qa/rpc-tests/walletbackup.py View File

@@ -41,15 +41,16 @@ logging.basicConfig(format='%(levelname)s: %(message)s', level=logging.INFO, str

class WalletBackupTest(BitcoinTestFramework):

def setup_chain(self):
logging.info("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 4)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 4

# This mirrors how the network was setup in the bash test
def setup_network(self, split=False):
# nodes 1, 2,3 are spenders, let's give them a keypool=100
extra_args = [["-keypool=100"], ["-keypool=100"], ["-keypool=100"], []]
self.nodes = start_nodes(4, self.options.tmpdir, extra_args)
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir, extra_args)
connect_nodes(self.nodes[0], 3)
connect_nodes(self.nodes[1], 3)
connect_nodes(self.nodes[2], 3)

+ 5
- 4
qa/rpc-tests/zapwallettxes.py View File

@@ -9,12 +9,13 @@ from test_framework.util import *

class ZapWalletTXesTest (BitcoinTestFramework):

def setup_chain(self):
print("Initializing test directory "+self.options.tmpdir)
initialize_chain_clean(self.options.tmpdir, 3)
def __init__(self):
super().__init__()
self.setup_clean_chain = True
self.num_nodes = 3

def setup_network(self, split=False):
self.nodes = start_nodes(3, self.options.tmpdir)
self.nodes = start_nodes(self.num_nodes, self.options.tmpdir)
connect_nodes_bi(self.nodes,0,1)
connect_nodes_bi(self.nodes,1,2)
connect_nodes_bi(self.nodes,0,2)

+ 5
- 1
qa/rpc-tests/zmq_test.py View File

@@ -17,6 +17,10 @@ import urllib.parse

class ZMQTest (BitcoinTestFramework):

def __init__(self):
super().__init__()
self.num_nodes = 4

port = 28332

def setup_nodes(self):
@@ -25,7 +29,7 @@ class ZMQTest (BitcoinTestFramework):
self.zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"hashblock")
self.zmqSubSocket.setsockopt(zmq.SUBSCRIBE, b"hashtx")
self.zmqSubSocket.connect("tcp://127.0.0.1:%i" % self.port)
return start_nodes(4, self.options.tmpdir, extra_args=[
return start_nodes(self.num_nodes, self.options.tmpdir, extra_args=[
['-zmqpubhashtx=tcp://127.0.0.1:'+str(self.port), '-zmqpubhashblock=tcp://127.0.0.1:'+str(self.port)],
[],
[],

Loading…
Cancel
Save