docs: def run_entry_points(run_spec):
      '''
      :param run_spec: run specification from the dxapp.json of the app
      :type run_spec: dict
  
      Runs all job entry points found in
      $DX_TEST_JOB_HOMEDIRS/job_queue.json in a first-in, first-out
      manner until it is an empty array (or an error occurs).
      '''
      job_queue_path = os.path.join(environ['DX_TEST_JOB_HOMEDIRS'], 'job_queue.json')
      all_job_outputs_path = os.path.join(environ['DX_TEST_JOB_HOMEDIRS'], 'job_outputs.json')
  
      while True:
          with open(job_queue_path, 'r') as fd:
              job_queue = json.load(fd)
          if len(job_queue) == 0:
              return
  
          with open(all_job_outputs_path, 'r') as fd:
              all_job_outputs = json.load(fd)
  
          entry_point_to_run = None
          for i, entry_point in enumerate(job_queue):
              runnable = True
              # See if its inputs are ready
              while has_local_job_refs(entry_point['input_hash']):
                  try:
                      resolve_job_references(entry_point['input_hash'], all_job_outputs)
                  except:
                      runnable = False
                      break
              if runnable:
                  entry_point_to_run = job_queue.pop(i)
                  break
  
          if entry_point_to_run is None:
              # Just run the first entry point and let the runner throw
              # the appropriate error
              entry_point_to_run = job_queue.pop(0)
  
          with open(job_queue_path, write_mode) as fd:
              # Update job queue with updated inputs and after having
              # popped the entry point to be run
              json.dump(job_queue, fd)
              fd.write(eol)
  
          run_one_entry_point(job_id=entry_point_to_run['id'],
                              function=entry_point_to_run['function'],
                              input_hash=entry_point_to_run['input_hash'],
                              run_spec=run_spec,
                              depends_on=entry_point_to_run.get('depends_on', []),
                              name=entry_point_to_run.get('name'))