From fa4d68cf97b6d77dbb559facbc425376e2c51f62 Mon Sep 17 00:00:00 2001 From: MarcoFalke <*~=`'#}+{/-|&$^_@721217.xyz> Date: Sat, 5 Jul 2025 17:42:13 +0200 Subject: [PATCH] Turn rpcauth.py test into functional test --- .github/workflows/ci.yml | 3 -- CMakeLists.txt | 4 +- cmake/tests.cmake | 10 ----- test/CMakeLists.txt | 2 +- test/config.ini.in | 2 +- test/functional/test_runner.py | 1 + .../tool_rpcauth.py} | 42 ++++++++++++------- 7 files changed, 30 insertions(+), 34 deletions(-) delete mode 100644 cmake/tests.cmake rename test/{util/rpcauth-test.py => functional/tool_rpcauth.py} (55%) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1ca841d57c7..168c5793409 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -390,9 +390,6 @@ jobs: (Get-Content "test/config.ini") -replace '(?<=^SRCDIR=).*', '${{ github.workspace }}' -replace '(?<=^BUILDDIR=).*', '${{ github.workspace }}' -replace '(?<=^RPCAUTH=).*', '${{ github.workspace }}/share/rpcauth/rpcauth.py' | Set-Content "test/config.ini" Get-Content "test/config.ini" - - name: Run rpcauth test - run: py -3 test/util/rpcauth-test.py - - name: Set previous release directory run: | echo "PREVIOUS_RELEASES_DIR=${{ runner.temp }}/previous_releases" >> "$GITHUB_ENV" diff --git a/CMakeLists.txt b/CMakeLists.txt index 773c651d284..42552b9613e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -592,7 +592,7 @@ mark_as_advanced(Python3_FIND_FRAMEWORK Python3_FIND_UNVERSIONED_NAMES) find_package(Python3 3.10 COMPONENTS Interpreter) if(NOT TARGET Python3::Interpreter) list(APPEND configure_warnings - "Minimum required Python not found. Rpcauth tests are disabled." + "Minimum required Python not found." ) endif() @@ -636,8 +636,6 @@ add_subdirectory(doc) add_subdirectory(src) -include(cmake/tests.cmake) - include(Maintenance) setup_split_debug_script() add_maintenance_targets() diff --git a/cmake/tests.cmake b/cmake/tests.cmake deleted file mode 100644 index 473be62b288..00000000000 --- a/cmake/tests.cmake +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2023-present The Bitcoin Core developers -# Distributed under the MIT software license, see the accompanying -# file COPYING or https://opensource.org/license/mit/. - -add_test(NAME util_rpcauth_test - COMMAND Python3::Interpreter ${PROJECT_BINARY_DIR}/test/util/rpcauth-test.py -) -set_tests_properties(util_rpcauth_test PROPERTIES - DISABLED $> -) diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index b7fde825604..0b6520a0810 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -37,7 +37,7 @@ file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/fuzz) file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/util) file(GLOB_RECURSE functional_tests RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} functional/*) -foreach(script ${functional_tests} fuzz/test_runner.py util/rpcauth-test.py) +foreach(script ${functional_tests} fuzz/test_runner.py) if(CMAKE_HOST_WIN32) set(symlink) else() diff --git a/test/config.ini.in b/test/config.ini.in index 6865fa8a47d..e66791eb6f0 100644 --- a/test/config.ini.in +++ b/test/config.ini.in @@ -3,7 +3,7 @@ # file COPYING or http://www.opensource.org/licenses/mit-license.php. # These environment variables are set by the build process and read by -# test/*/test_runner.py and test/util/rpcauth-test.py +# test/*/test_runner.py [environment] CLIENT_NAME=@CLIENT_NAME@ diff --git a/test/functional/test_runner.py b/test/functional/test_runner.py index 75a7cca8fc9..44c2885bdf8 100755 --- a/test/functional/test_runner.py +++ b/test/functional/test_runner.py @@ -353,6 +353,7 @@ BASE_SCRIPTS = [ 'rpc_getdescriptorinfo.py', 'rpc_mempool_info.py', 'rpc_help.py', + 'tool_rpcauth.py', 'p2p_handshake.py', 'p2p_handshake.py --v2transport', 'feature_dirsymlinks.py', diff --git a/test/util/rpcauth-test.py b/test/functional/tool_rpcauth.py similarity index 55% rename from test/util/rpcauth-test.py rename to test/functional/tool_rpcauth.py index 8a7ff26dcb2..06cd63254d5 100755 --- a/test/util/rpcauth-test.py +++ b/test/functional/tool_rpcauth.py @@ -1,37 +1,46 @@ #!/usr/bin/env python3 -# Copyright (c) 2015-2018 The Bitcoin Core developers +# Copyright (c) 2015-present The Bitcoin Core developers # Distributed under the MIT software license, see the accompanying # file COPYING or http://www.opensource.org/licenses/mit-license.php. """Test share/rpcauth/rpcauth.py """ -import re -import configparser import hmac import importlib import os +import re import sys -import unittest -class TestRPCAuth(unittest.TestCase): +from test_framework.test_framework import BitcoinTestFramework +from test_framework.util import assert_equal + + +class RpcAuthTest(BitcoinTestFramework): + def set_test_params(self): + self.num_nodes = 0 # No node/datadir needed + + def setup_network(self): + pass + def setUp(self): - config = configparser.ConfigParser() - config_path = os.path.abspath( - os.path.join(os.sep, os.path.abspath(os.path.dirname(__file__)), - "../config.ini")) - with open(config_path, encoding="utf8") as config_file: - config.read_file(config_file) - sys.path.insert(0, os.path.dirname(config['environment']['RPCAUTH'])) + sys.path.insert(0, os.path.dirname(self.config["environment"]["RPCAUTH"])) self.rpcauth = importlib.import_module('rpcauth') + def run_test(self): + self.setUp() + + self.test_generate_salt() + self.test_generate_password() + self.test_check_password_hmac() + def test_generate_salt(self): for i in range(16, 32 + 1): - self.assertEqual(len(self.rpcauth.generate_salt(i)), i * 2) + assert_equal(len(self.rpcauth.generate_salt(i)), i * 2) def test_generate_password(self): """Test that generated passwords only consist of urlsafe characters.""" r = re.compile(r"[0-9a-zA-Z_-]*") password = self.rpcauth.generate_password() - self.assertTrue(r.fullmatch(password)) + assert r.fullmatch(password) def test_check_password_hmac(self): salt = self.rpcauth.generate_salt(16) @@ -41,7 +50,8 @@ class TestRPCAuth(unittest.TestCase): m = hmac.new(salt.encode('utf-8'), password.encode('utf-8'), 'SHA256') expected_password_hmac = m.hexdigest() - self.assertEqual(expected_password_hmac, password_hmac) + assert_equal(expected_password_hmac, password_hmac) + if __name__ == '__main__': - unittest.main() + RpcAuthTest(__file__).main()