Mailing List Archive

r1850 - trunk/varnish-tools/regress/lib/Varnish/Test
Author: knutroy
Date: 2007-08-16 15:07:55 +0200 (Thu, 16 Aug 2007)
New Revision: 1850

Modified:
trunk/varnish-tools/regress/lib/Varnish/Test/Case.pm
trunk/varnish-tools/regress/lib/Varnish/Test/Client.pm
trunk/varnish-tools/regress/lib/Varnish/Test/Engine.pm
trunk/varnish-tools/regress/lib/Varnish/Test/Server.pm
Log:
* Added automatic shutdown of Client-objects used by a test.
* Added more diagnostic messages wrt. left-over input data/junk.


Modified: trunk/varnish-tools/regress/lib/Varnish/Test/Case.pm
===================================================================
--- trunk/varnish-tools/regress/lib/Varnish/Test/Case.pm 2007-08-16 06:52:08 UTC (rev 1849)
+++ trunk/varnish-tools/regress/lib/Varnish/Test/Case.pm 2007-08-16 13:07:55 UTC (rev 1850)
@@ -149,6 +149,11 @@
$self->log(sprintf("%d: FAIL: %s: %s",
$self->{'count'}, $method, $@));
}
+ # Make sure all clients have closed their connections.
+ foreach my $client (@{$self->{'engine'}->{'clients'}}) {
+ $client->shutdown;
+ }
+ @{$self->{'engine'}->{'clients'}} = ();
}
$self->{'stop'} = [gettimeofday()];
}

Modified: trunk/varnish-tools/regress/lib/Varnish/Test/Client.pm
===================================================================
--- trunk/varnish-tools/regress/lib/Varnish/Test/Client.pm 2007-08-16 06:52:08 UTC (rev 1849)
+++ trunk/varnish-tools/regress/lib/Varnish/Test/Client.pm 2007-08-16 13:07:55 UTC (rev 1850)
@@ -45,28 +45,33 @@

use IO::Socket::INET;

+our $id_seq = 1;
+
sub new($$) {
my ($this, $engine, $attrs) = @_;
my $class = ref($this) || $this;

my $self = bless({ 'engine' => $engine,
'mux' => $engine->{'mux'},
+ 'id' => $id_seq++,
'requests' => 0,
'responses' => 0 }, $class);

+ push(@{$self->{'engine'}->{'clients'}}, $self);
+
return $self;
}

sub log($$;$) {
my ($self, $str, $extra_prefix) = @_;

- $self->{'engine'}->log($self, 'CLI: ' . ($extra_prefix || ''), $str);
+ $self->{'engine'}->log($self, sprintf('CLI[%d]: ', $self->{'id'}) . ($extra_prefix || ''), $str);
}

sub logf($$;@) {
my ($self, $fmt, @args) = @_;

- $self->{'engine'}->log($self, 'CLI: ', sprintf($fmt, @args));
+ $self->{'engine'}->log($self, sprintf('CLI[%d]: ', $self->{'id'}), sprintf($fmt, @args));
}

sub send_request($$;$) {
@@ -97,10 +102,21 @@
}

sub shutdown($) {
- my ($self, $how) = @_;
+ my ($self) = @_;

- $self->{'mux'}->close($self->{'fh'});
- $self->{'fh'} = undef;
+ if (defined($self->{'fh'})) {
+ my $inbuffer = $self->{'mux'}->inbuffer($self->{'fh'});
+
+ if ($inbuffer ne '') {
+ use Data::Dumper;
+
+ $self->log('Discarding: ' . Dumper(\$inbuffer));
+ $self->{'mux'}->inbuffer($self->{'fh'}, '');
+ }
+
+ $self->{'mux'}->close($self->{'fh'});
+ $self->{'fh'} = undef;
+ }
}

sub mux_input($$$$) {
@@ -204,7 +220,7 @@
sub mux_close($$) {
my ($self, $mux, $fh) = @_;

- delete $self->{'fh'};
+ $self->{'fh'} = undef;
}

1;

Modified: trunk/varnish-tools/regress/lib/Varnish/Test/Engine.pm
===================================================================
--- trunk/varnish-tools/regress/lib/Varnish/Test/Engine.pm 2007-08-16 06:52:08 UTC (rev 1849)
+++ trunk/varnish-tools/regress/lib/Varnish/Test/Engine.pm 2007-08-16 13:07:55 UTC (rev 1850)
@@ -66,6 +66,7 @@
my $self = bless({ 'mux' => IO::Multiplex->new,
'controller' => $controller,
'config' => \%config,
+ 'clients' => [],
'pending' => [] }, $class);

$self->{'server'} = Varnish::Test::Server->new($self);

Modified: trunk/varnish-tools/regress/lib/Varnish/Test/Server.pm
===================================================================
--- trunk/varnish-tools/regress/lib/Varnish/Test/Server.pm 2007-08-16 06:52:08 UTC (rev 1849)
+++ trunk/varnish-tools/regress/lib/Varnish/Test/Server.pm 2007-08-16 13:07:55 UTC (rev 1850)
@@ -145,6 +145,15 @@
sub shutdown($) {
my ($self) = @_;

+ my $inbuffer = $self->{'mux'}->inbuffer($self->{'fh'});
+
+ if ($inbuffer ne '') {
+ use Data::Dumper;
+
+ $self->{'server'}->log('Junk or incomplete request. Discarding: ' . Dumper(\$inbuffer));
+ $self->{'mux'}->inbuffer($self->{'fh'}, '');
+ }
+
$self->{'mux'}->close($self->{'fh'});
}

@@ -224,8 +233,12 @@
# of request, so if there is anything left in input buffer, it
# must be incomplete because "mux_input" left it there.

- die "Junk or incomplete request\n"
- unless $$data eq '';
+ if ($$data ne '') {
+ use Data::Dumper;
+
+ $self->{'server'}->log('Junk or incomplete request. Discarding: ' . Dumper($data));
+ $$data = '';
+ }
}

1;
r1850 - trunk/varnish-tools/regress/lib/Varnish/Test [ In reply to ]
knutroy at projects.linpro.no writes:
> Log:
> * Added automatic shutdown of Client-objects used by a test.
> * Added more diagnostic messages wrt. left-over input data/junk.

Thanks, just one nit:

> @@ -145,6 +145,15 @@
> sub shutdown($) {
> my ($self) = @_;
>
> + my $inbuffer = $self->{'mux'}->inbuffer($self->{'fh'});
> +
> + if ($inbuffer ne '') {
> + use Data::Dumper;
> +
> + $self->{'server'}->log('Junk or incomplete request. Discarding: ' . Dumper(\$inbuffer));
> + $self->{'mux'}->inbuffer($self->{'fh'}, '');
> + }
> +
> $self->{'mux'}->close($self->{'fh'});
> }
>
> @@ -224,8 +233,12 @@
> # of request, so if there is anything left in input buffer, it
> # must be incomplete because "mux_input" left it there.
>
> - die "Junk or incomplete request\n"
> - unless $$data eq '';
> + if ($$data ne '') {
> + use Data::Dumper;
> +
> + $self->{'server'}->log('Junk or incomplete request. Discarding: ' . Dumper($data));
> + $$data = '';
> + }
> }

might as well move use Data::Dumper to the top of the package...

DES
--
Dag-Erling Sm?rgrav
Senior Software Developer
Linpro AS - www.linpro.no