# Contact information: Zmanda Inc, 465 S. Mathilda Ave., Suite 300
# Sunnyvale, CA 94086, USA, or: http://www.zmanda.com
-use Test::More tests => 321;
+use Test::More tests => 324;
use File::Path;
use Data::Dumper;
use strict;
my ($interface, $chg);
my $steps = define_steps
- cb_ref => \$finished_cb;
+ cb_ref => \$finished_cb,
+ finalize => sub { $chg->quit() };
step start => sub {
my $testconf = Installcheck::Config->new();
$chg = Amanda::Changer->new("robo");
die "$chg" if $chg->isa("Amanda::Changer::Error");
+ is($chg->have_inventory(), '1', "changer have inventory");
$interface = $chg->{'interface'};
$interface->inquiry($steps->{'inquiry_cb'});
my $chg = Amanda::Changer->new("delays");
die "$chg" if $chg->isa("Amanda::Changer::Error");
+ is($chg->have_inventory(), '1', "changer have inventory");
is($chg->{'status_interval'}, 60, "status-interval parsed");
is($chg->{'eject_delay'}, 1, "eject-delay parsed");
is($chg->{'unload_delay'}, 120, "unload-delay parsed");
$dashed_mtx_state_file =~ s/^-*//;
is($chg->{'statefile'}, "$localstatedir/amanda/chg-robot-$dashed_mtx_state_file",
"statefile calculated correctly");
+ $chg->quit();
# test no-fast-search
$chg = Amanda::Changer->new("no-fast-search");
die "$chg" if $chg->isa("Amanda::Changer::Error");
+ is($chg->have_inventory(), '1', "changer have inventory");
$chg->info(
info => ['fast_search'],
info_cb => make_cb(info_cb => sub {
my @allowed = map { $chg->_is_slot_allowed($_) } (0 .. 10);
is_deeply([ @allowed ], [ 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0 ],
"_is_slot_allowed parses multiple properties and behaves as expected");
+ $chg->quit();
}
##
my $vtape_root = "$Installcheck::TMP/chg-robot-vtapes";
my $steps = define_steps
- cb_ref => \$finished_cb;
+ cb_ref => \$finished_cb,
+ finalize => sub { $chg->quit() };
step setup => sub {
# clean up
unlink($chg_state_file) if -f $chg_state_file;
- %Amanda::Changer::changers_by_uri_cc = ();
# set up some vtapes
rmtree($vtape_root);
check_inventory($chg, $mtx_config->{'barcodes'} > 0, $steps->{'load_slot_1'}, [
{ slot => 1, state => Amanda::Changer::SLOT_FULL,
barcode => '11111', current => 1,
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
{ slot => 2, state => Amanda::Changer::SLOT_FULL,
barcode => '22222',
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
{ slot => 3, state => Amanda::Changer::SLOT_FULL,
barcode => '33333',
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
{ slot => 4, state => Amanda::Changer::SLOT_FULL,
barcode => '44444',
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
{ slot => 5, state => Amanda::Changer::SLOT_EMPTY,
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
], "$pfx: inventory is correct on start-up");
};
check_inventory($chg, $mtx_config->{'barcodes'} > 0, $steps->{'load_slot_3'}, [
{ slot => 1, state => Amanda::Changer::SLOT_FULL,
barcode => '11111', reserved => 1, loaded_in => 0, current => 1,
- device_status => undef, f_type => undef, label => undef },
+ device_status => $DEVICE_STATUS_VOLUME_UNLABELED,
+ device_error => undef,
+ f_type => undef, label => undef },
{ slot => 2, state => Amanda::Changer::SLOT_FULL,
barcode => '22222', reserved => 1, loaded_in => 1,
- device_status => undef, f_type => undef, label => undef },
+ device_status => $DEVICE_STATUS_VOLUME_UNLABELED,
+ device_error => undef,
+ f_type => undef, label => undef },
{ slot => 3, state => Amanda::Changer::SLOT_FULL,
barcode => '33333',
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
{ slot => 4, state => Amanda::Changer::SLOT_FULL,
barcode => '44444',
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
{ slot => 5, state => Amanda::Changer::SLOT_EMPTY,
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
], "$pfx: inventory is updated when slots are loaded");
};
check_inventory($chg, $mtx_config->{'barcodes'} > 0, $steps->{'check_state_after_release1'}, [
{ slot => 1, state => Amanda::Changer::SLOT_FULL,
barcode => '11111', reserved => 1, loaded_in => 0, current => 1,
- device_status => $DEVICE_STATUS_SUCCESS,
+ device_status => $DEVICE_STATUS_SUCCESS, device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-1' },
{ slot => 2, state => Amanda::Changer::SLOT_FULL,
barcode => '22222', loaded_in => 1,
- device_status => $DEVICE_STATUS_SUCCESS,
+ device_status => $DEVICE_STATUS_SUCCESS, device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-2' },
{ slot => 3, state => Amanda::Changer::SLOT_FULL,
barcode => '33333',
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
{ slot => 4, state => Amanda::Changer::SLOT_FULL,
barcode => '44444',
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
{ slot => 5, state => Amanda::Changer::SLOT_EMPTY,
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
], "$pfx: inventory is still up to date");
};
check_inventory($chg, $mtx_config->{'barcodes'} > 0, $steps->{'release2'}, [
{ slot => 1, state => Amanda::Changer::SLOT_FULL,
barcode => '11111',
- device_status => $DEVICE_STATUS_SUCCESS,
+ device_status => $DEVICE_STATUS_SUCCESS, device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-1',
reserved => 1, loaded_in => 0 },
{ slot => 2, state => Amanda::Changer::SLOT_FULL,
barcode => '22222',
- device_status => $DEVICE_STATUS_SUCCESS,
+ device_status => $DEVICE_STATUS_SUCCESS, device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-2' },
{ slot => 3, state => Amanda::Changer::SLOT_FULL,
barcode => '33333',
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
{ slot => 4, state => Amanda::Changer::SLOT_FULL,
barcode => '44444', reserved => 1, loaded_in => 1, current => 1,
- device_status => $DEVICE_STATUS_SUCCESS,
+ device_status => $DEVICE_STATUS_SUCCESS, device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-4' },
{ slot => 5, state => Amanda::Changer::SLOT_EMPTY,
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
], "$pfx: inventory is up to date after more labelings");
};
check_inventory($chg, $mtx_config->{'barcodes'} > 0, $steps->{'try_update'}, [
{ slot => 1, state => Amanda::Changer::SLOT_FULL,
barcode => '11111', loaded_in => 1,
- device_status => $DEVICE_STATUS_SUCCESS,
+ device_status => $DEVICE_STATUS_SUCCESS, device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-1' },
{ slot => 2, state => Amanda::Changer::SLOT_FULL,
barcode => '22222', loaded_in => 0,
- device_status => $DEVICE_STATUS_SUCCESS,
+ device_status => $DEVICE_STATUS_SUCCESS, device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-2' },
{ slot => 3, state => Amanda::Changer::SLOT_FULL,
barcode => '33333',
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
{ slot => 4, state => Amanda::Changer::SLOT_FULL,
barcode => '44444', current => 1,
- device_status => $DEVICE_STATUS_SUCCESS,
+ device_status => $DEVICE_STATUS_SUCCESS, device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-4' },
{ slot => 5, state => Amanda::Changer::SLOT_EMPTY,
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
], "$pfx: inventory still accurate");
};
{ slot => 1, state => Amanda::Changer::SLOT_FULL,
barcode => '11111',
device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-1' },
{ slot => 2, state => Amanda::Changer::SLOT_FULL,
barcode => '22222',
device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'SURPRISE!' },
{ slot => 3, state => Amanda::Changer::SLOT_FULL,
barcode => '33333', loaded_in => 1,
- device_status => undef, f_type => undef, label => 'TAPE-3' },
+ device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
+ f_type => undef, label => 'TAPE-3' },
{ slot => 4, state => Amanda::Changer::SLOT_FULL,
barcode => '44444', loaded_in => 0, current => 1,
device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-4' },
{ slot => 5, state => Amanda::Changer::SLOT_EMPTY,
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
], "$pfx: inventory reflects updates");
};
{ slot => 1, state => Amanda::Changer::SLOT_FULL,
barcode => '11111',
device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-1' },
{ slot => 2, state => Amanda::Changer::SLOT_EMPTY,
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
{ slot => 3, state => Amanda::Changer::SLOT_FULL,
barcode => '33333', loaded_in => 1,
- device_status => undef, f_type => undef, label => 'TAPE-3' },
+ device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
+ f_type => undef, label => 'TAPE-3' },
{ slot => 4, state => Amanda::Changer::SLOT_FULL,
barcode => '22222', current => 1,
device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'SURPRISE!' },
{ slot => 5, state => Amanda::Changer::SLOT_FULL,
barcode => '44444',
device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-4' },
], "$pfx: inventory reflects the move");
};
{ slot => 1, state => Amanda::Changer::SLOT_FULL,
barcode => '11111', loaded_in => 1,
device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-1' },
{ slot => 2, state => Amanda::Changer::SLOT_EMPTY,
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
{ slot => 3, state => Amanda::Changer::SLOT_FULL,
barcode => '33333', loaded_in => 0,
- device_status => undef, f_type => undef, label => 'TAPE-3' },
+ device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
+ f_type => undef, label => 'TAPE-3' },
{ slot => 4, state => Amanda::Changer::SLOT_FULL,
barcode => '22222', current => 1,
device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-2' },
{ slot => 5, state => Amanda::Changer::SLOT_FULL,
barcode => '44444',
device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-4' },
], "$pfx: inventory before updates with unknown state");
};
{ slot => 1, state => Amanda::Changer::SLOT_FULL,
barcode => '11111', loaded_in => 1,
device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-1' },
{ slot => 2, state => Amanda::Changer::SLOT_EMPTY,
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
{ slot => 3, state => Amanda::Changer::SLOT_FULL,
barcode => '33333', loaded_in => 0,
- device_status => undef, f_type => undef, label => 'TAPE-3' },
+ device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
+ f_type => undef, label => 'TAPE-3' },
{ slot => 4, state => Amanda::Changer::SLOT_FULL,
barcode => '22222', current => 1,
device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-2' },
{ slot => 5, state => Amanda::Changer::SLOT_FULL,
barcode => '44444',
device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-4' },
], "$pfx: inventory reflects updates with unknown state with barcodes");
} else {
{ slot => 1, state => Amanda::Changer::SLOT_FULL,
barcode => '11111', loaded_in => 1,
device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-1' },
{ slot => 2, state => Amanda::Changer::SLOT_EMPTY,
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
{ slot => 3, state => Amanda::Changer::SLOT_FULL,
barcode => '33333', loaded_in => 0,
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
{ slot => 4, state => Amanda::Changer::SLOT_FULL,
barcode => '22222', current => 1,
- device_status => undef, f_type => undef, label => undef },
+ device_status => undef, device_error => undef,
+ f_type => undef, label => undef },
{ slot => 5, state => Amanda::Changer::SLOT_FULL,
barcode => '44444',
device_status => $DEVICE_STATUS_SUCCESS,
+ device_error => undef,
f_type => $Amanda::Header::F_TAPESTART, label => 'TAPE-4' },
], "$pfx: inventory reflects updates with unknown state without barcodes");
}