Imported Upstream version 3.3.0
[debian/amanda] / installcheck / Amanda_Taper_Scan.pl
1 # Copyright (c) Zmanda Inc.  All Rights Reserved.
2 #
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.
6 #
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
10 # for more details.
11 #
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
15 #
16 # Contact information: Zmanda Inc, 465 S. Mathilda Ave., Suite 300
17 # Sunnyvale, CA 94086, USA, or: http://www.zmanda.com
18
19 use Test::More tests => 35;
20 use File::Path;
21 use Data::Dumper;
22 use strict;
23 use warnings;
24
25 use lib "@amperldir@";
26 use Installcheck;
27 use Installcheck::Config;
28 use Installcheck::Changer;
29 use Amanda::Debug;
30 use Amanda::MainLoop;
31 use Amanda::Config qw( :init :getconf config_dir_relative );
32 use Amanda::Taper::Scan;
33
34 # set up debugging so debug output doesn't interfere with test results
35 Amanda::Debug::dbopen("installcheck");
36 Installcheck::log_test_output();
37
38 # and disable Debug's die() and warn() overrides
39 Amanda::Debug::disable_die_override();
40
41 my $tapelist_filename = "$Installcheck::TMP/tapelist";
42 my $tapelist = Amanda::Tapelist->new($tapelist_filename);
43 sub set_tapelist {
44     my ($content) = @_;
45     open(my $fh, ">", $tapelist_filename) or die("opening '$tapelist_filename': $!");
46     print $fh $content;
47     close($fh);
48 }
49
50 # we use a "traditional" Amanda::Taper::Scan object, only because instantiating
51 # the parent class alone is difficult.  We never call scan(), so traditional's
52 # methods are never invoked in this test.
53 my $taperscan = Amanda::Taper::Scan->new(
54     algorithm => "traditional",
55     changer => undef, # (not used)
56     tapelist => $tapelist,
57     tapecycle => 1, # will be changed periodically below
58     labelstr => "TEST-[0-9]",
59     autolabel => { 'template'    => "TEST-%",
60                    'empty'        => 1,
61                    'volume_error' => 1},
62     );
63
64 set_tapelist(<<EOF);
65 20090424173001 TEST-1 reuse
66 20090424173002 TEST-2 reuse
67 20090424173003 TEST-3 reuse
68 20090424173004 TEST-4 reuse
69 EOF
70 $taperscan->read_tapelist();
71
72 $taperscan->{'tapecycle'} = 2;
73 is($taperscan->oldest_reusable_volume(new_label_ok => 1), "TEST-1",
74    "simple tapelist, tapecycle = 2: oldest_resuable_volume correct");
75 ok( $taperscan->is_reusable_volume(label => "TEST-1", new_label_ok => 1), " TEST-1 reusable");
76 ok( $taperscan->is_reusable_volume(label => "TEST-2", new_label_ok => 1), " TEST-2 reusable");
77 ok( $taperscan->is_reusable_volume(label => "TEST-3", new_label_ok => 1), " TEST-3 reusable");
78 ok(!$taperscan->is_reusable_volume(label => "TEST-4", new_label_ok => 1), " TEST-4 not reusable");
79
80 $taperscan->{'tapecycle'} = 3;
81 is($taperscan->oldest_reusable_volume(new_label_ok => 1), "TEST-1",
82    "simple tapelist, tapecycle = 3: oldest_resuable_volume correct");
83 ok( $taperscan->is_reusable_volume(label => "TEST-1", new_label_ok => 1), " TEST-1 reusable");
84 ok( $taperscan->is_reusable_volume(label => "TEST-2", new_label_ok => 1), " TEST-2 reusable");
85 ok(!$taperscan->is_reusable_volume(label => "TEST-3", new_label_ok => 1), " TEST-3 not reusable");
86 ok(!$taperscan->is_reusable_volume(label => "TEST-4", new_label_ok => 1), " TEST-4 not reusable");
87
88 $taperscan->{'tapecycle'} = 5;
89 is($taperscan->oldest_reusable_volume(new_label_ok => 1), undef,
90    "simple tapelist, tapecycle = 5: oldest_resuable_volume correct (undef)");
91 ok(!$taperscan->is_reusable_volume(label => "TEST-1", new_label_ok => 1), " TEST-1 not reusable");
92 ok(!$taperscan->is_reusable_volume(label => "TEST-2", new_label_ok => 1), " TEST-2 not reusable");
93 ok(!$taperscan->is_reusable_volume(label => "TEST-3", new_label_ok => 1), " TEST-3 not reusable");
94 ok(!$taperscan->is_reusable_volume(label => "TEST-4", new_label_ok => 1), " TEST-4 not reusable");
95
96 set_tapelist(<<EOF);
97 20090424173001 TEST-1 no-reuse
98 20090424173002 TEST-2 reuse
99 20090424173003 TEST-3 reuse
100 20090424173004 TEST-4 reuse
101 EOF
102 $taperscan->read_tapelist();
103
104 $taperscan->{'tapecycle'} = 2;
105 is($taperscan->oldest_reusable_volume(new_label_ok => 1), "TEST-2",
106    "no-reuse in tapelist, tapecycle = 2: oldest_resuable_volume correct");
107 ok(!$taperscan->is_reusable_volume(label => "TEST-1", new_label_ok => 1), " TEST-1 not reusable");
108 ok( $taperscan->is_reusable_volume(label => "TEST-2", new_label_ok => 1), " TEST-2 reusable");
109 ok( $taperscan->is_reusable_volume(label => "TEST-3", new_label_ok => 1), " TEST-3 reusable");
110 ok(!$taperscan->is_reusable_volume(label => "TEST-4", new_label_ok => 1), " TEST-4 not reusable");
111
112 $taperscan->{'tapecycle'} = 4;
113 is($taperscan->oldest_reusable_volume(new_label_ok => 1), undef,
114    "no-reuse in tapelist, tapecycle = 3: oldest_resuable_volume correct (undef)");
115 ok(!$taperscan->is_reusable_volume(label => "TEST-1", new_label_ok => 1), " TEST-1 not reusable");
116 ok(!$taperscan->is_reusable_volume(label => "TEST-2", new_label_ok => 1), " TEST-2 not reusable");
117 ok(!$taperscan->is_reusable_volume(label => "TEST-3", new_label_ok => 1), " TEST-3 not reusable");
118 ok(!$taperscan->is_reusable_volume(label => "TEST-4", new_label_ok => 1), " TEST-4 not reusable");
119
120 set_tapelist(<<EOF);
121 20090424173001 TEST-1 reuse
122 20090424173002 TEST-2 reuse
123 20090424173003 TEST-3 reuse
124 0 TEST-4 reuse
125 EOF
126 $taperscan->read_tapelist();
127
128 $taperscan->{'tapecycle'} = 3;
129 is($taperscan->oldest_reusable_volume(new_label_ok => 1), "TEST-4",
130    "newly labeled in tapelist, tapecycle = 3, new_label_ok: oldest_resuable_volume correct");
131 ok( $taperscan->is_reusable_volume(label => "TEST-1", new_label_ok => 1), " TEST-1 reusable");
132 ok(!$taperscan->is_reusable_volume(label => "TEST-2", new_label_ok => 1), " TEST-2 not reusable");
133 ok(!$taperscan->is_reusable_volume(label => "TEST-3", new_label_ok => 1), " TEST-3 not reusable");
134 ok( $taperscan->is_reusable_volume(label => "TEST-4", new_label_ok => 1), " TEST-4 reusable");
135
136 $taperscan->{'tapecycle'} = 3;
137 is($taperscan->oldest_reusable_volume(new_label_ok => 0), "TEST-1",
138    "newly labeled in tapelist, tapecycle = 3, !new_label_ok: oldest_resuable_volume correct");
139 ok( $taperscan->is_reusable_volume(label => "TEST-1", new_label_ok => 0), " TEST-1 reusable");
140 ok(!$taperscan->is_reusable_volume(label => "TEST-2", new_label_ok => 0), " TEST-2 not reusable");
141 ok(!$taperscan->is_reusable_volume(label => "TEST-3", new_label_ok => 0), " TEST-3 not reusable");
142 ok(!$taperscan->is_reusable_volume(label => "TEST-4", new_label_ok => 0), " TEST-4 not reusable");
143
144 $taperscan->quit();
145