/** * Test the delivery of jobs in sequence, skipping fetched but not completed tasks. * * @return void */ public function testSequence() { //$capabilities is a list of tasks the worker can run. $capabilities = ['task1' => ['name' => 'task1', 'timeout' => 100, 'retries' => 2]]; // at first, the queue should contain 0 items. $this->assertEquals(0, $this->QueuedTasks->getLength()); // create some more jobs foreach (range(0, 9) as $num) { $this->assertTrue((bool) $this->QueuedTasks->createJob('task1', ['tasknum' => $num])); } // 10 jobs in the queue. $this->assertEquals(10, $this->QueuedTasks->getLength()); // jobs should be fetched in the original sequence. foreach (range(0, 4) as $num) { $this->QueuedTasks->clearKey(); $job = $this->QueuedTasks->requestJob($capabilities); //debug($job);ob_flush(); $jobData = unserialize($job['data']); //debug($jobData);ob_flush(); $this->assertEquals($num, $jobData['tasknum']); } // now mark them as done foreach (range(0, 4) as $num) { $this->assertEquals(1, $this->QueuedTasks->markJobDone($num + 1)); $this->assertEquals(9 - $num, $this->QueuedTasks->getLength()); } // jobs should be fetched in the original sequence. foreach (range(5, 9) as $num) { $job = $this->QueuedTasks->requestJob($capabilities); $jobData = unserialize($job['data']); $this->assertEquals($num, $jobData['tasknum']); $this->assertEquals(1, $this->QueuedTasks->markJobDone($job['id'])); $this->assertEquals(9 - $num, $this->QueuedTasks->getLength()); } }