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')
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')
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)
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)
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)
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)
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)