/usr/local/CPAN/Apache-SWIT/Apache/SWIT/Test/DB.pm
use strict;
use warnings FATAL => 'all';
package Apache::SWIT::Test::DB;
use Test::TempDatabase;
use Apache::SWIT::DB::Connection;
use Apache::SWIT::Maker::Conversions;
use File::Slurp;
our $Test_DB;
sub setup {
my ($class, $dbn, $sc, $args) = @_;
my $nd = $ENV{APACHE_SWIT_DB_NAME};
$ENV{APACHE_SWIT_DB_NAME} = "$dbn$$" unless $ENV{APACHE_SWIT_DB_NAME};
conv_eval_use($sc);
local $SIG{__DIE__} = sub {
print STDERR "# " . Carp::longmess(@_);
exit 1;
};
$Test_DB = Test::TempDatabase->create(no_drop => $nd
, dbname => $ENV{APACHE_SWIT_DB_NAME}
, dbi_args => ($args || Apache::SWIT::DB::Connection->DBIArgs));
my $stop = $ENV{APACHE_SWIT_LOAD_DB} ? "echo \\\\set ON_ERROR_STOP;"
: "";
goto LOAD if ($nd || $ENV{APACHE_SWIT_LOAD_DB});
my $ssql = "t/conf/schema.sql";
my $fro = "conf/frozen.sql";
$ENV{APACHE_SWIT_LOAD_DB} = -f $ssql ? $ssql : -f $fro ? $fro : '';
LOAD:
# -f option doesn't always work for large objects
conv_silent_system("($stop cat $ENV{APACHE_SWIT_LOAD_DB})"
. " | psql --single-transaction"
. " -d $ENV{APACHE_SWIT_DB_NAME}")
if ($ENV{APACHE_SWIT_LOAD_DB});
$sc->new($Test_DB->handle)->run_updates;
Apache::SWIT::DB::Connection->instance($Test_DB->handle);
write_file("/tmp/db_is_clean.$ENV{APACHE_SWIT_DB_NAME}.$<", "\n");
}
END { my $res = $?; undef $Test_DB; exit $res; };
1;