[debhelper-devel] [debhelper] 01/02: t: Add tests for dh_systemd_*

Niels Thykier nthykier at moszumanska.debian.org
Tue Oct 10 18:08:31 UTC 2017


This is an automated email from the git hooks/post-receive script.

nthykier pushed a commit to branch master
in repository debhelper.

commit a06aee47441b982e691cb871468d064a1a4b6ae4
Author: Felipe Sateler <fsateler at debian.org>
Date:   Tue Oct 10 17:52:30 2017 +0000

    t: Add tests for dh_systemd_*
    
    These are based heavily on the tests written by Felipe Sateler for
    dh_installsystemd.
    
    Signed-off-by: Niels Thykier <niels at thykier.net>
---
 debian/changelog                        |   2 +
 t/dh_installsystemd/debian/changelog    |   5 ++
 t/dh_installsystemd/debian/control      |  20 ++++++
 t/dh_installsystemd/debian/foo.service  |   8 +++
 t/dh_installsystemd/debian/foo2.service |   8 +++
 t/dh_installsystemd/dh_systemd.t        | 120 ++++++++++++++++++++++++++++++++
 6 files changed, 163 insertions(+)

diff --git a/debian/changelog b/debian/changelog
index bb70620..e4ca937 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -32,6 +32,8 @@ debhelper (10.9.1) UNRELEASED; urgency=medium
   * dh_systemd_*: If an unit file cannot be read (e.g. to check for
     the [Install] section), error out instead of emitting a warning
     and continuing.
