# testing options while respecting external ENV variables
#
# KEEP_DB=1
# keep all databases created
# BASE_DIR=1
# use the specified base dir
# don't emit diag (we know where the databases are created)
# KEEP_DB=1 && BASE_DIR=0
# emit diag (so we can see where databases are created)
# KEEP_DB=0
# clean up all databases created
# don't emit diag (we don't need to know where the databases are created)
use Test::More; {
use strict;
use warnings;
BEGIN {
eval "use Test::mysqld"; if($@) {
plan skip_all => 'Test::mysqld not installed';
}
}
use File::Path qw!rmtree!;
use FindBin qw($Bin);
use lib "$Bin/lib";
use TDBICOptions;
my $env_keep_db = $ENV{KEEP_DB};
my $env_base_dir = $ENV{BASE_DIR};
#TDBICOptions::check_base_dir();
require_ok 'Test::DBIx::Class';
TDBICOptions::notify();
my $dirs_created = {};
my $builder = Test::DBIx::Class->builder;
my $fh;
$builder->failure_output(\$fh);
ok my $config = {
schema_class => 'Test::DBIx::Class::Example::Schema',
traits => [qw!Testmysqld!],
tdbic_debug => 0,
keep_db => $env_keep_db,
}, 'Created Sample inline configuration';
#-------------------
note('tdbic_debug=1');
$config->{tdbic_debug} = 1;
$fh = '';
my $manager = Test::DBIx::Class::SchemaManager->initialize_schema({
%$config,
builder => $builder,
});
cmp_ok $fh, '=~', '# Starting mysqld with:', 'diag emitted';
print ("$fh\n") if $env_keep_db;
my $dir = dir_created($fh);
print "# ERROR: could not identify dir from diag:\n$fh\n" unless $dir;
#-------------------
note('tdbic_debug=0');
$config->{tdbic_debug} = 0;
$fh = '';
my $manager2 = Test::DBIx::Class::SchemaManager->initialize_schema({
%$config,
builder => $builder,
});
if ($env_keep_db && !$env_base_dir){
ok $fh, 'diag emitted as KEEP_DB was true and BASE_DIR was not';
print ("$fh\n");
my $dir = dir_created($fh);
print "# ERROR: could not identify dir from diag:\n$fh\n" unless $dir;
} else{
ok !$fh, 'no diag emitted';
}
#-------------------
note('keep_db=1');
$config->{keep_db} = 1;
$fh = '';
my $manager3 = Test::DBIx::Class::SchemaManager->initialize_schema({
%$config,
builder => $builder,
});
if ($env_base_dir){
ok !$fh, 'no diag emitted as BASE_DIR was true';
} else {
cmp_ok ($fh, '=~', '# Starting mysqld with:', 'diag emitted') or diag $fh;
print ("$fh\n") if $env_keep_db;
}
$dir = dir_created($fh);
print "# ERROR: could not identify dir from diag:\n$fh\n" unless $dir;
TDBICOptions::print_dirs_created($dirs_created);
done_testing();
sub dir_created{
my $diag = $_[0];
my $regex = qr!defaults\-file=(/tmp/\w+)/!;
return TDBICOptions::dir_created($dirs_created, $regex, $diag);
}
}