[![Build Status](https://travis-ci.org/fujiwara/Test-UNIXSock.svg?branch=master)](https://travis-ci.org/fujiwara/Test-UNIXSock)
# NAME

Test::UNIXSock - testing UNIX domain socket program

# SYNOPSIS

   use Test::UNIXSock;

   my $server = Test::UNIXSock->new(
       code => sub {
           my $path = shift;
           ...
       },
   );
   my $client = MyClient->new( sock => $server->path );
   undef $server; # kill child process on DESTROY

Using memcached:

   use Test::UNIXSock;

   my $memcached = Test::UNIXSock->new(
       code => sub {
           my $path = shift;

           exec $bin, '-s' => $path;
           die "cannot execute $bin: $!";
       },
   );
   my $memd = Cache::Memcached->new({servers => [$memcached->path]});
   ...

And functional interface is available:

   use Test::UNIXSock;
   test_unix_sock(
       client => sub {
           my ($path, $server_pid) = @_;
           # send request to the server
       },
       server => sub {
           my $path = shift;
           # run server
       },
   );

# DESCRIPTION

Test::UNIXSock is a test utility to test UNIX domain socket server programs.

This is based on [Test::TCP](https://metacpan.org/pod/Test::TCP).

# METHODS

- test\_unixsock

   Functional interface.

       test_unixsock(
           client => sub {
               my $path = shift;
               # send request to the server
           },
           server => sub {
               my $path = shift;
               # run server
           },
           # optional
           path => "/tmp/mytest.sock", # if not specified, create a sock in tmpdir
           max_wait => 3, # seconds
       );

- wait\_unix\_sock

       wait_unix_sock({ path => $path });

   Waits for a particular path is available for connect.

# Object Oriented interface interface

- my $server = Test::UNIXSock->new(%args);

   Create new instance of Test::UNIXSock.

   Arguments are following:

   - $args{auto\_start}: Boolean

       Call `$server->start()` after create instance.

       Default: true

   - $args{code}: CodeRef

       The callback function. Argument for callback function is: `$code->($pid)`.

       This parameter is required.

   - $args{max\_wait} : Number

       Will wait for at most `$max_wait` seconds before checking port.

       See also [Net::EmptyPort](https://metacpan.org/pod/Net::EmptyPort).

       _Default: 10_

- $server->start()

   Start the server process. Normally, you don't need to call this method.

- $server->stop()

   Stop the server process.

- my $pid = $server->pid();

   Get the pid of child process.

- my $port = $server->port();

   Get the port number of child process.

# FAQ

See also [Test::TCP](https://metacpan.org/pod/Test::TCP) FAQ section.

# AUTHOR

Fujiwara Shunichiro <[email protected]>

# SEE ALSO

[Test::TCP](https://metacpan.org/pod/Test::TCP)

# LICENSE

This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.

This module is based on [Test::TCP](https://metacpan.org/pod/Test::TCP). copyright (c) 2013 by Tokuhiro Matsuno <[email protected]>.