d6dc3403d8
If FP_DEVICE_EMULATION is set, then switch to using predictable EC ephemeral key and random numbers. This should allow recording and replaying real device interactions using umockdev.
278 lines
7.8 KiB
Meson
278 lines
7.8 KiB
Meson
envs = environment()
|
|
# Enable debug messages and abort on warnings
|
|
envs.set('G_DEBUG', 'fatal-warnings')
|
|
envs.set('G_MESSAGES_DEBUG', 'all')
|
|
|
|
# Setup paths
|
|
envs.set('MESON_SOURCE_ROOT', meson.source_root())
|
|
envs.set('MESON_BUILD_ROOT', meson.build_root())
|
|
envs.prepend('LD_LIBRARY_PATH', join_paths(meson.build_root(), 'libfprint'))
|
|
|
|
# Set FP_DEVICE_EMULATION so that drivers can adapt (e.g. to use fixed
|
|
# random numbers rather than proper ones)
|
|
envs.set('FP_DEVICE_EMULATION', '1')
|
|
|
|
# Path to SDCP virtual device binary, only used for virtual-sdcp test
|
|
envs.set('SDCP_VIRT_BINARY', get_option('sdcp_virt_binary'))
|
|
|
|
# Set a colon-separated list of native drivers we enable in tests
|
|
envs.set('FP_DRIVERS_WHITELIST', ':'.join([
|
|
'virtual_image',
|
|
'virtual_device',
|
|
'virtual_device_storage',
|
|
]))
|
|
|
|
envs.set('NO_AT_BRIDGE', '1')
|
|
|
|
drivers_tests = [
|
|
'aes3500',
|
|
'elan',
|
|
'elanspi',
|
|
'synaptics',
|
|
'vfs0050',
|
|
'vfs301',
|
|
'vfs5011',
|
|
'vfs7552',
|
|
'goodixmoc',
|
|
'nb1010',
|
|
]
|
|
|
|
if get_option('introspection')
|
|
envs.prepend('GI_TYPELIB_PATH', join_paths(meson.build_root(), 'libfprint'))
|
|
virtual_devices_tests = [
|
|
'virtual-image',
|
|
'virtual-device',
|
|
]
|
|
|
|
unittest_inspector = find_program('unittest_inspector.py')
|
|
|
|
foreach vdtest: virtual_devices_tests
|
|
driver_name = '_'.join(vdtest.split('-'))
|
|
if driver_name in drivers
|
|
python3 = find_program('python3')
|
|
base_args = files(vdtest + '.py')
|
|
suite = ['virtual-driver']
|
|
|
|
r = run_command(unittest_inspector, files(vdtest + '.py'))
|
|
unit_tests = r.stdout().strip().split('\n')
|
|
|
|
if r.returncode() == 0 and unit_tests.length() > 0
|
|
suite += vdtest
|
|
else
|
|
unit_tests = [vdtest]
|
|
endif
|
|
|
|
foreach ut: unit_tests
|
|
ut_suite = suite
|
|
ut_args = base_args
|
|
if unit_tests.length() > 1
|
|
ut_args += ut
|
|
ut_suite += ut.split('.')[0]
|
|
endif
|
|
test(ut,
|
|
python3,
|
|
args: ut_args,
|
|
suite: ut_suite,
|
|
depends: libfprint_typelib,
|
|
env: envs,
|
|
)
|
|
endforeach
|
|
else
|
|
test(vdtest,
|
|
find_program('sh'),
|
|
args: ['-c', 'exit 77']
|
|
)
|
|
endif
|
|
endforeach
|
|
|
|
if 'virtual_sdcp' in drivers and get_option('sdcp_virt_binary') != ''
|
|
python3 = find_program('python3')
|
|
unittest_inspector = find_program('unittest_inspector.py')
|
|
base_args = files('virtual-sdcp.py')
|
|
suite = []
|
|
|
|
r = run_command(unittest_inspector, files('virtual-sdcp.py'))
|
|
unit_tests = r.stdout().strip().split('\n')
|
|
|
|
if r.returncode() == 0 and unit_tests.length() > 0
|
|
suite += 'virtual-sdcp'
|
|
else
|
|
unit_tests = ['virtual-sdcp']
|
|
endif
|
|
|
|
sdcp_envs = envs
|
|
sdcp_envs.set('FP_DEVICE_EMULATION', '0')
|
|
foreach ut: unit_tests
|
|
ut_suite = suite
|
|
ut_args = base_args
|
|
if unit_tests.length() > 1
|
|
ut_args += ut
|
|
ut_suite += ut.split('.')[0]
|
|
endif
|
|
test(ut,
|
|
python3,
|
|
args: ut_args,
|
|
suite: ut_suite,
|
|
depends: libfprint_typelib,
|
|
env: sdcp_envs,
|
|
)
|
|
endforeach
|
|
else
|
|
test('virtual-sdcp',
|
|
find_program('sh'),
|
|
args: ['-c', 'exit 77']
|
|
)
|
|
endif
|
|
|
|
foreach driver_test: drivers_tests
|
|
if driver_test.contains('-')
|
|
driver_name = driver_test.split('-')[0]
|
|
else
|
|
driver_name = driver_test
|
|
endif
|
|
driver_envs = envs
|
|
driver_envs.set('FP_DRIVERS_WHITELIST', driver_name)
|
|
|
|
if (driver_name in supported_drivers and
|
|
gusb_dep.version().version_compare('>= 0.3.0'))
|
|
test(driver_test,
|
|
find_program('umockdev-test.py'),
|
|
args: join_paths(meson.current_source_dir(), driver_test),
|
|
env: driver_envs,
|
|
suite: ['drivers'],
|
|
timeout: 15,
|
|
depends: libfprint_typelib,
|
|
)
|
|
else
|
|
test(driver_test,
|
|
find_program('sh'),
|
|
args: ['-c', 'exit 77']
|
|
)
|
|
endif
|
|
endforeach
|
|
else
|
|
warning('Skipping all driver tests as introspection bindings are missing')
|
|
test('virtual-image',
|
|
find_program('sh'),
|
|
args: ['-c', 'exit 77']
|
|
)
|
|
|
|
foreach driver_test: drivers_tests
|
|
test(driver_test,
|
|
find_program('sh'),
|
|
args: ['-c', 'exit 77']
|
|
)
|
|
endforeach
|
|
endif
|
|
|
|
test_utils = static_library('fprint-test-utils',
|
|
sources: [
|
|
'test-utils.c',
|
|
'test-device-fake.c',
|
|
],
|
|
dependencies: libfprint_private_dep,
|
|
install: false)
|
|
|
|
unit_tests = [
|
|
'fpi-device',
|
|
'fpi-ssm',
|
|
'fpi-assembling',
|
|
]
|
|
|
|
if 'virtual_image' in drivers
|
|
unit_tests += [
|
|
'fp-context',
|
|
'fp-device',
|
|
]
|
|
endif
|
|
|
|
unit_tests_deps = { 'fpi-assembling' : [cairo_dep] }
|
|
|
|
test_config = configuration_data()
|
|
test_config.set_quoted('SOURCE_ROOT', meson.source_root())
|
|
test_config_h = configure_file(output: 'test-config.h', configuration: test_config)
|
|
|
|
foreach test_name: unit_tests
|
|
if unit_tests_deps.has_key(test_name)
|
|
missing_deps = false
|
|
foreach dep: unit_tests_deps[test_name]
|
|
if not dep.found()
|
|
missing_deps = true
|
|
break
|
|
endif
|
|
endforeach
|
|
|
|
if missing_deps
|
|
# Create a dummy test that always skips instead
|
|
warning('Test @0@ cannot be compiled due to missing dependencies'.format(test_name))
|
|
test(test_name,
|
|
find_program('sh'),
|
|
suite: ['unit-tests'],
|
|
args: ['-c', 'exit 77'],
|
|
)
|
|
continue
|
|
endif
|
|
extra_deps = unit_tests_deps[test_name]
|
|
else
|
|
extra_deps = []
|
|
endif
|
|
|
|
basename = 'test-' + test_name
|
|
test_exe = executable(basename,
|
|
sources: [basename + '.c', test_config_h],
|
|
dependencies: [ libfprint_private_dep ] + extra_deps,
|
|
c_args: common_cflags,
|
|
link_with: test_utils,
|
|
)
|
|
test(test_name,
|
|
test_exe,
|
|
suite: ['unit-tests'],
|
|
env: envs,
|
|
)
|
|
endforeach
|
|
|
|
# Run udev rule generator with fatal warnings
|
|
envs.set('UDEV_HWDB', udev_hwdb.full_path())
|
|
envs.set('UDEV_HWDB_CHECK_CONTENTS', default_drivers_are_enabled ? '1' : '0')
|
|
test('udev-hwdb',
|
|
find_program('test-generated-hwdb.sh'),
|
|
env: envs)
|
|
|
|
gdb = find_program('gdb', required: false)
|
|
if gdb.found()
|
|
libfprint_wrapper = [
|
|
gdb.path(),
|
|
'-batch',
|
|
'-ex', 'run',
|
|
'--args',
|
|
]
|
|
add_test_setup('gdb',
|
|
timeout_multiplier: 1000,
|
|
exe_wrapper: libfprint_wrapper,
|
|
env: [
|
|
'LIBFPRINT_TEST_WRAPPER=' + ' '.join(libfprint_wrapper),
|
|
])
|
|
endif
|
|
|
|
valgrind = find_program('valgrind', required: false)
|
|
if valgrind.found()
|
|
glib_share = glib_dep.get_pkgconfig_variable('prefix') / 'share' / glib_dep.name()
|
|
glib_suppressions = glib_share + '/valgrind/glib.supp'
|
|
python_suppressions = '@0@/@1@'.format(meson.source_root(),
|
|
files('valgrind-python.supp')[0])
|
|
libfprint_wrapper = [
|
|
valgrind.path(),
|
|
'--tool=memcheck',
|
|
'--leak-check=full',
|
|
'--suppressions=' + glib_suppressions,
|
|
'--suppressions=' + python_suppressions,
|
|
]
|
|
add_test_setup('valgrind',
|
|
timeout_multiplier: 10,
|
|
exe_wrapper: libfprint_wrapper,
|
|
env: [
|
|
'G_SLICE=always-malloc',
|
|
'UNDER_VALGRIND=1',
|
|
'LIBFPRINT_TEST_WRAPPER=' + ' '.join(libfprint_wrapper),
|
|
])
|
|
endif
|