コード例 #1
0
 public function testMarkJobFailed()
 {
     $this->QueuedTask->createJob('dummytask', null);
     $id = $this->QueuedTask->id;
     $expected = 'Timeout: 100';
     $this->QueuedTask->markJobFailed($id, $expected);
     $result = $this->QueuedTask->field('failure_message');
     $this->assertEqual($result, $expected);
 }
コード例 #2
0
 public function testRequeueAfterTimeout()
 {
     $capabilities = array('task1' => array('name' => 'task1', 'timeout' => 1, 'retries' => 2, 'rate' => 0));
     $this->assertTrue($this->QueuedTask->createJob('task1', '1'));
     $tmp = $this->QueuedTask->requestJob($capabilities);
     $this->assertEqual($tmp['jobtype'], 'task1');
     $this->assertEqual(unserialize($tmp['data']), '1');
     $this->assertEqual($tmp['failed'], '0');
     sleep(2);
     $tmp = $this->QueuedTask->requestJob($capabilities);
     $this->assertEqual($tmp['jobtype'], 'task1');
     $this->assertEqual(unserialize($tmp['data']), '1');
     $this->assertEqual($tmp['failed'], '1');
 }
コード例 #3
0
ファイル: queued_task.test.php プロジェクト: kondrat/chat
 /**
  * Job Rate limiting.
  * Do not execute jobs of a certain type more often than once every X seconds.
  */
 public function testRateLimit()
 {
     $capabilities = array('task1' => array('name' => 'task1', 'timeout' => 100, 'retries' => 2, 'rate' => 1), 'dummytask' => array('name' => 'dummytask', 'timeout' => 100, 'retries' => 2));
     // clear out the rate history
     $this->QueuedTask->rateHistory = array();
     $this->assertTrue($this->QueuedTask->createJob('task1', '1'));
     $this->assertTrue($this->QueuedTask->createJob('task1', '2'));
     $this->assertTrue($this->QueuedTask->createJob('task1', '3'));
     $this->assertTrue($this->QueuedTask->createJob('dummytask', null));
     $this->assertTrue($this->QueuedTask->createJob('dummytask', null));
     $this->assertTrue($this->QueuedTask->createJob('dummytask', null));
     $this->assertTrue($this->QueuedTask->createJob('dummytask', null));
     //At first we get task1-1.
     $tmp = $this->QueuedTask->requestJob($capabilities);
     $this->assertEqual($tmp['jobtype'], 'task1');
     $this->assertEqual(unserialize($tmp['data']), '1');
     //The rate limit should now skip over task1-2 and fetch a dummytask.
     $tmp = $this->QueuedTask->requestJob($capabilities);
     $this->assertEqual($tmp['jobtype'], 'dummytask');
     $this->assertEqual(unserialize($tmp['data']), null);
     //and again.
     $tmp = $this->QueuedTask->requestJob($capabilities);
     $this->assertEqual($tmp['jobtype'], 'dummytask');
     $this->assertEqual(unserialize($tmp['data']), null);
     //Then some time passes
     sleep(1);
     //Now we should get task1-2
     $tmp = $this->QueuedTask->requestJob($capabilities);
     $this->assertEqual($tmp['jobtype'], 'task1');
     $this->assertEqual(unserialize($tmp['data']), '2');
     //and again rate limit to dummytask.
     $tmp = $this->QueuedTask->requestJob($capabilities);
     $this->assertEqual($tmp['jobtype'], 'dummytask');
     $this->assertEqual(unserialize($tmp['data']), null);
     //Then some more time passes
     sleep(1);
     //Now we should get task1-3
     $tmp = $this->QueuedTask->requestJob($capabilities);
     $this->assertEqual($tmp['jobtype'], 'task1');
     $this->assertEqual(unserialize($tmp['data']), '3');
     //and again rate limit to dummytask.
     $tmp = $this->QueuedTask->requestJob($capabilities);
     $this->assertEqual($tmp['jobtype'], 'dummytask');
     $this->assertEqual(unserialize($tmp['data']), null);
     //and now the queue is empty
     $tmp = $this->QueuedTask->requestJob($capabilities);
     $this->assertEqual($tmp, null);
 }
コード例 #4
0
 public function testRequestGroup()
 {
     $capabilities = ['task1' => ['name' => 'task1', 'timeout' => 1, 'retries' => 2, 'rate' => 0]];
     // create an ungrouped task
     $this->assertTrue((bool) $this->QueuedTask->createJob('task1', 1));
     //create a Grouped Task
     $this->assertTrue((bool) $this->QueuedTask->createJob('task1', 2, null, 'testgroup'));
     // Fetching without group should completely ignore the Group field.
     $this->QueuedTask->clearKey();
     $tmp = $this->QueuedTask->requestJob($capabilities);
     $this->assertEquals($tmp['jobtype'], 'task1');
     $this->assertEquals(1, unserialize($tmp['data']));
     $this->QueuedTask->clearKey();
     $tmp = $this->QueuedTask->requestJob($capabilities);
     $this->assertEquals($tmp['jobtype'], 'task1');
     $this->assertEquals(2, unserialize($tmp['data']));
     // well, lets tra that Again, while limiting by Group
     // create an ungrouped task
     $this->assertTrue((bool) $this->QueuedTask->createJob('task1', 3));
     //create a Grouped Task
     $this->assertTrue((bool) $this->QueuedTask->createJob('task1', 4, null, 'testgroup', 'Job number 4'));
     $this->assertTrue((bool) $this->QueuedTask->createJob('task1', 5, null, null, 'Job number 5'));
     $this->assertTrue((bool) $this->QueuedTask->createJob('task1', 6, null, 'testgroup', 'Job number 6'));
     // we should only get tasks 4 and 6, in that order, when requesting inside the group
     $this->QueuedTask->clearKey();
     $tmp = $this->QueuedTask->requestJob($capabilities, 'testgroup');
     $this->assertEquals($tmp['jobtype'], 'task1');
     $this->assertEquals(unserialize($tmp['data']), 4);
     $this->QueuedTask->clearKey();
     $tmp = $this->QueuedTask->requestJob($capabilities, 'testgroup');
     $this->assertEquals($tmp['jobtype'], 'task1');
     $this->assertEquals(6, unserialize($tmp['data']));
     // use FindProgress on the testgroup:
     $progress = $this->QueuedTask->find('progress', ['conditions' => ['group' => 'testgroup']]);
     $this->assertEquals(3, count($progress));
     $this->assertNull($progress[0]['reference']);
     $this->assertEquals($progress[0]['status'], 'IN_PROGRESS');
     $this->assertEquals($progress[1]['reference'], 'Job number 4');
     $this->assertEquals($progress[1]['status'], 'IN_PROGRESS');
     $this->assertEquals($progress[2]['reference'], 'Job number 6');
     $this->assertEquals($progress[2]['status'], 'IN_PROGRESS');
 }