diff options
Diffstat (limited to 't/queue.t')
-rw-r--r-- | t/queue.t | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/t/queue.t b/t/queue.t new file mode 100644 index 0000000..b480e67 --- /dev/null +++ b/t/queue.t @@ -0,0 +1,107 @@ +use Iurt::Queue; + +use Test::More; + +use Cwd; +use File::stat 'stat'; +use MDK::Common qw(cat_); + +$config = {}; + +my $media = 'core/release'; +my $bot = 'iurt'; + +my $b1 = { + bot => $bot, + host => 'h1', + date => 20220401, + pid => 1, + 'arch' => 'a1', + 'time' => 42 +}; + +my $b2 = { + bot => $bot, + host => 'h1', + date => 20220401, + pid => 2, + 'arch' => 'a2', + 'time' => 42 +}; + +my $b3 = { + bot => $bot, + host => 'h2', + date => 20220401, + pid => 1, + 'arch' => 'a1', + 'time' => 42 +}; + +sub create_ent { + my %ent; + $ent->{media}{$media}{bot} = [$b1, $b2, $b3]; + return $ent; +} + +my $ent, $expected_ent; + +$ent = create_ent(); +remove_bot_from_package($ent, $media, 'h1', 42); +is_deeply $ent->{media}{$media}{bot}, [$b1, $b2, $b3] or diag explain $ent->{media}{$media}{bot}; + +$ent = create_ent(); +remove_bot_from_package($ent, $media, 'h1', 1); +is_deeply $ent->{media}{$media}{bot}, [$b2, $b3] or diag explain $ent->{media}{$media}{bot}; + +$ent = create_ent(); +remove_bot_from_package($ent, $media, 'h2', 1); +is_deeply $ent->{media}{$media}{bot}, [$b1, $b2] or diag explain $ent->{media}{$media}{bot}; + +$ent = create_ent(); +remove_bot_from_package($ent, $media, 'h1', 2); +is_deeply $ent->{media}{$media}{bot}, [$b1, $b3] or diag explain $ent->{media}{$media}{bot}; + + +chdir 't' if -d 't'; +mkdir "tmp"; +my $dir = Cwd::cwd() . "/tmp"; +my $retry_file = "${dir}/test_noarch.retry"; +unlink $retry_file; + +sub verify_retry_file { + my ($test, $present, $content, $mtime) = @_; + if ($present) { + ok(-f $retry_file, "$test - $retry_file should exist"); + } else { + ok(!-f $retry_file, "$test - $retry_file should not exist"); + return; + } + is(cat_($retry_file), $content, "$test - $retry_file should contain $content"); + if ($mtime) { + my $t = stat($retry_file)->mtime; + # Allow 5s difference if running on a very slow machine + ok($t > $mtime - 5); + ok($t < $mtime + 5); + } +} + +unlink $retry_file; +ok(schedule_next_retry({'backoff_delays' => [1000, 2000]}, $dir, 'test', 'noarch', 0), "schedule_next_retry - first failure is retried"); +verify_retry_file("schedule_next_retry - first failure is retried", 1, 1, time+1000); + +unlink $retry_file; +ok(schedule_next_retry({'backoff_delays' => [1000, 2000]}, $dir, 'test', 'noarch', 1), "schedule_next_retry - one retry left is retried"); +verify_retry_file("schedule_next_retry - one retry left is retried", 1, 2, time+2000); + +unlink $retry_file; +ok(!schedule_next_retry({'backoff_delays' => [120, 1000]}, $dir, 'test', 'noarch', 2), "schedule_next_retry - no retry left is failed"); + +unlink $retry_file; +ok(!schedule_next_retry({'backoff_delays' => []}, $dir, 'test', 'noarch', 0), "schedule_next_retry - no retry is failed"); + +unlink $retry_file; +ok(schedule_next_retry({}, $dir, 'test', 'noarch', 0), "schedule_next_retry - always retry is retried"); +verify_retry_file("schedule_next_retry - always retry is retried", 0); + +done_testing(); |