+  * t: Add tests for dh_systemd_* based on WIP tests from Felipe
+    Sateler related to a new dh_installsystemd helper.
 
   [ Dmitry Shachnev ]
   * qmake.pm: Add basic cross-building support.  (Closes: #877357)
diff --git a/t/dh_installsystemd/debian/changelog b/t/dh_installsystemd/debian/changelog
new file mode 100644
index 0000000..5850f0e
--- /dev/null
+++ b/t/dh_installsystemd/debian/changelog
@@ -0,0 +1,5 @@
+foo (1.0-1) unstable; urgency=low
+
+  * Initial release. (Closes: #XXXXXX)
+
+ -- Test <testing at nowhere>  Mon, 11 Jul 2016 18:10:59 +0200
diff --git a/t/dh_installsystemd/debian/control b/t/dh_installsystemd/debian/control
new file mode 100644
index 0000000..48d4de2
--- /dev/null
+++ b/t/dh_installsystemd/debian/control
@@ -0,0 +1,20 @@
+Source: foo
+Section: misc
+Priority: optional
+Maintainer: Test <testing at nowhere>
+Standards-Version: 3.9.8
+
+Package: foo
+Architecture: all
+Description: package foo
+ Package foo
+
+Package: bar
+Architecture: all
+Description: package bar
+ Package bar
+
+Package: baz
+Architecture: all
+Description: package baz
+ Package baz
diff --git a/t/dh_installsystemd/debian/foo.service b/t/dh_installsystemd/debian/foo.service
new file mode 100644
index 0000000..2b48a78
--- /dev/null
+++ b/t/dh_installsystemd/debian/foo.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=A unit
+
+[Service]
+ExecStart=/bin/true
+
+[Install]
+WantedBy=multi-user.target
diff --git a/t/dh_installsystemd/debian/foo2.service b/t/dh_installsystemd/debian/foo2.service
new file mode 100644
index 0000000..42b9445
--- /dev/null
+++ b/t/dh_installsystemd/debian/foo2.service
@@ -0,0 +1,8 @@
+[Unit]
+Description=Another unit
+
+[Service]
+ExecStart=/bin/true
+
+[Install]
+WantedBy=multi-user.target
diff --git a/t/dh_installsystemd/dh_systemd.t b/t/dh_installsystemd/dh_systemd.t
new file mode 100755
index 0000000..265e84c
--- /dev/null
+++ b/t/dh_installsystemd/dh_systemd.t
@@ -0,0 +1,120 @@
+#!/usr/bin/perl
+use strict;
+use Test::More;
+
+use File::Basename qw(dirname);
+use lib dirname(dirname(__FILE__));
+use Test::DH;
+use File::Path qw(remove_tree make_path);
+use Debian::Debhelper::Dh_Lib qw(!dirname);
+
+our @TEST_DH_EXTRA_TEMPLATE_FILES = (qw(
+    debian/changelog
+    debian/control
+    debian/foo.service
+    debian/foo2.service
+));
+
+if (uid_0_test_is_ok()) {
+	plan(tests => 1);
+} else {
+	plan skip_all => 'fakeroot required';
+}
+
+sub unit_is_enabled {
+	my ($package, $unit, $num_enables, $num_masks) = @_;
+	my @output;
+	my $matches;
+	$num_masks = $num_masks // $num_enables;
+	@output=`cat debian/$package.postinst.debhelper`;
+	$matches = grep { m{^if deb-systemd-helper .* was-enabled .*$unit\.service} } @output;
+	ok($matches == $num_enables) or diag("$unit appears to have been enabled $matches times (expected $num_enables)");
+	@output=`cat debian/$package.postrm.debhelper`;
+	$matches = grep { m{deb-systemd-helper mask.*$unit\.service} } @output;
+	ok($matches == $num_masks) or diag("$unit appears to have been masked $matches times (expected $num_masks)");
+}
+sub unit_is_started {
+	my ($package, $unit, $num_starts, $num_stops) = @_;
+	my @output;
+	my $matches;
+	$num_stops = $num_stops // $num_starts;
+	@output=`cat debian/$package.postinst.debhelper`;
+	$matches = grep { m{deb-systemd-invoke \$_dh_action .*$unit.service} } @output;
+	ok($matches == $num_starts) or diag("$unit appears to have been started $matches times (expected $num_starts)");
+	@output=`cat debian/$package.prerm.debhelper`;
+	$matches = grep { m{deb-systemd-invoke stop .*$unit.service} } @output;
+	ok($matches == $num_stops) or diag("$unit appears to have been stopped $matches times (expected $num_stops)");
+}
+
+# Units are installed and enabled
+each_compat_up_to_and_incl_subtest(10, sub {
+	ok(run_dh_tool({ 'needs_root' => 1 }, 'dh_systemd_enable'));
+	ok(run_dh_tool({ 'needs_root' => 1 }, 'dh_systemd_start'));
+	ok(-e "debian/foo/lib/systemd/system/foo.service");
+	ok(-e "debian/foo.postinst.debhelper");
+	unit_is_enabled('foo', 'foo', 1);
+	unit_is_started('foo', 'foo', 1);
+	unit_is_enabled('foo', 'foo2', 0);
+	unit_is_started('foo', 'foo2', 0);
+	ok(run_dh_tool('dh_clean'));
+
+	make_path('debian/foo/lib/systemd/system/');
+	install_file('debian/foo2.service', 'debian/foo/lib/systemd/system/foo2.service');
+	ok(run_dh_tool({ 'needs_root' => 1 }, 'dh_systemd_enable'));
+	ok(run_dh_tool({ 'needs_root' => 1 }, 'dh_systemd_start'));
+	ok(-e "debian/foo/lib/systemd/system/foo.service");
+	ok(-e "debian/foo.postinst.debhelper");
+	unit_is_enabled('foo', 'foo', 1);
+	unit_is_started('foo', 'foo', 1);
+	unit_is_enabled('foo', 'foo2', 1);
+	unit_is_started('foo', 'foo2', 1);
+	ok(run_dh_tool('dh_clean'));
+
+	make_path('debian/foo/lib/systemd/system/');
+	install_file('debian/foo2.service', 'debian/foo/lib/systemd/system/foo2.service');
+	ok(run_dh_tool({ 'needs_root' => 1 }, 'dh_systemd_enable'));
+	ok(run_dh_tool({ 'needs_root' => 1 }, 'dh_systemd_start', '--no-start'));
+	ok(-e "debian/foo/lib/systemd/system/foo.service");
+	ok(-e "debian/foo.postinst.debhelper");
+	unit_is_enabled('foo', 'foo', 1);
+	unit_is_started('foo', 'foo', 0, 1); # present units are stopped on remove even if no start
+	unit_is_enabled('foo', 'foo2', 1);
+	unit_is_started('foo', 'foo2', 0, 1);
+	ok(run_dh_tool('dh_clean'));
+
+	make_path('debian/foo/lib/systemd/system/');
+	install_file('debian/foo2.service', 'debian/foo/lib/systemd/system/foo2.service');
+	ok(run_dh_tool({ 'needs_root' => 1 }, 'dh_systemd_enable'));
+	ok(run_dh_tool({ 'needs_root' => 1 }, 'dh_systemd_start', '--no-start', 'debian/foo.service'));
+	ok(run_dh_tool({ 'needs_root' => 1 }, 'dh_systemd_start', '-p', 'foo', 'foo2.service'));
+	ok(-e "debian/foo/lib/systemd/system/foo.service");
+	ok(-e "debian/foo.postinst.debhelper");
+	unit_is_enabled('foo', 'foo', 1);
+	unit_is_started('foo', 'foo', 0, 1);
+	unit_is_enabled('foo', 'foo2', 1);
+	unit_is_started('foo', 'foo2', 1);
+	ok(run_dh_tool('dh_clean'));
+
+	make_path('debian/foo/lib/systemd/system/');
+	install_file('debian/foo2.service', 'debian/foo/lib/systemd/system/foo2.service');
+	ok(run_dh_tool({ 'needs_root' => 1 }, 'dh_systemd_enable', '--no-enable', 'debian/foo.service'));
+	ok(run_dh_tool({ 'needs_root' => 1 }, 'dh_systemd_enable', '-p', 'foo', 'foo2.service'));
+	ok(run_dh_tool({ 'needs_root' => 1 }, 'dh_systemd_start'));
+	ok(-e "debian/foo/lib/systemd/system/foo.service");
+	ok(-e "debian/foo.postinst.debhelper");
+	unit_is_enabled('foo', 'foo', 0, 1); # Disabled units are still masked on removal
+	unit_is_started('foo', 'foo', 1, 1);
+	unit_is_enabled('foo', 'foo2', 1);
+	unit_is_started('foo', 'foo2', 1);
+	ok(run_dh_tool('dh_clean'));
+
+	make_path('debian/foo/lib/systemd/system/');
+	install_file('debian/foo.service', 'debian/foo/lib/systemd/system/foo.service');
+	ok(run_dh_tool({ 'needs_root' => 1 }, 'dh_systemd_start', '--no-restart-after-upgrade'));
+        my $matches = grep { m{deb-systemd-invoke start .*foo.service} } `cat debian/foo.postinst.debhelper`;
+	ok($matches == 1);
+	ok(run_dh_tool('dh_clean'));
+
+});
+
+

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debhelper/debhelper.git




More information about the debhelper-devel mailing list