1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
use warnings;
use strict;
use Test::More;
use Test::Exception;
use PGObject::Util::DBAdmin;
use File::Temp;
plan skip_all => 'DB_TESTING not set' unless $ENV{DB_TESTING};
plan tests => 75;
# Constructor
my $dbh;
my $db;
ok($db = PGObject::Util::DBAdmin->new(
username => 'postgres',
password => $ENV{PGPASSWORD},
dbname => 'pgobject_test_db',
host => $ENV{PGHOST} // 'localhost',
port => $ENV{PGPORT} // '5432'
), 'Created db admin object');
# Drop db if exists
eval { $db->drop };
# List dbs
my @dblist;
ok(@dblist = $db->list_dbs, 'Got a db list');
ok (!grep {$_ eq 'pgobject_test_db'} @dblist, 'DB list does not contain pgobject_test_db');
# Create db
$db->create;
ok($db->server_version, 'Got a server version');
ok (grep {$_ eq 'pgobject_test_db'} $db->list_dbs, 'DB list does contain pgobject_test_db after create call');
# load with schema - valid sql
my $stdout_log = File::Temp->new->filename;
my $stderr_log = File::Temp->new->filename;
ok($db->run_file(
file => 't/data/schema.sql',
stdout_log => $stdout_log,
errlog => $stderr_log,
), 'Loaded schema');
ok(-f $stdout_log, 'run_file stdout_log file written');
ok(-f $stderr_log, 'run_file errlog file written');
cmp_ok(-s $stdout_log, '>', 0, 'run_file stdout_log file has size > 0 for valid sql');
cmp_ok(-s $stderr_log, '==', 0, 'run_file errlog file has size == 0 for valid sql');
ok(defined $db->stdout, 'after run_file stdout property is defined');
cmp_ok(length $db->stdout, '>', 0, 'after run_file, stdout property has length > 0');
ok(defined $db->stderr, 'after run_file stderr property is defined');
cmp_ok(length $db->stderr, '==', 0, 'after run_file, stderr property has length == 0 for valid sql');
unlink $stdout_log;
unlink $stderr_log;
ok ($dbh = $db->connect, 'Got dbi handle');
my ($foo) = @{ $dbh->selectall_arrayref('select count(*) from test_data') };
is ($foo->[0], 1, 'Correct count of data') ;
$dbh->disconnect;
# backup/drop/create/restore, formats undef, p, and c
foreach my $format ((undef, 'p', 'c')) {
my $display_format = $format || 'undef';
# Test backing up to specified file
my $output_file = File::Temp->new->filename;
my $backup;
ok($backup = $db->backup(
format => $format,
file => $output_file,
), "Made backup to specified file, format $display_format");
ok($backup =~ m|^$output_file$|, 'backup respects file parameter');
ok(-f $backup, "backup format $display_format output file exists");
cmp_ok(-s $backup, '>', 0, "backup format $display_format output file has size > 0");
unlink $backup;
# Test backing up to auto-generated temp file
ok($backup = $db->backup(
format => $format,
tempdir => 't/var/',
), "Made backup, format $display_format");
ok($backup =~ m|^t/var/|, 'backup respects tempdir parameter');
ok(-f $backup, "backup format $display_format output file exists");
cmp_ok(-s $backup, '>', 0, "backup format $display_format output file has size > 0");
ok($db->drop, "dropped db, format $display_format");
ok (!(grep{$_ eq 'pgobject_test_db'} @dblist),
'DB list does not contain pgobject_test_db');
dies_ok {
$db->restore(
format => $format,
file => 't/data/does-not-exist',
)
} "die when restore file does not exist, format $display_format";
ok($db->create, "created db, format $display_format");
ok($dbh = $db->connect, "Got dbi handle, format $display_format");
ok($db->restore(
format => $format,
file => $backup,
), "Restored backup, format $display_format");
ok(defined $db->stderr, 'stderr captured during restore');
ok(defined $db->stdout, 'stdout captured during restore');
ok(($foo) = $dbh->selectall_arrayref('select count(*) from test_data'),
"Got results from test data count, format $display_format");
is($foo->[0]->[0], 1, "correct data count, format $display_format");
$dbh->disconnect;
unlink $backup;
}
# Test backing up to compressed auto-generated temp file
my $backup;
my $fh;
ok($backup = $db->backup(
tempdir => 't/var/',
compress => 9,
), "Made backup, compressed");
ok(-f $backup, "backup, compressed output file exists");
cmp_ok(-s $backup, '>', 0, "backup, compressed output file has size > 0");
ok(open ($fh, '<', $backup), "backup, compressed output file opened successfully");
like(<$fh>, qr/^\x1F\x8B/, 'backup, compressed output file is gzip format');
unlink $backup;
|