feature_framework_testshell.py
1 #!/usr/bin/env python3 2 # Copyright (c) The Bitcoin Core developers 3 # Distributed under the MIT software license, see the accompanying 4 # file COPYING or http://www.opensource.org/licenses/mit-license.php. 5 """Tests for the `TestShell` submodule.""" 6 7 from contextlib import redirect_stdout 8 from decimal import Decimal 9 from io import StringIO 10 from pathlib import Path 11 12 # Note that we need to import from functional test framework modules 13 # *after* extending the Python path via sys.path.insert(0, ...) below, 14 # in order to work with the full symlinked (unresolved) path within the 15 # build directory (usually ./build/test/functional). 16 17 18 # Test matching the minimal example from the documentation. Should be kept 19 # in sync with the interactive shell instructions ('>>> ') in test-shell.md. 20 def run_testshell_doc_example(functional_tests_dir): 21 import sys 22 sys.path.insert(0, functional_tests_dir) 23 from test_framework.test_shell import TestShell 24 from test_framework.util import assert_equal 25 26 test = TestShell().setup(num_nodes=2, setup_clean_chain=True) 27 try: 28 assert test is not None 29 stdout_buf = StringIO() 30 with redirect_stdout(stdout_buf): 31 test2 = TestShell().setup() 32 assert test2 is None 33 assert_equal(stdout_buf.getvalue().rstrip(), "TestShell is already running!") 34 assert_equal(test.nodes[0].getblockchaininfo()["blocks"], 0) 35 if test.is_wallet_compiled(): 36 res = test.nodes[0].createwallet('default') 37 assert_equal(res, {'name': 'default'}) 38 address = test.nodes[0].getnewaddress() 39 res = test.generatetoaddress(test.nodes[0], 101, address) 40 assert_equal(len(res), 101) 41 test.sync_blocks() 42 assert_equal(test.nodes[1].getblockchaininfo()["blocks"], 101) 43 assert_equal(test.nodes[0].getbalance(), Decimal('50.0')) 44 test.nodes[0].log.info("Successfully mined regtest chain!") 45 finally: 46 test.shutdown() 47 test.reset() 48 assert test.num_nodes is None 49 50 51 if __name__ == "__main__": 52 run_testshell_doc_example(str(Path(__file__).parent))