Net-IMP-HTTP
view release on metacpan or search on metacpan
t/05_logformdata.t view on Meta::CPAN
eval { require Net::IMP::HTTP::Example::LogFormData }
or plan skip_all => "cannot load Net::IMP::HTTP::Example::LogFormData: $@";
plan tests => 3;
my $multipart_body =
"--abcde\r\nContent-disposition: form-data; name=oFo\r\n\r\nlari\r\n".
"--abcde\r\nContent-disposition: form-data; name=bAr\r\n\r\nfari\r\n".
"--abcde\r\nContent-disposition: form-data; name=FiL; filename=foo.bar\r\n\r\n".
"content of file\r\n".
"--abcde--\r\n";
my @http_data = (
[ 0,IMP_DATA_HTTP_HEADER,
"POST /foo?bar=1&foo=2 HTTP/1.1\r\n".
"Content-type: application/x-www-form-urlencoded\r\n".
"Content-length: 11\r\n".
"Host: foo\r\n\r\n",
],
[ 0,IMP_DATA_HTTP_BODY, "rab=3&oof=4"],
[ 0,IMP_DATA_HTTP_BODY, ""],
[ 1,IMP_DATA_HTTP_HEADER, "HTTP/1.1 204 no content\r\n\r\n" ],
[ 1,IMP_DATA_HTTP_BODY, "" ],
[ 0,IMP_DATA_HTTP_HEADER,
"POST /foo?bar=a&foo=b HTTP/1.1\r\n".
"Content-type: multipart/form-data; boundary=abcde\r\n".
"Content-length: ".length($multipart_body)."\r\n".
"Host: foo\r\n\r\n",
],
[ 0,IMP_DATA_HTTP_BODY, $multipart_body ],
[ 0,IMP_DATA_HTTP_BODY, ""],
[ 1,IMP_DATA_HTTP_HEADER, "HTTP/1.1 204 no content\r\n\r\n" ],
[ 1,IMP_DATA_HTTP_BODY, "" ],
[ 0,IMP_DATA_HTTP_HEADER, "GET /foo?bar=foot HTTP/1.1\r\n\r\n" ],
[ 0,IMP_DATA_HTTP_BODY, ""],
[ 1,IMP_DATA_HTTP_HEADER, "HTTP/1.1 204 no content\r\n\r\n" ],
[ 1,IMP_DATA_HTTP_BODY, "" ],
);
my @httprq_data;
for (@http_data) {
my ($dir,$type,$data) = @$_;
$type =
( $type == IMP_DATA_HTTP_HEADER ) ? IMP_DATA_HTTPRQ_HEADER :
( $type == IMP_DATA_HTTP_BODY ) ? IMP_DATA_HTTPRQ_CONTENT :
undef;
push @httprq_data, [ $dir,$type,$data ] if defined $type
}
my @stream_data;
for (@http_data) {
my ($dir,$type,$data) = @$_;
if (@stream_data and $stream_data[-1][0] == $dir) {
$stream_data[-1][2] .= $data
} else {
push @stream_data, [ $dir,IMP_DATA_STREAM,$data ]
}
}
# chunkify streaming data
for ( @http_data, @httprq_data, @stream_data ) {
my ($dir,$type,$data) = @$_;
$type < 0 or next; # typed packet
my @chunks = $data =~m{(.{1,9})}sg;
@chunks = '' if ! @chunks and $type != IMP_DATA_STREAM; # preserve typed ''
@$_ = ( $dir,$type,@chunks );
}
# add FIN to stream
push @stream_data,[ 0,IMP_DATA_STREAM,'' ];
push @stream_data,[ 1,IMP_DATA_STREAM,'' ];
my @http_rv_expect = (
[ 'prepass', 0, -1 ],
[ 'pass', 1, -1 ],
[ 'log', 0, 0, 0, 'info', $dump->({
'body.urlencoded' => [
[ rab => '3' ],
[ oof => '4' ]
],
'header.query_string' => [
[ bar => '1' ],
[ foo => '2' ]
],
})],
[ 'log', 0, 0, 0, 'info', $dump->({
'body.multipart' => [
[ oFo => 'lari' ],
[ bAr => 'fari' ],
[ FiL => 'UPLOAD:foo.bar (15 bytes)' ],
],
'header.query_string' => [
[ bar => 'a' ],
[ foo => 'b' ]
],
})],
[ 'log', 0, 0, 0, 'info', $dump->({
'header.query_string' => [
[ bar => 'foot' ]
],
})],
[ 'pass',0, 489 ],
);
my @httprq_rv_expect = (
[ 'prepass', 0, -1 ],
[ 'pass', 1, -1 ],
[ 'log', 0, 0, 0, 'info', $dump->({
'body.urlencoded' => [
[ rab => '3' ],
[ oof => '4' ]
],
'header.query_string' => [
[ bar => '1' ],
[ foo => '2' ]
],
})],
[ 'prepass', 0, -1 ],
[ 'pass', 1, -1 ],
[ 'log', 0, 0, 0, 'info', $dump->({
'body.multipart' => [
( run in 0.540 second using v1.01-cache-2.11-cpan-63c85eba8c4 )