Imported Upstream version 3.2.0
[debian/amanda] / installcheck / Amanda_DB_Catalog.pl
index e412f21da41c5a56713fdb1deb3891dad5775851..e42cc4fbedaaa26a75d70c693f5a78e0beea0827 100644 (file)
@@ -16,7 +16,7 @@
 # Contact information: Zmanda Inc., 465 S. Mathilda Ave., Suite 300
 # Sunnyvale, CA 94086, USA, or: http://www.zmanda.com
 
-use Test::More tests => 76;
+use Test::More tests => 85;
 use File::Path;
 use Data::Dumper;
 use strict;
@@ -25,6 +25,7 @@ use warnings;
 use lib "@amperldir@";
 use Installcheck;
 use Installcheck::Run;
+use Installcheck::Catalogs;
 use Amanda::Config qw( :init :getconf config_dir_relative );
 use Amanda::DB::Catalog;
 use Amanda::Cmdline;
@@ -48,183 +49,35 @@ is_deeply([ Amanda::DB::Catalog::get_write_timestamps() ], [],
 is_deeply(Amanda::DB::Catalog::get_latest_write_timestamp(), undef,
     "No latest write_timestamp in an empty catalog");
 
+is_deeply(Amanda::DB::Catalog::get_latest_write_timestamp(type => 'amvault'), undef,
+    "No latest write_timestamp in an empty catalog, even of a specific type");
+
 is_deeply([ Amanda::DB::Catalog::get_parts() ], [],
     "No parts in an empty catalog");
 
 # and add some logfiles to query, and a corresponding tapelist, while also gathering
 # a list of parts and dumps for comparison with the results from Amanda::DB::Catalog.
 # also add some files to holding disk
-my $logdir = config_dir_relative(getconf($CNF_LOGDIR));
-my $tapelist_fn = config_dir_relative(getconf($CNF_TAPELIST));
-my $holdingdir = "$Installcheck::TMP/holding";
-my $output;
-my $write_timestamp;
-my (%parts, %dumps, $last_dump);
 my @dumpspecs;
 
-sub make_holding_file {
-    my ($dump) = @_;
-
-    my $dir = "$holdingdir/$dump->{dump_timestamp}";
-    my $safe_disk = $dump->{'diskname'};
-    $safe_disk =~ tr{/}{_};
-    my $filename = "$dir/$dump->{hostname}.$safe_disk";
-    mkpath($dir);
-
-    # (note that multi-chunk holding files are not used at this point)
-    my $hdr = Amanda::Header->new();
-    $hdr->{'type'} = $Amanda::Header::F_DUMPFILE;
-    $hdr->{'datestamp'} = $dump->{'dump_timestamp'};
-    $hdr->{'dumplevel'} = $dump->{'level'};
-    $hdr->{'name'} = $dump->{'hostname'};
-    $hdr->{'disk'} = $dump->{'diskname'};
-    $hdr->{'program'} = "INSTALLCHECK";
-    $hdr->{'is_partial'} = ($dump->{'status'} ne 'OK');
-
-    open(my $fh, ">", $filename) or die("opening '$filename': $!");
-    print $fh $hdr->to_string(32768,32768);
-
-    # transfer some data to that file
-    my $xfer = Amanda::Xfer->new([
-       Amanda::Xfer::Source::Pattern->new(1024*$dump->{'kb'}, "+-+-+-+-"),
-       Amanda::Xfer::Dest::Fd->new($fh),
-    ]);
-
-    $xfer->start(sub {
-       my ($src, $msg, $xfer) = @_;
-       if ($msg->{type} == $XMSG_ERROR) {
-           die $msg->{elt} . " failed: " . $msg->{message};
-       } elsif ($msg->{'type'} == $XMSG_DONE) {
-           $src->remove();
-           Amanda::MainLoop::quit();
-       }
-    });
-    Amanda::MainLoop::run();
-    close($fh);
-
-    return $filename;
-}
-
-open (my $tapelist, ">", $tapelist_fn);
-while (<DATA>) {
-    # skip comments
-    next if (/^#/ or /^\S*$/);
-
-    # add to tapelist
-    if (/^:tapelist (\d+) (\S+)\s*$/) {
-       print $tapelist "$1 $2 reuse\n";
-       next;
-    }
-    
-    # new logfile
-    if (/^::: (.*)/) {
-       open $output, ">", "$logdir/$1" or die("Could not open $1 for writing: $!");
-       next;
-    }
-
-    # write_timestamp
-    if (/^:timestamp (\d+)/) {
-       $write_timestamp = $1;
-       next;
-    }
-
-    # new dump
-    if (/^:dump (\S+) (\S+) (\S+) (\S+) (\d+) (\S+) (\S+) (\d+) (\S+) (\d+) (\d+)/) {
-       $last_dump = $dumps{$1} = {
-           'dump_timestamp' => $2,     'hostname' => $3,           'diskname' => $4,
-           'level' => $5+0,            'status' => $6,             'message' => $7,
-           'nparts' => $8,             'sec' => $9+0.0,            'kb' => $10,
-           'orig_kb' => $11,
-           'write_timestamp' => $write_timestamp,
-       };
-       $last_dump->{'message'} = ''
-           if $last_dump->{'message'} eq '""';
-       next;
-    } elsif (/^:dump (\S+) (\S+) (\S+) (\S+) (\d+) (\S+) (\S+) (\d+) (\S+) (\d+)/) {
-       $last_dump = $dumps{$1} = {
-           'dump_timestamp' => $2,     'hostname' => $3,           'diskname' => $4,
-           'level' => $5+0,            'status' => $6,             'message' => $7,
-           'nparts' => $8,             'sec' => $9+0.0,            'kb' => $10,
-           'orig_kb' => 0,
-           'write_timestamp' => $write_timestamp,
-       };
-       $last_dump->{'message'} = ''
-           if $last_dump->{'message'} eq '""';
-       next;
-    }
-
-    # new holding-disk file
-    if (/^:holding (\S+) (\S+) (\S+) (\S+) (\d+) (\S+) (\d+)/) {
-       $last_dump = $dumps{$1} = {
-           'dump_timestamp' => $2,     'hostname' => $3,           'diskname' => $4,
-           'level' => $5+0,            'status' => $6,             'kb' => $7,
-           'orig_kb' => 0,
-           'write_timestamp' => '00000000000000',
-           'message' => '',
-           'nparts' => 1,
-           'sec' => 0.0,
-       };
-       $parts{$1} = {
-           holding_file => make_holding_file($last_dump),
-           dump => $last_dump,
-           status => $last_dump->{'status'},
-           sec => 0.0,
-           kb => $last_dump->{'kb'},
-           orig_kb => 0,
-           partnum => 1,
-       };
-       $last_dump->{'parts'} = [ undef, $parts{$1}, ];
-       next;
-    }
-
-    # new part
-    if (/^:part (\S+) (\S+) (\S+) (\d+) (\d+) (\S+) (\S+) (\d+) (\d+)/) {
-       $parts{$1} = {
-           'dump' => $dumps{$2},       'label' => $3,              'filenum' => $4,
-           'partnum' => $5,            'status' => $6,             'sec' => $7+0.0,
-           'kb' => $8,                 'orig_kb' => $9 
-       };
-       $last_dump->{'parts'}->[$parts{$1}->{'partnum'}] = $parts{$1};
-       next;
-    } elsif (/^:part (\S+) (\S+) (\S+) (\d+) (\d+) (\S+) (\S+) (\d+)/) {
-       $parts{$1} = {
-           'dump' => $dumps{$2},       'label' => $3,              'filenum' => $4,
-           'partnum' => $5,            'status' => $6,             'sec' => $7+0.0,
-           'kb' => $8,                 'orig_kb' => 0
-       };
-       $last_dump->{'parts'}->[$parts{$1}->{'partnum'}] = $parts{$1};
-       next;
-    }
+# install the bigdb catalog
+my $cat = Installcheck::Catalogs::load("bigdb");
+$cat->install();
+my %dumps = $cat->get_dumps();
+my %parts = $cat->get_parts();
 
-    die("syntax error") if (/^:/);
-
-    print $output $_;
-}
-close($output);
-close($tapelist);
 Amanda::DB::Catalog::_clear_cache();
 
-##
-# Test the timestamps
-
-is_deeply([ Amanda::DB::Catalog::get_write_timestamps(), ],
-    [ '20080111000000', '20080222222222', '20080313133333', '20080414144444', '20080515155555', '20080616166666' ],
-    "get_write_timestamps returns all logfile datestamps in proper order, with zero-padding");
-
-is(Amanda::DB::Catalog::get_latest_write_timestamp(), '20080616166666',
-    "get_latest_write_timestamp correctly returns the latest write timestamp");
-
-##
-# test get_parts and sort_parts
-
 sub partstr {
     my ($part) = @_;
     if (exists $part->{'holding_file'}) {
        return "$part->{holding_file}: " .
-              "$part->{dump}->{hostname} $part->{dump}->{diskname}";
+              "$part->{dump}->{hostname} $part->{dump}->{diskname} " .
+              "w$part->{dump}->{write_timestamp} d$part->{dump}->{dump_timestamp}";
    } else {
        return "$part->{label}:$part->{filenum}: " .
-              "$part->{dump}->{hostname} $part->{dump}->{diskname} $part->{dump}->{orig_kb}";
+              "$part->{dump}->{hostname} $part->{dump}->{diskname} $part->{dump}->{orig_kb} " .
+              "w$part->{dump}->{write_timestamp} d$part->{dump}->{dump_timestamp}";
    }
 }
 
@@ -257,12 +110,17 @@ sub got_parts {
     # filter recursive references to avoid confusing old is_deeply instances
     if (!is_deeply(filter_parts($got), filter_parts($exp), $msg)) {
        diag("got parts:");
+       my $i = 0;
        for (@$got) {
-           diag("  " . partstr($_));
+           diag(" [$i]  " . partstr($_));
+           $i++;
        }
+
        diag("expected parts:");
+       $i = 0;
        for (@$exp) {
-           diag("  " . partstr($_));
+           diag(" [$i]  " . partstr($_));
+           $i++;
        }
        return '';
     }
@@ -393,7 +251,39 @@ sub sortdumps {
     @_;
 }
 
-### test part selecting
+##
+# Test the timestamps
+
+is_deeply([ Amanda::DB::Catalog::get_write_timestamps(), ],
+    [ '20080111000000', '20080222222222', '20080313133333',
+      '20080414144444', '20080515155555', '20080616166666',
+      '20100722000000' ],
+    "get_write_timestamps returns all logfile datestamps in proper order, with zero-padding");
+
+is(Amanda::DB::Catalog::get_latest_write_timestamp(), '20100722000000',
+    "get_latest_write_timestamp correctly returns the latest write timestamp");
+
+is(Amanda::DB::Catalog::get_latest_write_timestamp(type => 'amdump'), '20100722000000',
+    "get_latest_write_timestamp correctly returns the latest write timestamp of type amdump");
+
+is(Amanda::DB::Catalog::get_latest_write_timestamp(type => 'amflush'), '20080111000000',
+    "get_latest_write_timestamp correctly returns the latest write timestamp of type amflush");
+
+is(Amanda::DB::Catalog::get_latest_write_timestamp(types => [qw(amvault amflush)]),
+    '20080222222222',
+    "get_latest_write_timestamp correctly returns the latest write timestamp of a set of ts's");
+
+is(Amanda::DB::Catalog::get_run_type('20080222222222'), "amvault",
+    "get_run_type detects amvault");
+
+is(Amanda::DB::Catalog::get_run_type('20080111'), "amflush",
+    "get_run_type detects amflush (short ts)");
+
+is(Amanda::DB::Catalog::get_run_type('20080111000000'), "amflush",
+    "get_run_type detects amflush (long ts)");
+
+##
+# test get_parts and sort_parts
 
 got_parts([ sortparts Amanda::DB::Catalog::get_parts() ],
     [ sortparts parts_named qr/.*/ ],
@@ -717,6 +607,11 @@ got_dumps([ sortdumps Amanda::DB::Catalog::get_dumps(dumpspecs => [ @dumpspecs ]
     "get_dumps parameter dumpspecs with a dumpspec that matches nothing",
     zero_dumps_expected => 1);
 
+@dumpspecs = Amanda::Cmdline::dumpspec_t->new(undef, undef, undef, undef, '20080222222222');
+got_dumps([ sortdumps Amanda::DB::Catalog::get_dumps(dumpspecs => [ @dumpspecs ]) ],
+    [ sortdumps dumps_matching { $_->{'write_timestamp'} eq '20080222222222' }],
+    "get_dumps parameter dumpspecs with write_timestamp");
+
 ## test dump sorting
 
 got_dumps([ Amanda::DB::Catalog::sort_dumps(['write_timestamp'],
@@ -770,254 +665,24 @@ got_dumps([ Amanda::DB::Catalog::sort_dumps(['-level'],
 got_dumps([ Amanda::DB::Catalog::sort_dumps(['dump_timestamp'],
                @dumps{
                    'somebox_lib_20080313133333', # dts=20080313133333
-                   'otherbox_usr_bin_20080313133333', # dts=20080311131133
+                   'otherbox_usr_bin_20080313133333_1', # dts=20080311131133
                    }) ],
              [ @dumps{
-                   'otherbox_usr_bin_20080313133333', # dts=20080311131133
+                   'otherbox_usr_bin_20080313133333_1', # dts=20080311131133
                    'somebox_lib_20080313133333', # dts=20080313133333
                    } ],
                "sort dumps by write_timestamp");
 
-__DATA__
-# a short-datestamp logfile with only a single, single-part file in it
-::: log.20080111.0
-:tapelist 20080111 Conf-001
-:timestamp 20080111000000
-DISK planner somebox /lib
-START planner date 20080111
-START driver date 20080111
-STATS driver hostname somebox
-STATS driver startup time 0.051
-FINISH planner date 20080111 time 82.721
-START taper datestamp 20080111 label Conf-001 tape 1
-SUCCESS dumper somebox /lib 20080111 0 [sec 0.209 kb 1970 kps 9382.2 orig-kb 1970]
-SUCCESS chunker somebox /lib 20080111 0 [sec 0.305 kb 420 kps 1478.7]
-STATS driver estimate somebox /lib 20080111 0 [sec 1 nkb 2002 ckb 480 kps 385]
-:dump somebox_lib_20080111 20080111000000 somebox /lib 0 OK "" 1 4.813543 419
-:part somebox_lib_20080111 somebox_lib_20080111 Conf-001 1 1 OK 4.813543 419
-PART taper Conf-001 1 somebox /lib 20080111 1/1 0 [sec 4.813543 kb 419 kps 87.133307]
-DONE taper somebox /lib 20080111 1 0 [sec 4.813543 kb 419 kps 87.133307]
-FINISH driver date 20080111 time 2167.581
-
-# a long-datestamp logfile, also fairly simple
-::: log.20080222222222.0
-:tapelist 20080222222222 Conf-002
-:timestamp 20080222222222
-DISK planner somebox /lib
-START planner date 20080222222222
-START driver date 20080222222222
-STATS driver hostname somebox
-STATS driver startup time 0.051
-FINISH planner date 20080222222222 time 0.102
-SUCCESS dumper somebox /lib 20080222222222 0 [sec 0.012 kb 100 kps 8115.6 orig-kb 100]
-SUCCESS chunker somebox /lib 20080222222222 0 [sec 5.075 kb 100 kps 26.0]
-STATS driver estimate somebox /lib 20080222222222 0 [sec 0 nkb 132 ckb 160 kps 1024]
-START taper datestamp 20080222222222 label Conf-002 tape 1
-:dump somebox_lib_20080222222222 20080222222222 somebox /lib 0 OK "" 2 0.001161 172
-:part somebox_lib_20080222222222_p1 somebox_lib_20080222222222 Conf-002 1 1 OK 0.000733 100
-PART taper Conf-002 1 somebox /lib 20080222222222 1/2 0 [sec 0.000733 kb 100 kps 136425.648022]
-:part somebox_lib_20080222222222_p2 somebox_lib_20080222222222 Conf-002 2 2 OK 0.000428 72
-PART taper Conf-002 2 somebox /lib 20080222222222 2/2 0 [sec 0.000428 kb 72 kps 136425.648022]
-DONE taper somebox /lib 20080222222222 2 0 [sec 0.001161 kb 172 kps 136425.648022]
-FINISH driver date 20080222222222 time 6.206
-
-# a logfile with several dumps in it, one of which comes in many parts, and one of which is
-# from a previous run
-::: log.20080313133333.0
-:tapelist 20080313133333 Conf-003
-:timestamp 20080313133333
-DISK planner somebox /usr/bin
-DISK planner somebox /lib
-DISK planner otherbox /lib
-DISK planner otherbox /usr/bin
-START planner date 20080313133333
-START driver date 20080313133333
-STATS driver hostname somebox
-STATS driver startup time 0.059
-INFO planner Full dump of somebox:/lib promoted from 2 days ahead.
-FINISH planner date 20080313133333 time 0.286
-SUCCESS dumper somebox /usr/bin 20080313133333 1 [sec 0.001 kb 20 kps 10352.0 orig-kb 20]
-SUCCESS chunker somebox /usr/bin 20080313133333 1 [sec 1.023 kb 20 kps 50.8]
-STATS driver estimate somebox /usr/bin 20080313133333 1 [sec 0 nkb 52 ckb 64 kps 1024]
-START taper datestamp 20080313133333 label Conf-003 tape 1
-:dump somebox_usr_bin_20080313133333 20080313133333 somebox /usr/bin 1 OK "" 1 0.000370 20
-:part somebox_usr_bin_20080313133333 somebox_usr_bin_20080313133333 Conf-003 1 1 OK 0.000370 20
-PART taper Conf-003 1 somebox /usr/bin 20080313133333 1/1 1 [sec 0.000370 kb 20 kps 54054.054054]
-DONE taper somebox /usr/bin 20080313133333 1 1 [sec 0.000370 kb 20 kps 54054.054054]
-# a multi-part dump
-SUCCESS dumper somebox /lib 20080313133333 0 [sec 0.189 kb 3156 kps 50253.1 orig-kb 3156]
-SUCCESS chunker somebox /lib 20080313133333 0 [sec 5.250 kb 3156 kps 1815.5]
-STATS driver estimate somebox /lib 20080313133333 0 [sec 1 nkb 3156 ckb 3156 kps 9500]
-:dump somebox_lib_20080313133333 20080313133333 somebox /lib 0 OK "" 10 0.051436 3156
-:part somebox_lib_20080313133333_p1 somebox_lib_20080313133333 Conf-003 2 1 OK 0.005621 1024
-PART taper Conf-003 2 somebox /lib 20080313133333 1/10 0 [sec 0.005621 kb 1024 kps 182173.990393]
-:part somebox_lib_20080313133333_p2 somebox_lib_20080313133333 Conf-003 3 2 OK 0.006527 1024
-PART taper Conf-003 3 somebox /lib 20080313133333 2/10 0 [sec 0.006527 kb 1024 kps 156886.777999]
-:part somebox_lib_20080313133333_p3 somebox_lib_20080313133333 Conf-003 4 3 OK 0.005854 1024
-PART taper Conf-003 4 somebox /lib 20080313133333 3/10 0 [sec 0.005854 kb 1024 kps 174923.129484]
-:part somebox_lib_20080313133333_p4 somebox_lib_20080313133333 Conf-003 5 4 OK 0.007344 1024
-PART taper Conf-003 5 somebox /lib 20080313133333 4/10 0 [sec 0.007344 kb 1024 kps 147993.746743]
-:part somebox_lib_20080313133333_p5 somebox_lib_20080313133333 Conf-003 6 5 OK 0.007344 1024
-PART taper Conf-003 6 somebox /lib 20080313133333 5/10 0 [sec 0.007344 kb 1024 kps 147993.746743]
-:part somebox_lib_20080313133333_p6 somebox_lib_20080313133333 Conf-003 7 6 OK 0.007344 1024
-PART taper Conf-003 7 somebox /lib 20080313133333 6/10 0 [sec 0.007344 kb 1024 kps 147993.746743]
-:part somebox_lib_20080313133333_p7 somebox_lib_20080313133333 Conf-003 8 7 OK 0.007344 1024
-PART taper Conf-003 8 somebox /lib 20080313133333 7/10 0 [sec 0.007344 kb 1024 kps 147993.746743]
-:part somebox_lib_20080313133333_p8 somebox_lib_20080313133333 Conf-003 9 8 OK 0.007344 1024
-PART taper Conf-003 9 somebox /lib 20080313133333 8/10 0 [sec 0.007344 kb 1024 kps 147993.746743]
-:part somebox_lib_20080313133333_p9 somebox_lib_20080313133333 Conf-003 10 9 OK 0.007344 1024
-PART taper Conf-003 10 somebox /lib 20080313133333 9/10 0 [sec 0.007344 kb 1024 kps 147993.746743]
-:part somebox_lib_20080313133333_p10 somebox_lib_20080313133333 Conf-003 11 10 OK 0.001919 284
-PART taper Conf-003 11 somebox /lib 20080313133333 10/10 0 [sec 0.001919 kb 284 kps 147993.746743]
-DONE taper somebox /lib 20080313133333 10 0 [sec 0.051436 kb 3156 kps 184695.543977]
-SUCCESS dumper otherbox /lib 20080313133333 0 [sec 0.001 kb 190 kps 10352.0 orig-kb 20]
-SUCCESS chunker otherbox /lib 20080313133333 0 [sec 1.023 kb 190 kps 50.8]
-STATS driver estimate otherbox /lib 20080313133333 0 [sec 0 nkb 190 ckb 190 kps 1024]
-# this dump is from a previous run, with an older dump_timestamp
-:dump otherbox_usr_bin_20080313133333 20080311131133 otherbox /usr/bin 0 OK "" 1 0.002733 240
-:part otherbox_usr_bin_20080313133333 otherbox_usr_bin_20080313133333 Conf-003 12 1 OK 0.002733 240
-PART taper Conf-003 12 otherbox /usr/bin 20080311131133 1/1 0 [sec 0.002733 kb 240 kps 136425.648022]
-DONE taper otherbox /usr/bin 20080311131133 1 0 [sec 0.002733 kb 240 kps 136425.648022]
-:dump otherbox_lib_20080313133333 20080313133333 otherbox /lib 0 OK "" 1 0.001733 190
-:part otherbox_lib_20080313133333 otherbox_lib_20080313133333 Conf-003 13 1 OK 0.001733 190
-PART taper Conf-003 13 otherbox /lib 20080313133333 1/1 0 [sec 0.001733 kb 190 kps 136425.648022]
-DONE taper otherbox /lib 20080313133333 1 0 [sec 0.001733 kb 190 kps 136425.648022]
-FINISH driver date 20080313133333 time 24.777
-
-# A logfile with some partial parts (PARTPARTIAL) in it
-::: log.20080414144444.0
-:tapelist 20080414144444 Conf-004
-:tapelist 20080414144444 Conf-005
-:timestamp 20080414144444
-DISK planner otherbox /lib
-START planner date 20080414144444
-START driver date 20080414144444
-STATS driver hostname otherbox
-STATS driver startup time 0.075
-INFO taper Will write new label `Conf-004' to new (previously non-amanda) tape
-FINISH planner date 20080414144444 time 2.139
-SUCCESS dumper otherbox /lib 20080414144444 1 [sec 0.003 kb 60 kps 16304.3 orig-kb 60]
-SUCCESS chunker otherbox /lib 20080414144444 1 [sec 1.038 kb 60 kps 88.5]
-STATS driver estimate otherbox /lib 20080414144444 1 [sec 0 nkb 92 ckb 96 kps 1024]
-START taper datestamp 20080414144444 label Conf-004 tape 1
-:dump otherbox_lib_20080414144444 20080414144444 otherbox /lib 1 PARTIAL full-up 0 0.000540 32
-:part otherbox_lib_20080414144444_try1 otherbox_lib_20080414144444 Conf-004 1 1 PARTIAL 0.000707 32
-PARTPARTIAL taper Conf-004 1 otherbox /lib 20080414144444 1/1 1 [sec 0.000707 kb 32 kps 45261.669024] ""
-INFO taper Will request retry of failed split part.
-INFO taper Will write new label `Conf-005' to new (previously non-amanda) tape
-START taper datestamp 20080414144444 label Conf-005 tape 2
-:part otherbox_lib_20080414144444_try2 otherbox_lib_20080414144444 Conf-005 1 1 PARTIAL 0.000540 32
-PARTPARTIAL taper Conf-005 1 otherbox /lib 20080414144444 1/1 1 [sec 0.000540 kb 32 kps 59259.259259] ""
-INFO taper Will request retry of failed split part.
-WARNING driver Out of tapes; going into degraded mode.
-PARTIAL taper otherbox /lib 20080414144444 1 1 [sec 0.000540 kb 32 kps 59259.259259] "full-up"
-# a completely failed dump
-:dump otherbox_boot_20080414144444 20080414144444 otherbox /boot 0 FAIL no-space 0 0.0 0
-FAIL taper otherbox /boot 20080414144444 0 "no-space"
-FINISH driver date 20080414144444 time 6.959
-
-# holding-disk
-:holding otherbox_lib_20080414144444_holding 20080414144444 otherbox /lib 1 OK 256
-:holding oldbox_opt_20080414144444_holding 20080414144444 oldbox /opt 0 OK 1298
-
-# A logfile with orig-kb in taper line
-::: log.20080515155555.0
-:tapelist 20080515155555 Conf-006
-:timestamp 20080515155555
-DISK planner somebox /usr/bin
-DISK planner somebox /lib
-DISK planner otherbox /lib
-DISK planner otherbox /usr/bin
-START planner date 20080515155555
-START driver date 20080515155555
-STATS driver hostname somebox
-STATS driver startup time 0.059
-INFO planner Full dump of somebox:/lib promoted from 2 days ahead.
-FINISH planner date 20080515155555 time 0.286
-SUCCESS dumper somebox /usr/bin 20080515155555 1 [sec 0.001 kb 20 kps 10352.0 orig-kb 20]
-SUCCESS chunker somebox /usr/bin 20080515155555 1 [sec 1.023 kb 20 kps 50.8]
-STATS driver estimate somebox /usr/bin 20080515155555 1 [sec 0 nkb 52 ckb 64 kps 1024]
-START taper datestamp 20080515155555 label Conf-006 tape 1
-:dump somebox_usr_bin_20080515155555 20080515155555 somebox /usr/bin 1 OK "" 1 0.000370 20 20
-:part somebox_usr_bin_20080515155555 somebox_usr_bin_20080515155555 Conf-006 1 1 OK 0.000370 20 20
-PART taper Conf-006 1 somebox /usr/bin 20080515155555 1/1 1 [sec 0.000370 kb 20 kps 54054.054054 orig-kb 20]
-DONE taper somebox /usr/bin 20080515155555 1 1 [sec 0.000370 kb 20 kps 54054.054054 orig-kb 20]
-# a multi-part dump
-SUCCESS dumper somebox /lib 20080515155555 0 [sec 0.189 kb 3156 kps 50253.1 orig-kb 3156]
-SUCCESS chunker somebox /lib 20080515155555 0 [sec 5.250 kb 3156 kps 1815.5]
-STATS driver estimate somebox /lib 20080515155555 0 [sec 1 nkb 3156 ckb 3156 kps 9500]
-:dump somebox_lib_20080515155555 20080515155555 somebox /lib 0 OK "" 10 0.051436 3156 3156
-:part somebox_lib_20080515155555_p1 somebox_lib_20080515155555 Conf-006 2 1 OK 0.005621 1024 3156
-PART taper Conf-006 2 somebox /lib 20080515155555 1/10 0 [sec 0.005621 kb 1024 kps 182173.990393 orig-kb 3156]
-:part somebox_lib_20080515155555_p2 somebox_lib_20080515155555 Conf-006 3 2 OK 0.006527 1024 3156
-PART taper Conf-006 3 somebox /lib 20080515155555 2/10 0 [sec 0.006527 kb 1024 kps 156886.777999 orig-kb 3156]
-:part somebox_lib_20080515155555_p3 somebox_lib_20080515155555 Conf-006 4 3 OK 0.005854 1024 3156
-PART taper Conf-006 4 somebox /lib 20080515155555 3/10 0 [sec 0.005854 kb 1024 kps 174923.129484 orig-kb 3156]
-:part somebox_lib_20080515155555_p4 somebox_lib_20080515155555 Conf-006 5 4 OK 0.007344 1024 3156
-PART taper Conf-006 5 somebox /lib 20080515155555 4/10 0 [sec 0.007344 kb 1024 kps 147993.746743 orig-kb 3156]
-:part somebox_lib_20080515155555_p5 somebox_lib_20080515155555 Conf-006 6 5 OK 0.007344 1024 3156
-PART taper Conf-006 6 somebox /lib 20080515155555 5/10 0 [sec 0.007344 kb 1024 kps 147993.746743 orig-kb 3156]
-:part somebox_lib_20080515155555_p6 somebox_lib_20080515155555 Conf-006 7 6 OK 0.007344 1024 3156
-PART taper Conf-006 7 somebox /lib 20080515155555 6/10 0 [sec 0.007344 kb 1024 kps 147993.746743 orig-kb 3156]
-:part somebox_lib_20080515155555_p7 somebox_lib_20080515155555 Conf-006 8 7 OK 0.007344 1024 3156
-PART taper Conf-006 8 somebox /lib 20080515155555 7/10 0 [sec 0.007344 kb 1024 kps 147993.746743 orig-kb 3156]
-:part somebox_lib_20080515155555_p8 somebox_lib_20080515155555 Conf-006 9 8 OK 0.007344 1024 3156
-PART taper Conf-006 9 somebox /lib 20080515155555 8/10 0 [sec 0.007344 kb 1024 kps 147993.746743 orig-kb 3156]
-:part somebox_lib_20080515155555_p9 somebox_lib_20080515155555 Conf-006 10 9 OK 0.007344 1024 3156
-PART taper Conf-006 10 somebox /lib 20080515155555 9/10 0 [sec 0.007344 kb 1024 kps 147993.746743 orig-kb 3156]
-:part somebox_lib_20080515155555_p10 somebox_lib_20080515155555 Conf-006 11 10 OK 0.001919 284 3156
-PART taper Conf-006 11 somebox /lib 20080515155555 10/10 0 [sec 0.001919 kb 284 kps 147993.746743 orig-kb 3156]
-DONE taper somebox /lib 20080515155555 10 0 [sec 0.051436 kb 3156 kps 184695.543977 orig-kb 3156]
-SUCCESS dumper otherbox /lib 20080515155555 0 [sec 0.001 kb 190 kps 10352.0 orig-kb 20]
-SUCCESS chunker otherbox /lib 20080515155555 0 [sec 1.023 kb 190 kps 50.8]
-STATS driver estimate otherbox /lib 20080515155555 0 [sec 0 nkb 190 ckb 190 kps 1024]
-# this dump is from a previous run, with an older dump_timestamp
-:dump otherbox_usr_bin_20080515155555 20080511151155 otherbox /usr/bin 0 OK "" 1 0.002733 240 240
-:part otherbox_usr_bin_20080515155555 otherbox_usr_bin_20080515155555 Conf-006 12 1 OK 0.002733 240 240
-PART taper Conf-006 12 otherbox /usr/bin 20080511151155 1/1 0 [sec 0.002733 kb 240 kps 136425.648022 orig-kb 240]
-DONE taper otherbox /usr/bin 20080511151155 1 0 [sec 0.002733 kb 240 kps 136425.648022 orig-kb 240]
-:dump otherbox_lib_20080515155555 20080511151555 otherbox /lib 0 OK "" 1 0.001733 190 190
-:part otherbox_lib_20080515155555 otherbox_lib_20080515155555 Conf-006 13 1 OK 0.001733 190 190
-PART taper Conf-006 13 otherbox /lib 20080511151555 1/1 0 [sec 0.001733 kb 190 kps 136425.648022 orig-kb 190]
-DONE taper otherbox /lib 20080515155555 1 0 [sec 0.001733 kb 190 kps 136425.648022 orig-kb 190]
-# this dump is a direct to tape
-:dump otherbox_direct_20080515155555 20080515155555 otherbox /direct 0 OK "" 1 0.001 190 350
-:part otherbox_direct_20080515155555 otherbox_direct_20080515155555 Conf-006 14 1 OK 0.001 190 350
-SUCCESS dumper otherbox /direct 20080515155555 0 [sec 0.001 kb 190 kps 10352.0 orig-kb 350]
-PART taper Conf-006 14 otherbox /direct 20080515155555 1/1 0 [sec 0.001 kb 190 kps 10352.0]
-DONE taper otherbox /direct 20080515155555 1 0 [sec 0.001 kb 190 kps 10352.0 orig-kb 350]
-FINISH driver date 20080515155555 time 24.777
-
-# A logfile with removed tape-kb in taper line
-::: log.20080616166666.0
-:tapelist 20080616166666 Conf-007
-# this tape is removed
-#:tapelist 20080616166666 Conf-007
-:timestamp 20080616166666
-DISK planner somebox /usr/bin
-DISK planner somebox /lib
-DISK planner otherbox /lib
-START planner date 20080616166666
-START driver date 20080616166666
-STATS driver hostname somebox
-STATS driver startup time 0.059
-FINISH planner date 20080616166666 time 0.286
-SUCCESS dumper somebox /usr/bin 20080616166666 1 [sec 0.001 kb 20 kps 10352.0 orig-kb 20]
-SUCCESS chunker somebox /usr/bin 20080616166666 1 [sec 1.023 kb 20 kps 50.8]
-STATS driver estimate somebox /usr/bin 20080616166666 1 [sec 0 nkb 52 ckb 64 kps 1024]
-START taper datestamp 20080616166666 label Conf-007 tape 1
-:dump somebox_usr_bin_20080616166666 20080616166666 somebox /usr/bin 1 OK "" 1 0.000370 20 20
-:part somebox_usr_bin_20080616166666 somebox_usr_bin_20080616166666 Conf-007 1 1 OK 0.000370 20 20
-PART taper Conf-007 1 somebox /usr/bin 20080616166666 1/1 1 [sec 0.000370 kb 20 kps 54054.054054 orig-kb 20]
-DONE taper somebox /usr/bin 20080616166666 1 1 [sec 0.000370 kb 20 kps 54054.054054 orig-kb 20]
-SUCCESS dumper somebox /lib 20080616166666 1 [sec 0.001 kb 20 kps 10352.0 orig-kb 20]
-SUCCESS chunker somebox /lib 20080616166666 1 [sec 1.023 kb 20 kps 50.8]
-:dump somebox_lib_20080616166666 20080616166666 somebox /lib 1 FAIL "" 1 0.000370 20 20
-:part somebox_lib_20080616166666 somebox_lib_20080616166666 Conf-007 2 1 OK 0.000370 20 20
-PART taper Conf-007 2 somebox /lib 20080616166666 1/2 1 [sec 0.000370 kb 20 kps 54054.054054 orig-kb 20]
-STATS driver estimate somebox /lib 20080616166666 1 [sec 0 nkb 52 ckb 64 kps 1024]
-START taper datestamp 20080616166666 label Conf-008 tape 1
-# this tape is removed
-#:part somebox_lib_20080616166666 somebox_lib_20080616166666 Conf-008 1 1 OK 0.000370 20 20
-PART taper Conf-008 1 somebox /lib 20080616166666 2/2 1 [sec 0.000370 kb 20 kps 54054.054054 orig-kb 20]
-DONE taper somebox /lib 20080616166666 1 1 [sec 0.000370 kb 20 kps 54054.054054 orig-kb 20]
+
+# install the multi-taper catalog
+$cat = Installcheck::Catalogs::load("multi-taper");
+$cat->install();
+%dumps = $cat->get_dumps();
+%parts = $cat->get_parts();
+
+Amanda::DB::Catalog::_clear_cache();
+
+got_parts([ sortparts Amanda::DB::Catalog::get_parts() ],
+       [ sortparts parts_named qr/.*/ ],
+       "get_parts returns all parts when given no parameters");
+