mirror of
https://github.com/Retropex/bitcoin.git
synced 2025-05-13 03:30:42 +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 re
|
||||
import logging
|
||||
import unittest
|
||||
|
||||
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_SKIPPED = 77
|
||||
|
||||
# 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",
|
||||
]
|
||||
TEST_FRAMEWORK_UNIT_TESTS = 'feature_framework_unit_tests.py'
|
||||
|
||||
EXTENDED_SCRIPTS = [
|
||||
# These tests are not run by default.
|
||||
@ -255,6 +238,7 @@ BASE_SCRIPTS = [
|
||||
'wallet_keypool.py --descriptors',
|
||||
'wallet_descriptor.py --descriptors',
|
||||
'p2p_nobloomfilter_messages.py',
|
||||
TEST_FRAMEWORK_UNIT_TESTS,
|
||||
'p2p_filter.py',
|
||||
'rpc_setban.py --v1transport',
|
||||
'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('--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('--skipunit', '-u', action='store_true', help='skip unit tests for the test framework')
|
||||
|
||||
|
||||
args, unknown_args = parser.parse_known_args()
|
||||
@ -552,10 +535,9 @@ def main():
|
||||
combined_logs_len=args.combinedlogslen,
|
||||
failfast=args.failfast,
|
||||
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 []
|
||||
|
||||
# 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.
|
||||
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
|
||||
|
||||
if enable_coverage:
|
||||
|
Loading…
Reference in New Issue
Block a user