my $class = shift;
my %params = @_;
my @slots = @{ $params{'slots'} || [] };
- my $chg = Amanda::Changer->new("chg-disk:$taperoot");
- die $chg if $chg->isa("Amanda::Changer::Error");
+ my $chg = $params{'changer'};
# wedge in an extra device property to disable LEOM support, if requested
if ($params{'disable_leom'}) {
}, $class;
}
+sub quit {
+ my $self = shift;
+}
+
sub make_new_tape_label {
return "FAKELABEL";
}
main::event("scribe_notif_tape_done",
$params{'volume_label'}, $params{'num_files'},
$params{'size'});
+ $params{'finished_cb'}->();
}
}
reset_taperoot(1);
-run_devh(3, Mock::Taperscan->new(), Mock::Feedback->new({allow => 1}, {allow => 1}, {allow => 1}));
+my $chg = Amanda::Changer->new("chg-disk:$taperoot");
+run_devh(3, Mock::Taperscan->new(changer => $chg), Mock::Feedback->new({allow => 1}, {allow => 1}, {allow => 1}));
is_deeply([ @events ], [
[ 'start' ],
[ 'scan' ], # scan starts *before* get_volume
], "correct event sequence for basic run of DevHandling")
or diag(Dumper([@events]));
-run_devh(1, Mock::Taperscan->new(), Mock::Feedback->new({cause => 'config', message => 'no-can-do'}));
+run_devh(1, Mock::Taperscan->new(changer => $chg), Mock::Feedback->new({cause => 'config', message => 'no-can-do'}));
is_deeply([ @events ], [
[ 'start' ],
[ 'scan' ],
], "correct event sequence for a run without permission")
or diag(Dumper([@events]));
-run_devh(1, Mock::Taperscan->new(slots => ["bogus"]), Mock::Feedback->new({allow => 1}));
+run_devh(1, Mock::Taperscan->new(slots => ["bogus"], changer => $chg), Mock::Feedback->new({allow => 1}));
is_deeply([ @events ], [
[ 'start' ],
[ 'scan' ],
], "correct event sequence for a run with a changer error")
or diag(Dumper([@events]));
-run_devh(1, Mock::Taperscan->new(slots => ["bogus"]),
+run_devh(1, Mock::Taperscan->new(slots => ["bogus"], changer => $chg),
Mock::Feedback->new({cause => 'config', message => "not this time"}));
is_deeply([ @events ], [
[ 'start' ],
], "correct event sequence for a run with no permission AND a changer config denial")
or diag(Dumper([@events]));
-run_devh(1, Mock::Taperscan->new(slots => ["bogus"]), Mock::Feedback->new({cause => 'error', message => "frobnicator exploded!"}));
+run_devh(1, Mock::Taperscan->new(slots => ["bogus"], changer => $chg), Mock::Feedback->new({cause => 'error', message => "frobnicator exploded!"}));
is_deeply([ @events ], [
[ 'start' ],
[ 'scan' ],
# set up a transfer
my $xdt = $scribe->get_xfer_dest(
+ allow_split => 1,
max_memory => 1024 * 64,
part_size => (defined $params{'part_size'})? $params{'part_size'} : (1024 * 128),
part_cache_type => $params{'part_cache_type'} || 'memory',
reset_taperoot(1);
$main::scribe = Amanda::Taper::Scribe->new(
- taperscan => Mock::Taperscan->new(disable_leom => 1),
+ taperscan => Mock::Taperscan->new(disable_leom => 1, changer => $chg),
feedback => Mock::Feedback->new({allow => 1}));
reset_events();
reset_taperoot(1);
$main::scribe = Amanda::Taper::Scribe->new(
- taperscan => Mock::Taperscan->new(),
+ taperscan => Mock::Taperscan->new(changer => $chg),
feedback => Mock::Feedback->new({ allow => 1 }));
reset_events();
reset_taperoot(2);
$main::scribe = Amanda::Taper::Scribe->new(
- taperscan => Mock::Taperscan->new(disable_leom => 1),
+ taperscan => Mock::Taperscan->new(disable_leom => 1, changer => $chg),
feedback => Mock::Feedback->new({ allow => 1 }, { allow => 1 }));
reset_events();
[ 'dump_cb', 'DONE', [], undef, bi(655360) ],
[ 'scribe_notif_tape_done', 'FAKELABEL', bi(3), bi(262144) ],
- ], "correct event sequence for a multipart scribe of more than a whole volume, without LEOM")
+ ], "correct event sequence for a multipart scribe of more than a whole volume, without LEOM" . Data::Dumper::Dumper(@events))
or print (Dumper([@events]));
# same test, but with LEOM support
reset_taperoot(2);
$main::scribe = Amanda::Taper::Scribe->new(
- taperscan => Mock::Taperscan->new(),
+ taperscan => Mock::Taperscan->new(changer => $chg),
feedback => Mock::Feedback->new({ allow => 1 },{ allow => 1 }));
reset_events();
reset_taperoot(1);
$main::scribe = Amanda::Taper::Scribe->new(
- taperscan => Mock::Taperscan->new(slots => ["1", "bogus"], disable_leom => 1),
+ taperscan => Mock::Taperscan->new(slots => ["1", "bogus"], disable_leom => 1, changer => $chg),
feedback => Mock::Feedback->new({ allow => 1 },{ allow => 1 }));
reset_events();
reset_taperoot(1);
$main::scribe = Amanda::Taper::Scribe->new(
- taperscan => Mock::Taperscan->new(slots => ["1", "bogus"]),
+ taperscan => Mock::Taperscan->new(slots => ["1", "bogus"], changer => $chg),
feedback => Mock::Feedback->new({ allow => 1 }, { allow => 1 }));
reset_events();
reset_taperoot(2);
$main::scribe = Amanda::Taper::Scribe->new(
- taperscan => Mock::Taperscan->new(),
+ taperscan => Mock::Taperscan->new(changer => $chg),
feedback => Mock::Feedback->new({ allow => 1 }, { cause => 'config', message => "sorry!" }));
reset_events();
reset_taperoot(2);
$main::scribe = Amanda::Taper::Scribe->new(
- taperscan => Mock::Taperscan->new(disable_leom => 1),
+ taperscan => Mock::Taperscan->new(disable_leom => 1, changer => $chg),
feedback => Mock::Feedback->new({ allow => 1 }));
reset_events();
reset_taperoot(2);
$main::scribe = Amanda::Taper::Scribe->new(
- taperscan => Mock::Taperscan->new(),
+ taperscan => Mock::Taperscan->new(changer => $chg),
feedback => Mock::Feedback->new({ allow => 1 }));
$Amanda::Config::debug_taper = 9;
reset_events();
is_deeply(
{ get_splitting_args_from_config(
) },
- { },
- "default is no params");
+ { allow_split => 0 },
+ "default is only allow_split set to 0");
is_deeply(
{ get_splitting_args_from_config(
dle_split_diskbuffer => $Installcheck::TMP,
dle_fallback_splitsize => 100,
) },
- { part_size => 0, part_cache_type => 'none' },
+ { allow_split => 0, part_size => 0, part_cache_type => 'none' },
"tape_splitsize = 0 indicates no splitting");
is_deeply(
part_size => 100,
part_cache_dir => "/tmp",
) },
- { },
+ { allow_split => 0 },
"default if dle_allow_split is false, no splitting");
is_deeply(
dle_tape_splitsize => 200,
dle_fallback_splitsize => 150,
) },
- { part_cache_type => 'memory', part_size => 200, part_cache_max_size => 150 },
+ { allow_split => 1,part_cache_type => 'memory', part_size => 200, part_cache_max_size => 150 },
"when cache_inform is available, tape_splitsize is used, not fallback");
is_deeply(
{ get_splitting_args_from_config(
dle_tape_splitsize => 200,
) },
- { part_size => 200, part_cache_type => 'memory', part_cache_max_size => 1024*1024*10, },
+ { allow_split => 1, part_size => 200, part_cache_type => 'memory', part_cache_max_size => 1024*1024*10, },
"no split_diskbuffer and no fallback_splitsize, fall back to default (10M)");
is_deeply(
dle_split_diskbuffer => "$Installcheck::TMP/does!not!exist!",
dle_fallback_splitsize => 150,
) },
- { part_size => 200, part_cache_type => 'memory', part_cache_max_size => 150 },
+ { allow_split => 1, part_size => 200, part_cache_type => 'memory', part_cache_max_size => 150 },
"invalid split_diskbuffer => fall back (silently)");
is_deeply(
dle_tape_splitsize => 200,
dle_split_diskbuffer => "$Installcheck::TMP/does!not!exist!",
) },
- { part_size => 200, part_cache_type => 'memory', part_cache_max_size => 1024*1024*10 },
+ { allow_split => 1, part_size => 200, part_cache_type => 'memory', part_cache_max_size => 1024*1024*10 },
".. even to the default fallback (10M)");
is_deeply(
dle_split_diskbuffer => "$Installcheck::TMP",
dle_fallback_splitsize => 250,
) },
- { part_size => $maxint64, part_cache_type => 'memory', part_cache_max_size => 250,
+ { allow_split => 1, part_size => $maxint64, part_cache_type => 'memory', part_cache_max_size => 250,
warning => "falling back to memory buffer for splitting: " .
"insufficient space in disk cache directory" },
"not enough space in split_diskbuffer => fall back (with warning)");
dle_split_diskbuffer => "$Installcheck::TMP",
dle_fallback_splitsize => 150,
) },
- { part_size => 200, part_cache_type => 'disk', part_cache_dir => "$Installcheck::TMP" },
+ { allow_split => 1, part_size => 200, part_cache_type => 'disk', part_cache_dir => "$Installcheck::TMP" },
"if split_diskbuffer exists and splitsize is nonzero, use it");
is_deeply(
dle_split_diskbuffer => "$Installcheck::TMP",
dle_fallback_splitsize => 250,
) },
- { part_size => 0, part_cache_type => 'none' },
+ { allow_split => 0, part_size => 0, part_cache_type => 'none' },
".. but if splitsize is zero, no splitting");
is_deeply(
dle_split_diskbuffer => "$Installcheck::TMP",
dle_fallback_splitsize => 250,
) },
- { part_size => 0, part_cache_type => 'none' },
+ { allow_split => 0, part_size => 0, part_cache_type => 'none' },
".. and if splitsize is missing, no splitting");
is_deeply(
part_size => 300,
part_cache_type => 'none',
) },
- { part_size => 300, part_cache_type => 'none' },
+ { allow_split => 1, part_size => 300, part_cache_type => 'none' },
"part_* parameters handled correctly when missing");
is_deeply(
part_cache_dir => $Installcheck::TMP,
part_cache_max_size => 250,
) },
- { part_size => 300, part_cache_type => 'disk',
+ { allow_split => 1, part_size => 300, part_cache_type => 'disk',
part_cache_dir => $Installcheck::TMP, part_cache_max_size => 250, },
"part_* parameters handled correctly when specified");
part_cache_dir => "$Installcheck::TMP/does!not!exist!",
part_cache_max_size => 250,
) },
- { part_size => 300, part_cache_type => 'none',
+ { allow_split => 1, part_size => 300, part_cache_type => 'none',
part_cache_max_size => 250,
warning => "part-cache-dir '$Installcheck::TMP/does!not!exist! does not exist; "
. "using part cache type 'none'"},
"part_* parameters handled correctly when specified");
+$chg->quit();
rmtree($taperoot);