upower: Add installed tests

Changed files
+110 -2
nixos
tests
installed-tests
pkgs
os-specific
+1
nixos/tests/installed-tests/default.nix
···
malcontent = callInstalledTest ./malcontent.nix {};
ostree = callInstalledTest ./ostree.nix {};
pipewire = callInstalledTest ./pipewire.nix {};
+
upower = callInstalledTest ./upower.nix {};
xdg-desktop-portal = callInstalledTest ./xdg-desktop-portal.nix {};
}
+9
nixos/tests/installed-tests/upower.nix
···
+
{ pkgs, makeInstalledTest, ... }:
+
+
makeInstalledTest {
+
tested = pkgs.upower;
+
+
testConfig = {
+
services.upower.enable = true;
+
};
+
}
+44 -2
pkgs/os-specific/linux/upower/default.nix
···
, stdenv
, fetchFromGitLab
, fetchpatch
+
, makeWrapper
, pkg-config
, rsync
, libxslt
···
, useIMobileDevice ? true
, libimobiledevice
, withDocs ? (stdenv.buildPlatform == stdenv.hostPlatform)
+
, nixosTests
}:
stdenv.mkDerivation (finalAttrs: {
pname = "upower";
version = "1.90.2";
-
outputs = [ "out" "dev" ]
+
outputs = [ "out" "dev" "installedTests" ]
++ lib.optionals withDocs [ "devdoc" ];
src = fetchFromGitLab {
···
# Remove when this is fixed upstream:
# https://gitlab.freedesktop.org/upower/upower/-/issues/214
./i686-test-remove-battery-check.patch
+
] ++ [
+
./installed-tests-path.patch
];
strictDeps = true;
···
gettext
gobject-introspection
libxslt
+
makeWrapper
pkg-config
rsync
];
···
systemd
# Duplicate from nativeCheckInputs until https://github.com/NixOS/nixpkgs/issues/161570 is solved
umockdev
+
+
# For installed tests.
+
(python3.withPackages (pp: [
+
pp.dbus-python
+
pp.python-dbusmock
+
pp.pygobject3
+
pp.packaging
+
]))
] ++ lib.optionals useIMobileDevice [
libimobiledevice
];
···
"-Dudevhwdbdir=${placeholder "out"}/lib/udev/hwdb.d"
"-Dintrospection=${if (stdenv.buildPlatform == stdenv.hostPlatform) then "auto" else "disabled"}"
"-Dgtk-doc=${lib.boolToString withDocs}"
+
"-Dinstalled_test_prefix=${placeholder "installedTests"}"
];
doCheck = true;
···
postPatch = ''
patchShebangs src/linux/integration-test.py
patchShebangs src/linux/unittest_inspector.py
+
+
substituteInPlace src/linux/integration-test.py \
+
--replace "/usr/share/dbus-1" "$out/share/dbus-1"
'';
preCheck = ''
···
runHook postCheck
'';
+
postCheck = ''
+
# Undo patchShebangs from postPatch so that it can be replaced with runtime shebang
+
# unittest_inspector.py intentionally not reverted because it would trigger
+
# meson rebuild during install and it is not used at runtime anyway.
+
sed -Ei 's~#!.+/bin/python3~#!/usr/bin/python3~' \
+
../src/linux/integration-test.py
+
'';
+
postInstall = ''
# Move stuff from DESTDIR to proper location.
# We use rsync to merge the directories.
···
rsync --archive "$DESTDIR/$dir" "$out"
rm --recursive "$DESTDIR/$dir"
done
-
for o in out dev; do
+
for o in out dev installedTests; do
rsync --archive "$DESTDIR/''${!o}" "$(dirname "''${!o}")"
rm --recursive "$DESTDIR/''${!o}"
done
···
rmdir "$DESTDIR/nix/store" "$DESTDIR/nix" "$DESTDIR"
'';
+
postFixup = ''
+
wrapProgram "$installedTests/libexec/upower/integration-test.py" \
+
--prefix GI_TYPELIB_PATH : "${lib.makeSearchPath "lib/girepository-1.0" [
+
"$out"
+
umockdev.out
+
]}" \
+
--prefix PATH : "${lib.makeBinPath [
+
umockdev
+
]}"
+
'';
+
env = {
# HACK: We want to install configuration files to $out/etc
# but upower should read them from /etc on a NixOS system.
···
# so we need to convince it to install all files to a temporary
# location using DESTDIR and then move it to proper one in postInstall.
DESTDIR = "${placeholder "out"}/dest";
+
};
+
+
passthru = {
+
tests = {
+
installedTests = nixosTests.installed-tests.upower;
+
};
};
meta = with lib; {
+56
pkgs/os-specific/linux/upower/installed-tests-path.patch
···
+
diff --git a/meson_options.txt b/meson_options.txt
+
index eec3659..f064a1b 100644
+
--- a/meson_options.txt
+
+++ b/meson_options.txt
+
@@ -6,6 +6,10 @@ option('gtk-doc',
+
type : 'boolean',
+
value : 'true',
+
description : 'Build developer documentation')
+
+option('installed_test_prefix',
+
+ type: 'string',
+
+ value: '',
+
+ description: 'Prefix for installed tests')
+
option('introspection',
+
type : 'feature',
+
value : 'auto',
+
diff --git a/src/meson.build b/src/meson.build
+
index a2352ac..c1f25ac 100644
+
--- a/src/meson.build
+
+++ b/src/meson.build
+
@@ -85,6 +85,7 @@ install_subdir('does-not-exist', install_dir: historydir, strip_directory : true
+
+
cdata = configuration_data()
+
cdata.set('libexecdir', get_option('prefix') / get_option('libexecdir'))
+
+cdata.set('installed_test_bindir', get_option('installed_test_prefix') / 'libexec' / 'upower')
+
cdata.set('historydir', historydir)
+
+
configure_file(
+
@@ -147,16 +148,16 @@ if os_backend == 'linux' and gobject_introspection.found()
+
'linux/integration-test.py',
+
'linux/output_checker.py',
+
],
+
- install_dir: get_option('prefix') / get_option('libexecdir') / 'upower'
+
+ install_dir: get_option('installed_test_prefix') / 'libexec' / 'upower'
+
)
+
install_subdir('linux/tests/',
+
- install_dir: get_option('prefix') / get_option('libexecdir') / 'upower'
+
+ install_dir: get_option('installed_test_prefix') / 'libexec' / 'upower'
+
)
+
+
configure_file(
+
input: 'upower-integration.test.in',
+
output: 'upower-integration.test',
+
- install_dir: get_option('datadir') / 'installed-tests' / 'upower',
+
+ install_dir: get_option('installed_test_prefix') / 'share' / 'installed-tests' / 'upower',
+
configuration: cdata
+
)
+
endif
+
diff --git a/src/upower-integration.test.in b/src/upower-integration.test.in
+
index 151ded0..b0a9bec 100644
+
--- a/src/upower-integration.test.in
+
+++ b/src/upower-integration.test.in
+
@@ -1,3 +1,3 @@
+
[Test]
+
Type=session
+
-Exec=@libexecdir@/upower/integration-test.py
+
+Exec=@installed_test_bindir@/integration-test.py