131 lines
3.3 KiB
Perl
131 lines
3.3 KiB
Perl
|
#!/usr/bin/perl -w
|
||
|
###########################################################################
|
||
|
|
||
|
=head1 Tests For moveuclusterd
|
||
|
|
||
|
This is the test suite for 'moveuclusterd', the jobserver half of the
|
||
|
LiveJournal user-mover.
|
||
|
|
||
|
=cut
|
||
|
|
||
|
###########################################################################
|
||
|
package moveuclusterd_tests;
|
||
|
use strict;
|
||
|
|
||
|
use lib ( "$ENV{LJHOME}/bin", "lib" );
|
||
|
|
||
|
use LJ::Test::Unit qw{+autorun};
|
||
|
use LJ::Test::Assertions qw{:all};
|
||
|
|
||
|
BEGIN {
|
||
|
require 'moveuclusterd.pl';
|
||
|
}
|
||
|
|
||
|
|
||
|
my @test_goodjobspecs = (
|
||
|
q{67645:23:30},
|
||
|
q{3932342:117:62 prelock=1},
|
||
|
q{1103617:85:88 giddy=whippingcream bollocks=queen prelock=1},
|
||
|
);
|
||
|
my @test_badjobspecs = (
|
||
|
q{},
|
||
|
q{14},
|
||
|
q{12:22},
|
||
|
);
|
||
|
|
||
|
|
||
|
### General tests
|
||
|
sub test_packages {
|
||
|
foreach my $package (qw{JobServer JobServer::Job JobServer::Client}) {
|
||
|
assert_no_exception { $package->isa('UNIVERSAL') };
|
||
|
}
|
||
|
}
|
||
|
|
||
|
### JobServer::Job class tests
|
||
|
sub test_jobserverjob_new {
|
||
|
my ( $obj, $rval );
|
||
|
my $server = new JobServer;
|
||
|
|
||
|
# Requires a server as first argument
|
||
|
assert_exception {
|
||
|
new JobServer::Job;
|
||
|
};
|
||
|
|
||
|
# Valid jobspecs
|
||
|
foreach my $spec ( @test_goodjobspecs ) {
|
||
|
assert_no_exception {
|
||
|
$obj = new JobServer::Job $server, $spec
|
||
|
};
|
||
|
assert_instance_of 'JobServer::Job', $obj;
|
||
|
|
||
|
my ( $userid, $scid, $dcid, $rest ) = split /[:\s]/, $spec, 4;
|
||
|
$rest ||= '';
|
||
|
|
||
|
assert_no_exception { $rval = $obj->userid };
|
||
|
assert_equal $userid, $rval;
|
||
|
|
||
|
assert_no_exception { $rval = $obj->srcclusterid };
|
||
|
assert_equal $scid, $rval;
|
||
|
|
||
|
assert_no_exception { $rval = $obj->dstclusterid };
|
||
|
assert_equal $dcid, $rval;
|
||
|
|
||
|
assert_no_exception { $rval = $obj->stringify };
|
||
|
$rest = sprintf '(%s)', join( '|', split(/\s+/, $rest) );
|
||
|
assert_matches qr{$userid:$scid:$dcid \d+.\d+ $rest}, $rval;
|
||
|
}
|
||
|
|
||
|
# Invalid jobspecs
|
||
|
foreach my $spec ( @test_badjobspecs ) {
|
||
|
assert_exception {
|
||
|
new JobServer::Job $server, $spec
|
||
|
} "Didn't expect to be able to create job '$spec'";
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
### JobServer class tests
|
||
|
sub test_jobserver_new {
|
||
|
my $rval;
|
||
|
|
||
|
assert_no_exception { $rval = new JobServer };
|
||
|
assert_instance_of 'JobServer', $rval;
|
||
|
}
|
||
|
|
||
|
|
||
|
sub test_jobserver_addjobs {
|
||
|
my $rval;
|
||
|
my $js = new JobServer;
|
||
|
|
||
|
# Should be able to call addJobs() with no jobs.
|
||
|
assert_no_exception {
|
||
|
local $^W = 0; # Quell LJ::start_request()'s warnings
|
||
|
$js->addJobs;
|
||
|
};
|
||
|
|
||
|
# Server should have 0 jobs queued
|
||
|
assert_no_exception {
|
||
|
$rval = $js->getJobList;
|
||
|
};
|
||
|
assert_matches qr{0 queued jobs, 0 assigned jobs for 0 clusters}, $rval->{footer}[0];
|
||
|
assert_matches qr{0 of 0 total jobs assigned since}, $rval->{footer}[1];
|
||
|
|
||
|
# Load up some job objects and add those
|
||
|
my @jobs = map { new JobServer::Job $js, $_ } @test_goodjobspecs;
|
||
|
my $jobcount = scalar @jobs;
|
||
|
assert_no_exception {
|
||
|
local $^W = 0; # Quell LJ::start_request()'s warnings
|
||
|
$js->addJobs( @jobs );
|
||
|
};
|
||
|
|
||
|
# Now server should have the test jobs queued
|
||
|
assert_no_exception {
|
||
|
$rval = $js->getJobList;
|
||
|
};
|
||
|
assert_matches qr{$jobcount queued jobs, 0 assigned jobs for \d+ clusters}, $rval->{footer}[0];
|
||
|
assert_matches qr{0 of $jobcount total jobs assigned since}, $rval->{footer}[1];
|
||
|
|
||
|
}
|
||
|
|
||
|
|