our
(
$in
,
$out
) = ( IO::Pipe->new, IO::Pipe->new );
our
(
$rin
,
$rout
) = ( IO::Pipe->new, IO::Pipe->new );
my
$pid
=
fork
;
unless
(
defined
$pid
) {
plan
skip_all
=>
'Unable to fork'
;
exit
;
}
unless
(
$pid
) {
{
no
warnings;
}
$in
->reader;
$out
->writer;
$rin
->writer;
$rout
->reader;
$out
->autoflush(1);
$rin
->autoflush(1);
Lemonldap::NG::Handler::Test::init();
Lemonldap::NG::Handler::Test::run();
exit
;
}
$in
->writer;
$out
->reader;
$rin
->reader;
$rout
->writer;
$in
->autoflush(1);
$rout
->autoflush(1);
my
$s
= IO::Select->new();
$s
->add(
$out
);
$s
->add(
$rin
);
sub
handler {
my
(
%args
) =
@_
;
print
$in
JSON::to_json(
$args
{req} ) .
"\n"
;
while
(
my
@ready
=
$s
->can_read ) {
foreach
$fh
(
@ready
) {
if
(
$fh
==
$out
) {
my
$res
= <
$out
>;
return
JSON::from_json(
$res
);
}
else
{
my
$res
= <
$rin
>;
$res
=
$args
{
sub
}->( JSON::from_json(
$res
) );
print
$rout
JSON::to_json(
$res
) .
"\n"
;
}
}
}
}
sub
end_handler {
print
$in
"END\n"
;
}
1;