1 # Copyright (c) 2008, 2010 Zmanda, Inc. All Rights Reserved.
3 # This program is free software; you can redistribute it and/or modify it
4 # under the terms of the GNU General Public License version 2 as published
5 # by the Free Software Foundation.
7 # This program is distributed in the hope that it will be useful, but
8 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
9 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12 # You should have received a copy of the GNU General Public License along
13 # with this program; if not, write to the Free Software Foundation, Inc.,
14 # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
16 # Contact information: Zmanda Inc., 465 S. Mathilda Ave., Suite 300
17 # Sunnyvale, CA 94085, USA, or: http://www.zmanda.com
19 use Test::More tests => 34;
26 use lib "@amperldir@";
32 Amanda::Debug::dbopen("installcheck");
33 Installcheck::log_test_output();
39 my $log_filename = "$Installcheck::TMP/Amanda_Report_test.log";
41 # copy/pasted from installcheck/Amanda_Logfile.pl . Maybe move this
47 open my $logfile, ">", $log_filename
48 or die("Could not create temporary log file '$log_filename': $!");
49 print $logfile $contents;
55 $LogfileContents{planner} = <<EOF;
56 START planner date 20090728160530
57 INFO planner planner pid 12346
58 DISK planner localhost /root
59 DISK planner localhost /etc
60 DISK planner localhost /var/log
63 $LogfileFlags{planner} = {
67 $LogfileData{planner} = {
68 programs => { planner => { start => "20090728160530", }, },
88 # NOTE: this test is not reflective of real amanda log output.
90 $LogfileContents{driver} = <<EOF;
91 START planner date 20090728122430
92 INFO planner planner pid 12346
93 INFO driver driver pid 12347
94 DISK planner localhost /root
95 DISK planner localhost /etc
96 DISK planner localhost /home
97 START driver date 20090728122430
98 STATS driver hostname localhost
99 STATS driver startup time 0.034
100 STATS driver estimate localhost /root 20090728122430 0 [sec 0 nkb 42 ckb 64 kps 1024]
101 STATS driver estimate localhost /etc 20090728122430 0 [sec 2 nkb 2048 ckb 64 kps 1024]
102 STATS driver estimate localhost /home 20090728122430 0 [sec 4 nkb 5012 ckb 64 kps 1024]
103 FINISH driver date 20090728122445 time 14.46
106 $LogfileFlags{driver} = {
111 $LogfileData{driver} = {
113 planner => { start => "20090728122430", },
115 start => "20090728122430",
116 start_time => "0.034",
158 $LogfileContents{dumper} = <<EOF;
159 START planner date 20090728122430
160 INFO driver driver pid 12345
161 INFO planner planner pid 12346
162 DISK planner localhost /root
163 DISK planner localhost /etc
164 DISK planner localhost /home
165 START driver date 20090728122430
166 STATS driver hostname localhost
167 STATS driver startup time 0.034
168 SUCCESS dumper localhost /root 20090728122430 0 [sec 0.02 kb 42 kps 2100 orig-kb 42]
169 STATS driver estimate localhost /root 20090728122430 0 [sec 0 nkb 42 ckb 64 kps 1024]
170 SUCCESS dumper localhost /etc 20090728122430 0 [sec 0.87 kb 2048 kps 2354 orig-kb 2048]
171 STATS driver estimate localhost /etc 20090728122430 0 [sec 2 nkb 2048 ckb 64 kps 1024]
172 SUCCESS dumper localhost /home 20090728122430 0 [sec 1.68421 kb 4096 kps 2354 orig-kb 4096]
173 STATS driver estimate localhost /home 20090728122430 0 [sec 4 nkb 4096 ckb 64 kps 1024]
174 FINISH driver date 20090728122445 time 14.46
177 $LogfileFlags{dumper} = {
182 $LogfileData{dumper} = {
184 planner => { start => "20090728122430", },
186 start => "20090728122430",
187 start_time => "0.034",
205 date => "20090728122430",
227 date => "20090728122430",
249 date => "20090728122430",
265 $LogfileContents{chunker} = <<EOF;
266 START planner date 20090728122430
267 INFO driver driver pid 12345
268 INFO planner planner pid 12346
269 DISK planner localhost /root
270 DISK planner localhost /etc
271 DISK planner localhost /home
272 START driver date 20090728122430
273 STATS driver hostname localhost
274 STATS driver startup time 0.034
275 SUCCESS dumper localhost /root 20090728122430 0 [sec 0.02 kb 42 kps 2100 orig-kb 42]
276 INFO chunker chunker pid 12348
277 SUCCESS chunker localhost /root 20090728122430 0 [sec 0.02 kb 42 kps 2100]
278 STATS driver estimate localhost /root 20090728122430 0 [sec 0 nkb 42 ckb 64 kps 1024]
279 SUCCESS dumper localhost /etc 20090728122430 0 [sec 0.87 kb 2048 kps 2354 orig-kb 2048]
280 INFO chunker chunker pid 12349
281 SUCCESS chunker localhost /etc 20090728122430 0 [sec 0.79 kb 2048 kps 2592.40506]
282 STATS driver estimate localhost /etc 20090728122430 0 [sec 2 nkb 2048 ckb 64 kps 1024]
283 SUCCESS dumper localhost /home 20090728122430 0 [sec 1.68421 kb 4096 kps 2354 orig-kb 4096]
284 INFO chunker chunker pid 12350
285 PARTIAL chunker localhost /home 20090728122430 0 [sec 0.82 kb 2532 kps 3087.80488]
286 STATS driver estimate localhost /home 20090728122430 0 [sec 4 nkb 4096 ckb 64 kps 1024]
287 FINISH driver date 20090728122445 time 14.46
290 $LogfileFlags{chunker} = {
295 $LogfileData{chunker} = {
297 planner => { start => "20090728122430", },
299 start => "20090728122430",
300 start_time => "0.034",
319 date => "20090728122430",
330 date => "20090728122430",
349 date => "20090728122430",
360 date => "20090728122430",
379 date => "20090728122430",
390 date => "20090728122430",
403 $LogfileContents{taper} = <<EOF;
404 DISK planner somebox /lib
405 START planner date 20080111
406 START driver date 20080111
407 STATS driver hostname somebox
408 STATS driver startup time 0.051
409 FINISH planner date 20080111 time 82.721
410 SUCCESS dumper somebox /lib 20080111 0 [sec 0.209 kb 1970 kps 9382.2 orig-kb 1970]
411 SUCCESS chunker somebox /lib 20080111 0 [sec 0.305 kb 420 kps 1478.7]
412 STATS driver estimate somebox /lib 20080111 0 [sec 1 nkb 2002 ckb 480 kps 385]
413 INFO taper taper pid 28023
414 INFO taper Will write new label `TESTCONF01' to new tape
415 START taper datestamp 20080111 label TESTCONF01 tape 1
416 PART taper TESTCONF01 1 somebox /lib 20080111 1/-1 0 [sec 0.004722 kb 640 kps 135535.789920]
417 PART taper TESTCONF01 2 somebox /lib 20080111 2/-1 0 [sec 0.003438 kb 640 kps 186154.741129]
418 PART taper TESTCONF01 3 somebox /lib 20080111 3/-1 0 [sec 0.002931 kb 640 kps 218355.510065]
419 PART taper TESTCONF01 4 somebox /lib 20080111 4/-1 0 [sec 0.000578 kb 96 kps 166089.965398]
420 PARTIAL taper somebox /lib 20080111 4 0 [sec 0.011669 kb 2016 kps 172765.446911]
421 INFO taper tape TESTCONF01 kb 2016 fm 4 [OK]
422 INFO taper pid-done 28023
423 FINISH driver date 20080111 time 2167.581
426 $LogfileFlags{taper} = {
431 $LogfileData{taper} = {
439 start_time => "0.051",
447 "Will write new label `TESTCONF01' to new tape",
448 "tape TESTCONF01 kb 2016 fm 4 [OK]"
452 'label' => 'TESTCONF01',
460 tape_labels => ['TESTCONF01'],
496 label => "TESTCONF01",
502 kps => "135535.789920",
505 label => "TESTCONF01",
511 kps => "186154.741129",
514 label => "TESTCONF01",
520 kps => "218355.510065",
523 label => "TESTCONF01",
529 kps => "166089.965398",
535 kps => "172765.446911",
547 $LogfileContents{simple} = <<EOF;
548 DISK planner somebox /lib
549 START planner date 20080111
550 START driver date 20080111
551 STATS driver hostname somebox
552 STATS driver startup time 0.051
553 FINISH planner date 20080111 time 82.721
554 START taper datestamp 20080111 label Conf-001 tape 1
555 SUCCESS dumper somebox /lib 20080111 0 [sec 0.209 kb 1970 kps 9382.2 orig-kb 1970]
556 SUCCESS chunker somebox /lib 20080111 0 [sec 0.305 kb 420 kps 1478.7]
557 STATS driver estimate somebox /lib 20080111 0 [sec 1 nkb 2002 ckb 480 kps 385]
558 PART taper Conf-001 1 somebox /lib 20080111 1/1 0 [sec 4.813543 kb 419 kps 87.133307]
559 DONE taper somebox /lib 20080111 1 0 [sec 4.813543 kb 419 kps 87.133307]
560 FINISH driver date 20080111 time 2167.581
563 $LogfileFlags{simple} = {
568 $LogfileData{simple} = {
576 start_time => "0.051",
583 'label' => 'Conf-001',
585 'time' => '4.813543',
586 'date' => '20080111',
591 tape_labels => ["Conf-001"],
651 $LogfileContents{fullExample} = <<EOF;
652 INFO amdump amdump pid 9291
653 INFO driver driver pid 9313
654 INFO planner planner pid 9312
655 DISK planner hostname.example.org /
656 DISK planner hostname.example.org /somedir2
657 DISK planner hostname.example.org /moreapps
658 DISK planner hostname.example.org /apps
659 DISK planner hostname.example.org /somedir
660 START planner date 20081002040002
661 START driver date 20081002040002
662 STATS driver hostname hostname.example.org
663 STATS driver startup time 0.043
664 INFO dumper dumper pid 9316
665 INFO dumper dumper pid 9315
666 INFO dumper dumper pid 9318
667 INFO dumper dumper pid 9317
668 INFO taper taper pid 9314
669 FINISH planner date 20081002040002 time 32.689
670 INFO planner pid-done 9312
671 INFO chunker chunker pid 11110
672 INFO dumper gzip pid 11129
673 SUCCESS dumper hostname.example.org /somedir 20081002040002 1 [sec 0.039 kb 10 kps 250.4 orig-kb 10]
674 SUCCESS chunker hostname.example.org /somedir 20081002040002 1 [sec 5.070 kb 10 kps 8.3]
675 INFO chunker pid-done 11110
676 STATS driver estimate hostname.example.org /somedir 20081002040002 1 [sec 0 nkb 42 ckb 64 kps 1024]
677 INFO dumper pid-done 11129
678 START taper datestamp 20081002040002 label FullBackup-14 tape 1
679 PART taper FullBackup-14 1 hostname.example.org /somedir 20081002040002 1/1 1 [sec 0.002776 kb 10 kps 3602.305476]
680 DONE taper hostname.example.org /somedir 20081002040002 1 1 [sec 0.002776 kb 10 kps 3602.305476]
681 INFO chunker chunker pid 11157
682 INFO dumper gzip pid 11232
683 SUCCESS dumper hostname.example.org /moreapps 20081002040002 1 [sec 0.039 kb 10 kps 250.8 orig-kb 10]
684 INFO dumper pid-done 11232
685 SUCCESS chunker hostname.example.org /moreapps 20081002040002 1 [sec 5.058 kb 10 kps 8.3]
686 INFO chunker pid-done 11157
687 STATS driver estimate hostname.example.org /moreapps 20081002040002 1 [sec 0 nkb 42 ckb 64 kps 149050]
688 PART taper FullBackup-14 2 hostname.example.org /moreapps 20081002040002 1/1 1 [sec 0.002656 kb 10 kps 3765.060241]
689 DONE taper hostname.example.org /moreapps 20081002040002 1 1 [sec 0.002656 kb 10 kps 3765.060241]
690 INFO chunker chunker pid 11700
691 INFO dumper gzip pid 11723
692 SUCCESS dumper hostname.example.org /apps 20081002040002 1 [sec 0.414 kb 6630 kps 16013.4 orig-kb 6630]
693 SUCCESS chunker hostname.example.org /apps 20081002040002 1 [sec 5.432 kb 6630 kps 1226.3]
694 INFO chunker pid-done 11700
695 INFO dumper pid-done 11723
696 STATS driver estimate hostname.example.org /apps 20081002040002 1 [sec 6 nkb 6662 ckb 6688 kps 1024]
697 PART taper FullBackup-14 3 hostname.example.org /apps 20081002040002 1/1 1 [sec 0.071808 kb 6630 kps 92329.545455]
698 DONE taper hostname.example.org /apps 20081002040002 1 1 [sec 0.071808 kb 6630 kps 92329.545455]
699 INFO chunker chunker pid 11792
700 INFO dumper gzip pid 11816
701 SUCCESS dumper hostname.example.org / 20081002040002 1 [sec 3.028 kb 8393 kps 2771.1 orig-kb 82380]
702 SUCCESS chunker hostname.example.org / 20081002040002 1 [sec 8.047 kb 8393 kps 1047.0]
703 INFO chunker pid-done 11792
704 STATS driver estimate hostname.example.org / 20081002040002 1 [sec 39 nkb 80542 ckb 40288 kps 1024]
705 INFO dumper pid-done 11816
706 PART taper FullBackup-14 4 hostname.example.org / 20081002040002 1/1 1 [sec 0.088934 kb 8392 kps 94368.875374]
707 DONE taper hostname.example.org / 20081002040002 1 1 [sec 0.088934 kb 8392 kps 94368.875374]
708 INFO dumper gzip pid 11861
709 SUCCESS dumper hostname.example.org /somedir2 20081002040002 0 [sec 372.700 kb 28776940 kps 77212.0 orig-kb 28776940]
710 PART taper FullBackup-14 5 hostname.example.org /somedir2 20081002040002 1/1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
711 DONE taper hostname.example.org /somedir2 20081002040002 1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
712 INFO dumper pid-done 11861
713 STATS driver estimate hostname.example.org /somedir2 20081002040002 0 [sec 28776940 nkb 28776972 ckb 28776992 kps 1]
714 INFO dumper pid-done 9315
715 INFO dumper pid-done 9317
716 INFO dumper pid-done 9316
717 INFO dumper pid-done 9318
718 INFO taper pid-done 9314
719 FINISH driver date 20081002040002 time 663.574
720 INFO driver pid-done 9313
724 $LogfileFlags{fullExample} = {
729 $LogfileData{fullExample} = {
735 start => "20081002040002",
736 start_time => "0.043",
740 start => "20081002040002",
744 start => '20081002040002',
747 'label' => 'FullBackup-14',
749 'time' => '370.548573',
750 'date' => '20081002040002',
755 tape_labels => ["FullBackup-14"],
759 "hostname.example.org" => {
772 date => "20081002040002",
779 kps => '94368.875374',
785 kps => "94368.875374",
787 date => "20081002040002",
791 label => "FullBackup-14"
802 date => "20081002040002",
824 date => "20081002040002",
826 orig_kb => "28776940",
829 kps => "77695.214669",
835 label => 'FullBackup-14',
836 date => '20081002040002',
837 kps => '77695.214669',
864 'status' => 'success',
865 'date' => '20081002040002',
869 'kps' => '3765.060241',
875 kps => "3765.060241",
877 date => "20081002040002",
881 label => "FullBackup-14"
891 'status' => 'success',
892 'date' => '20081002040002',
914 date => "20081002040002",
918 kps => "92329.545455",
924 kps => "92329.545455",
926 date => "20081002040002",
930 label => "FullBackup-14"
941 date => "20081002040002",
963 date => "20081002040002",
967 kps => "3602.305476",
973 kps => "3602.305476",
975 date => "20081002040002",
979 label => "FullBackup-14",
990 date => "20081002040002",
1001 $LogfileContents{amflushExample} = <<EOF;
1002 INFO amflush amflush pid 26036
1003 DISK amflush localhost /backups/oracle
1004 DISK amflush localhost /backups/mysql
1005 DISK amflush localhost /usr/local/bin
1006 DISK amflush localhost /etc
1007 DISK amflush localhost /home
1008 START amflush date 20090622075550
1009 INFO driver driver pid 26076
1010 START driver date 20090622075550
1011 STATS driver hostname localhost
1012 STATS driver startup time 0.011
1013 INFO taper taper pid 26077
1014 START taper datestamp 20090622075550 label DailyTapeDataSet-017 tape 1
1015 PART taper DailyTapeDataSet-017 1 localhost /etc 20090620020002 1/1 1 [sec 2.504314 kb 36980 kps 14766.518895]
1016 DONE taper localhost /etc 20090620020002 1 1 [sec 2.504314 kb 36980 kps 14766.518895]
1017 PART taper DailyTapeDataSet-017 2 localhost /usr/local/bin 20090620020002 1/1 1 [sec 1.675693 kb 309 kps 184.632684]
1018 DONE taper localhost /usr/local/bin 20090620020002 1 1 [sec 1.675693 kb 309 kps 184.632684]
1019 INFO taper pid-done 26077
1020 FINISH driver date 20090622075550 time 177.708
1021 INFO driver pid-done 26076
1022 INFO amflush pid-done 26075
1025 $LogfileFlags{amflushExample} = {
1030 $LogfileData{amflushExample} = {
1033 'start' => '20090622075550',
1035 'DailyTapeDataSet-017' => {
1036 'label' => 'DailyTapeDataSet-017',
1038 'time' => '4.180007',
1039 'date' => '20090622075550',
1044 tape_labels => ["DailyTapeDataSet-017"],
1046 'amflush' => { 'start' => '20090622075550' },
1048 'time' => '177.708',
1049 'start_time' => '0.011',
1050 'start' => '20090622075550'
1060 'kps' => '14766.518895',
1062 'sec' => '2.504314',
1066 'kps' => '14766.518895',
1067 'sec' => '2.504314',
1068 'date' => '20090620020002',
1072 'label' => 'DailyTapeDataSet-017'
1081 '/backups/oracle' => {
1085 '/usr/local/bin' => {
1090 'kps' => '184.632684',
1092 'sec' => '1.675693',
1096 'kps' => '184.632684',
1097 'sec' => '1.675693',
1098 'date' => '20090620020002',
1102 'label' => 'DailyTapeDataSet-017'
1115 '/backups/mysql' => {
1123 foreach my $test ( keys %LogfileContents ) {
1125 unless ( exists $LogfileData{$test} ) {
1126 die "error: $test present in \%LogfileContents but not \%LogfileData\n";
1130 Amanda::Report->new( write_logfile( $LogfileContents{$test} ), 1 );
1131 is_deeply( $report->{data}, $LogfileData{$test}, "data check: $test" );
1135 $report->get_flag($_), "==",
1136 $LogfileFlags{$test}->{$_},
1137 "flag test: $_, $test"
1139 } keys %{ $LogfileFlags{$test} };
1143 # Test the report API
1146 Amanda::Report->new( write_logfile( $LogfileContents{fullExample} ), 1 );
1148 is_deeply( [ $report->get_hosts() ],
1149 ['hostname.example.org'], 'check: Amanda::Report::get_hosts()' );
1152 [ sort { $a cmp $b } $report->get_disks('hostname.example.org') ],
1153 [ '/', '/apps', '/moreapps', '/somedir', '/somedir2' ],
1154 'check: Amanda::Report::get_disks($hostname)'
1158 [ sort { $a->[1] cmp $b->[1] } $report->get_dles() ],
1160 [ 'hostname.example.org', '/' ],
1161 [ 'hostname.example.org', '/apps' ],
1162 [ 'hostname.example.org', '/moreapps' ],
1163 [ 'hostname.example.org', '/somedir' ],
1164 [ 'hostname.example.org', '/somedir2' ],
1166 'check: Amanda::Report::get_dles()'
1170 $report->get_dle_info("hostname.example.org", "/apps"),
1185 status => "success",
1186 date => "20081002040002",
1190 kps => "92329.545455",
1196 kps => "92329.545455",
1198 date => "20081002040002",
1202 label => "FullBackup-14"
1212 status => "success",
1213 date => "20081002040002",
1220 'check: Amanda::Report::get_dle_info($hostname, $disk)'
1224 $report->get_dle_info( 'hostname.example.org', '/', 'estimate' ),
1232 'check: Amanda::Report::get_dle_info($hostname, $disk, $field)'
1236 $report->get_program_info('planner'),
1239 start => "20081002040002",
1241 'check: Amanda::Report::get_program_info($program)'
1245 $report->get_program_info('driver', 'start', 0),
1247 'check: Amanda::Report::get_program_info($program, $field, $default) field exists'
1250 # dummy check, makes sure default value gets set correctly
1252 $report->get_program_info('planner', 'fake_field', 67),
1254 'check: Amanda::Report::get_program_info($program, $field, $default) default case'
1258 $report->get_program_info('planner', 'fake_field', 32),
1260 'check: Amanda::Report::get_program_info($program, $field, $default) default "sticks"'
1263 $report->get_program_info('planner', 'fake_field2', 0);
1266 $report->get_program_info('planner', 'fake_field2', 1),
1268 'check: Amanda::Report::get_program_info($program, $field, $default) false default "sticks"'
1271 ok($report->get_flag('historical'),
1272 "historical flag processed correctly");
1275 unlink($log_filename) if -f $log_filename;