mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-08 10:31:50 -05:00
79 lines
2.6 KiB
Python
79 lines
2.6 KiB
Python
![]() |
#!/usr/bin/env python3
|
||
|
# Copyright (c) 2018-2019 The Bitcoin Core developers
|
||
|
# Distributed under the MIT software license, see the accompanying
|
||
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||
|
"""Backwards compatibility functional test
|
||
|
|
||
|
Test various backwards compatibility scenarios. Download the previous node binaries:
|
||
|
|
||
|
contrib/devtools/previous_release.sh -b v0.18.1 v0.17.1
|
||
|
|
||
|
Due to RPC changes introduced in various versions the below tests
|
||
|
won't work for older versions without some patches or workarounds.
|
||
|
|
||
|
Use only the latest patch version of each release, unless a test specifically
|
||
|
needs an older patch version.
|
||
|
"""
|
||
|
|
||
|
import os
|
||
|
|
||
|
from test_framework.test_framework import BitcoinTestFramework, SkipTest
|
||
|
|
||
|
from test_framework.util import (
|
||
|
assert_equal,
|
||
|
sync_blocks
|
||
|
)
|
||
|
|
||
|
class BackwardsCompatibilityTest(BitcoinTestFramework):
|
||
|
def set_test_params(self):
|
||
|
self.setup_clean_chain = True
|
||
|
self.num_nodes = 4
|
||
|
# Add new version after each release:
|
||
|
self.extra_args = [
|
||
|
[], # Pre-release: use to mine blocks
|
||
|
[], # Pre-release: use to receive coins, swap wallets, etc
|
||
|
[], # v0.18.1
|
||
|
[] # v0.17.1
|
||
|
]
|
||
|
|
||
|
def setup_nodes(self):
|
||
|
if os.getenv("TEST_PREVIOUS_RELEASES") == "false":
|
||
|
raise SkipTest("backwards compatibility tests")
|
||
|
|
||
|
releases_path = os.getenv("PREVIOUS_RELEASES_DIR") or os.getcwd() + "/releases"
|
||
|
if not os.path.isdir(releases_path):
|
||
|
if os.getenv("TEST_PREVIOUS_RELEASES") == "true":
|
||
|
raise AssertionError("TEST_PREVIOUS_RELEASES=1 but releases missing: " + releases_path)
|
||
|
raise SkipTest("This test requires binaries for previous releases")
|
||
|
|
||
|
self.add_nodes(self.num_nodes, extra_args=self.extra_args, versions=[
|
||
|
None,
|
||
|
None,
|
||
|
180100,
|
||
|
170100
|
||
|
], binary=[
|
||
|
self.options.bitcoind,
|
||
|
self.options.bitcoind,
|
||
|
releases_path + "/v0.18.1/bin/bitcoind",
|
||
|
releases_path + "/v0.17.1/bin/bitcoind"
|
||
|
], binary_cli=[
|
||
|
self.options.bitcoincli,
|
||
|
self.options.bitcoincli,
|
||
|
releases_path + "/v0.18.1/bin/bitcoin-cli",
|
||
|
releases_path + "/v0.17.1/bin/bitcoin-cli"
|
||
|
])
|
||
|
|
||
|
self.start_nodes()
|
||
|
|
||
|
def run_test(self):
|
||
|
self.nodes[0].generate(101)
|
||
|
|
||
|
sync_blocks(self.nodes)
|
||
|
|
||
|
# Sanity check the test framework:
|
||
|
res = self.nodes[self.num_nodes - 1].getblockchaininfo()
|
||
|
assert_equal(res['blocks'], 101)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
BackwardsCompatibilityTest().main()
|