[tests] check v0.17.1 and v0.18.1 backwards compatibility

This commit is contained in:
Sjors Provoost
2019-01-05 20:20:42 +01:00
parent ae379cf7d1
commit 8b1460dbd1
10 changed files with 112 additions and 8 deletions

View File

@ -0,0 +1,78 @@
#!/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()