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)))
Example #2
0
 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)))
Example #3
0
    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']))
Example #5
0
 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)))
Example #7
0
    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)))
Example #8
0
    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)))
Example #10
0
    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)))
Example #11
0
 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'])
Example #12
0
 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'])