#!perl
plan
tests
=> 5;
my
$server
= IO::Socket::INET->new(
Type
=> SOCK_STREAM,
Reuse
=> 1,
Listen
=> 10,
) or
die
"Could not set up TCP server: $@"
;
my
$port
=
$server
->sockport;
my
$pid
=
fork
;
die
"cannot fork: $!"
unless
defined
$pid
;
if
( 0 ==
$pid
) {
{
my
$response
=
"HTTP/1.1 302 Redirect\r\n"
.
"Content-Type: text/plain; charset=utf-8\r\n\r\n"
. "RT/42foo 200 this is a fake successful response header
header line 1
header line 2
response text";
my
$client
=
$server
->
accept
;
$client
->
write
(
$response
);
}
{
my
$response
=
"HTTP/1.1 302 Redirect\r\n"
.
"Content-Type: text/plain; charset=utf-8\r\n\r\n"
.
"random string"
;
my
$client
=
$server
->
accept
;
$client
->
write
(
$response
);
}
exit
;
}
my
$rt
= RT::Client::REST->new(
timeout
=> 2,
verbose_errors
=> 1,
user_agent_args
=> {
agent
=>
'Secret agent'
,
max_redirect
=> 0,
},
);
is
$rt
->user_agent->agent,
'Secret agent'
,
'Ua correctly initialized'
;
is
$rt
->user_agent->max_redirect, 0,
'Ua correctly initialized with max redirect'
;
ok
$rt
->verbose_errors,
'Verbose errors set'
;
eval
{
my
$res
=
$rt
->_submit(
'ticket/1'
,
undef
,
{
user
=>
'a'
,
pass
=>
'b'
,
}
);
};
like $@,
qr{fetching .*/REST/1.0/ticket/1}
,
'Double redirect dies meaningfully'
;
$pid
=
fork
;
die
"cannot fork: $!"
unless
defined
$pid
;
if
( 0 ==
$pid
) {
{
my
$response
=
"HTTP/1.1 200 OK\r\n"
.
"Content-Type: text/plain; charset=utf-8\r\n\r\n"
.
'response text'
;
my
$client
=
$server
->
accept
;
$client
->
write
(
$response
);
}
exit
;
}
eval
{
my
$res
=
$rt
->_submit(
'ticket/1'
,
undef
,
{
user
=>
'a'
,
pass
=>
'b'
,
}
);
};
like $@,
qr{Malformed.*/REST/1.0/ticket/1}
,
'Random data is reported correctly'
;