File: 01.1-dbtests.t

package info (click to toggle)
libpgobject-util-dbadmin-perl 1.6.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 176 kB
  • sloc: perl: 435; makefile: 6; sql: 3
file content (128 lines) | stat: -rw-r--r-- 4,552 bytes parent folder | download | duplicates (3)
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;