diff options
author | Felipe Sateler <fsateler@debian.org> | 2017-10-10 17:52:30 +0000 |
---|---|---|
committer | Niels Thykier <niels@thykier.net> | 2017-10-10 17:55:48 +0000 |
commit | a06aee47441b982e691cb871468d064a1a4b6ae4 (patch) | |
tree | f9e9dd75b0e609788a03314fdbdbc234244a9153 /t | |
parent | b386398cbac226fc141dc004de358bb11404b910 (diff) |
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@thykier.net>
Diffstat (limited to 't')
-rw-r--r-- | t/dh_installsystemd/debian/changelog | 5 | ||||
-rw-r--r-- | t/dh_installsystemd/debian/control | 20 | ||||
-rw-r--r-- | t/dh_installsystemd/debian/foo.service | 8 | ||||
-rw-r--r-- | t/dh_installsystemd/debian/foo2.service | 8 | ||||
-rwxr-xr-x | t/dh_installsystemd/dh_systemd.t | 120 |
5 files changed, 161 insertions, 0 deletions
diff --git a/t/dh_installsystemd/debian/changelog b/t/dh_installsystemd/debian/changelog new file mode 100644 index 00000000..5850f0e2 --- /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@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 00000000..48d4de2f --- /dev/null +++ b/t/dh_installsystemd/debian/control @@ -0,0 +1,20 @@ +Source: foo +Section: misc +Priority: optional +Maintainer: Test <testing@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 00000000..2b48a781 --- /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 00000000..42b94452 --- /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 00000000..265e84c1 --- /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')); + +}); + + |