1 # Copyright (c) 2008-2012 Zmanda, Inc. All Rights Reserved.
3 # This program is free software; you can redistribute it and/or
4 # modify it under the terms of the GNU General Public License
5 # as published by the Free Software Foundation; either version 2
6 # of the License, or (at your option) any later version.
8 # This program is distributed in the hope that it will be useful, but
9 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
10 # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 # You should have received a copy of the GNU General Public License along
14 # with this program; if not, write to the Free Software Foundation, Inc.,
15 # 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 # Contact information: Zmanda Inc., 465 S. Mathilda Ave., Suite 300
18 # Sunnyvale, CA 94085, USA, or: http://www.zmanda.com
20 use Test::More tests => 58;
27 use lib "@amperldir@";
33 Amanda::Debug::dbopen("installcheck");
34 Installcheck::log_test_output();
40 my $log_filename = "$Installcheck::TMP/Amanda_Report_test.log";
42 # copy/pasted from installcheck/Amanda_Logfile.pl . Maybe move this
48 open my $logfile, ">", $log_filename
49 or die("Could not create temporary log file '$log_filename': $!");
50 print $logfile $contents;
56 $LogfileContents{planner} = <<EOF;
57 START planner date 20090728160530
58 INFO planner planner pid 12346
59 DISK planner localhost /root
60 DISK planner localhost /etc
61 DISK planner localhost /var/log
64 $LogfileFlags{planner} = {
71 $LogfileData{planner} = {
72 programs => { planner => { start => "20090728160530", }, },
92 # NOTE: this test is not reflective of real amanda log output.
94 $LogfileContents{driver} = <<EOF;
95 START planner date 20090728122430
96 INFO planner planner pid 12346
97 INFO driver driver pid 12347
98 DISK planner localhost /root
99 DISK planner localhost /etc
100 DISK planner localhost /home
101 START driver date 20090728122430
102 STATS driver hostname localhost
103 STATS driver startup time 0.034
104 STATS driver estimate localhost /root 20090728122430 0 [sec 0 nkb 42 ckb 64 kps 1024]
105 STATS driver estimate localhost /etc 20090728122430 0 [sec 2 nkb 2048 ckb 64 kps 1024]
106 STATS driver estimate localhost /home 20090728122430 0 [sec 4 nkb 5012 ckb 64 kps 1024]
107 FINISH driver date 20090728122445 time 14.46
110 $LogfileFlags{driver} = {
113 results_missing => 1,
118 $LogfileData{driver} = {
120 planner => { start => "20090728122430", },
122 start => "20090728122430",
123 start_time => "0.034",
165 $LogfileContents{dumper} = <<EOF;
166 START planner date 20090728122430
167 INFO driver driver pid 12345
168 INFO planner planner pid 12346
169 DISK planner localhost /root
170 DISK planner localhost /etc
171 DISK planner localhost /home
172 START driver date 20090728122430
173 STATS driver hostname localhost
174 STATS driver startup time 0.034
175 SUCCESS dumper localhost /root 20090728122430 0 [sec 0.02 kb 42 kps 2100 orig-kb 42]
176 STATS driver estimate localhost /root 20090728122430 0 [sec 0 nkb 42 ckb 64 kps 1024]
177 SUCCESS dumper localhost /etc 20090728122430 0 [sec 0.87 kb 2048 kps 2354 orig-kb 2048]
178 STATS driver estimate localhost /etc 20090728122430 0 [sec 2 nkb 2048 ckb 64 kps 1024]
179 SUCCESS dumper localhost /home 20090728122430 0 [sec 1.68421 kb 4096 kps 2354 orig-kb 4096]
180 STATS driver estimate localhost /home 20090728122430 0 [sec 4 nkb 4096 ckb 64 kps 1024]
181 FINISH driver date 20090728122445 time 14.46
184 $LogfileFlags{dumper} = {
187 results_missing => 0,
192 $LogfileData{dumper} = {
194 planner => { start => "20090728122430", },
196 start => "20090728122430",
197 start_time => "0.034",
213 '20090728122430' => [
216 date => "20090728122430",
237 '20090728122430' => [
240 date => "20090728122430",
261 '20090728122430' => [
264 date => "20090728122430",
281 $LogfileContents{chunker} = <<EOF;
282 START planner date 20090728122430
283 INFO driver driver pid 12345
284 INFO planner planner pid 12346
285 DISK planner localhost /root
286 DISK planner localhost /etc
287 DISK planner localhost /home
288 START driver date 20090728122430
289 STATS driver hostname localhost
290 STATS driver startup time 0.034
291 SUCCESS dumper localhost /root 20090728122430 0 [sec 0.02 kb 42 kps 2100 orig-kb 42]
292 INFO chunker chunker pid 12348
293 SUCCESS chunker localhost /root 20090728122430 0 [sec 0.02 kb 42 kps 2100]
294 STATS driver estimate localhost /root 20090728122430 0 [sec 0 nkb 42 ckb 64 kps 1024]
295 SUCCESS dumper localhost /etc 20090728122430 0 [sec 0.87 kb 2048 kps 2354 orig-kb 2048]
296 INFO chunker chunker pid 12349
297 SUCCESS chunker localhost /etc 20090728122430 0 [sec 0.79 kb 2048 kps 2592.40506]
298 STATS driver estimate localhost /etc 20090728122430 0 [sec 2 nkb 2048 ckb 64 kps 1024]
299 SUCCESS dumper localhost /home 20090728122430 0 [sec 1.68421 kb 4096 kps 2354 orig-kb 4096]
300 INFO chunker chunker pid 12350
301 PARTIAL chunker localhost /home 20090728122430 0 [sec 0.82 kb 2532 kps 3087.80488]
302 STATS driver estimate localhost /home 20090728122430 0 [sec 4 nkb 4096 ckb 64 kps 1024]
303 FINISH driver date 20090728122445 time 14.46
306 $LogfileFlags{chunker} = {
309 results_missing => 0,
314 $LogfileData{chunker} = {
316 planner => { start => "20090728122430", },
318 start => "20090728122430",
319 start_time => "0.034",
336 '20090728122430' => [
339 date => "20090728122430",
350 date => "20090728122430",
368 '20090728122430' => [
371 date => "20090728122430",
382 date => "20090728122430",
400 '20090728122430' => [
403 date => "20090728122430",
414 date => "20090728122430",
428 $LogfileContents{taper} = <<EOF;
429 DISK planner somebox /lib
430 START planner date 20080111
431 START driver date 20080111
432 STATS driver hostname somebox
433 STATS driver startup time 0.051
434 FINISH planner date 20080111 time 82.721
435 SUCCESS dumper somebox /lib 20080111 0 [sec 0.209 kb 1970 kps 9382.2 orig-kb 1970]
436 SUCCESS chunker somebox /lib 20080111 0 [sec 0.305 kb 420 kps 1478.7]
437 STATS driver estimate somebox /lib 20080111 0 [sec 1 nkb 2002 ckb 480 kps 385]
438 INFO taper taper pid 28023
439 START taper datestamp 20080111 label TESTCONF01 tape 1
440 PART taper TESTCONF01 1 somebox /lib 20080111 1/-1 0 [sec 0.004722 kb 640 kps 135535.789920]
441 PART taper TESTCONF01 2 somebox /lib 20080111 2/-1 0 [sec 0.003438 kb 640 kps 186154.741129]
442 PART taper TESTCONF01 3 somebox /lib 20080111 3/-1 0 [sec 0.002931 kb 640 kps 218355.510065]
443 PART taper TESTCONF01 4 somebox /lib 20080111 4/-1 0 [sec 0.000578 kb 96 kps 166089.965398]
444 PARTIAL taper somebox /lib 20080111 4 0 [sec 0.011669 kb 2016 kps 172765.446911]
445 INFO taper tape TESTCONF01 kb 2016 fm 4 [OK]
446 INFO taper pid-done 28023
447 FINISH driver date 20080111 time 2167.581
450 $LogfileFlags{taper} = {
453 results_missing => 0,
458 $LogfileData{taper} = {
466 start_time => "0.051",
474 "tape TESTCONF01 kb 2016 fm 4 [OK]"
478 'label' => 'TESTCONF01',
486 tape_labels => ['TESTCONF01'],
523 label => "TESTCONF01",
529 kps => "135535.789920",
532 label => "TESTCONF01",
538 kps => "186154.741129",
541 label => "TESTCONF01",
547 kps => "218355.510065",
550 label => "TESTCONF01",
556 kps => "166089.965398",
562 kps => "172765.446911",
575 $LogfileContents{simple} = <<EOF;
576 DISK planner somebox /lib
577 START planner date 20080111
578 START driver date 20080111
579 STATS driver hostname somebox
580 STATS driver startup time 0.051
581 FINISH planner date 20080111 time 82.721
582 START taper datestamp 20080111 label Conf-001 tape 1
583 SUCCESS dumper somebox /lib 20080111 0 [sec 0.209 kb 1970 kps 9382.2 orig-kb 1970]
584 SUCCESS chunker somebox /lib 20080111 0 [sec 0.305 kb 420 kps 1478.7]
585 STATS driver estimate somebox /lib 20080111 0 [sec 1 nkb 2002 ckb 480 kps 385]
586 PART taper Conf-001 1 somebox /lib 20080111 1/1 0 [sec 4.813543 kb 419 kps 87.133307]
587 DONE taper somebox /lib 20080111 1 0 [sec 4.813543 kb 419 kps 87.133307]
588 FINISH driver date 20080111 time 2167.581
591 $LogfileFlags{simple} = {
594 results_missing => 0,
599 $LogfileData{simple} = {
607 start_time => "0.051",
614 'label' => 'Conf-001',
616 'time' => '4.813543',
617 'date' => '20080111',
622 tape_labels => ["Conf-001"],
684 $LogfileContents{fullExample} = <<EOF;
685 INFO amdump amdump pid 9291
686 INFO driver driver pid 9313
687 INFO planner planner pid 9312
688 DISK planner hostname.example.org /
689 DISK planner hostname.example.org /somedir2
690 DISK planner hostname.example.org /moreapps
691 DISK planner hostname.example.org /apps
692 DISK planner hostname.example.org /somedir
693 START planner date 20081002040002
694 START driver date 20081002040002
695 STATS driver hostname hostname.example.org
696 STATS driver startup time 0.043
697 INFO dumper dumper pid 9316
698 INFO dumper dumper pid 9315
699 INFO dumper dumper pid 9318
700 INFO dumper dumper pid 9317
701 INFO taper taper pid 9314
702 FINISH planner date 20081002040002 time 32.689
703 INFO planner pid-done 9312
704 INFO chunker chunker pid 11110
705 INFO dumper gzip pid 11129
706 SUCCESS dumper hostname.example.org /somedir 20081002040002 1 [sec 0.039 kb 10 kps 250.4 orig-kb 10]
707 SUCCESS chunker hostname.example.org /somedir 20081002040002 1 [sec 5.070 kb 10 kps 8.3]
708 INFO chunker pid-done 11110
709 STATS driver estimate hostname.example.org /somedir 20081002040002 1 [sec 0 nkb 42 ckb 64 kps 1024]
710 INFO dumper pid-done 11129
711 START taper datestamp 20081002040002 label FullBackup-14 tape 1
712 PART taper FullBackup-14 1 hostname.example.org /somedir 20081002040002 1/1 1 [sec 0.002776 kb 10 kps 3602.305476]
713 DONE taper hostname.example.org /somedir 20081002040002 1 1 [sec 0.002776 kb 10 kps 3602.305476]
714 INFO chunker chunker pid 11157
715 INFO dumper gzip pid 11232
716 SUCCESS dumper hostname.example.org /moreapps 20081002040002 1 [sec 0.039 kb 10 kps 250.8 orig-kb 10]
717 INFO dumper pid-done 11232
718 SUCCESS chunker hostname.example.org /moreapps 20081002040002 1 [sec 5.058 kb 10 kps 8.3]
719 INFO chunker pid-done 11157
720 STATS driver estimate hostname.example.org /moreapps 20081002040002 1 [sec 0 nkb 42 ckb 64 kps 149050]
721 PART taper FullBackup-14 2 hostname.example.org /moreapps 20081002040002 1/1 1 [sec 0.002656 kb 10 kps 3765.060241]
722 DONE taper hostname.example.org /moreapps 20081002040002 1 1 [sec 0.002656 kb 10 kps 3765.060241]
723 INFO chunker chunker pid 11700
724 INFO dumper gzip pid 11723
725 SUCCESS dumper hostname.example.org /apps 20081002040002 1 [sec 0.414 kb 6630 kps 16013.4 orig-kb 6630]
726 SUCCESS chunker hostname.example.org /apps 20081002040002 1 [sec 5.432 kb 6630 kps 1226.3]
727 INFO chunker pid-done 11700
728 INFO dumper pid-done 11723
729 STATS driver estimate hostname.example.org /apps 20081002040002 1 [sec 6 nkb 6662 ckb 6688 kps 1024]
730 PART taper FullBackup-14 3 hostname.example.org /apps 20081002040002 1/1 1 [sec 0.071808 kb 6630 kps 92329.545455]
731 DONE taper hostname.example.org /apps 20081002040002 1 1 [sec 0.071808 kb 6630 kps 92329.545455]
732 INFO chunker chunker pid 11792
733 INFO dumper gzip pid 11816
734 SUCCESS dumper hostname.example.org / 20081002040002 1 [sec 3.028 kb 8393 kps 2771.1 orig-kb 82380]
735 SUCCESS chunker hostname.example.org / 20081002040002 1 [sec 8.047 kb 8393 kps 1047.0]
736 INFO chunker pid-done 11792
737 STATS driver estimate hostname.example.org / 20081002040002 1 [sec 39 nkb 80542 ckb 40288 kps 1024]
738 INFO dumper pid-done 11816
739 PART taper FullBackup-14 4 hostname.example.org / 20081002040002 1/1 1 [sec 0.088934 kb 8392 kps 94368.875374]
740 DONE taper hostname.example.org / 20081002040002 1 1 [sec 0.088934 kb 8392 kps 94368.875374]
741 INFO dumper gzip pid 11861
742 STRANGE dumper hostname.example.org /somedir2 0 [sec 372.700 kb 28776940 kps 77212.0 orig-kb 28776940]
744 PART taper FullBackup-14 5 hostname.example.org /somedir2 20081002040002 1/1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
745 DONE taper hostname.example.org /somedir2 20081002040002 1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
746 INFO dumper pid-done 11861
747 STATS driver estimate hostname.example.org /somedir2 20081002040002 0 [sec 28776940 nkb 28776972 ckb 28776992 kps 1]
748 PART taper FullBackup-14 6 hostname.example.org /somedir2 20081002030002 1/1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
749 DONE taper hostname.example.org /somedir2 20081002030002 1 0 [sec 370.382399 kb 28776940 kps 77695.214669]
750 INFO dumper pid-done 9315
751 INFO dumper pid-done 9317
752 INFO dumper pid-done 9316
753 INFO dumper pid-done 9318
754 INFO taper pid-done 9314
755 FINISH driver date 20081002040002 time 663.574
756 INFO driver pid-done 9313
760 $LogfileFlags{fullExample} = {
763 results_missing => 0,
768 $LogfileData{fullExample} = {
774 start => "20081002040002",
775 start_time => "0.043",
779 start => "20081002040002",
783 start => '20081002040002',
786 'label' => 'FullBackup-14',
788 'time' => '740.930972',
789 'date' => '20081002040002',
794 tape_labels => ["FullBackup-14"],
798 "hostname.example.org" => {
808 '20081002040002' => [
812 date => "20081002040002",
819 kps => '94368.875374',
825 kps => "94368.875374",
827 date => "20081002040002",
831 label => "FullBackup-14"
842 date => "20081002040002",
859 "20081002040002" => [
866 #date => "20081002040002",
868 orig_kb => "28776940",
870 stranges => [ "! strange data" ],
873 kps => "77695.214669",
879 label => 'FullBackup-14',
880 date => '20081002040002',
881 kps => '77695.214669',
893 "20081002030002" => [
896 kps => "77695.214669",
902 label => 'FullBackup-14',
903 date => '20081002030002',
904 kps => '77695.214669',
927 '20081002040002' => [
933 'status' => 'success',
934 'date' => '20081002040002',
938 'kps' => '3765.060241',
944 kps => "3765.060241",
946 date => "20081002040002",
950 label => "FullBackup-14"
960 'status' => 'success',
961 'date' => '20081002040002',
978 '20081002040002' => [
985 date => "20081002040002",
989 kps => "92329.545455",
995 kps => "92329.545455",
997 date => "20081002040002",
1001 label => "FullBackup-14"
1011 status => "success",
1012 date => "20081002040002",
1029 "20081002040002" => [
1035 status => "success",
1036 date => "20081002040002",
1040 kps => "3602.305476",
1046 kps => "3602.305476",
1048 date => "20081002040002",
1052 label => "FullBackup-14",
1062 status => "success",
1063 date => "20081002040002",
1075 $LogfileContents{amflushExample} = <<EOF;
1076 INFO amflush amflush pid 26036
1077 DISK amflush localhost /backups/oracle
1078 DISK amflush localhost /backups/mysql
1079 DISK amflush localhost /usr/local/bin
1080 DISK amflush localhost /etc
1081 DISK amflush localhost /home
1082 START amflush date 20090622075550
1083 INFO driver driver pid 26076
1084 START driver date 20090622075550
1085 STATS driver hostname localhost
1086 STATS driver startup time 0.011
1087 INFO taper taper pid 26077
1088 START taper datestamp 20090622075550 label DailyTapeDataSet-017 tape 1
1089 PART taper DailyTapeDataSet-017 1 localhost /etc 20090620020002 1/1 1 [sec 2.504314 kb 36980 kps 14766.518895]
1090 DONE taper localhost /etc 20090620020002 1 1 [sec 2.504314 kb 36980 kps 14766.518895]
1091 PART taper DailyTapeDataSet-017 2 localhost /usr/local/bin 20090620020002 1/1 1 [sec 1.675693 kb 309 kps 184.632684]
1092 DONE taper localhost /usr/local/bin 20090620020002 1 1 [sec 1.675693 kb 309 kps 184.632684]
1093 INFO taper pid-done 26077
1094 FINISH driver date 20090622075550 time 177.708
1095 INFO driver pid-done 26076
1096 INFO amflush pid-done 26075
1099 $LogfileFlags{amflushExample} = {
1102 results_missing => 0,
1107 $LogfileData{amflushExample} = {
1110 'start' => '20090622075550',
1112 'DailyTapeDataSet-017' => {
1113 'label' => 'DailyTapeDataSet-017',
1115 'time' => '4.180007',
1116 'date' => '20090622075550',
1121 tape_labels => ["DailyTapeDataSet-017"],
1123 'amflush' => { 'start' => '20090622075550' },
1125 'time' => '177.708',
1126 'start_time' => '0.011',
1127 'start' => '20090622075550'
1135 '20090620020002' => [
1138 'kps' => '14766.518895',
1140 'sec' => '2.504314',
1144 'kps' => '14766.518895',
1145 'sec' => '2.504314',
1146 'date' => '20090620020002',
1150 'label' => 'DailyTapeDataSet-017'
1160 '/backups/oracle' => {
1164 '/usr/local/bin' => {
1167 '20090620020002' => [
1170 'kps' => '184.632684',
1172 'sec' => '1.675693',
1176 'kps' => '184.632684',
1177 'sec' => '1.675693',
1178 'date' => '20090620020002',
1182 'label' => 'DailyTapeDataSet-017'
1195 '/backups/mysql' => {
1203 foreach my $test ( keys %LogfileContents ) {
1205 unless ( exists $LogfileData{$test} ) {
1206 die "error: $test present in \%LogfileContents but not \%LogfileData\n";
1210 Amanda::Report->new( write_logfile( $LogfileContents{$test} ), 1 );
1211 is_deeply( $report->{data}, $LogfileData{$test}, "data check: $test" );
1215 $report->get_flag($_), "==",
1216 $LogfileFlags{$test}->{$_},
1217 "flag test: $_, $test"
1219 } keys %{ $LogfileFlags{$test} };
1223 # Test the report API
1226 Amanda::Report->new( write_logfile( $LogfileContents{fullExample} ), 1 );
1228 is_deeply( [ $report->get_hosts() ],
1229 ['hostname.example.org'], 'check: Amanda::Report::get_hosts()' );
1232 [ sort { $a cmp $b } $report->get_disks('hostname.example.org') ],
1233 [ '/', '/apps', '/moreapps', '/somedir', '/somedir2' ],
1234 'check: Amanda::Report::get_disks($hostname)'
1238 [ sort { $a->[1] cmp $b->[1] } $report->get_dles() ],
1240 [ 'hostname.example.org', '/' ],
1241 [ 'hostname.example.org', '/apps' ],
1242 [ 'hostname.example.org', '/moreapps' ],
1243 [ 'hostname.example.org', '/somedir' ],
1244 [ 'hostname.example.org', '/somedir2' ],
1246 'check: Amanda::Report::get_dles()'
1250 $report->get_dle_info("hostname.example.org", "/apps"),
1260 '20081002040002' => [
1266 status => "success",
1267 date => "20081002040002",
1271 kps => "92329.545455",
1277 kps => "92329.545455",
1279 date => "20081002040002",
1283 label => "FullBackup-14"
1293 status => "success",
1294 date => "20081002040002",
1302 'check: Amanda::Report::get_dle_info($hostname, $disk)'
1306 $report->get_dle_info( 'hostname.example.org', '/', 'estimate' ),
1314 'check: Amanda::Report::get_dle_info($hostname, $disk, $field)'
1318 $report->get_program_info('planner'),
1321 start => "20081002040002",
1323 'check: Amanda::Report::get_program_info($program)'
1327 $report->get_program_info('driver', 'start', 0),
1329 'check: Amanda::Report::get_program_info($program, $field, $default) field exists'
1332 # dummy check, makes sure default value gets set correctly
1334 $report->get_program_info('planner', 'fake_field', 67),
1336 'check: Amanda::Report::get_program_info($program, $field, $default) default case'
1340 $report->get_program_info('planner', 'fake_field', 32),
1342 'check: Amanda::Report::get_program_info($program, $field, $default) default "sticks"'
1345 $report->get_program_info('planner', 'fake_field2', 0);
1348 $report->get_program_info('planner', 'fake_field2', 1),
1350 'check: Amanda::Report::get_program_info($program, $field, $default) false default "sticks"'
1353 ok($report->get_flag('historical'),
1354 "historical flag processed correctly");
1357 unlink($log_filename) if -f $log_filename;