diff --git a/src/lib/Hydra/Helper/Nix.pm b/src/lib/Hydra/Helper/Nix.pm index 5c0be39e..55c1f6f3 100644 --- a/src/lib/Hydra/Helper/Nix.pm +++ b/src/lib/Hydra/Helper/Nix.pm @@ -18,6 +18,7 @@ our @ISA = qw(Exporter); our @EXPORT = qw( cancelBuilds captureStdoutStderr + captureStdoutStderrWithStdin findLog gcRootFor getBaseUrl @@ -428,14 +429,19 @@ sub pathIsInsidePrefix { sub captureStdoutStderr { my ($timeout, @cmd) = @_; - my $stdin = ""; + + return captureStdoutStderrWithStdin($timeout, \@cmd, ""); +} + +sub captureStdoutStderrWithStdin { + my ($timeout, $cmd, $stdin) = @_; my $stdout; my $stderr; eval { local $SIG{ALRM} = sub { die "timeout\n" }; # NB: \n required alarm $timeout; - IPC::Run::run(\@cmd, \$stdin, \$stdout, \$stderr); + IPC::Run::run($cmd, \$stdin, \$stdout, \$stderr); alarm 0; 1; } or do { diff --git a/t/lib/CliRunners.pm b/t/lib/CliRunners.pm index e693eeb7..ddaa34ae 100644 --- a/t/lib/CliRunners.pm +++ b/t/lib/CliRunners.pm @@ -5,6 +5,7 @@ package CliRunners; our @ISA = qw(Exporter); our @EXPORT = qw( captureStdoutStderr + captureStdoutStderrWithStdin evalFails evalSucceeds runBuild @@ -21,6 +22,15 @@ sub captureStdoutStderr { return Hydra::Helper::Nix::captureStdoutStderr(@_) } +sub captureStdoutStderrWithStdin { + # "Lazy"-load Hydra::Helper::Nix to avoid the compile-time + # import of Hydra::Model::DB. Early loading of the DB class + # causes fixation of the DSN, and we need to fixate it after + # the temporary DB is setup. + require Hydra::Helper::Nix; + return Hydra::Helper::Nix::captureStdoutStderrWithStdin(@_) +} + sub evalSucceeds { my ($jobset) = @_; my ($res, $stdout, $stderr) = captureStdoutStderr(60, ("hydra-eval-jobset", $jobset->project->name, $jobset->name)); diff --git a/t/lib/Setup.pm b/t/lib/Setup.pm index d7772731..56e01bdc 100644 --- a/t/lib/Setup.pm +++ b/t/lib/Setup.pm @@ -13,6 +13,7 @@ use CliRunners; our @ISA = qw(Exporter); our @EXPORT = qw( captureStdoutStderr + captureStdoutStderrWithStdin createBaseJobset createJobsetWithOneInput evalFails