aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Guldstrand <andreas.guldstrand@gmail.com>2016-06-19 02:15:47 +0200
committerAndreas Guldstrand <andreas.guldstrand@gmail.com>2016-06-19 02:15:47 +0200
commit0720fc4a35284b99c2f7f619b0c0ffb4b3202449 (patch)
treecf360d0dfbf479c3cb7395f788d07f04535136a8
parent7d94163380d43fa609681f6081e2d603e56f8e71 (diff)
downloadsbotools2-0720fc4a35284b99c2f7f619b0c0ffb4b3202449.tar.xz
Add race tests for sboconfig::config_write()
-rwxr-xr-xt/29-race-sboconfig.t71
1 files changed, 71 insertions, 0 deletions
diff --git a/t/29-race-sboconfig.t b/t/29-race-sboconfig.t
new file mode 100755
index 0000000..d0f9d3d
--- /dev/null
+++ b/t/29-race-sboconfig.t
@@ -0,0 +1,71 @@
+#!/usr/bin/env perl
+
+use strict;
+use warnings;
+use Test::More;
+use Test::Exit;
+use FindBin '$RealBin';
+use lib "$RealBin/../SBO-Lib/lib";
+use Capture::Tiny qw/ capture_merged /;
+use File::Temp 'tempdir';
+use Cwd;
+
+plan tests => 6;
+
+sub load {
+ my ($script, %opts) = @_;
+
+ local @ARGV = exists $opts{argv} ? @{ $opts{argv} } : '-h';
+ my ($ret, $exit, $out, $do_err);
+ my $eval = eval {
+ $out = capture_merged { $exit = exit_code {
+ $ret = do "$RealBin/../$script";
+ $do_err = $@;
+ }; };
+ 1;
+ };
+ my $err = $@;
+
+ note explain { ret => $ret, exit => $exit, out => $out, eval => $eval, err => $err, do_err => $do_err } if $opts{explain};
+}
+
+# 1-4: sboconfig race test...
+{
+ load('sboconfig');
+
+ my $conffile = '/etc/sbotools/sbotools.conf';
+ rename $conffile, "$conffile.bak";
+ main::config_write('foo', 'bar');
+ no warnings 'redefine';
+ local *_race::cond = sub { unlink $conffile; };
+
+ my $exit;
+ my $out = capture_merged { $exit = exit_code { main::config_write('foo', 'bar'); }; };
+
+ is ($out, "Unable to open /etc/sbotools/sbotools.conf.\n", "sboconfig's config_write() gave correct output");
+ is ($exit, 6, "sboconfig's config_write exited with 6");
+
+ local *_race::cond = sub { mkdir $conffile; };
+
+ undef $exit;
+ $out = capture_merged { $exit = exit_code { main::config_write('foo', 'bar'); }; };
+
+ is ($out, "Unable to open /etc/sbotools/sbotools.conf.\n", "sboconfig's config_write() gave correct output");
+ is ($exit, 6, "sboconfig's config_write exited with 6");
+
+ rmdir $conffile;
+ local *_race::cond = sub { 1; };
+ main::config_write('foo', 'bar');
+ my $cnt = 0;
+ local *_race::cond = sub { do { unlink $conffile; mkdir $conffile } if $cnt++; };
+
+ undef $exit;
+ $out = capture_merged { $exit = exit_code { main::config_write('foo', 'baz'); }; };
+
+ is ($out, "Unable to open /etc/sbotools/sbotools.conf.\n", "sboconfig's config_write() gave correct output");
+ is ($exit, 6, "sboconfig's config_write exited with 6");
+
+ unlink $conffile;
+ rmdir $conffile;
+ rename "$conffile.bak", $conffile;
+}