summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>2016-11-04 15:36:50 +0100
committerHeiko Schlittermann (HS12-RIPE) <hs@schlittermann.de>2016-11-04 15:45:07 +0100
commit6336058cedeecb91a64ed69143b8b5221d08e16c (patch)
tree44d735a35789cdb2a4ee28bc7afd46118eb2c75c
parentef394e8db2af178e91ed15cc63905016d00952f4 (diff)
Testsuite: Add flavour detection
-rw-r--r--test/README14
-rw-r--r--test/lib/Exim/Runtest.pm43
-rwxr-xr-xtest/runtest5
-rw-r--r--test/t/00-basic.t9
-rw-r--r--test/t/samples/etc.debian8-debian-version/debian_version1
-rw-r--r--test/t/samples/etc.debian8-os-release/debian_version1
-rw-r--r--test/t/samples/etc.debian8-os-release/os-release8
-rw-r--r--test/t/samples/etc.fedora24/os-release14
8 files changed, 87 insertions, 8 deletions
diff --git a/test/README b/test/README
index 485ce290d..1a300663b 100644
--- a/test/README
+++ b/test/README
@@ -268,11 +268,15 @@ There are some options for the ./runtest script itself:
-FLAVOUR <flavour>
This allows "overrides" for the test results. It's intended
use is to deal with distro specific differences in the test
- output. The default flavour is "foo". If during the test
- run differences between the current and the expected output
- are found and no flavour file exists already, you may update
- the "common" expected output or you may create a flavour
- file. If a flavour file already exists, any updates will go
+ output. The default flavour is "FOO" if autodetection fails.
+ (Autodection is possible for known flavours only. Known
+ flavours are computed after file name extensions in stdout/*
+ and stderr/*.)
+
+ If during the test run differences between the current and
+ the expected output are found and no flavour file exists already,
+ you may update the "common" expected output or you may create a
+ flavour file. If a flavour file already exists, any updates will go
into that flavour file!
-KEEP Normally, after a successful run, the test output files are
diff --git a/test/lib/Exim/Runtest.pm b/test/lib/Exim/Runtest.pm
index 1677ae3e6..bdf9c60d6 100644
--- a/test/lib/Exim/Runtest.pm
+++ b/test/lib/Exim/Runtest.pm
@@ -2,12 +2,13 @@ package Exim::Runtest;
use 5.010;
use strict;
use warnings;
+use File::Basename;
use IO::Socket::INET;
use Cwd;
use Carp;
use parent 'Exporter';
-our @EXPORT_OK = qw(mailgroup dynamic_socket exim_binary);
+our @EXPORT_OK = qw(mailgroup dynamic_socket exim_binary flavour flavours);
our %EXPORT_TAGS = (
all => \@EXPORT_OK,
);
@@ -104,6 +105,36 @@ sub exim_binary {
return $binaries[0], @_;
}
+sub flavour {
+ my $etc = '/etc';
+
+ if (@_) {
+ croak "do not pass a directory, it's for testing only"
+ unless $ENV{HARNESS_ACTIVE};
+ $etc = shift;
+ }
+
+ if (open(my $f, '<', "$etc/os-release")) {
+ local $_ = join '', <$f>;
+ my ($id) = /^ID="?(.*?)"?\s*$/m;
+ my ($version) = /^VERSION_ID="?(.*?)"?\s*$/m;
+ return "$id$version";
+ }
+
+ if (open(my $f, '<', "$etc/debian_version")) {
+ chomp(local $_ = <$f>);
+ $_ = int $_;
+ return "debian$_";
+ }
+
+ undef;
+}
+
+sub flavours {
+ my %h = map { /\.(\S+)$/, 1 }
+ glob('stdout/*.*'), glob('stderr/*.*');
+ return sort keys %h;
+}
1;
@@ -131,6 +162,16 @@ Otherwise search the binary (while honouring C<EXIM_BUILD_SUFFIX>,
C<../scripts/os-type> and C<../os-arch>) and return the
the path to the binary and the unmodified I<@argv>.
+=item B<flavour>()
+
+Find a hint for the current flavour (Linux distro). It does so by checking
+typical files in the F</etc> directory.
+
+=item B<flavours>()
+
+Return a list of available flavours. It does so by scanning F<stdout/> and
+F<stderr/> for I<flavour> files (extensions after the numerical prefix.
+
=back
=cut
diff --git a/test/runtest b/test/runtest
index fb1cfc762..d97969cf3 100755
--- a/test/runtest
+++ b/test/runtest
@@ -49,7 +49,10 @@ $gnutls_dh_bits_normal = 2236;
$cf = "bin/cf -exact";
$cr = "\r";
$debug = 0;
-$flavour = 'FOO';
+$flavour = do {
+ my $f = Exim::Runtest::flavour();
+ (grep { $f eq $_ } Exim::Runtest::flavours()) ? $f : 'FOO';
+};
$force_continue = 0;
$force_update = 0;
$log_failed_filename = "failed-summary.log";
diff --git a/test/t/00-basic.t b/test/t/00-basic.t
index ae8eff77d..49d6f6871 100644
--- a/test/t/00-basic.t
+++ b/test/t/00-basic.t
@@ -5,7 +5,7 @@ use Test::Exception;
use lib 'lib';
use_ok 'Exim::Runtest', qw(:all) or BAIL_OUT 'Can not load the module';
-can_ok 'Exim::Runtest', qw(mailgroup dynamic_socket exim_binary);
+can_ok 'Exim::Runtest', qw(mailgroup dynamic_socket exim_binary flavour flavours);
pod_coverage_ok 'Exim::Runtest' => 'docs complete';
subtest 'mailgroup' => sub {
@@ -39,4 +39,11 @@ subtest 'exim_binary' => sub {
is_deeply [exim_binary(@argv2)], ["$cwd/t/samples/foo", @argv2[1,$#argv2]] => 'got the binary as rel path from argv';
};
+subtest 'flavour' => sub {
+ is flavour('t/samples/etc.debian8-os-release'), 'debian8' => 'got flavour debian8 from os-release';
+ is flavour('t/samples/etc.debian8-debian-version'), 'debian8' => 'got flavour debian8 from debian_version';
+ is flavour('t/samples/etc.fedora24'), 'fedora24' => 'got flavour fedora24 from os-release';
+ is_deeply [flavours()], ['debian8'] => 'got available flavours';
+};
+
done_testing;
diff --git a/test/t/samples/etc.debian8-debian-version/debian_version b/test/t/samples/etc.debian8-debian-version/debian_version
new file mode 100644
index 000000000..48c26da3e
--- /dev/null
+++ b/test/t/samples/etc.debian8-debian-version/debian_version
@@ -0,0 +1 @@
+8.6
diff --git a/test/t/samples/etc.debian8-os-release/debian_version b/test/t/samples/etc.debian8-os-release/debian_version
new file mode 100644
index 000000000..48c26da3e
--- /dev/null
+++ b/test/t/samples/etc.debian8-os-release/debian_version
@@ -0,0 +1 @@
+8.6
diff --git a/test/t/samples/etc.debian8-os-release/os-release b/test/t/samples/etc.debian8-os-release/os-release
new file mode 100644
index 000000000..120c51b08
--- /dev/null
+++ b/test/t/samples/etc.debian8-os-release/os-release
@@ -0,0 +1,8 @@
+PRETTY_NAME="Debian GNU/Linux 8 (jessie)"
+NAME="Debian GNU/Linux"
+VERSION_ID="8"
+VERSION="8 (jessie)"
+ID=debian
+HOME_URL="http://www.debian.org/"
+SUPPORT_URL="http://www.debian.org/support"
+BUG_REPORT_URL="https://bugs.debian.org/"
diff --git a/test/t/samples/etc.fedora24/os-release b/test/t/samples/etc.fedora24/os-release
new file mode 100644
index 000000000..f962ae641
--- /dev/null
+++ b/test/t/samples/etc.fedora24/os-release
@@ -0,0 +1,14 @@
+NAME=Fedora
+VERSION="24 (Twenty Four)"
+ID=fedora
+VERSION_ID=24
+PRETTY_NAME="Fedora 24 (Twenty Four)"
+ANSI_COLOR="0;34"
+CPE_NAME="cpe:/o:fedoraproject:fedora:24"
+HOME_URL="https://fedoraproject.org/"
+BUG_REPORT_URL="https://bugzilla.redhat.com/"
+REDHAT_BUGZILLA_PRODUCT="Fedora"
+REDHAT_BUGZILLA_PRODUCT_VERSION=24
+REDHAT_SUPPORT_PRODUCT="Fedora"
+REDHAT_SUPPORT_PRODUCT_VERSION=24
+PRIVACY_POLICY_URL=https://fedoraproject.org/wiki/Legal:PrivacyPolicy