1 # Copyright (c) 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 94086, USA, or: http://www.zmanda.com
20 use Test::More tests => 35;
26 use lib "@amperldir@";
28 use Installcheck::Config;
29 use Installcheck::Changer;
32 use Amanda::Config qw( :init :getconf config_dir_relative );
33 use Amanda::Taper::Scan;
35 # set up debugging so debug output doesn't interfere with test results
36 Amanda::Debug::dbopen("installcheck");
37 Installcheck::log_test_output();
39 # and disable Debug's die() and warn() overrides
40 Amanda::Debug::disable_die_override();
42 my $tapelist_filename = "$Installcheck::TMP/tapelist";
43 my $tapelist = Amanda::Tapelist->new($tapelist_filename);
46 open(my $fh, ">", $tapelist_filename) or die("opening '$tapelist_filename': $!");
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-%",
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
72 $taperscan->read_tapelist();
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");
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");
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");
99 20090424173001 TEST-1 no-reuse
100 20090424173002 TEST-2 reuse
101 20090424173003 TEST-3 reuse
102 20090424173004 TEST-4 reuse
104 $taperscan->read_tapelist();
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");
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");
123 20090424173001 TEST-1 reuse
124 20090424173002 TEST-2 reuse
125 20090424173003 TEST-3 reuse
128 $taperscan->read_tapelist();
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");
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");