/**
  * @param AbstractAsyncJobObject $job
  * @param int $timeout
  * @param int $interval
  */
 protected function waitTillJobComplete(AbstractAsyncJobObject $job, $timeout = 60, $interval = 2)
 {
     $end = time() + $timeout;
     do {
         if ($job->read()->isComplete()) {
             return;
         }
         sleep($interval);
     } while (time() <= $end);
     $this->markTestSkipped("Async Job timed out. Timeout: {$timeout}, Interval: {$interval}");
 }
 /**
  * @param string $job_class
  * @param array $fields
  * @param array $params
  * @return AbstractAsyncJobObject
  * @throws \InvalidArgumentException
  */
 protected function createAsyncJob($job_class, array $fields = array(), array $params = array())
 {
     $object = new $job_class(null, $this->assureId(), $this->getApi());
     if (!$object instanceof AbstractAsyncJobObject) {
         throw new \InvalidArgumentException("Class {$job_class} is not of type " . AbstractAsyncJobObject::className());
     }
     return $object->setData($fields)->create($params);
 }