package Varnish::Test;
-use Carp 'croak';
-
use Varnish::Test::Engine;
sub new($) {
sub stop_engine($;$) {
my ($self) = @_;
- (delete $self->{'engine'})->shutdown if defined $self->{'engine'};
+ if (defined($self->{'engine'})) {
+ $self->{'engine'}->shutdown();
+ delete $self->{'engine'};
+ }
}
sub run_case($$) {
my $module = 'Varnish::Test::Case::' . $name;
eval 'use ' . $module;
- croak $@ if $@;
+ die $@ if $@;
- $self->start_engine;
+ $self->start_engine();
my $case = $module->new($self->{'engine'});
push(@{$self->{'cases'}}, $case);
- $case->init;
- $case->run;
- $case->fini;
-
- $self->stop_engine;
+ eval {
+ $case->init();
+ $case->run();
+ $case->fini();
+ };
+ if ($@) {
+ $self->{'engine'}->log($self, 'TST: ', $@);
+ $self->stop_engine();
+ }
}
1;
}
delete $self->{'engine'}->{'case'};
+
+ if ($self->{'failed'}) {
+ die sprintf("%d out of %d tests failed\n",
+ $self->{'failed'}, $self->{'count'});
+ }
}
sub run($;@) {
}
}
- my $controller = Varnish::Test->new;
+ my $controller = new Varnish::Test;
+ $controller->start_engine();
foreach my $casename (@casenames) {
$controller->run_case($casename);
}
+ $controller->stop_engine();
foreach my $case (@{$controller->{'cases'}}) {
(my $name = ref($case)) =~ s/.*://;
- print sprintf("%s: Successful: %d Failed: %d\n",
- $name, $case->{'successful'}, $case->{'failed'});
+ printf("%s: Successful: %d Failed: %d\n",
+ $name, $case->{'successful'}, $case->{'failed'});
}
}