1 # Copyright (c) 2008-2012 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 => 58;
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} = {
70 $LogfileData{planner} = {
71 programs => { planner => { start => "20090728160530", }, },
91 # NOTE: this test is not reflective of real amanda log output.
93 $LogfileContents{driver} = <<EOF;
94 START planner date 20090728122430
95 INFO planner planner pid 12346
96 INFO driver driver pid 12347
97 DISK planner localhost /root
98 DISK planner localhost /etc
99 DISK planner localhost /home
100 START driver date 20090728122430
101 STATS driver hostname localhost
102 STATS driver startup time 0.034
103 STATS driver estimate localhost /root 20090728122430 0 [sec 0 nkb 42 ckb 64 kps 1024]
104 STATS driver estimate localhost /etc 20090728122430 0 [sec 2 nkb 2048 ckb 64 kps 1024]
105 STATS driver estimate localhost /home 20090728122430 0 [sec 4 nkb 5012 ckb 64 kps 1024]
106 FINISH driver date 20090728122445 time 14.46
109 $LogfileFlags{driver} = {
112 results_missing => 1,
117 $LogfileData{driver} = {
119 planner => { start => "20090728122430", },
121 start => "20090728122430",
122 start_time => "0.034",
164 $LogfileContents{dumper} = <<EOF;
165 START planner date 20090728122430
166 INFO driver driver pid 12345
167 INFO planner planner pid 12346
168 DISK planner localhost /root
169 DISK planner localhost /etc
170 DISK planner localhost /home
171 START driver date 20090728122430
172 STATS driver hostname localhost
173 STATS driver startup time 0.034
174 SUCCESS dumper localhost /root 20090728122430 0 [sec 0.02 kb 42 kps 2100 orig-kb 42]
175 STATS driver estimate localhost /root 20090728122430 0 [sec 0 nkb 42 ckb 64 kps 1024]
176 SUCCESS dumper localhost /etc 20090728122430 0 [sec 0.87 kb 2048 kps 2354 orig-kb 2048]
177 STATS driver estimate localhost /etc 20090728122430 0 [sec 2 nkb 2048 ckb 64 kps 1024]
178 SUCCESS dumper localhost /home 20090728122430 0 [sec 1.68421 kb 4096 kps 2354 orig-kb 4096]
179 STATS driver estimate localhost /home 20090728122430 0 [sec 4 nkb 4096 ckb 64 kps 1024]
180 FINISH driver date 20090728122445 time 14.46
183 $LogfileFlags{dumper} = {
186 results_missing => 0,
191 $LogfileData{dumper} = {
193 planner => { start => "20090728122430", },
195 start => "20090728122430",
196 start_time => "0.034",
212 '20090728122430' => [
215 date => "20090728122430",
236 '20090728122430' => [
239 date => "20090728122430",
260 '20090728122430' => [
263 date => "20090728122430",
280 $LogfileContents{chunker} = <<EOF;
281 START planner date 20090728122430
282 INFO driver driver pid 12345
283 INFO planner planner pid 12346
284 DISK planner localhost /root
285 DISK planner localhost /etc
286 DISK planner localhost /home
287 START driver date 20090728122430
288 STATS driver hostname localhost
289 STATS driver startup time 0.034
290 SUCCESS dumper localhost /root 20090728122430 0 [sec 0.02 kb 42 kps 2100 orig-kb 42]
291 INFO chunker chunker pid 12348
292 SUCCESS chunker localhost /root 20090728122430 0 [sec 0.02 kb 42 kps 2100]
293 STATS driver estimate localhost /root 20090728122430 0 [sec 0 nkb 42 ckb 64 kps 1024]
294 SUCCESS dumper localhost /etc 20090728122430 0 [sec 0.87 kb 2048 kps 2354 orig-kb 2048]
295 INFO chunker chunker pid 12349
296 SUCCESS chunker localhost /etc 20090728122430 0 [sec 0.79 kb 2048 kps 2592.40506]
297 STATS driver estimate localhost /etc 20090728122430 0 [sec 2 nkb 2048 ckb 64 kps 1024]
298 SUCCESS dumper localhost /home 20090728122430 0 [sec 1.68421 kb 4096 kps 2354 orig-kb 4096]
299 INFO chunker chunker pid 12350
300 PARTIAL chunker localhost /home 20090728122430 0 [sec 0.82 kb 2532 kps 3087.80488]
301 STATS driver estimate localhost /home 20090728122430 0 [sec 4 nkb 4096 ckb 64 kps 1024]
302 FINISH driver date 20090728122445 time 14.46
305 $LogfileFlags{chunker} = {
308 results_missing => 0,
313 $LogfileData{chunker} = {
315 planner => { start => "20090728122430", },
317 start => "20090728122430",
318 start_time => "0.034",
335 '20090728122430' => [
338 date => "20090728122430",
349 date => "20090728122430",
367 '20090728122430' => [
370 date => "20090728122430",
381 date => "20090728122430",
399 '20090728122430' => [
402 date => "20090728122430",
413 date => "20090728122430",
427 $LogfileContents{taper} = <<EOF;
428 DISK planner somebox /lib
429 START planner date 20080111
430 START driver date 20080111
431 STATS driver hostname somebox
432 STATS driver startup time 0.051
433 FINISH planner date 20080111 time 82.721
434 SUCCESS dumper somebox /lib 20080111 0 [sec 0.209 kb 1970 kps 9382.2 orig-kb 1970]
435 SUCCESS chunker somebox /lib 20080111 0 [sec 0.305 kb 420 kps 1478.7]
436 STATS driver estimate somebox /lib 20080111 0 [sec 1 nkb 2002 ckb 480 kps 385]
437 INFO taper taper pid 28023
438 START taper datestamp 20080111 label TESTCONF01 tape 1
439 PART taper TESTCONF01 1 somebox /lib 20080111 1/-1 0 [sec 0.004722 kb 640 kps 135535.789920]
440 PART taper TESTCONF01 2 somebox /lib 20080111 2/-1 0 [sec 0.003438 kb 640 kps 186154.741129]
441 PART taper TESTCONF01 3 somebox /lib 20080111 3/-1 0 [sec 0.002931 kb 640 kps 218355.510065]
442 PART taper TESTCONF01 4 somebox /lib 20080111 4/-1 0 [sec 0.000578 kb 96 kps 166089.965398]
443 PARTIAL taper somebox /lib 20080111 4 0 [sec 0.011669 kb 2016 kps 172765.446911]
444 INFO taper tape TESTCONF01 kb 2016 fm 4 [OK]
445 INFO taper pid-done 28023
446 FINISH driver date 20080111 time 2167.581
449 $LogfileFlags{taper} = {
452 results_missing => 0,
457 $LogfileData{taper} = {
465 start_time => "0.051",
473 "tape TESTCONF01 kb 2016 fm 4 [OK]"
477 'label' => 'TESTCONF01',
485 tape_labels => ['TESTCONF01'],
522 label => "TESTCONF01",
528 kps => "135535.789920",
531 label => "TESTCONF01",
537 kps => "186154.741129",
540 label => "TESTCONF01",
546 kps => "218355.510065",
549 label => "TESTCONF01",
555 kps => "166089.965398",
561 kps => "172765.446911",
574 $LogfileContents{simple} = <<EOF;
575 DISK planner somebox /lib
576 START planner date 20080111
577 START driver date 20080111
578 STATS driver hostname somebox
579 STATS driver startup time 0.051
580 FINISH planner date 20080111 time 82.721
581 START taper datestamp 20080111 label Conf-001 tape 1
582 SUCCESS dumper somebox /lib 20080111 0 [sec 0.209 kb 1970 kps 9382.2 orig-kb 1970]
583 SUCCESS chunker somebox /lib 20080111 0 [sec 0.305 kb 420 kps 1478.7]
584 STATS driver estimate somebox /lib 20080111 0 [sec 1 nkb 2002 ckb 480 kps 385]
585 PART taper Conf-001 1 somebox /lib 20080111 1/1 0 [sec 4.813543 kb 419 kps 87.133307]
586 DONE taper somebox /lib 20080111 1 0 [sec 4.813543 kb 419 kps 87.133307]
587 FINISH driver date 20080111 time 2167.581
590 $LogfileFlags{simple} = {
593 results_missing => 0,
598 $LogfileData{simple} = {
606 start_time => "0.051",
613 'label' => 'Conf-001',
615 'time' => '4.813543',
616 'date' => '20080111',
621 tape_labels => ["Conf-001"],
683 $LogfileContents{fullExample} = <<EOF;
684 INFO amdump amdump pid 9291
685 INFO driver driver pid 9313
686 INFO planner planner pid 9312
687 DISK planner hostname.example.org /
688 DISK planner hostname.example.org /somedir2
689 DISK planner hostname.example.org /moreapps
690 DISK planner hostname.example.org /apps
691 DISK planner hostname.example.org /somedir
692 START planner date 20081002040002
693 START driver date 20081002040002
694 STATS driver hostname hostname.example.org
695 STATS driver startup time 0.043
696 INFO dumper dumper pid 9316
697 INFO dumper dumper pid 9315
698 INFO dumper dumper pid 9318
699 INFO dumper dumper pid 9317
700 INFO taper taper pid 9314
701 FINISH planner date 20081002040002 time 32.689
702 INFO planner pid-done 9312
703 INFO chunker chunker pid 11110
704 INFO dumper gzip pid 11129
705 SUCCESS dumper hostname.example.org /somedir 20081002040002 1 [sec 0.039 kb 10 kps 250.4 orig-kb 10]
706 SUCCESS chunker hostname.example.org /somedir 20081002040002 1 [sec 5.070 kb 10 kps 8.3]
707 INFO chunker pid-done 11110
708 STATS driver estimate hostname.example.org /somedir 20081002040002 1 [sec 0 nkb 42 ckb 64 kps 1024]
709 INFO dumper pid-done 11129
710 START taper datestamp 20081002040002 label FullBackup-14 tape 1
711 PART taper FullBackup-14 1 hostname.example.org /somedir 20081002040002 1/1 1 [sec 0.002776 kb 10 kps 3602.305476]
712 DONE taper hostname.example.org /somedir 20081002040002 1 1 [sec 0.002776 kb 10 kps 3602.305476]
713 INFO chunker chunker pid 11157
714 INFO dumper gzip pid 11232
715 SUCCESS dumper hostname.example.org /moreapps 20081002040002 1 [sec 0.039 kb 10 kps 250.8 orig-kb 10]
716 INFO dumper pid-done 11232
717 SUCCESS chunker hostname.example.org /moreapps 20081002040002 1 [sec 5.058 kb 10 kps 8.3]
718 INFO chunker pid-done 11157
719 STATS driver estimate hostname.example.org /moreapps 20081002040002 1 [sec 0 nkb 42 ckb 64 kps 149050]
720 PART taper FullBackup-14 2 hostname.example.org /moreapps 20081002040002 1/1 1 [sec 0.002656 kb 10 kps 3765.060241]
721 DONE taper hostname.example.org /moreapps 20081002040002 1 1 [sec 0.002656 kb 10 kps 3765.060241]
722 INFO chunker chunker pid 11700
723 INFO dumper gzip pid 11723
724 SUCCESS dumper hostname.example.org /apps 20081002040002 1 [sec 0.414 kb 6630 kps 16013.4 orig-kb 6630]
725 SUCCESS chunker hostname.example.org /apps 20081002040002 1 [sec 5.432 kb 6630 kps 1226.3]
726 INFO chunker pid-done 11700
727 INFO dumper pid-done 11723
728 STATS driver estimate hostname.example.org /apps 20081002040002 1 [sec 6 nkb 6662 ckb 6688 kps 1024]
729 PART taper FullBackup-14 3 hostname.example.org /apps 20081002040002 1/1 1 [sec 0.071808 kb 6630 kps 92329.545455]
730 DONE taper hostname.example.org /apps 20081002040002 1 1 [sec 0.071808 kb 6630 kps 92329.545455]
731 INFO chunker chunker pid 11792
732 INFO dumper gzip pid 11816
733 SUCCESS dumper hostname.example.org / 20081002040002 1 [sec 3.028 kb 8393 kps 2771.1 orig-kb 82380]
734 SUCCESS chunker hostname.example.org / 20081002040002 1 [sec 8.047 kb 8393 kps 1047.0]
735 INFO chunker pid-done 11792
736 STATS driver estimate hostname.example.org / 20081002040002 1 [sec 39 nkb 80542 ckb 40288 kps 1024]
737 INFO dumper pid-done 11816
738 PART taper FullBackup-14 4 hostname.example.org / 20081002040002 1/1 1 [sec 0.088934 kb 8392 kps 94368.875374]
739 DONE taper hostname.example.org / 20081002040002 1 1 [sec 0.088934 kb 8392 kps 94368.875374]
740 INFO dumper gzip pid 11861
741 STRANGE dumper hostname.example.org /somedir2 0 [sec 372.700 kb 28776940 kps 77212.0 orig-kb 28776940]
743 PART taper FullBackup-14 5 hostname.example.org /somedir2 20081002040002 1/1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
744 DONE taper hostname.example.org /somedir2 20081002040002 1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
745 INFO dumper pid-done 11861
746 STATS driver estimate hostname.example.org /somedir2 20081002040002 0 [sec 28776940 nkb 28776972 ckb 28776992 kps 1]
747 PART taper FullBackup-14 6 hostname.example.org /somedir2 20081002030002 1/1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
748 DONE taper hostname.example.org /somedir2 20081002030002 1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
749 INFO dumper pid-done 9315
750 INFO dumper pid-done 9317
751 INFO dumper pid-done 9316
752 INFO dumper pid-done 9318
753 INFO taper pid-done 9314
754 FINISH driver date 20081002040002 time 663.574
755 INFO driver pid-done 9313
759 $LogfileFlags{fullExample} = {
762 results_missing => 0,
767 $LogfileData{fullExample} = {
773 start => "20081002040002",
774 start_time => "0.043",
778 start => "20081002040002",
782 start => '20081002040002',
785 'label' => 'FullBackup-14',
787 'time' => '740.930972',
788 'date' => '20081002040002',
793 tape_labels => ["FullBackup-14"],
797 "hostname.example.org" => {
807 '20081002040002' => [
811 date => "20081002040002",
818 kps => '94368.875374',
824 kps => "94368.875374",
826 date => "20081002040002",
830 label => "FullBackup-14"
841 date => "20081002040002",
858 "20081002040002" => [
865 #date => "20081002040002",
867 orig_kb => "28776940",
869 stranges => [ "! strange data" ],
872 kps => "77695.214669",
878 label => 'FullBackup-14',
879 date => '20081002040002',
880 kps => '77695.214669',
892 "20081002030002" => [
895 kps => "77695.214669",
901 label => 'FullBackup-14',
902 date => '20081002030002',
903 kps => '77695.214669',
926 '20081002040002' => [
932 'status' => 'success',
933 'date' => '20081002040002',
937 'kps' => '3765.060241',
943 kps => "3765.060241",
945 date => "20081002040002",
949 label => "FullBackup-14"
959 'status' => 'success',
960 'date' => '20081002040002',
977 '20081002040002' => [
984 date => "20081002040002",
988 kps => "92329.545455",
994 kps => "92329.545455",
996 date => "20081002040002",
1000 label => "FullBackup-14"
1010 status => "success",
1011 date => "20081002040002",
1028 "20081002040002" => [
1034 status => "success",
1035 date => "20081002040002",
1039 kps => "3602.305476",
1045 kps => "3602.305476",
1047 date => "20081002040002",
1051 label => "FullBackup-14",
1061 status => "success",
1062 date => "20081002040002",
1074 $LogfileContents{amflushExample} = <<EOF;
1075 INFO amflush amflush pid 26036
1076 DISK amflush localhost /backups/oracle
1077 DISK amflush localhost /backups/mysql
1078 DISK amflush localhost /usr/local/bin
1079 DISK amflush localhost /etc
1080 DISK amflush localhost /home
1081 START amflush date 20090622075550
1082 INFO driver driver pid 26076
1083 START driver date 20090622075550
1084 STATS driver hostname localhost
1085 STATS driver startup time 0.011
1086 INFO taper taper pid 26077
1087 START taper datestamp 20090622075550 label DailyTapeDataSet-017 tape 1
1088 PART taper DailyTapeDataSet-017 1 localhost /etc 20090620020002 1/1 1 [sec 2.504314 kb 36980 kps 14766.518895]
1089 DONE taper localhost /etc 20090620020002 1 1 [sec 2.504314 kb 36980 kps 14766.518895]
1090 PART taper DailyTapeDataSet-017 2 localhost /usr/local/bin 20090620020002 1/1 1 [sec 1.675693 kb 309 kps 184.632684]
1091 DONE taper localhost /usr/local/bin 20090620020002 1 1 [sec 1.675693 kb 309 kps 184.632684]
1092 INFO taper pid-done 26077
1093 FINISH driver date 20090622075550 time 177.708
1094 INFO driver pid-done 26076
1095 INFO amflush pid-done 26075
1098 $LogfileFlags{amflushExample} = {
1101 results_missing => 0,
1106 $LogfileData{amflushExample} = {
1109 'start' => '20090622075550',
1111 'DailyTapeDataSet-017' => {
1112 'label' => 'DailyTapeDataSet-017',
1114 'time' => '4.180007',
1115 'date' => '20090622075550',
1120 tape_labels => ["DailyTapeDataSet-017"],
1122 'amflush' => { 'start' => '20090622075550' },
1124 'time' => '177.708',
1125 'start_time' => '0.011',
1126 'start' => '20090622075550'
1134 '20090620020002' => [
1137 'kps' => '14766.518895',
1139 'sec' => '2.504314',
1143 'kps' => '14766.518895',
1144 'sec' => '2.504314',
1145 'date' => '20090620020002',
1149 'label' => 'DailyTapeDataSet-017'
1159 '/backups/oracle' => {
1163 '/usr/local/bin' => {
1166 '20090620020002' => [
1169 'kps' => '184.632684',
1171 'sec' => '1.675693',
1175 'kps' => '184.632684',
1176 'sec' => '1.675693',
1177 'date' => '20090620020002',
1181 'label' => 'DailyTapeDataSet-017'
1194 '/backups/mysql' => {
1202 foreach my $test ( keys %LogfileContents ) {
1204 unless ( exists $LogfileData{$test} ) {
1205 die "error: $test present in \%LogfileContents but not \%LogfileData\n";
1209 Amanda::Report->new( write_logfile( $LogfileContents{$test} ), 1 );
1210 is_deeply( $report->{data}, $LogfileData{$test}, "data check: $test" );
1214 $report->get_flag($_), "==",
1215 $LogfileFlags{$test}->{$_},
1216 "flag test: $_, $test"
1218 } keys %{ $LogfileFlags{$test} };
1222 # Test the report API
1225 Amanda::Report->new( write_logfile( $LogfileContents{fullExample} ), 1 );
1227 is_deeply( [ $report->get_hosts() ],
1228 ['hostname.example.org'], 'check: Amanda::Report::get_hosts()' );
1231 [ sort { $a cmp $b } $report->get_disks('hostname.example.org') ],
1232 [ '/', '/apps', '/moreapps', '/somedir', '/somedir2' ],
1233 'check: Amanda::Report::get_disks($hostname)'
1237 [ sort { $a->[1] cmp $b->[1] } $report->get_dles() ],
1239 [ 'hostname.example.org', '/' ],
1240 [ 'hostname.example.org', '/apps' ],
1241 [ 'hostname.example.org', '/moreapps' ],
1242 [ 'hostname.example.org', '/somedir' ],
1243 [ 'hostname.example.org', '/somedir2' ],
1245 'check: Amanda::Report::get_dles()'
1249 $report->get_dle_info("hostname.example.org", "/apps"),
1259 '20081002040002' => [
1265 status => "success",
1266 date => "20081002040002",
1270 kps => "92329.545455",
1276 kps => "92329.545455",
1278 date => "20081002040002",
1282 label => "FullBackup-14"
1292 status => "success",
1293 date => "20081002040002",
1301 'check: Amanda::Report::get_dle_info($hostname, $disk)'
1305 $report->get_dle_info( 'hostname.example.org', '/', 'estimate' ),
1313 'check: Amanda::Report::get_dle_info($hostname, $disk, $field)'
1317 $report->get_program_info('planner'),
1320 start => "20081002040002",
1322 'check: Amanda::Report::get_program_info($program)'
1326 $report->get_program_info('driver', 'start', 0),
1328 'check: Amanda::Report::get_program_info($program, $field, $default) field exists'
1331 # dummy check, makes sure default value gets set correctly
1333 $report->get_program_info('planner', 'fake_field', 67),
1335 'check: Amanda::Report::get_program_info($program, $field, $default) default case'
1339 $report->get_program_info('planner', 'fake_field', 32),
1341 'check: Amanda::Report::get_program_info($program, $field, $default) default "sticks"'
1344 $report->get_program_info('planner', 'fake_field2', 0);
1347 $report->get_program_info('planner', 'fake_field2', 1),
1349 'check: Amanda::Report::get_program_info($program, $field, $default) false default "sticks"'
1352 ok($report->get_flag('historical'),
1353 "historical flag processed correctly");
1356 unlink($log_filename) if -f $log_filename;