-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
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,
);
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;
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
$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";
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 {
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;
--- /dev/null
+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/"
--- /dev/null
+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