Skip to content

Commit e678887

Browse files
Test FIFO with delay jobs
1 parent 90f0ad6 commit e678887

File tree

3 files changed

+89
-16
lines changed

3 files changed

+89
-16
lines changed

tests/app/HeavyJob.php

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
<?php
2+
/**
3+
* @link http://www.yiiframework.com/
4+
* @copyright Copyright (c) 2008 Yii Software LLC
5+
* @license http://www.yiiframework.com/license/
6+
*/
7+
8+
namespace tests\app;
9+
10+
use Yii;
11+
use yii\base\BaseObject;
12+
use yii\queue\JobInterface;
13+
14+
/**
15+
* Simple Job.
16+
*
17+
* @author Roman Zhuravlev <[email protected]>
18+
*/
19+
class HeavyJob extends BaseObject implements JobInterface
20+
{
21+
public $uid;
22+
public $load;
23+
24+
public function execute($queue)
25+
{
26+
file_put_contents($this->getFileName(), '');
27+
sleep($this->load);
28+
}
29+
30+
public function getFileName()
31+
{
32+
return Yii::getAlias("@runtime/job-{$this->uid}.lock");
33+
}
34+
}

tests/drivers/TestCase.php

Lines changed: 35 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77

88
namespace tests\drivers;
99

10+
use tests\app\HeavyJob;
1011
use Yii;
1112
use tests\app\SimpleJob;
1213
use yii\queue\Queue;
@@ -34,6 +35,18 @@ protected function createSimpleJob($data='')
3435
]);
3536
}
3637

38+
/**
39+
* @param int $load
40+
* @return HeavyJob
41+
*/
42+
protected function createHeavyJob($load=0)
43+
{
44+
return new HeavyJob([
45+
'uid' => uniqid(),
46+
'load' =>$load
47+
]);
48+
}
49+
3750
/**
3851
* @param SimpleJob $job
3952
*/
@@ -67,15 +80,33 @@ protected function assertSimpleJobLaterDone(SimpleJob $job, $delay)
6780
}
6881

6982
/**
70-
* @param SimpleJob $job
83+
* @param HeavyJob $job
7184
* @param int $delay
85+
* @param $initialTime
7286
*/
73-
protected function assertSimpleJobDelayedFifoDone(SimpleJob $job1, SimpleJob $job2, $msg)
87+
protected function assertHeavyJobLaterDone(HeavyJob $job, $delay, $initialTime)
88+
{
89+
$time = $initialTime + $delay;
90+
sleep($delay);
91+
$timeout = 5000000; // 5 sec
92+
$step = 50000;
93+
while (!file_exists($job->getFileName()) && $timeout > 0) {
94+
usleep($step);
95+
$timeout -= $step;
96+
}
97+
$this->assertFileExists($job->getFileName());
98+
$this->assertGreaterThanOrEqual($time, filemtime($job->getFileName()));
99+
}
100+
101+
/**
102+
* @param HeavyJob $job
103+
* @param int $delay
104+
*/
105+
protected function assertHeavyJobDelayedFifoDone(HeavyJob $job1, HeavyJob $job2, $msg)
74106
{
75107
$this->assertFileExists($job1->getFileName());
76108
$this->assertFileExists($job2->getFileName());
77-
78-
$this->assertGreaterThanOrEqual(file_get_contents($job1->getFileName()), file_get_contents($job2->getFileName()), $msg);
109+
$this->assertGreaterThanOrEqual(filemtime($job1->getFileName()), filemtime($job2->getFileName()), $msg);
79110
}
80111

81112
/**

tests/drivers/redis/QueueTest.php

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -58,25 +58,33 @@ public function testLater()
5858
$this->assertSimpleJobLaterDone($job, 2);
5959
}
6060

61-
public function testLaterFifo()
61+
public function testHeavyJobDelayedFifo()
6262
{
6363
$this->startProcess(['php', 'yii', 'queue/listen', '1']);
6464

65-
$job1 = $this->createSimpleJob('1');
66-
$this->getQueue()->delay(2)->push($job1);
65+
$delay = 1;
66+
$load = $delay+1;
67+
$initialTimeFirstBatch = time();
6768

68-
$job2 = $this->createSimpleJob('2');
69-
$this->getQueue()->delay( 2)->push($job2);
69+
$job1 = $this->createHeavyJob($load);
70+
$this->getQueue()->delay($delay)->push($job1);
7071

71-
$job3 = $this->createSimpleJob('3');
72-
$this->getQueue()->delay(2)->push($job3);
72+
$job2 = $this->createHeavyJob($load);
73+
$this->getQueue()->delay($delay)->push($job2);
7374

74-
$this->assertSimpleJobLaterDone($job1, 2);
75-
$this->assertSimpleJobLaterDone($job2, 2);
76-
$this->assertSimpleJobLaterDone($job3, 2);
75+
sleep($delay);
7776

78-
$this->assertSimpleJobDelayedFifoDone($job1, $job2, 'Job1 < Job2');
79-
$this->assertSimpleJobDelayedFifoDone($job2, $job3, 'Job2 < Job3');
77+
$initialTimeSecondBatch = time();
78+
$job3 = $this->createHeavyJob($load);
79+
$this->getQueue()->delay($delay)->push($job3);
80+
81+
82+
$this->assertHeavyJobLaterDone($job1, $delay, $initialTimeFirstBatch);
83+
$this->assertHeavyJobLaterDone($job2, $delay, $initialTimeFirstBatch);
84+
$this->assertHeavyJobLaterDone($job3, $delay, $initialTimeSecondBatch);
85+
86+
$this->assertHeavyJobDelayedFifoDone($job1, $job2, 'Job1 < Job2');
87+
$this->assertHeavyJobDelayedFifoDone($job2, $job3, 'Job2 < Job3');
8088
}
8189

8290
public function testRetry()

0 commit comments

Comments
 (0)