Пример #1
0
  def testSingleQueue(self):
    j = job.Job.New((), (),
                    arguments={'configuration': 'mock'},
                    comparison_mode='performance')
    scheduler.Schedule(j)
    j.Start = mock.MagicMock()  # pylint: disable=invalid-name

    response = self.testapp.get('/cron/fifo-scheduler')
    self.assertEqual(response.status_code, 200)
    self.ExecuteDeferredTasks('default')

    self.assertTrue(j.Start.called)

    # Ensure that the job is still running.
    job_id, queue_status = scheduler.PickJob('mock')
    self.assertEqual(job_id, j.job_id)
    self.assertEqual(queue_status, 'Running')

    # On the next poll, we need to ensure that an ongoing job doesn't get marked
    # completed until it really is completed.
    j.Start = mock.MagicMock()  # pylint: disable=invalid-name
    response = self.testapp.get('/cron/fifo-scheduler')
    self.assertEqual(response.status_code, 200)
    self.ExecuteDeferredTasks('default')
    self.assertFalse(j.Start.called)
    job_id, queue_status = scheduler.PickJob('mock')
    self.assertEqual(job_id, j.job_id)
    self.assertEqual(queue_status, 'Running')
Пример #2
0
    def testJobCancellationSucceedsOnRunningJob(self):
        j = job.Job.New((), (),
                        arguments={'configuration': 'mock'},
                        comparison_mode='performance')
        scheduler.Schedule(j)
        j.Start = mock.MagicMock()  # pylint: disable=invalid-name

        response = self.testapp.get('/cron/fifo-scheduler')
        self.assertEqual(response.status_code, 200)
        self.ExecuteDeferredTasks('default')

        self.assertTrue(j.Start.called)

        # Ensure that the job is still running.
        job_id, queue_status = scheduler.PickJob('mock')
        self.assertEqual(job_id, j.job_id)
        self.assertEqual(queue_status, 'Running')

        # We can cancel a running job.
        self.assertTrue(scheduler.Cancel(j))

        # Ensure that the job is still running.
        job_id, queue_status = scheduler.PickJob('mock')
        self.assertNotEqual(job_id, j.job_id)
        self.assertNotEqual(queue_status, 'Running')
Пример #3
0
  def testQueueStatsUpdates(self):
    j = job.Job.New((), (),
                    arguments={'configuration': 'mock'},
                    comparison_mode='performance')
    scheduler.Schedule(j)
    j.Start = mock.MagicMock(
        side_effect=j._Complete)  # pylint: disable=invalid-name

    # Check that we can find the queued job.
    stats = scheduler.QueueStats('mock')
    self.assertEquals(stats['queued_jobs'], 1)
    self.assertNotIn('running_jobs', stats)
    self.assertEquals(len(stats['queue_time_samples']), 0)

    response = self.testapp.get('/cron/fifo-scheduler')
    self.assertEqual(response.status_code, 200)

    self.ExecuteDeferredTasks('default')

    self.assertTrue(j.Start.called)
    job_id, _ = scheduler.PickJob('mock')
    self.assertIsNone(job_id)

    # Check that point-in-time stats are zero, and that we have one sample.
    stats = scheduler.QueueStats('mock')
    self.assertNotIn('queued_jobs', stats)
    self.assertNotIn('running_jobs', stats)
    self.assertNotEquals(len(stats['queue_time_samples']), 0)
Пример #4
0
  def testJobFails(self):
    j = job.Job.New((), (),
                    arguments={'configuration': 'mock'},
                    comparison_mode='performance')
    scheduler.Schedule(j)
    j.Start = mock.MagicMock(side_effect=j.Fail)  # pylint: disable=invalid-name

    response = self.testapp.get('/cron/fifo-scheduler')
    self.assertEqual(response.status_code, 200)
    self.ExecuteDeferredTasks('default')

    self.assertTrue(j.Start.called)
    job_id, _ = scheduler.PickJob('mock')
    self.assertIsNone(job_id)
Пример #5
0
    def get(self):
        configurations = scheduler.AllConfigurations()
        logging.info('Found %d FIFO Queues', len(configurations))
        for configuration in scheduler.AllConfigurations():
            logging.info('Processing queue \'%s\'', configuration)
            process_queue = True
            while process_queue:
                job_id, queue_status = scheduler.PickJob(configuration)

                if not job_id:
                    logging.info('Empty queue.')
                    process_queue = False
                else:
                    process_queue = _ProcessJob(job_id, queue_status,
                                                configuration)
Пример #6
0
    def testJobRunInExecutionEngine(self):
        j = job.Job.New((), (),
                        arguments={'configuration': 'mock'},
                        comparison_mode='performance',
                        use_execution_engine=True)
        self.PopulateSimpleBisectionGraph(j)
        scheduler.Schedule(j)
        j.Start = mock.MagicMock(  # pylint: disable=invalid-name
            side_effect=j._Complete)

        response = self.testapp.get('/cron/fifo-scheduler')
        self.assertEqual(response.status_code, 200)
        self.ExecuteDeferredTasks('default')

        self.assertTrue(j.Start.called)
        job_id, _ = scheduler.PickJob('mock')
        self.assertIsNone(job_id)
Пример #7
0
 def testCancelAlreadyRunningJob(self):
   job = job_module.Job.New((), (),
                            arguments={'configuration': 'mock'},
                            user='******')
   scheduler.Schedule(job)
   _, status = scheduler.PickJob(job.configuration)
   self.assertEqual(status, 'Queued')
   job.task = '123'
   job.started = True
   job.put()
   self.assertTrue(job.running)
   self.addCleanup(scheduler.Cancel, job)
   self.Post(
       '/api/job/cancel', {
           'job_id': job.job_id,
           'reason': 'testing!'
       },
       status=200)