|
Packit Service |
392537 |
# vim:ft=perl
|
|
Packit Service |
392537 |
# Copyright (c) 2009-2012 Zmanda, Inc. All Rights Reserved.
|
|
Packit Service |
392537 |
# Copyright (c) 2013-2016 Carbonite, Inc. All Rights Reserved.
|
|
Packit Service |
392537 |
#
|
|
Packit Service |
392537 |
# This program is free software; you can redistribute it and/or
|
|
Packit Service |
392537 |
# modify it under the terms of the GNU General Public License
|
|
Packit Service |
392537 |
# as published by the Free Software Foundation; either version 2
|
|
Packit Service |
392537 |
# of the License, or (at your option) any later version.
|
|
Packit Service |
392537 |
#
|
|
Packit Service |
392537 |
# This program is distributed in the hope that it will be useful, but
|
|
Packit Service |
392537 |
# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
Packit Service |
392537 |
# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
Packit Service |
392537 |
# for more details.
|
|
Packit Service |
392537 |
#
|
|
Packit Service |
392537 |
# You should have received a copy of the GNU General Public License along
|
|
Packit Service |
392537 |
# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
Packit Service |
392537 |
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
Packit Service |
392537 |
#
|
|
Packit Service |
392537 |
# Contact information: Carbonite Inc., 756 N Pastoria Ave
|
|
Packit Service |
392537 |
# Sunnyvale, CA 94086, USA, or: http://www.zmanda.com
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
package Installcheck::Changer;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
=head1 NAME
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
Installcheck::Changer - utilities for testing changers
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
=head1 SYNOPSIS
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
use Installcheck::Changer;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
my $res_cb = sub {
|
|
Packit Service |
392537 |
my ($err, $res) = @_;
|
|
Packit Service |
392537 |
chg_err_like($err,
|
|
Packit Service |
392537 |
{ message => "expected msg", type => 'failure' },
|
|
Packit Service |
392537 |
"operation produces the expected error");
|
|
Packit Service |
392537 |
# or, just looking at the message
|
|
Packit Service |
392537 |
chg_err_like($err,
|
|
Packit Service |
392537 |
qr/expected .*/,
|
|
Packit Service |
392537 |
"operation produces the expected error");
|
|
Packit Service |
392537 |
};
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
=head1 USAGE
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
The function C<chg_err_like> takes an C<Amanda::Changer::Error> object and a
|
|
Packit Service |
392537 |
hashref of expected values for that error object, and compares the two. The
|
|
Packit Service |
392537 |
values of this hashref can be regular expressions or strings. Alternately, the
|
|
Packit Service |
392537 |
function can take a regexp which is compared to the error's message. This
|
|
Packit Service |
392537 |
function is exported by default.
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
=cut
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
use Test::More;
|
|
Packit Service |
392537 |
use Data::Dumper;
|
|
Packit Service |
392537 |
use strict;
|
|
Packit Service |
392537 |
use warnings;
|
|
Packit Service |
392537 |
use vars qw( @ISA @EXPORT );
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
require Exporter;
|
|
Packit Service |
392537 |
@ISA = qw(Exporter);
|
|
Packit Service |
392537 |
@EXPORT = qw(chg_err_like);
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
sub chg_err_like {
|
|
Packit Service |
392537 |
my ($err, $expected, $msg) = @_;
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (!defined($err) or !$err->isa("Amanda::Changer::Error")) {
|
|
Packit Service |
392537 |
diag("Expected an Amanda::Changer::Error object; got\n" . Dumper($err));
|
|
Packit Service |
392537 |
return;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
if (ref($expected) eq 'Regexp') {
|
|
Packit Service |
392537 |
like($err->{'message'}, $expected, $msg);
|
|
Packit Service |
392537 |
} else {
|
|
Packit Service |
392537 |
my $ok = 1;
|
|
Packit Service |
392537 |
for my $key (qw( type reason message )) {
|
|
Packit Service |
392537 |
if (exists $expected->{$key}) {
|
|
Packit Service |
392537 |
if (!exists $err->{$key}) {
|
|
Packit Service |
392537 |
fail($msg) if ($ok);
|
|
Packit Service |
392537 |
$ok = 0;
|
|
Packit Service |
392537 |
diag("expected a '$key' hash elt, but saw none");
|
|
Packit Service |
392537 |
next;
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
|
|
Packit Service |
392537 |
my ($got, $exp) = ($err->{$key}, $expected->{$key});
|
|
Packit Service |
392537 |
if (ref($exp) eq "Regexp") {
|
|
Packit Service |
392537 |
if ($got !~ $exp) {
|
|
Packit Service |
392537 |
fail($msg . ":$got:$exp: " . Data::Dumper::Dumper($err)) if $ok;
|
|
Packit Service |
392537 |
$ok = 0;
|
|
Packit Service |
392537 |
diag("$key '$got' does not match '$exp'");
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
} elsif ($got ne $exp) {
|
|
Packit Service |
392537 |
fail($msg) if ($ok);
|
|
Packit Service |
392537 |
$ok = 0;
|
|
Packit Service |
392537 |
diag("expected $key '$exp'; got $key '$got'");
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
pass($msg) if ($ok);
|
|
Packit Service |
392537 |
}
|
|
Packit Service |
392537 |
}
|