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