Tests: converted HTTP2 raw_read() and raw_write() to class methods.
diff --git a/grpc.t b/grpc.t
index 7beb75b..64f0f30 100644
--- a/grpc.t
+++ b/grpc.t
@@ -747,7 +747,7 @@
$trailers .= $rst if $uri eq '/Discard_NE';
$trailers .= ($rst x 3) if $uri eq '/Discard_NE3';
$trailers .= $cnl if $uri eq '/Discard_CNL';
- Test::Nginx::HTTP2::raw_write($client, $trailers);
+ $c->raw_write($trailers);
return $s->read(all => [{ fin => 1 }], wait => 2)
if $uri eq '/Discard_WU' || $uri eq '/Discard_NE';
diff --git a/lib/Test/Nginx/HTTP2.pm b/lib/Test/Nginx/HTTP2.pm
index 2a7f0a6..e1a4b1a 100644
--- a/lib/Test/Nginx/HTTP2.pm
+++ b/lib/Test/Nginx/HTTP2.pm
@@ -39,14 +39,6 @@
my $preface = defined $extra{preface} ? $extra{preface}
: 'PRI * HTTP/2.0' . CRLF . CRLF . 'SM' . CRLF . CRLF;
- if ($extra{proxy}) {
- raw_write($s, $extra{proxy});
- }
-
- # preface
-
- raw_write($s, $preface);
-
my $self = bless {
socket => $s, last_stream => -1,
dynamic_encode => [ static_table() ],
@@ -55,6 +47,14 @@
iws => 65535, conn_window => 65535, streams => {}
}, $class;
+ if ($extra{proxy}) {
+ $self->raw_write($extra{proxy});
+ }
+
+ # preface
+
+ $self->raw_write($preface);
+
return $self if $extra{pure};
# update windows, if any
@@ -76,13 +76,13 @@
sub h2_ping {
my ($self, $payload) = @_;
- raw_write($self->{socket}, pack("x2C2x5a8", 8, 0x6, $payload));
+ $self->raw_write(pack("x2C2x5a8", 8, 0x6, $payload));
}
sub h2_rst {
my ($self, $stream, $error) = @_;
- raw_write($self->{socket}, pack("x2C2xNN", 4, 0x3, $stream, $error));
+ $self->raw_write(pack("x2C2xNN", 4, 0x3, $stream, $error));
}
sub h2_goaway {
@@ -92,11 +92,11 @@
my $buf = pack("x2C2xN3A*", $len, 0x7, $stream, $lstream, $err, $debug);
my @bufs = map {
- raw_write($self->{socket}, substr $buf, 0, $_, "");
+ $self->raw_write(substr $buf, 0, $_, "");
select undef, undef, undef, 0.2;
} @{$extra{split}};
- raw_write($self->{socket}, $buf);
+ $self->raw_write($buf);
}
sub h2_priority {
@@ -105,14 +105,14 @@
$stream = 0 unless defined $stream;
$dep = 0 unless defined $dep;
$dep |= $extra{excl} << 31 if exists $extra{excl};
- raw_write($self->{socket}, pack("x2C2xNNC", 5, 0x2, $stream, $dep, $w));
+ $self->raw_write(pack("x2C2xNNC", 5, 0x2, $stream, $dep, $w));
}
sub h2_window {
my ($self, $win, $stream) = @_;
$stream = 0 unless defined $stream;
- raw_write($self->{socket}, pack("x2C2xNN", 4, 0x8, $stream, $win));
+ $self->raw_write(pack("x2C2xNN", 4, 0x8, $stream, $win));
}
sub h2_settings {
@@ -121,14 +121,14 @@
my $len = 6 * @pairs / 2;
my $buf = pack_length($len) . pack "CCx4", 0x4, $ack ? 0x1 : 0x0;
$buf .= pack "nN", splice @pairs, 0, 2 while @pairs;
- raw_write($self->{socket}, $buf);
+ $self->raw_write($buf);
}
sub h2_unknown {
my ($self, $payload) = @_;
my $buf = pack_length(length($payload)) . pack("Cx5a*", 0xa, $payload);
- raw_write($self->{socket}, $buf);
+ $self->raw_write($buf);
}
sub h2_continue {
@@ -167,12 +167,12 @@
$split = ref $extra->{split} && $extra->{split} || [];
for (@$split) {
- raw_write($self->{socket}, substr($buf, 0, $_, ""));
+ $self->raw_write(substr($buf, 0, $_, ""));
return if $extra->{abort};
select undef, undef, undef, ($extra->{split_delay} || 0.2);
}
- raw_write($self->{socket}, $buf);
+ $self->raw_write($buf);
}
sub new_stream {
@@ -268,12 +268,12 @@
$split = ref $uri->{split} && $uri->{split} || [];
for (@$split) {
- raw_write($self->{socket}, substr($buf, 0, $_, ""));
+ $self->raw_write(substr($buf, 0, $_, ""));
goto done if $uri->{abort};
select undef, undef, undef, ($uri->{split_delay} || 0.2);
}
- raw_write($self->{socket}, $buf);
+ $self->raw_write($buf);
done:
return $self->{last_stream};
}
@@ -288,7 +288,7 @@
local $Data::Dumper::Terse = 1;
while (1) {
- $buf = raw_read($s, $buf, 9, $wait);
+ $buf = $self->raw_read($buf, 9, $wait);
last if length $buf < 9;
my $length = unpack_length($buf);
@@ -299,7 +299,7 @@
substr($stream, 0, 1) = 0;
$stream = unpack("N", pack("B32", $stream));
- $buf = raw_read($s, $buf, $length + 9, $wait);
+ $buf = $self->raw_read($buf, $length + 9, $wait);
last if length($buf) < $length + 9;
$buf = substr($buf, 9);
@@ -321,6 +321,35 @@
return \@got;
}
+sub raw_read {
+ my ($self, $buf, $len, $timo) = @_;
+ $timo = 8 unless $timo;
+ my $got = '';
+ my $s = $self->{socket};
+
+ while (length($buf) < $len && IO::Select->new($s)->can_read($timo)) {
+ $s->sysread($got, 16384) or last;
+ log_in($got);
+ $buf .= $got;
+ }
+ return $buf;
+}
+
+sub raw_write {
+ my ($self, $message) = @_;
+ my $s = $self->{socket};
+
+ local $SIG{PIPE} = 'IGNORE';
+
+ while (IO::Select->new($s)->can_write(0.4)) {
+ log_out($message);
+ my $n = $s->syswrite($message);
+ last unless $n;
+ $message = substr($message, $n);
+ last unless length $message;
+ }
+}
+
###############################################################################
sub pack_body {
@@ -463,33 +492,6 @@
unpack 'N', pack 'xc3', unpack 'c3', $_[0];
}
-sub raw_read {
- my ($s, $buf, $len, $timo) = @_;
- $timo = 8 unless $timo;
- my $got = '';
-
- while (length($buf) < $len && IO::Select->new($s)->can_read($timo)) {
- $s->sysread($got, 16384) or last;
- log_in($got);
- $buf .= $got;
- }
- return $buf;
-}
-
-sub raw_write {
- my ($s, $message) = @_;
-
- local $SIG{PIPE} = 'IGNORE';
-
- while (IO::Select->new($s)->can_write(0.4)) {
- log_out($message);
- my $n = $s->syswrite($message);
- last unless $n;
- $message = substr($message, $n);
- last unless length $message;
- }
-}
-
sub new_socket {
my ($port, %extra) = @_;
my $npn = $extra{'npn'};