/**
  * 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());
     }
 }