client: always disable watch_read after a command
[MogileFS-Server.git] / t / 80-job_master.t
blob30055dbfb527ace8703f0361fb68fc404a7814cf
1 # -*-perl-*-
2 use strict;
3 use warnings;
4 use Test::More;
5 use FindBin qw($Bin);
6 use MogileFS::Server;
7 use MogileFS::Test;
9 my @jm_jobs = qw(fsck delete replicate);
10 my $jobs;
12 my $sto = eval { temp_store(); };
13 if (!$sto) {
14     plan skip_all => "Can't create temporary test database: $@";
15     exit 0;
18 my $tmptrack = create_temp_tracker($sto, ["--no-job_master"]);
19 my $admin = IO::Socket::INET->new(PeerAddr => '127.0.0.1:7001');
20 $admin or die "failed to create admin socket: $!";
22 sub jobs {
23     my ($admin) = @_;
24     my %ret;
26     syswrite($admin, "!jobs\r\n");
27     MogileFS::Util::wait_for_readability(fileno($admin), 10);
28     while (1) {
29         my $line = <$admin>;
30         $line =~ s/\r\n//;
31         last if $line eq ".";
32         $line =~ /^(\w+ \w+)\s*(.*)$/ or die "Failed to parse $line\n";
33         $ret{$1} = $2;
34     }
35     return \%ret;
38 ok(try_for(30, sub { jobs($admin)->{"queryworker count"} }), "wait for queryworker");
40 $jobs = jobs($admin);
41 foreach my $job (@jm_jobs) {
42     ok(!$jobs->{"$job count"}, "no $job workers");
45 # enable job master
46 want($admin, 1, "job_master");
48 ok(try_for(30, sub { jobs($admin)->{"queryworker count"} }), "wait for queryworker");
50 foreach my $job (@jm_jobs) {
51     ok(try_for(30, sub { jobs($admin)->{"$job count"} }), "wait for $job");
54 # disable job_master again
55 want($admin, 0, "job_master");
57 foreach my $job (@jm_jobs) {
58     ok(try_for(30, sub { !jobs($admin)->{"$job count"} }), "wait for $job to die");
61 done_testing();