OSIBECOEJH25QAXCZ76PY7OTP3STBNWEUC36WRTNYAN3IIJP5ZQQC YIZWKGFIITUYV2TW5RGMXY4IGHHIKHJWJ3ZG53LWW3GBYHR4LW4QC I7UFBBQGLWCOHSRARELIPVSQWGE6R3O65GFUGRBOJ3CAJQA4LZYAC PVKBPA7ZJ2HIX5D572WRGLY4MGNRA4V4P52SHLATCLY7BUJQAMIQC 3JD6P6FHI2GH6S67MDPIPJ5YZVZZ4XOHL3L7OGGSWPLXHNY5B2GAC LYRHVDS2Z6V565364MAYFDZKGRZD2WBZBLK7UZWH664IS7T656AAC UIA3ULNUQVJJJYYVSHCT3GMNYBB5GRHEMHBU2KIFPFG6YVTLMYKAC 4QI6G7YB64IPWRQYGI4D2CEEUGPSVM6MVKUA4VVRKKIEA4D34FEQC 2JJP76737U2JWJWQ6UDFEAQCGWRAQH46HC6OCIKWMB5QYRXF6DQQC HX4QYOYAKKFKK4KF6SZ6FQCM5ZF7ZFDTQUR4GS5WPPTYZASYZZUAC HXEZUCTD7T3YUT3XKWQOWRFSADNFZT2EYXHOATIBXWTNACDHNQQQC DNOLOMX7MSBZMPOZUQPCCGQJ2OKV3642C4FWY6P6SK4LR5U26LTQC 4WLW4VHSOVVFNMPW3S7XVIC3MH7BSUN3FQ37LXGOJ4ODMPVGLO6AC 6HYCG3DC5RNVSH66X5DZO36OIU2IUQYH64F7QFAORALLUC3LOQDQC 2I3HFWBKLTTXUHJ4KXMKUQOJASEF2TJYVHLYWCNCA7GLF4WCFN6QC U2PHPVGD2GAJHB53PIQRZ4RYLISKI2MMTXMAJTJIPXPFTEKDAHYAC OWRS526HCBSKWK5KFWO34YSZRNRXWBBG74KLW7BZSRIIZUNSELBQC use strict;use warnings;package HydraTestContext;use File::Path qw(make_path);use File::Basename;use Cwd qw(abs_path getcwd);# Set up the environment for running tests.## Hash Parameters:## * hydra_config: configuration for the Hydra processes for your test.# * nix_config: text to include in the test's nix.conf# * use_external_destination_store: Boolean indicating whether hydra should# use a destination store different from the evaluation store.# True by default.## This clears several environment variables and sets them to ephemeral# values: a temporary database, temporary Nix store, temporary Hydra# data directory, etc.## Note: This function must run _very_ early, before nearly any Hydra# libraries are loaded. To use this, you very likely need to `use Setup`# and then run `test_init`, and then `require` the Hydra libraries you# need.## It returns a tuple: a handle to a temporary directory and a handle to# the postgres service. If either of these variables go out of scope,# those resources are released and the test environment becomes invalid.## Look at the top of an existing `.t` file to see how this should be used# in practice.sub new {my ($class, %opts) = @_;my $dir = File::Temp->newdir();$ENV{'HYDRA_DATA'} = "$dir/hydra-data";mkdir $ENV{'HYDRA_DATA'};$ENV{'NIX_CONF_DIR'} = "$dir/nix/etc/nix";make_path($ENV{'NIX_CONF_DIR'});my $nixconf = "$ENV{'NIX_CONF_DIR'}/nix.conf";my $nix_config = "sandbox = false\n" . ($opts{'nix_config'} || "");write_file($nixconf, $nix_config);$ENV{'HYDRA_CONFIG'} = "$dir/hydra.conf";my $hydra_config = $opts{'hydra_config'} || "";if ($opts{'use_external_destination_store'} // 1) {$hydra_config = "store_uri = file:$dir/nix/dest-store\n" . $hydra_config;}write_file($ENV{'HYDRA_CONFIG'}, $hydra_config);$ENV{'NIX_LOG_DIR'} = "$dir/nix/var/log/nix";$ENV{'NIX_REMOTE_SYSTEMS'} = '';$ENV{'NIX_REMOTE'} = '';$ENV{'NIX_STATE_DIR'} = "$dir/nix/var/nix";$ENV{'NIX_STORE_DIR'} = "$dir/nix/store";my $pgsql = Test::PostgreSQL->new(extra_initdb_args => "--locale C.UTF-8");$ENV{'HYDRA_DBI'} = $pgsql->dsn;system("hydra-init") == 0 or die;my $self = {_db => undef,db_handle => $pgsql,tmpdir => $dir,testdir => abs_path(dirname(__FILE__) . "/.."),jobsdir => abs_path(dirname(__FILE__) . "/../jobs")};return bless $self, $class;}sub db {my ($self, $setup) = @_;if (!defined $self->{_db}) {require Hydra::Schema;require Hydra::Model::DB;$self->{_db} = Hydra::Model::DB->new();if (!(defined $setup && $setup == 0)) {$self->{_db}->resultset('Users')->create({username => "root",emailaddress => 'root@invalid.org',password => ''});}}return $self->{_db};}sub tmpdir {my ($self) = @_;return $self->{tmpdir};}sub testdir {my ($self) = @_;return $self->{testdir};}sub jobsdir {my ($self) = @_;return $self->{jobsdir};}sub DESTROY{my ($self) = @_;$self->db(0)->schema->storage->disconnect();}sub write_file {my ($path, $text) = @_;open(my $fh, '>', $path) or die "Could not open file '$path' $!";print $fh $text || "";close $fh;}1;
# * hydra_config: configuration for the Hydra processes for your test.# * nix_config: text to include in the test's nix.conf# * use_external_destination_store: Boolean indicating whether hydra should# use a destination store different from the evaluation store.# True by default.## This clears several environment variables and sets them to ephemeral# values: a temporary database, temporary Nix store, temporary Hydra# data directory, etc.## Note: This function must run _very_ early, before nearly any Hydra# libraries are loaded. To use this, you very likely need to `use Setup`# and then run `test_init`, and then `require` the Hydra libraries you# need.## It returns a tuple: a handle to a temporary directory and a handle to# the postgres service. If either of these variables go out of scope,# those resources are released and the test environment becomes invalid.## Look at the top of an existing `.t` file to see how this should be used# in practice.
# See HydraTestContext::new for documentation
my %opts = @_;my $dir = File::Temp->newdir();$ENV{'HYDRA_DATA'} = "$dir/hydra-data";mkdir $ENV{'HYDRA_DATA'};$ENV{'NIX_CONF_DIR'} = "$dir/nix/etc/nix";make_path($ENV{'NIX_CONF_DIR'});my $nixconf = "$ENV{'NIX_CONF_DIR'}/nix.conf";my $nix_config = "sandbox = false\n" . ($opts{'nix_config'} || "");write_file($nixconf, $nix_config);$ENV{'HYDRA_CONFIG'} = "$dir/hydra.conf";
require HydraTestContext;my $ctx = HydraTestContext->new(@_);
my $hydra_config = $opts{'hydra_config'} || "";if ($opts{'use_external_destination_store'} // 1) {$hydra_config = "store_uri = file:$dir/nix/dest-store\n" . $hydra_config;}write_file($ENV{'HYDRA_CONFIG'}, $hydra_config);$ENV{'NIX_LOG_DIR'} = "$dir/nix/var/log/nix";$ENV{'NIX_REMOTE_SYSTEMS'} = '';$ENV{'NIX_REMOTE'} = '';$ENV{'NIX_STATE_DIR'} = "$dir/nix/var/nix";$ENV{'NIX_STORE_DIR'} = "$dir/nix/store";my $pgsql = Test::PostgreSQL->new(extra_initdb_args => "--locale C.UTF-8");$ENV{'HYDRA_DBI'} = $pgsql->dsn;system("hydra-init") == 0 or die;
db => $pgsql,tmpdir => $dir,testdir => abs_path(dirname(__FILE__) . "/.."),jobsdir => abs_path(dirname(__FILE__) . "/../jobs"));
context => $ctx,tmpdir => $ctx->tmpdir,testdir => $ctx->testdir,jobsdir => $ctx->jobsdir)