NAME

Test::Gearman - A class for testing and mocking Gearman workers.

VERSION

version v0.2.0

SYNOPSIS

 use Test::Gearman;

 my $tg = Test::Gearman->new(
     functions => {
         reverse => sub {
             my $job      = shift;
             my $workload = $job->workload();
             my $result   = reverse($workload);

             return $result;
         },
     },
 );

 ## now you can either get a client object
 ## from Test::Gearman object
 my ($ret, $result) = $tg->client->do('reverse', 'this is a test');

 ## or build your own
 use Gearman::XS::Client;
 my $client = Gearman::XS::Client->new;
 $client->add_server($tg->host, $tg->port);
 my ($ret, $job_handle) = $client->do_background('reverse', 'hello world');

DESCRIPTION

Test::Gearman is a class for testing Gearman workers.

This class only works with C version of gearmand, and Gearman::XS bindings.

An actual Gearman daemon is launched, and workers are forked when you instantiate the class. The Gearman and workers are automatically shut down and destroyed when the instance of the class goes out of scope.

By default Gearman daemon will listen on a random available "port".

PUBLIC ATTRIBUTES

functions

A HashRef of CodeRefs that stores worker function names as keys and a CodeRef as work to be done.

 my $tg = Test::Gearman->new(
     functions => {
         function_name => sub {
             ## worker code
         },
     },
 );

function_names()

Returns a list of all registered worker function names.

get_function($function_name)

Returns a CodeRef for the given function name.

gearmand_bin

Path to Gearman daemon binary. If one is not provided it tries to find it in the $PATH.

Note: this must be a C version of gearmand, and not the Perl version as they have different interfaces.

You can also set the path to the binary via $ENV{GEARMAND}.

host

Host to which Gearman daemon will bind.

Default is 127.0.0.1.

port

Port on which gearmand runs. It is picked randomly at the start, but you can manually specify a port if you wish.

worker_timeout

Worker timeout in seconds.

Default is 5.

client_timeout

Client timeout in seconds.

Default is 5.

client

An instance of Gearman::XS::Client that you can use to inject jobs.

log_file

Gearman daemon log file. This is synonymous with --log-file option.

Default: stderr

PRIVATE ATTRIBUTES

server

An instance of Proc::Guard that runs gearmand server.

worker

An instance of Proc::Guard that runs workers.

AUTHOR

Roman F. <romanf@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2013 by Need Backup.

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