mirror of
https://github.com/Retropex/bitcoin.git
synced 2025-05-17 21:50:43 +02:00
test: Run framework unit tests in parallel
Reorganize functional test framework unit tests to run in parallel with other functional tests. The option `skipunit` is removed, since unit tests no longer delay functional test execution. Unit tests are run by default when running all tests, and can be run explicitly with `feature_framework_unit_tests.py` when running a subset of tests.
This commit is contained in:
parent
a7129f827c
commit
f19f0a2e5a
50
test/functional/feature_framework_unit_tests.py
Executable file
50
test/functional/feature_framework_unit_tests.py
Executable file
@ -0,0 +1,50 @@
|
|||||||
|
#!/usr/bin/env python3
|
||||||
|
# Copyright (c) 2017-2024 The Bitcoin Core developers
|
||||||
|
# Distributed under the MIT software license, see the accompanying
|
||||||
|
# file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||||
|
"""Framework unit tests
|
||||||
|
|
||||||
|
Unit tests for the test framework.
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sys
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from test_framework.test_framework import TEST_EXIT_PASSED, TEST_EXIT_FAILED
|
||||||
|
|
||||||
|
# List of framework modules containing unit tests. Should be kept in sync with
|
||||||
|
# the output of `git grep unittest.TestCase ./test/functional/test_framework`
|
||||||
|
TEST_FRAMEWORK_MODULES = [
|
||||||
|
"address",
|
||||||
|
"crypto.bip324_cipher",
|
||||||
|
"blocktools",
|
||||||
|
"crypto.chacha20",
|
||||||
|
"crypto.ellswift",
|
||||||
|
"key",
|
||||||
|
"messages",
|
||||||
|
"crypto.muhash",
|
||||||
|
"crypto.poly1305",
|
||||||
|
"crypto.ripemd160",
|
||||||
|
"script",
|
||||||
|
"segwit_addr",
|
||||||
|
"wallet_util",
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def run_unit_tests():
|
||||||
|
test_framework_tests = unittest.TestSuite()
|
||||||
|
for module in TEST_FRAMEWORK_MODULES:
|
||||||
|
test_framework_tests.addTest(
|
||||||
|
unittest.TestLoader().loadTestsFromName(f"test_framework.{module}")
|
||||||
|
)
|
||||||
|
result = unittest.TextTestRunner(stream=sys.stdout, verbosity=1, failfast=True).run(
|
||||||
|
test_framework_tests
|
||||||
|
)
|
||||||
|
if not result.wasSuccessful():
|
||||||
|
sys.exit(TEST_EXIT_FAILED)
|
||||||
|
sys.exit(TEST_EXIT_PASSED)
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
run_unit_tests()
|
||||||
|
|
@ -26,7 +26,6 @@ import sys
|
|||||||
import tempfile
|
import tempfile
|
||||||
import re
|
import re
|
||||||
import logging
|
import logging
|
||||||
import unittest
|
|
||||||
|
|
||||||
os.environ["REQUIRE_WALLET_TYPE_SET"] = "1"
|
os.environ["REQUIRE_WALLET_TYPE_SET"] = "1"
|
||||||
|
|
||||||
@ -70,23 +69,7 @@ if platform.system() != 'Windows' or sys.getwindowsversion() >= (10, 0, 14393):
|
|||||||
TEST_EXIT_PASSED = 0
|
TEST_EXIT_PASSED = 0
|
||||||
TEST_EXIT_SKIPPED = 77
|
TEST_EXIT_SKIPPED = 77
|
||||||
|
|
||||||
# List of framework modules containing unit tests. Should be kept in sync with
|
TEST_FRAMEWORK_UNIT_TESTS = 'feature_framework_unit_tests.py'
|
||||||
# the output of `git grep unittest.TestCase ./test/functional/test_framework`
|
|
||||||
TEST_FRAMEWORK_MODULES = [
|
|
||||||
"address",
|
|
||||||
"crypto.bip324_cipher",
|
|
||||||
"blocktools",
|
|
||||||
"crypto.chacha20",
|
|
||||||
"crypto.ellswift",
|
|
||||||
"key",
|
|
||||||
"messages",
|
|
||||||
"crypto.muhash",
|
|
||||||
"crypto.poly1305",
|
|
||||||
"crypto.ripemd160",
|
|
||||||
"script",
|
|
||||||
"segwit_addr",
|
|
||||||
"wallet_util",
|
|
||||||
]
|
|
||||||
|
|
||||||
EXTENDED_SCRIPTS = [
|
EXTENDED_SCRIPTS = [
|
||||||
# These tests are not run by default.
|
# These tests are not run by default.
|
||||||
@ -255,6 +238,7 @@ BASE_SCRIPTS = [
|
|||||||
'wallet_keypool.py --descriptors',
|
'wallet_keypool.py --descriptors',
|
||||||
'wallet_descriptor.py --descriptors',
|
'wallet_descriptor.py --descriptors',
|
||||||
'p2p_nobloomfilter_messages.py',
|
'p2p_nobloomfilter_messages.py',
|
||||||
|
TEST_FRAMEWORK_UNIT_TESTS,
|
||||||
'p2p_filter.py',
|
'p2p_filter.py',
|
||||||
'rpc_setban.py --v1transport',
|
'rpc_setban.py --v1transport',
|
||||||
'rpc_setban.py --v2transport',
|
'rpc_setban.py --v2transport',
|
||||||
@ -440,7 +424,6 @@ def main():
|
|||||||
parser.add_argument('--tmpdirprefix', '-t', default=tempfile.gettempdir(), help="Root directory for datadirs")
|
parser.add_argument('--tmpdirprefix', '-t', default=tempfile.gettempdir(), help="Root directory for datadirs")
|
||||||
parser.add_argument('--failfast', '-F', action='store_true', help='stop execution after the first test failure')
|
parser.add_argument('--failfast', '-F', action='store_true', help='stop execution after the first test failure')
|
||||||
parser.add_argument('--filter', help='filter scripts to run by regular expression')
|
parser.add_argument('--filter', help='filter scripts to run by regular expression')
|
||||||
parser.add_argument('--skipunit', '-u', action='store_true', help='skip unit tests for the test framework')
|
|
||||||
|
|
||||||
|
|
||||||
args, unknown_args = parser.parse_known_args()
|
args, unknown_args = parser.parse_known_args()
|
||||||
@ -552,10 +535,9 @@ def main():
|
|||||||
combined_logs_len=args.combinedlogslen,
|
combined_logs_len=args.combinedlogslen,
|
||||||
failfast=args.failfast,
|
failfast=args.failfast,
|
||||||
use_term_control=args.ansi,
|
use_term_control=args.ansi,
|
||||||
skipunit=args.skipunit,
|
|
||||||
)
|
)
|
||||||
|
|
||||||
def run_tests(*, test_list, src_dir, build_dir, tmpdir, jobs=1, enable_coverage=False, args=None, combined_logs_len=0, failfast=False, use_term_control, skipunit=False):
|
def run_tests(*, test_list, src_dir, build_dir, tmpdir, jobs=1, enable_coverage=False, args=None, combined_logs_len=0, failfast=False, use_term_control):
|
||||||
args = args or []
|
args = args or []
|
||||||
|
|
||||||
# Warn if bitcoind is already running
|
# Warn if bitcoind is already running
|
||||||
@ -578,15 +560,6 @@ def run_tests(*, test_list, src_dir, build_dir, tmpdir, jobs=1, enable_coverage=
|
|||||||
# a hard link or a copy on any platform. See https://github.com/bitcoin/bitcoin/pull/27561.
|
# a hard link or a copy on any platform. See https://github.com/bitcoin/bitcoin/pull/27561.
|
||||||
sys.path.append(tests_dir)
|
sys.path.append(tests_dir)
|
||||||
|
|
||||||
if not skipunit:
|
|
||||||
print("Running Unit Tests for Test Framework Modules")
|
|
||||||
test_framework_tests = unittest.TestSuite()
|
|
||||||
for module in TEST_FRAMEWORK_MODULES:
|
|
||||||
test_framework_tests.addTest(unittest.TestLoader().loadTestsFromName("test_framework.{}".format(module)))
|
|
||||||
result = unittest.TextTestRunner(verbosity=1, failfast=True).run(test_framework_tests)
|
|
||||||
if not result.wasSuccessful():
|
|
||||||
sys.exit("Early exiting after failure in TestFramework unit tests")
|
|
||||||
|
|
||||||
flags = ['--cachedir={}'.format(cache_dir)] + args
|
flags = ['--cachedir={}'.format(cache_dir)] + args
|
||||||
|
|
||||||
if enable_coverage:
|
if enable_coverage:
|
||||||
|
Loading…
Reference in New Issue
Block a user