ZTS: Use inbuilt monotonic time

Make the test runner try to use the included python monotonic time
function instead of calling librt.

This makes the test runner work on macos where librt wasn't available.

Reviewed-by: Tino Reichardt <milky-zfs@mcmilk.de>
Signed-off-by: Andrew Innes <andrew.c12@gmail.com>
Closes #14700
This commit is contained in:
Andrew Innes 2023-04-07 01:40:23 +08:00 committed by GitHub
parent a3f82aec93
commit 0b8fdb8ade
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 17 additions and 17 deletions

View File

@ -47,25 +47,25 @@ LOG_OUT = 'LOG_OUT'
LOG_ERR = 'LOG_ERR' LOG_ERR = 'LOG_ERR'
LOG_FILE_OBJ = None LOG_FILE_OBJ = None
try:
from time import monotonic as monotonic_time
except ImportError:
class timespec(ctypes.Structure):
_fields_ = [
('tv_sec', ctypes.c_long),
('tv_nsec', ctypes.c_long)
]
class timespec(ctypes.Structure): librt = ctypes.CDLL('librt.so.1', use_errno=True)
_fields_ = [ clock_gettime = librt.clock_gettime
('tv_sec', ctypes.c_long), clock_gettime.argtypes = [ctypes.c_int, ctypes.POINTER(timespec)]
('tv_nsec', ctypes.c_long)
]
def monotonic_time():
librt = ctypes.CDLL('librt.so.1', use_errno=True) t = timespec()
clock_gettime = librt.clock_gettime if clock_gettime(CLOCK_MONOTONIC, ctypes.pointer(t)) != 0:
clock_gettime.argtypes = [ctypes.c_int, ctypes.POINTER(timespec)] errno_ = ctypes.get_errno()
raise OSError(errno_, os.strerror(errno_))
return t.tv_sec + t.tv_nsec * 1e-9
def monotonic_time():
t = timespec()
if clock_gettime(CLOCK_MONOTONIC, ctypes.pointer(t)) != 0:
errno_ = ctypes.get_errno()
raise OSError(errno_, os.strerror(errno_))
return t.tv_sec + t.tv_nsec * 1e-9
class Result(object): class Result(object):