xdg-desktop-portal test suite
Unit tests
This directory contains a number of unit tests. The tests are written in C and are using the glib testing framework (https://docs.gtk.org/glib/testing.html).
The files follow the pattern test-$NAME.c and are compiled by meson. The tests
can be run with meson test --suite unit.
Integration tests
The integration tests usually test a specific portal in a fully integrated environment. The tests are written in python using the pytest framework.
The files follow the pattern test_$NAME.py. The tests can be run with
meson test --suite integration or with run-test.sh in the source directory.
The environment is being set up by fixtures in conftest.py which can be
overwritten or parameterized by the tests themselves. There are a bunch of
convenient functions and classes in __init__.py. The portal backends are
implemented using dbusmock templates in the templates directory.
Environment
Some environment variables need to be set for the integration tests to function properly and the harness will refuse to launch if they are not set. If the harness is executed by meson or run-test.sh, they will be set automatically.
-
XDG_DESKTOP_PORTAL_PATH: The path to the xdg-desktop-portal binary -
XDG_PERMISSION_STORE_PATH: The path to the xdg-permission-store binary -
XDG_DOCUMENT_PORTAL_PATH: The path to the xdg-document-portal binary -
XDP_VALIDATE_ICON: The path to the xdg-desktop-portal-validate-icon binary -
XDP_VALIDATE_SOUND: The path to the xdg-desktop-portal-validate-sound binary -
XDP_VALIDATE_AUTO: If set, automatically discovers the icon and sound validators (only useful for installed tests) instead of usingXDP_VALIDATE_ICONandXDP_VALIDATE_SOUND.
Some optional environment variables that can be set to influence how the test harness behaves.
-
XDP_TEST_IN_CI: If set (to any value), some unreliable tests might get skipped and some tests might run less iterations or otherwise test less thoroughly. Set this for automated QA testing, leave it unset during development. -
XDP_TEST_RUN_LONG: If set (to any value), some tests will run more iterations or otherwise test more thoroughly -
FLATPAK_BWRAP: Path to the bwrap(1) executable (default: discovered at build-time) -
XDP_VALIDATE_ICON_INSECURE: If set (to any value), x-d-p doesn't sandbox the icon validator using bwrap(1), even if sandboxed validation was enabled at compile time. This can be used to run build-time tests in a chroot or unprivileged container environment, where bwrap(1) normally can't work. It should never be set on a production system that will be validating untrusted icons! -
XDP_VALIDATE_SOUND_INSECURE: Same asXDP_VALIDATE_ICON_INSECURE, but for sounds
Some optional environment variables that can be set to help with debugging.
-
XDP_DBUS_MONITOR: If set, starts dbus-monitor on the test dbus server -
XDP_DBUS_TIMEOUT: Maximum timeout for dbus calls in ms (default: 5s) -
XDG_DESKTOP_PORTAL_WAIT_FOR_DEBUGGER: Makes xdg-desktop-portal wait for a debugger to attach by raising SIGSTOP -
XDG_DOCUMENT_PORTAL_WAIT_FOR_DEBUGGER: Makes xdg-document-portal wait for a debugger to attach by raising SIGSTOP -
XDG_PERMISSION_STORE_WAIT_FOR_DEBUGGER: Makes xdg-permission-store wait for a debugger to attach by raising SIGSTOP
Internal environment variables the tests use via pytest fixtures to set up the environment they need.
-
XDG_DESKTOP_PORTAL_TEST_APP_ID: If set, the portal will use a host XdpAppInfo with the app id set to the variable. This is used to get a predictable app id for tests. -
XDG_DESKTOP_PORTAL_TEST_USB_QUERIES: The USB queries for the USB device portal testing
Adding new tests
Make sure the required portals are listed in
xdg_desktop_portal_dir_default_files in conftest.py.
Add a test_${name}.py file to this directory and add the file to
meson.build.
If the portal that is being tested requires a backend implementation, add
it to the templates directory and add the file to meson.build. See the
dbusmock documentation for details on those templates.