The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl

use strict;
use Gearman::Client;
use Storable qw( freeze );
use Test::More;

use lib 't';
use TestGearman;



if (start_server(PORT)) {
    plan tests => 8;
} else {
    plan skip_all => "Can't find server to test with";
    exit 0;
}

$NUM_SERVERS = 3;

for (1..($NUM_SERVERS-1)) {
    start_server(PORT + $_)
}

start_worker(PORT, { prefix => 'prefix_a', num_servers => $NUM_SERVERS });
start_worker(PORT, { prefix => 'prefix_b', num_servers => $NUM_SERVERS });

my @job_servers = map { '127.0.0.1:' . (PORT + $_) } 0..$NUM_SERVERS;

my $client_a = Gearman::Client->new(prefix => 'prefix_a');
isa_ok($client_a, 'Gearman::Client');
$client_a->job_servers(@job_servers);

my $client_b = Gearman::Client->new(prefix => 'prefix_b');
isa_ok($client_b, 'Gearman::Client');
$client_b->job_servers(@job_servers);

# basic do_task test 
is(${$client_a->do_task('echo_prefix', 'beep test')}, 'beep test from prefix_a',
   'basic do_task() - prefix a');
is(${$client_b->do_task('echo_prefix', 'beep test')}, 'beep test from prefix_b',
   'basic do_task() - prefix b');

is(${$client_a->do_task(Gearman::Task->new('echo_prefix', \('beep test')))}, 'beep test from prefix_a',
   'Gearman::Task do_task() - prefix a');
is(${$client_b->do_task(Gearman::Task->new('echo_prefix', \('beep test')))}, 'beep test from prefix_b',
   'Gearman::Task do_task() - prefix b');

my %tasks = (
             a => $client_a->new_task_set,
             b => $client_b->new_task_set,
);

my %out; 
for my $k (keys %tasks) {
    $out{$k} = '';
    $tasks{$k}->add_task('echo_prefix' => "$k", { on_complete => sub { $out{$k} .= ${ $_[0] } } });
}
$tasks{$_}->wait for keys %tasks;

for my $k (sort keys %tasks) {
    is($out{$k}, "$k from prefix_$k", "taskset from client_$k");
}