You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.2 KiB
60 lines
1.2 KiB
use IO::Pipe;
|
|
use IO::Select;
|
|
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);
|
|
use lib 't/lib/';
|
|
require Lemonldap::NG::Handler::Test;
|
|
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;
|
|
|