#!/usr/bin/perl

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

use lib 't';
use TestGearman;

# This is testing the MAXQUEUE feature of gearmand. There's no direct
# support for it in Gearman::Worker yet, so we connect directly to
# gearmand to configure it for the test.

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

wait_for_port(PORT);

{
    my $sock = IO::Socket::INET->new(
        PeerAddr => '127.0.0.1',
        PeerPort => PORT,
    );
    ok($sock, "connect to jobserver");

    $sock->write( "MAXQUEUE long 1\n" );
    my $input = $sock->getline();
    ok($input =~ m/^OK\b/i);
}

start_worker(PORT);

my $client = Gearman::Client->new;
isa_ok($client, 'Gearman::Client');

$client->job_servers('127.0.0.1:' . PORT);

my $tasks = $client->new_task_set;
isa_ok($tasks, 'Gearman::Taskset');

my $failed = 0;
my $completed = 0;

foreach my $iter (1..5) {
    my $handle = $tasks->add_task('long', $iter, {
        on_complete => sub { $completed++ },
        on_fail => sub { $failed++ }
    });
}
$tasks->wait;

is($completed, 2, 'number of success'); # One starts immediately and on the queue
is($failed, 3, 'number of failure'); # All the rest



