Blame installcheck/Installcheck/Changer.pm

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
}