def test_no_jobs(self): logger = BufferLogger() logger.setLevel(logging.INFO) runner = TwistedJobRunner.runFromSource( NoJobs, 'branchscanner', logger) self.assertEqual( (0, 0), (len(runner.completed_jobs), len(runner.incomplete_jobs)))
def test_no_jobs(self): logger = BufferLogger() logger.setLevel(logging.INFO) runner = TwistedJobRunner.runFromSource(NoJobs, 'branchscanner', logger) self.assertEqual( (0, 0), (len(runner.completed_jobs), len(runner.incomplete_jobs)))
def disabled_test_timeout_short(self): """When a job exceeds its lease, an exception is raised. Unfortunately, timeouts include the time it takes for the zope machinery to start up, so we run a job that will not time out first, followed by a job that is sure to time out. """ logger = BufferLogger() logger.setLevel(logging.INFO) # StuckJob is actually a source of two jobs. The first is fast, the # second slow. runner = TwistedJobRunner.runFromSource(ShorterStuckJob, 'branchscanner', logger) self.oops_capture.sync() oops = self.oopses[0] self.assertEqual( (1, 1), (len(runner.completed_jobs), len(runner.incomplete_jobs))) self.assertThat( logger.getLogBuffer(), MatchesRegex( dedent("""\ INFO Running through Twisted. INFO Running <ShorterStuckJob.*?> \(ID .*?\). INFO Running <ShorterStuckJob.*?> \(ID .*?\). INFO Job resulted in OOPS: %s """) % oops['id'])) self.assertEqual(('TimeoutError', 'Job ran too long.'), (oops['type'], oops['value']))
def disabled_test_timeout_short(self): """When a job exceeds its lease, an exception is raised. Unfortunately, timeouts include the time it takes for the zope machinery to start up, so we run a job that will not time out first, followed by a job that is sure to time out. """ logger = BufferLogger() logger.setLevel(logging.INFO) # StuckJob is actually a source of two jobs. The first is fast, the # second slow. runner = TwistedJobRunner.runFromSource( ShorterStuckJob, 'branchscanner', logger) self.oops_capture.sync() oops = self.oopses[0] self.assertEqual( (1, 1), (len(runner.completed_jobs), len(runner.incomplete_jobs))) self.assertThat( logger.getLogBuffer(), MatchesRegex( dedent("""\ INFO Running through Twisted. INFO Running <ShorterStuckJob.*?> \(ID .*?\). INFO Running <ShorterStuckJob.*?> \(ID .*?\). INFO Job resulted in OOPS: %s """) % oops['id'])) self.assertEqual(('TimeoutError', 'Job ran too long.'), (oops['type'], oops['value']))
def test_lease_held_handled(self): """Jobs that raise LeaseHeld are handled correctly.""" logger = BufferLogger() logger.setLevel(logging.DEBUG) runner = TwistedJobRunner.runFromSource(LeaseHeldJob, 'branchscanner', logger) self.assertIn('Could not acquire lease', logger.getLogBuffer()) self.assertEqual( (0, 1), (len(runner.completed_jobs), len(runner.incomplete_jobs)))
def test_lease_held_handled(self): """Jobs that raise LeaseHeld are handled correctly.""" logger = BufferLogger() logger.setLevel(logging.DEBUG) runner = TwistedJobRunner.runFromSource( LeaseHeldJob, 'branchscanner', logger) self.assertIn('Could not acquire lease', logger.getLogBuffer()) self.assertEqual( (0, 1), (len(runner.completed_jobs), len(runner.incomplete_jobs)))
def test_successful_jobs_share_process(self): """Successful jobs allow process reuse. When a job succeeds, we assume that its process can be safely reused for a new job, so we reuse the worker. """ logger = BufferLogger() runner = TwistedJobRunner.runFromSource(ProcessSharingJob, 'branchscanner', logger) self.assertEqual( (2, 0), (len(runner.completed_jobs), len(runner.incomplete_jobs)))
def test_previous_failure_gives_new_process(self): """Failed jobs cause their worker to be terminated. When a job fails, it's not clear whether its process can be safely reused for a new job, so we kill the worker. """ logger = BufferLogger() runner = TwistedJobRunner.runFromSource(InitialFailureJob, 'branchscanner', logger) self.assertEqual( (1, 1), (len(runner.completed_jobs), len(runner.incomplete_jobs)))
def test_successful_jobs_share_process(self): """Successful jobs allow process reuse. When a job succeeds, we assume that its process can be safely reused for a new job, so we reuse the worker. """ logger = BufferLogger() runner = TwistedJobRunner.runFromSource( ProcessSharingJob, 'branchscanner', logger) self.assertEqual( (2, 0), (len(runner.completed_jobs), len(runner.incomplete_jobs)))
def test_previous_failure_gives_new_process(self): """Failed jobs cause their worker to be terminated. When a job fails, it's not clear whether its process can be safely reused for a new job, so we kill the worker. """ logger = BufferLogger() runner = TwistedJobRunner.runFromSource( InitialFailureJob, 'branchscanner', logger) self.assertEqual( (1, 1), (len(runner.completed_jobs), len(runner.incomplete_jobs)))
def disable_test_memory_hog_job(self): """A job with a memory limit will trigger MemoryError on excess.""" # XXX: frankban 2012-03-29 bug=963455: This test fails intermittently, # especially in parallel tests. logger = BufferLogger() logger.setLevel(logging.INFO) runner = TwistedJobRunner.runFromSource(MemoryHogJob, 'branchscanner', logger) self.assertEqual( (0, 1), (len(runner.completed_jobs), len(runner.incomplete_jobs))) self.assertIn('Job resulted in OOPS', logger.getLogBuffer()) self.oops_capture.sync() self.assertEqual('MemoryError', self.oopses[0]['type'])
def disable_test_memory_hog_job(self): """A job with a memory limit will trigger MemoryError on excess.""" # XXX: frankban 2012-03-29 bug=963455: This test fails intermittently, # especially in parallel tests. logger = BufferLogger() logger.setLevel(logging.INFO) runner = TwistedJobRunner.runFromSource( MemoryHogJob, 'branchscanner', logger) self.assertEqual( (0, 1), (len(runner.completed_jobs), len(runner.incomplete_jobs))) self.assertIn('Job resulted in OOPS', logger.getLogBuffer()) self.oops_capture.sync() self.assertEqual('MemoryError', self.oopses[0]['type'])