aboutsummaryrefslogtreecommitdiff
path: root/test/functional/test_framework/test_framework.py
diff options
context:
space:
mode:
author0xb10c <0xb10c@gmail.com>2022-02-03 11:25:30 +0100
committer0xb10c <0xb10c@gmail.com>2022-02-20 14:59:08 +0100
commitc934087b627f7d368458781944f990b0eb479634 (patch)
tree823261303dd0f00df57faea41931b5fefcc3c2ee /test/functional/test_framework/test_framework.py
parent5f44c5c428b696af4214b2519cb2bbeb0e4a1027 (diff)
downloadbitcoin-c934087b627f7d368458781944f990b0eb479634.tar.xz
test: checks for tracepoint tests
For testing the USDT tracepoint API in the functional tests we require: - that we are on a Linux system* - that Bitcoin Core is compiled with tracepoints - that bcc and the the Python bcc module [0] is installed - that we run the tests with the required permissions** otherwise we skip the tests. *: We currently only support tracepoints on Linux. Tracepoints are not compiled on other platforms. **: Currently, we check for root permissions via getuid == 0. It's unclear if it's even possible to run the tests a non-root user with e.g. CAP_BPF, CAP_PERFMON, and access to /sys/kernel/debug/ tracing/. Anyone running these tests as root should carefully review them first and then run them in a disposable VM. [0]: https://github.com/iovisor/bcc/blob/master/INSTALL.md
Diffstat (limited to 'test/functional/test_framework/test_framework.py')
-rwxr-xr-xtest/functional/test_framework/test_framework.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/test/functional/test_framework/test_framework.py b/test/functional/test_framework/test_framework.py
index 8f75255caf..165c5b8d83 100755
--- a/test/functional/test_framework/test_framework.py
+++ b/test/functional/test_framework/test_framework.py
@@ -9,6 +9,7 @@ from enum import Enum
import argparse
import logging
import os
+import platform
import pdb
import random
import re
@@ -821,6 +822,29 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
except ImportError:
raise SkipTest("python3-zmq module not available.")
+ def skip_if_no_python_bcc(self):
+ """Attempt to import the bcc package and skip the tests if the import fails."""
+ try:
+ import bcc # type: ignore[import] # noqa: F401
+ except ImportError:
+ raise SkipTest("bcc python module not available")
+
+ def skip_if_no_bitcoind_tracepoints(self):
+ """Skip the running test if bitcoind has not been compiled with USDT tracepoint support."""
+ if not self.is_usdt_compiled():
+ raise SkipTest("bitcoind has not been built with USDT tracepoints enabled.")
+
+ def skip_if_no_bpf_permissions(self):
+ """Skip the running test if we don't have permissions to do BPF syscalls and load BPF maps."""
+ # check for 'root' permissions
+ if os.geteuid() != 0:
+ raise SkipTest("no permissions to use BPF (please review the tests carefully before running them with higher privileges)")
+
+ def skip_if_platform_not_linux(self):
+ """Skip the running test if we are not on a Linux platform"""
+ if platform.system() != "Linux":
+ raise SkipTest("not on a Linux system")
+
def skip_if_no_bitcoind_zmq(self):
"""Skip the running test if bitcoind has not been compiled with zmq support."""
if not self.is_zmq_compiled():
@@ -902,6 +926,10 @@ class BitcoinTestFramework(metaclass=BitcoinTestMetaClass):
"""Checks whether the zmq module was compiled."""
return self.config["components"].getboolean("ENABLE_ZMQ")
+ def is_usdt_compiled(self):
+ """Checks whether the USDT tracepoints were compiled."""
+ return self.config["components"].getboolean("ENABLE_USDT_TRACEPOINTS")
+
def is_sqlite_compiled(self):
"""Checks whether the wallet module was compiled with Sqlite support."""
return self.config["components"].getboolean("USE_SQLITE")