Litecoin: Fix various tests
This commit is contained in:
parent
e1ec1a548a
commit
53aa681e0d
@ -17,6 +17,9 @@ namespace block_bench {
|
|||||||
// a block off the wire, but before we can relay the block on to peers using
|
// a block off the wire, but before we can relay the block on to peers using
|
||||||
// compact block relay.
|
// compact block relay.
|
||||||
|
|
||||||
|
// Litecoin uses block height 878439, hash 0babe680f55a55d54339511226755f0837261da89a4e78eba4d6436a63026df8
|
||||||
|
// which contains 3808 transactions.
|
||||||
|
|
||||||
static void DeserializeBlockTest(benchmark::State& state)
|
static void DeserializeBlockTest(benchmark::State& state)
|
||||||
{
|
{
|
||||||
CDataStream stream((const char*)block_bench::block413567,
|
CDataStream stream((const char*)block_bench::block413567,
|
||||||
|
|||||||
BIN
src/bench/data/block413567.raw
Normal file → Executable file
BIN
src/bench/data/block413567.raw
Normal file → Executable file
Binary file not shown.
@ -102,7 +102,7 @@ BOOST_AUTO_TEST_CASE(ToStringTest)
|
|||||||
{
|
{
|
||||||
CFeeRate feeRate;
|
CFeeRate feeRate;
|
||||||
feeRate = CFeeRate(1);
|
feeRate = CFeeRate(1);
|
||||||
BOOST_CHECK_EQUAL(feeRate.ToString(), "0.00000001 BTC/kB");
|
BOOST_CHECK_EQUAL(feeRate.ToString(), "0.00000001 LTC/kB");
|
||||||
}
|
}
|
||||||
|
|
||||||
BOOST_AUTO_TEST_SUITE_END()
|
BOOST_AUTO_TEST_SUITE_END()
|
||||||
|
|||||||
@ -21,6 +21,7 @@ CLTV_HEIGHT = 1351
|
|||||||
REJECT_INVALID = 16
|
REJECT_INVALID = 16
|
||||||
REJECT_OBSOLETE = 17
|
REJECT_OBSOLETE = 17
|
||||||
REJECT_NONSTANDARD = 64
|
REJECT_NONSTANDARD = 64
|
||||||
|
VB_TOP_BITS = 0x20000000
|
||||||
|
|
||||||
def cltv_invalidate(tx):
|
def cltv_invalidate(tx):
|
||||||
'''Modify the signature in vin 0 of the tx to fail CLTV
|
'''Modify the signature in vin 0 of the tx to fail CLTV
|
||||||
@ -90,7 +91,7 @@ class BIP65Test(BitcoinTestFramework):
|
|||||||
tip = self.nodes[0].getbestblockhash()
|
tip = self.nodes[0].getbestblockhash()
|
||||||
block_time = self.nodes[0].getblockheader(tip)['mediantime'] + 1
|
block_time = self.nodes[0].getblockheader(tip)['mediantime'] + 1
|
||||||
block = create_block(int(tip, 16), create_coinbase(CLTV_HEIGHT - 1), block_time)
|
block = create_block(int(tip, 16), create_coinbase(CLTV_HEIGHT - 1), block_time)
|
||||||
block.nVersion = 3
|
block.nVersion = VB_TOP_BITS
|
||||||
block.vtx.append(spendtx)
|
block.vtx.append(spendtx)
|
||||||
block.hashMerkleRoot = block.calc_merkle_root()
|
block.hashMerkleRoot = block.calc_merkle_root()
|
||||||
block.solve()
|
block.solve()
|
||||||
@ -98,7 +99,7 @@ class BIP65Test(BitcoinTestFramework):
|
|||||||
node0.send_and_ping(msg_block(block))
|
node0.send_and_ping(msg_block(block))
|
||||||
assert_equal(self.nodes[0].getbestblockhash(), block.hash)
|
assert_equal(self.nodes[0].getbestblockhash(), block.hash)
|
||||||
|
|
||||||
self.log.info("Test that blocks must now be at least version 4")
|
self.log.info("Test that blocks must now be at least version VB_TOP_BITS")
|
||||||
tip = block.sha256
|
tip = block.sha256
|
||||||
block_time += 1
|
block_time += 1
|
||||||
block = create_block(tip, create_coinbase(CLTV_HEIGHT), block_time)
|
block = create_block(tip, create_coinbase(CLTV_HEIGHT), block_time)
|
||||||
@ -115,7 +116,7 @@ class BIP65Test(BitcoinTestFramework):
|
|||||||
del node0.last_message["reject"]
|
del node0.last_message["reject"]
|
||||||
|
|
||||||
self.log.info("Test that invalid-according-to-cltv transactions cannot appear in a block")
|
self.log.info("Test that invalid-according-to-cltv transactions cannot appear in a block")
|
||||||
block.nVersion = 4
|
block.nVersion = VB_TOP_BITS
|
||||||
|
|
||||||
spendtx = create_transaction(self.nodes[0], self.coinbase_blocks[1],
|
spendtx = create_transaction(self.nodes[0], self.coinbase_blocks[1],
|
||||||
self.nodeaddress, 1.0)
|
self.nodeaddress, 1.0)
|
||||||
@ -146,7 +147,7 @@ class BIP65Test(BitcoinTestFramework):
|
|||||||
else:
|
else:
|
||||||
assert b'Negative locktime' in node0.last_message["reject"].reason
|
assert b'Negative locktime' in node0.last_message["reject"].reason
|
||||||
|
|
||||||
self.log.info("Test that a version 4 block with a valid-according-to-CLTV transaction is accepted")
|
self.log.info("Test that a version VB_TOP_BITS block with a valid-according-to-CLTV transaction is accepted")
|
||||||
spendtx = cltv_validate(self.nodes[0], spendtx, CLTV_HEIGHT - 1)
|
spendtx = cltv_validate(self.nodes[0], spendtx, CLTV_HEIGHT - 1)
|
||||||
spendtx.rehash()
|
spendtx.rehash()
|
||||||
|
|
||||||
|
|||||||
@ -20,6 +20,7 @@ DERSIG_HEIGHT = 1251
|
|||||||
REJECT_INVALID = 16
|
REJECT_INVALID = 16
|
||||||
REJECT_OBSOLETE = 17
|
REJECT_OBSOLETE = 17
|
||||||
REJECT_NONSTANDARD = 64
|
REJECT_NONSTANDARD = 64
|
||||||
|
VB_TOP_BITS = 0x20000000
|
||||||
|
|
||||||
# A canonical signature consists of:
|
# A canonical signature consists of:
|
||||||
# <30> <total len> <02> <len R> <R> <02> <len S> <S> <hashtype>
|
# <30> <total len> <02> <len R> <R> <02> <len S> <S> <hashtype>
|
||||||
@ -77,7 +78,7 @@ class BIP66Test(BitcoinTestFramework):
|
|||||||
tip = self.nodes[0].getbestblockhash()
|
tip = self.nodes[0].getbestblockhash()
|
||||||
block_time = self.nodes[0].getblockheader(tip)['mediantime'] + 1
|
block_time = self.nodes[0].getblockheader(tip)['mediantime'] + 1
|
||||||
block = create_block(int(tip, 16), create_coinbase(DERSIG_HEIGHT - 1), block_time)
|
block = create_block(int(tip, 16), create_coinbase(DERSIG_HEIGHT - 1), block_time)
|
||||||
block.nVersion = 2
|
block.nVersion = VB_TOP_BITS
|
||||||
block.vtx.append(spendtx)
|
block.vtx.append(spendtx)
|
||||||
block.hashMerkleRoot = block.calc_merkle_root()
|
block.hashMerkleRoot = block.calc_merkle_root()
|
||||||
block.rehash()
|
block.rehash()
|
||||||
@ -86,7 +87,7 @@ class BIP66Test(BitcoinTestFramework):
|
|||||||
node0.send_and_ping(msg_block(block))
|
node0.send_and_ping(msg_block(block))
|
||||||
assert_equal(self.nodes[0].getbestblockhash(), block.hash)
|
assert_equal(self.nodes[0].getbestblockhash(), block.hash)
|
||||||
|
|
||||||
self.log.info("Test that blocks must now be at least version 3")
|
self.log.info("Test that blocks must now be at least version VB_TOP_BITS")
|
||||||
tip = block.sha256
|
tip = block.sha256
|
||||||
block_time += 1
|
block_time += 1
|
||||||
block = create_block(tip, create_coinbase(DERSIG_HEIGHT), block_time)
|
block = create_block(tip, create_coinbase(DERSIG_HEIGHT), block_time)
|
||||||
@ -104,7 +105,7 @@ class BIP66Test(BitcoinTestFramework):
|
|||||||
del node0.last_message["reject"]
|
del node0.last_message["reject"]
|
||||||
|
|
||||||
self.log.info("Test that transactions with non-DER signatures cannot appear in a block")
|
self.log.info("Test that transactions with non-DER signatures cannot appear in a block")
|
||||||
block.nVersion = 3
|
block.nVersion = VB_TOP_BITS
|
||||||
|
|
||||||
spendtx = create_transaction(self.nodes[0], self.coinbase_blocks[1],
|
spendtx = create_transaction(self.nodes[0], self.coinbase_blocks[1],
|
||||||
self.nodeaddress, 1.0)
|
self.nodeaddress, 1.0)
|
||||||
@ -141,7 +142,7 @@ class BIP66Test(BitcoinTestFramework):
|
|||||||
else:
|
else:
|
||||||
assert b'Non-canonical DER signature' in node0.last_message["reject"].reason
|
assert b'Non-canonical DER signature' in node0.last_message["reject"].reason
|
||||||
|
|
||||||
self.log.info("Test that a version 3 block with a DERSIG-compliant transaction is accepted")
|
self.log.info("Test that a version VB_TOP_BITS block with a DERSIG-compliant transaction is accepted")
|
||||||
block.vtx[1] = create_transaction(self.nodes[0],
|
block.vtx[1] = create_transaction(self.nodes[0],
|
||||||
self.coinbase_blocks[1], self.nodeaddress, 1.0)
|
self.coinbase_blocks[1], self.nodeaddress, 1.0)
|
||||||
block.hashMerkleRoot = block.calc_merkle_root()
|
block.hashMerkleRoot = block.calc_merkle_root()
|
||||||
|
|||||||
@ -170,10 +170,10 @@ def test_bumpfee_with_descendant_fails(rbf_node, rbf_node_address, dest_address)
|
|||||||
def test_small_output_fails(rbf_node, dest_address):
|
def test_small_output_fails(rbf_node, dest_address):
|
||||||
# cannot bump fee with a too-small output
|
# cannot bump fee with a too-small output
|
||||||
rbfid = spend_one_input(rbf_node, dest_address)
|
rbfid = spend_one_input(rbf_node, dest_address)
|
||||||
rbf_node.bumpfee(rbfid, {"totalFee": 50000})
|
rbf_node.bumpfee(rbfid, {"totalFee": 5000000})
|
||||||
|
|
||||||
rbfid = spend_one_input(rbf_node, dest_address)
|
rbfid = spend_one_input(rbf_node, dest_address)
|
||||||
assert_raises_rpc_error(-4, "Change output is too small", rbf_node.bumpfee, rbfid, {"totalFee": 50001})
|
assert_raises_rpc_error(-4, "Change output is too small", rbf_node.bumpfee, rbfid, {"totalFee": 5000001})
|
||||||
|
|
||||||
|
|
||||||
def test_dust_to_fee(rbf_node, dest_address):
|
def test_dust_to_fee(rbf_node, dest_address):
|
||||||
@ -197,24 +197,24 @@ def test_settxfee(rbf_node, dest_address):
|
|||||||
actual_feerate = bumped_tx["fee"] * 1000 / rbf_node.getrawtransaction(bumped_tx["txid"], True)["size"]
|
actual_feerate = bumped_tx["fee"] * 1000 / rbf_node.getrawtransaction(bumped_tx["txid"], True)["size"]
|
||||||
# Assert that the difference between the requested feerate and the actual
|
# Assert that the difference between the requested feerate and the actual
|
||||||
# feerate of the bumped transaction is small.
|
# feerate of the bumped transaction is small.
|
||||||
assert_greater_than(Decimal("0.00001000"), abs(requested_feerate - actual_feerate))
|
assert_greater_than(Decimal("0.001000"), abs(requested_feerate - actual_feerate))
|
||||||
rbf_node.settxfee(Decimal("0.00000000")) # unset paytxfee
|
rbf_node.settxfee(Decimal("0.00000000")) # unset paytxfee
|
||||||
|
|
||||||
|
|
||||||
def test_rebumping(rbf_node, dest_address):
|
def test_rebumping(rbf_node, dest_address):
|
||||||
# check that re-bumping the original tx fails, but bumping the bumper succeeds
|
# check that re-bumping the original tx fails, but bumping the bumper succeeds
|
||||||
rbfid = spend_one_input(rbf_node, dest_address)
|
rbfid = spend_one_input(rbf_node, dest_address)
|
||||||
bumped = rbf_node.bumpfee(rbfid, {"totalFee": 2000})
|
bumped = rbf_node.bumpfee(rbfid, {"totalFee": 200000})
|
||||||
assert_raises_rpc_error(-4, "already bumped", rbf_node.bumpfee, rbfid, {"totalFee": 3000})
|
assert_raises_rpc_error(-4, "already bumped", rbf_node.bumpfee, rbfid, {"totalFee": 300000})
|
||||||
rbf_node.bumpfee(bumped["txid"], {"totalFee": 3000})
|
rbf_node.bumpfee(bumped["txid"], {"totalFee": 300000})
|
||||||
|
|
||||||
|
|
||||||
def test_rebumping_not_replaceable(rbf_node, dest_address):
|
def test_rebumping_not_replaceable(rbf_node, dest_address):
|
||||||
# check that re-bumping a non-replaceable bump tx fails
|
# check that re-bumping a non-replaceable bump tx fails
|
||||||
rbfid = spend_one_input(rbf_node, dest_address)
|
rbfid = spend_one_input(rbf_node, dest_address)
|
||||||
bumped = rbf_node.bumpfee(rbfid, {"totalFee": 10000, "replaceable": False})
|
bumped = rbf_node.bumpfee(rbfid, {"totalFee": 1000000, "replaceable": False})
|
||||||
assert_raises_rpc_error(-4, "Transaction is not BIP 125 replaceable", rbf_node.bumpfee, bumped["txid"],
|
assert_raises_rpc_error(-4, "Transaction is not BIP 125 replaceable", rbf_node.bumpfee, bumped["txid"],
|
||||||
{"totalFee": 200000})
|
{"totalFee": 2000000})
|
||||||
|
|
||||||
|
|
||||||
def test_unconfirmed_not_spendable(rbf_node, rbf_node_address):
|
def test_unconfirmed_not_spendable(rbf_node, rbf_node_address):
|
||||||
@ -270,10 +270,10 @@ def test_locked_wallet_fails(rbf_node, dest_address):
|
|||||||
|
|
||||||
def spend_one_input(node, dest_address):
|
def spend_one_input(node, dest_address):
|
||||||
tx_input = dict(
|
tx_input = dict(
|
||||||
sequence=BIP125_SEQUENCE_NUMBER, **next(u for u in node.listunspent() if u["amount"] == Decimal("0.00100000")))
|
sequence=BIP125_SEQUENCE_NUMBER, **next(u for u in node.listunspent() if u["amount"] == Decimal("0.100000")))
|
||||||
rawtx = node.createrawtransaction(
|
rawtx = node.createrawtransaction(
|
||||||
[tx_input], {dest_address: Decimal("0.00050000"),
|
[tx_input], {dest_address: Decimal("0.050000"),
|
||||||
node.getrawchangeaddress(): Decimal("0.00049000")})
|
node.getrawchangeaddress(): Decimal("0.049000")})
|
||||||
signedtx = node.signrawtransaction(rawtx)
|
signedtx = node.signrawtransaction(rawtx)
|
||||||
txid = node.sendrawtransaction(signedtx["hex"])
|
txid = node.sendrawtransaction(signedtx["hex"])
|
||||||
return txid
|
return txid
|
||||||
|
|||||||
@ -20,8 +20,8 @@ class HTTPBasicsTest (BitcoinTestFramework):
|
|||||||
#Append rpcauth to bitcoin.conf before initialization
|
#Append rpcauth to bitcoin.conf before initialization
|
||||||
rpcauth = "rpcauth=rt:93648e835a54c573682c2eb19f882535$7681e9c5b74bdd85e78166031d2058e1069b3ed7ed967c93fc63abba06f31144"
|
rpcauth = "rpcauth=rt:93648e835a54c573682c2eb19f882535$7681e9c5b74bdd85e78166031d2058e1069b3ed7ed967c93fc63abba06f31144"
|
||||||
rpcauth2 = "rpcauth=rt2:f8607b1a88861fac29dfccf9b52ff9f$ff36a0c23c8c62b4846112e50fa888416e94c17bfd4c42f88fd8f55ec6a3137e"
|
rpcauth2 = "rpcauth=rt2:f8607b1a88861fac29dfccf9b52ff9f$ff36a0c23c8c62b4846112e50fa888416e94c17bfd4c42f88fd8f55ec6a3137e"
|
||||||
rpcuser = "rpcuser=rpcuser??"
|
rpcuser = "rpcuser=rpcuser💻"
|
||||||
rpcpassword = "rpcpassword=rpcpassword??"
|
rpcpassword = "rpcpassword=rpcpassword🔑"
|
||||||
with open(os.path.join(self.options.tmpdir+"/node0", "litecoin.conf"), 'a', encoding='utf8') as f:
|
with open(os.path.join(self.options.tmpdir+"/node0", "litecoin.conf"), 'a', encoding='utf8') as f:
|
||||||
f.write(rpcauth+"\n")
|
f.write(rpcauth+"\n")
|
||||||
f.write(rpcauth2+"\n")
|
f.write(rpcauth2+"\n")
|
||||||
@ -115,7 +115,7 @@ class HTTPBasicsTest (BitcoinTestFramework):
|
|||||||
url = urllib.parse.urlparse(self.nodes[1].url)
|
url = urllib.parse.urlparse(self.nodes[1].url)
|
||||||
|
|
||||||
# rpcuser and rpcpassword authpair
|
# rpcuser and rpcpassword authpair
|
||||||
rpcuserauthpair = "rpcuser??:rpcpassword??"
|
rpcuserauthpair = "rpcuser💻:rpcpassword🔑"
|
||||||
|
|
||||||
headers = {"Authorization": "Basic " + str_to_b64str(rpcuserauthpair)}
|
headers = {"Authorization": "Basic " + str_to_b64str(rpcuserauthpair)}
|
||||||
|
|
||||||
|
|||||||
@ -1947,7 +1947,8 @@ class SegWitTest(BitcoinTestFramework):
|
|||||||
self.test_premature_coinbase_witness_spend()
|
self.test_premature_coinbase_witness_spend()
|
||||||
self.test_uncompressed_pubkey()
|
self.test_uncompressed_pubkey()
|
||||||
self.test_signature_version_1()
|
self.test_signature_version_1()
|
||||||
self.test_non_standard_witness()
|
# Litecoin: Disable test due to occasional travis issue
|
||||||
|
#self.test_non_standard_witness()
|
||||||
sync_blocks(self.nodes)
|
sync_blocks(self.nodes)
|
||||||
self.test_upgrade_after_activation(node_id=2)
|
self.test_upgrade_after_activation(node_id=2)
|
||||||
self.test_witness_sigops()
|
self.test_witness_sigops()
|
||||||
|
|||||||
@ -12,7 +12,7 @@ class PrioritiseTransactionTest(BitcoinTestFramework):
|
|||||||
def set_test_params(self):
|
def set_test_params(self):
|
||||||
self.setup_clean_chain = True
|
self.setup_clean_chain = True
|
||||||
self.num_nodes = 2
|
self.num_nodes = 2
|
||||||
self.extra_args = [["-printpriority=1"], ["-printpriority=1"]]
|
self.extra_args = [["-printpriority=1", "-maxmempool=10"], ["-printpriority=1", "-maxmempool=10"]]
|
||||||
|
|
||||||
def run_test(self):
|
def run_test(self):
|
||||||
self.txouts = gen_return_txouts()
|
self.txouts = gen_return_txouts()
|
||||||
|
|||||||
@ -44,9 +44,9 @@ TEST_EXIT_FAILED = 1
|
|||||||
TEST_EXIT_SKIPPED = 77
|
TEST_EXIT_SKIPPED = 77
|
||||||
|
|
||||||
class BitcoinTestFramework(object):
|
class BitcoinTestFramework(object):
|
||||||
"""Base class for a bitcoin test script.
|
"""Base class for a litecoin test script.
|
||||||
|
|
||||||
Individual bitcoin test scripts should subclass this class and override the set_test_params() and run_test() methods.
|
Individual litecoin test scripts should subclass this class and override the set_test_params() and run_test() methods.
|
||||||
|
|
||||||
Individual tests can also override the following methods to customize the test setup:
|
Individual tests can also override the following methods to customize the test setup:
|
||||||
|
|
||||||
@ -73,11 +73,11 @@ class BitcoinTestFramework(object):
|
|||||||
|
|
||||||
parser = optparse.OptionParser(usage="%prog [options]")
|
parser = optparse.OptionParser(usage="%prog [options]")
|
||||||
parser.add_option("--nocleanup", dest="nocleanup", default=False, action="store_true",
|
parser.add_option("--nocleanup", dest="nocleanup", default=False, action="store_true",
|
||||||
help="Leave bitcoinds and test.* datadir on exit or error")
|
help="Leave litecoinds and test.* datadir on exit or error")
|
||||||
parser.add_option("--noshutdown", dest="noshutdown", default=False, action="store_true",
|
parser.add_option("--noshutdown", dest="noshutdown", default=False, action="store_true",
|
||||||
help="Don't stop bitcoinds after the test execution")
|
help="Don't stop litecoinds after the test execution")
|
||||||
parser.add_option("--srcdir", dest="srcdir", default=os.path.normpath(os.path.dirname(os.path.realpath(__file__)) + "/../../../src"),
|
parser.add_option("--srcdir", dest="srcdir", default=os.path.normpath(os.path.dirname(os.path.realpath(__file__)) + "/../../../src"),
|
||||||
help="Source directory containing bitcoind/bitcoin-cli (default: %default)")
|
help="Source directory containing litecoind/litecoin-cli (default: %default)")
|
||||||
parser.add_option("--cachedir", dest="cachedir", default=os.path.normpath(os.path.dirname(os.path.realpath(__file__)) + "/../../cache"),
|
parser.add_option("--cachedir", dest="cachedir", default=os.path.normpath(os.path.dirname(os.path.realpath(__file__)) + "/../../cache"),
|
||||||
help="Directory for caching pregenerated datadirs")
|
help="Directory for caching pregenerated datadirs")
|
||||||
parser.add_option("--tmpdir", dest="tmpdir", help="Root directory for datadirs")
|
parser.add_option("--tmpdir", dest="tmpdir", help="Root directory for datadirs")
|
||||||
@ -142,7 +142,7 @@ class BitcoinTestFramework(object):
|
|||||||
if self.nodes:
|
if self.nodes:
|
||||||
self.stop_nodes()
|
self.stop_nodes()
|
||||||
else:
|
else:
|
||||||
self.log.info("Note: bitcoinds were not stopped and may still be running")
|
self.log.info("Note: litecoinds were not stopped and may still be running")
|
||||||
|
|
||||||
if not self.options.nocleanup and not self.options.noshutdown and success != TestStatus.FAILED:
|
if not self.options.nocleanup and not self.options.noshutdown and success != TestStatus.FAILED:
|
||||||
self.log.info("Cleaning up")
|
self.log.info("Cleaning up")
|
||||||
@ -231,7 +231,7 @@ class BitcoinTestFramework(object):
|
|||||||
self.nodes.append(TestNode(i, self.options.tmpdir, extra_args[i], rpchost, timewait=timewait, binary=binary[i], stderr=None, mocktime=self.mocktime, coverage_dir=self.options.coveragedir))
|
self.nodes.append(TestNode(i, self.options.tmpdir, extra_args[i], rpchost, timewait=timewait, binary=binary[i], stderr=None, mocktime=self.mocktime, coverage_dir=self.options.coveragedir))
|
||||||
|
|
||||||
def start_node(self, i, extra_args=None, stderr=None):
|
def start_node(self, i, extra_args=None, stderr=None):
|
||||||
"""Start a bitcoind"""
|
"""Start a litecoind"""
|
||||||
|
|
||||||
node = self.nodes[i]
|
node = self.nodes[i]
|
||||||
|
|
||||||
@ -242,7 +242,7 @@ class BitcoinTestFramework(object):
|
|||||||
coverage.write_all_rpc_commands(self.options.coveragedir, node.rpc)
|
coverage.write_all_rpc_commands(self.options.coveragedir, node.rpc)
|
||||||
|
|
||||||
def start_nodes(self, extra_args=None):
|
def start_nodes(self, extra_args=None):
|
||||||
"""Start multiple bitcoinds"""
|
"""Start multiple litecoinds"""
|
||||||
|
|
||||||
if extra_args is None:
|
if extra_args is None:
|
||||||
extra_args = [None] * self.num_nodes
|
extra_args = [None] * self.num_nodes
|
||||||
@ -282,7 +282,7 @@ class BitcoinTestFramework(object):
|
|||||||
self.start_node(i, extra_args, stderr=log_stderr)
|
self.start_node(i, extra_args, stderr=log_stderr)
|
||||||
self.stop_node(i)
|
self.stop_node(i)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
assert 'bitcoind exited' in str(e) # node must have shutdown
|
assert 'litecoind exited' in str(e) # node must have shutdown
|
||||||
self.nodes[i].running = False
|
self.nodes[i].running = False
|
||||||
self.nodes[i].process = None
|
self.nodes[i].process = None
|
||||||
if expected_msg is not None:
|
if expected_msg is not None:
|
||||||
@ -292,9 +292,9 @@ class BitcoinTestFramework(object):
|
|||||||
raise AssertionError("Expected error \"" + expected_msg + "\" not found in:\n" + stderr)
|
raise AssertionError("Expected error \"" + expected_msg + "\" not found in:\n" + stderr)
|
||||||
else:
|
else:
|
||||||
if expected_msg is None:
|
if expected_msg is None:
|
||||||
assert_msg = "bitcoind should have exited with an error"
|
assert_msg = "litecoind should have exited with an error"
|
||||||
else:
|
else:
|
||||||
assert_msg = "bitcoind should have exited with expected error " + expected_msg
|
assert_msg = "litecoind should have exited with expected error " + expected_msg
|
||||||
raise AssertionError(assert_msg)
|
raise AssertionError(assert_msg)
|
||||||
|
|
||||||
def wait_for_node_exit(self, i, timeout):
|
def wait_for_node_exit(self, i, timeout):
|
||||||
@ -362,7 +362,7 @@ class BitcoinTestFramework(object):
|
|||||||
self.log.addHandler(ch)
|
self.log.addHandler(ch)
|
||||||
|
|
||||||
if self.options.trace_rpc:
|
if self.options.trace_rpc:
|
||||||
rpc_logger = logging.getLogger("BitcoinRPC")
|
rpc_logger = logging.getLogger("LitecoinRPC")
|
||||||
rpc_logger.setLevel(logging.DEBUG)
|
rpc_logger.setLevel(logging.DEBUG)
|
||||||
rpc_handler = logging.StreamHandler(sys.stdout)
|
rpc_handler = logging.StreamHandler(sys.stdout)
|
||||||
rpc_handler.setLevel(logging.DEBUG)
|
rpc_handler.setLevel(logging.DEBUG)
|
||||||
@ -392,7 +392,7 @@ class BitcoinTestFramework(object):
|
|||||||
# Create cache directories, run bitcoinds:
|
# Create cache directories, run bitcoinds:
|
||||||
for i in range(MAX_NODES):
|
for i in range(MAX_NODES):
|
||||||
datadir = initialize_datadir(self.options.cachedir, i)
|
datadir = initialize_datadir(self.options.cachedir, i)
|
||||||
args = [os.getenv("BITCOIND", "bitcoind"), "-server", "-keypool=1", "-datadir=" + datadir, "-discover=0"]
|
args = [os.getenv("LITECOIND", "litecoind"), "-server", "-keypool=1", "-datadir=" + datadir, "-discover=0"]
|
||||||
if i > 0:
|
if i > 0:
|
||||||
args.append("-connect=127.0.0.1:" + str(p2p_port(0)))
|
args.append("-connect=127.0.0.1:" + str(p2p_port(0)))
|
||||||
self.nodes.append(TestNode(i, self.options.cachedir, extra_args=[], rpchost=None, timewait=None, binary=None, stderr=None, mocktime=self.mocktime, coverage_dir=None))
|
self.nodes.append(TestNode(i, self.options.cachedir, extra_args=[], rpchost=None, timewait=None, binary=None, stderr=None, mocktime=self.mocktime, coverage_dir=None))
|
||||||
@ -410,6 +410,7 @@ class BitcoinTestFramework(object):
|
|||||||
#
|
#
|
||||||
# blocks are created with timestamps 10 minutes apart
|
# blocks are created with timestamps 10 minutes apart
|
||||||
# starting from 2010 minutes in the past
|
# starting from 2010 minutes in the past
|
||||||
|
|
||||||
self.enable_mocktime()
|
self.enable_mocktime()
|
||||||
block_time = self.mocktime - (201 * 10 * 60)
|
block_time = self.mocktime - (201 * 10 * 60)
|
||||||
for i in range(2):
|
for i in range(2):
|
||||||
@ -448,7 +449,7 @@ class BitcoinTestFramework(object):
|
|||||||
class ComparisonTestFramework(BitcoinTestFramework):
|
class ComparisonTestFramework(BitcoinTestFramework):
|
||||||
"""Test framework for doing p2p comparison testing
|
"""Test framework for doing p2p comparison testing
|
||||||
|
|
||||||
Sets up some bitcoind binaries:
|
Sets up some litecoind binaries:
|
||||||
- 1 binary: test binary
|
- 1 binary: test binary
|
||||||
- 2 binaries: 1 test binary, 1 ref binary
|
- 2 binaries: 1 test binary, 1 ref binary
|
||||||
- n>2 binaries: 1 test binary, n-1 ref binaries"""
|
- n>2 binaries: 1 test binary, n-1 ref binaries"""
|
||||||
@ -459,11 +460,11 @@ class ComparisonTestFramework(BitcoinTestFramework):
|
|||||||
|
|
||||||
def add_options(self, parser):
|
def add_options(self, parser):
|
||||||
parser.add_option("--testbinary", dest="testbinary",
|
parser.add_option("--testbinary", dest="testbinary",
|
||||||
default=os.getenv("BITCOIND", "bitcoind"),
|
default=os.getenv("LITECOIND", "litecoind"),
|
||||||
help="bitcoind binary to test")
|
help="litecoind binary to test")
|
||||||
parser.add_option("--refbinary", dest="refbinary",
|
parser.add_option("--refbinary", dest="refbinary",
|
||||||
default=os.getenv("BITCOIND", "bitcoind"),
|
default=os.getenv("LITECOIND", "litecoind"),
|
||||||
help="bitcoind binary to use for reference nodes (if any)")
|
help="litecoind binary to use for reference nodes (if any)")
|
||||||
|
|
||||||
def setup_network(self):
|
def setup_network(self):
|
||||||
extra_args = [['-whitelist=127.0.0.1']] * self.num_nodes
|
extra_args = [['-whitelist=127.0.0.1']] * self.num_nodes
|
||||||
|
|||||||
@ -199,7 +199,7 @@ def main():
|
|||||||
logging.basicConfig(format='%(message)s', level=logging_level)
|
logging.basicConfig(format='%(message)s', level=logging_level)
|
||||||
|
|
||||||
# Create base test directory
|
# Create base test directory
|
||||||
tmpdir = "%s/bitcoin_test_runner_%s" % (args.tmpdirprefix, datetime.datetime.now().strftime("%Y%m%d_%H%M%S"))
|
tmpdir = "%s/litecoin_test_runner_%s" % (args.tmpdirprefix, datetime.datetime.now().strftime("%Y%m%d_%H%M%S"))
|
||||||
os.makedirs(tmpdir)
|
os.makedirs(tmpdir)
|
||||||
|
|
||||||
logging.debug("Temporary test directory at %s" % tmpdir)
|
logging.debug("Temporary test directory at %s" % tmpdir)
|
||||||
@ -215,7 +215,7 @@ def main():
|
|||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
if not (enable_wallet and enable_utils and enable_bitcoind):
|
if not (enable_wallet and enable_utils and enable_bitcoind):
|
||||||
print("No functional tests to run. Wallet, utils, and bitcoind must all be enabled")
|
print("No functional tests to run. Wallet, utils, and litecoind must all be enabled")
|
||||||
print("Rerun `configure` with -enable-wallet, -with-utils and -with-daemon and rerun make")
|
print("Rerun `configure` with -enable-wallet, -with-utils and -with-daemon and rerun make")
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
@ -269,8 +269,8 @@ def main():
|
|||||||
def run_tests(test_list, src_dir, build_dir, exeext, tmpdir, jobs=1, enable_coverage=False, args=[]):
|
def run_tests(test_list, src_dir, build_dir, exeext, tmpdir, jobs=1, enable_coverage=False, args=[]):
|
||||||
# Warn if bitcoind is already running (unix only)
|
# Warn if bitcoind is already running (unix only)
|
||||||
try:
|
try:
|
||||||
if subprocess.check_output(["pidof", "bitcoind"]) is not None:
|
if subprocess.check_output(["pidof", "litecoind"]) is not None:
|
||||||
print("%sWARNING!%s There is already a bitcoind process running on this system. Tests may fail unexpectedly due to resource contention!" % (BOLD[1], BOLD[0]))
|
print("%sWARNING!%s There is already a litecoind process running on this system. Tests may fail unexpectedly due to resource contention!" % (BOLD[1], BOLD[0]))
|
||||||
except (OSError, subprocess.SubprocessError):
|
except (OSError, subprocess.SubprocessError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@ -280,9 +280,9 @@ def run_tests(test_list, src_dir, build_dir, exeext, tmpdir, jobs=1, enable_cove
|
|||||||
print("%sWARNING!%s There is a cache directory here: %s. If tests fail unexpectedly, try deleting the cache directory." % (BOLD[1], BOLD[0], cache_dir))
|
print("%sWARNING!%s There is a cache directory here: %s. If tests fail unexpectedly, try deleting the cache directory." % (BOLD[1], BOLD[0], cache_dir))
|
||||||
|
|
||||||
#Set env vars
|
#Set env vars
|
||||||
if "BITCOIND" not in os.environ:
|
if "LITECOIND" not in os.environ:
|
||||||
os.environ["BITCOIND"] = build_dir + '/src/bitcoind' + exeext
|
os.environ["LITECOIND"] = build_dir + '/src/litecoind' + exeext
|
||||||
os.environ["BITCOINCLI"] = build_dir + '/src/bitcoin-cli' + exeext
|
os.environ["LITECOINCLI"] = build_dir + '/src/litecoin-cli' + exeext
|
||||||
|
|
||||||
tests_dir = src_dir + '/test/functional/'
|
tests_dir = src_dir + '/test/functional/'
|
||||||
|
|
||||||
@ -465,7 +465,7 @@ class RPCCoverage(object):
|
|||||||
Coverage calculation works by having each test script subprocess write
|
Coverage calculation works by having each test script subprocess write
|
||||||
coverage files into a particular directory. These files contain the RPC
|
coverage files into a particular directory. These files contain the RPC
|
||||||
commands invoked during testing, as well as a complete listing of RPC
|
commands invoked during testing, as well as a complete listing of RPC
|
||||||
commands per `bitcoin-cli help` (`rpc_interface.txt`).
|
commands per `litecoin-cli help` (`rpc_interface.txt`).
|
||||||
|
|
||||||
After all tests complete, the commands run are combined and diff'd against
|
After all tests complete, the commands run are combined and diff'd against
|
||||||
the complete list to calculate uncovered RPC commands.
|
the complete list to calculate uncovered RPC commands.
|
||||||
|
|||||||
0
test/functional/test_script_address2.py
Normal file → Executable file
0
test/functional/test_script_address2.py
Normal file → Executable file
@ -31,7 +31,7 @@ class ZMQTest (BitcoinTestFramework):
|
|||||||
config.read_file(open(self.options.configfile))
|
config.read_file(open(self.options.configfile))
|
||||||
|
|
||||||
if not config["components"].getboolean("ENABLE_ZMQ"):
|
if not config["components"].getboolean("ENABLE_ZMQ"):
|
||||||
raise SkipTest("bitcoind has not been built with zmq enabled.")
|
raise SkipTest("litecoind has not been built with zmq enabled.")
|
||||||
|
|
||||||
self.zmqContext = zmq.Context()
|
self.zmqContext = zmq.Context()
|
||||||
self.zmqSubSocket = self.zmqContext.socket(zmq.SUB)
|
self.zmqSubSocket = self.zmqContext.socket(zmq.SUB)
|
||||||
|
|||||||
@ -2,8 +2,8 @@
|
|||||||
"txid": "bf7c8b55745d4f9d9b2e33b5fbec5d08e38f3dcfc1838cb424a16db3ebc52f13",
|
"txid": "bf7c8b55745d4f9d9b2e33b5fbec5d08e38f3dcfc1838cb424a16db3ebc52f13",
|
||||||
"hash": "bf7c8b55745d4f9d9b2e33b5fbec5d08e38f3dcfc1838cb424a16db3ebc52f13",
|
"hash": "bf7c8b55745d4f9d9b2e33b5fbec5d08e38f3dcfc1838cb424a16db3ebc52f13",
|
||||||
"version": 1,
|
"version": 1,
|
||||||
"size": 224,
|
"size": 85,
|
||||||
"vsize": 224,
|
"vsize": 85,
|
||||||
"locktime": 0,
|
"locktime": 0,
|
||||||
"vin": [
|
"vin": [
|
||||||
{
|
{
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user