Пример #1
0
 def test_UpdatePreviewDiffJob(self):
     """UpdatePreviewDiffJob runs under Celery."""
     self.useBzrBranches(direct_database=True)
     bmp = create_example_merge(self)[0]
     self.factory.makeRevisionsForBranch(bmp.source_branch, count=1)
     self.useFixture(FeatureFixture(
         {'jobs.celery.enabled_classes': 'UpdatePreviewDiffJob'}))
     with block_on_job():
         UpdatePreviewDiffJob.create(bmp)
         transaction.commit()
     self.assertIsNot(None, bmp.preview_diff)
Пример #2
0
 def test_run_branches_empty(self):
     """If the branches are empty, we tell the user."""
     # If the job has been waiting for a significant period of time (15
     # minutes for now), we run the job anyway.  The checkReady method
     # then raises and this is caught as a user error by the job system,
     # and as such sends an email to the error recipients, which for this
     # job is the merge proposal registrant.
     eric = self.factory.makePerson(name='eric', email='*****@*****.**')
     bmp = self.factory.makeBranchMergeProposal(registrant=eric)
     job = UpdatePreviewDiffJob.create(bmp)
     pop_notifications()
     JobRunner([job]).runAll()
     [email] = pop_notifications()
     self.assertEqual('Eric <*****@*****.**>', email['to'])
     self.assertEqual(
         'Launchpad error while generating the diff for a merge proposal',
         email['subject'])
     branch = bmp.source_branch
     self.assertEqual(
         'Launchpad encountered an error during the following operation: '
         'generating the diff for a merge proposal.  '
         'The source branch of http://code.launchpad.dev/~%s/%s/%s/'
         '+merge/%d has no revisions.' %
         (branch.owner.name, branch.target.name, branch.name, bmp.id),
         email.get_payload(decode=True))
Пример #3
0
 def test_10_minute_lease(self):
     self.useBzrBranches(direct_database=True)
     bmp = create_example_merge(self)[0]
     job = UpdatePreviewDiffJob.create(bmp)
     job.acquireLease()
     expiry_delta = job.lease_expires - datetime.now(pytz.UTC)
     self.assertTrue(500 <= expiry_delta.seconds, expiry_delta)
Пример #4
0
 def test_run(self):
     bmp = self.createExampleBzrMerge()[0]
     job = UpdatePreviewDiffJob.create(bmp)
     self.factory.makeRevisionsForBranch(bmp.source_branch, count=1)
     bmp.source_branch.next_mirror_time = None
     with dbuser("merge-proposal-jobs"):
         JobRunner([job]).runAll()
     self.checkExampleBzrMerge(bmp.preview_diff.text)
 def test_run(self):
     self.useBzrBranches(direct_database=True)
     bmp = create_example_merge(self)[0]
     job = UpdatePreviewDiffJob.create(bmp)
     self.factory.makeRevisionsForBranch(bmp.source_branch, count=1)
     bmp.source_branch.next_mirror_time = None
     with dbuser("merge-proposal-jobs"):
         JobRunner([job]).runAll()
     self.checkExampleMerge(bmp.preview_diff.text)
Пример #6
0
 def test_triggers_webhooks_git(self):
     self.useFixture(
         FeatureFixture({BRANCH_MERGE_PROPOSAL_WEBHOOKS_FEATURE_FLAG:
                         "on"}))
     bmp = self.createExampleGitMerge()[0]
     hook = self.factory.makeWebhook(target=bmp.target_git_repository,
                                     event_types=["merge-proposal:0.1"])
     job = UpdatePreviewDiffJob.create(bmp)
     with dbuser("merge-proposal-jobs"):
         JobRunner([job]).runAll()
     self.assertCorrectPreviewDiffDelivery(bmp, hook.deliveries.one())
Пример #7
0
 def test_triggers_webhooks_bzr(self):
     self.useFixture(
         FeatureFixture({BRANCH_MERGE_PROPOSAL_WEBHOOKS_FEATURE_FLAG:
                         "on"}))
     bmp = self.createExampleBzrMerge()[0]
     hook = self.factory.makeWebhook(target=bmp.target_branch,
                                     event_types=["merge-proposal:0.1"])
     job = UpdatePreviewDiffJob.create(bmp)
     self.factory.makeRevisionsForBranch(bmp.source_branch, count=1)
     bmp.source_branch.next_mirror_time = None
     with dbuser("merge-proposal-jobs"):
         JobRunner([job]).runAll()
     self.assertCorrectPreviewDiffDelivery(bmp, hook.deliveries.one())
Пример #8
0
 def test_run_git_updates_related_bugs(self):
     # The merge proposal has its related bugs updated.
     projectgroup = self.factory.makeProject()
     project = self.factory.makeProduct(projectgroup=projectgroup)
     bug = self.factory.makeBug(target=project)
     # Create a structural subscription to ensure we don't short-circuit
     # in _get_structural_subscription_filter_id_query.
     subscriber = self.factory.makePerson()
     bug.default_bugtask.target.addSubscription(subscriber, subscriber)
     bmp, _, _, patch = self.createExampleGitMerge()
     committer = self.factory.makePerson()
     self.hosting_fixture.getLog.result = [
         {
             "sha1": unicode(hashlib.sha1("tip").hexdigest()),
             "message": "Fix upside-down messages\n\nLP: #%d" % bug.id,
             "committer": {
                 "name": committer.display_name,
                 "email": committer.preferredemail.email,
             },
         },
     ]
     job = UpdatePreviewDiffJob.create(bmp)
     with dbuser("merge-proposal-jobs"):
         JobRunner([job]).runAll()
     self.assertEqual([bug], bmp.bugs)
     self.assertEqual([bmp], bug.linked_merge_proposals)
     self.assertEqual(patch, bmp.preview_diff.text)
     # If somebody rewrites history to remove the bug reference, then the
     # bug link is removed from the merge proposal.
     self.hosting_fixture.getLog.result = []
     self.hosting_fixture.memcache_fixture.clear()
     job = UpdatePreviewDiffJob.create(bmp)
     with dbuser("merge-proposal-jobs"):
         JobRunner([job]).runAll()
     self.assertEqual([], bmp.bugs)
     self.assertEqual([], bug.linked_merge_proposals)
Пример #9
0
 def test_run_object_events(self):
     # While the job runs a single IObjectModifiedEvent is issued when the
     # preview diff has been calculated.
     bmp = self.createExampleBzrMerge()[0]
     job = UpdatePreviewDiffJob.create(bmp)
     self.factory.makeRevisionsForBranch(bmp.source_branch, count=1)
     bmp.source_branch.next_mirror_time = None
     with dbuser("merge-proposal-jobs"):
         with EventRecorder() as event_recorder:
             JobRunner([job]).runAll()
     bmp_object_events = [
         event for event in event_recorder.events
         if (IObjectModifiedEvent.providedBy(event) and event.object == bmp)
     ]
     self.assertEqual(1, len(bmp_object_events),
                      "Expected one event, got: %r" % bmp_object_events)
     self.assertEqual(["preview_diff"], bmp_object_events[0].edited_fields)
Пример #10
0
 def test_run_branches_pending_writes(self):
     """If the branches are being written, we retry but don't complain."""
     eric = self.factory.makePerson(name='eric', email='*****@*****.**')
     bmp = self.factory.makeBranchMergeProposal(registrant=eric)
     self.factory.makeRevisionsForBranch(bmp.source_branch, count=1)
     self.factory.makeRevisionsForBranch(bmp.target_branch, count=1)
     # Kludge a branch being a bit out of date in a way that will make
     # pending_writes true, without anything else failing.
     removeSecurityProxy(bmp.source_branch).last_mirrored_id = \
         self.factory.getUniqueString()
     job = UpdatePreviewDiffJob.create(bmp)
     # pop_notifications()
     JobRunner([job]).runAll()
     emails = pop_notifications()
     self.assertThat(emails, Equals([]))
     self.assertThat(job.status, Equals(JobStatus.WAITING))
     self.assertThat(job.attempt_count, Equals(1))
     self.assertThat(job.max_retries, Equals(20))
 def test_run_object_events(self):
     # While the job runs a single IObjectModifiedEvent is issued when the
     # preview diff has been calculated.
     self.useBzrBranches(direct_database=True)
     bmp = create_example_merge(self)[0]
     job = UpdatePreviewDiffJob.create(bmp)
     self.factory.makeRevisionsForBranch(bmp.source_branch, count=1)
     bmp.source_branch.next_mirror_time = None
     with dbuser("merge-proposal-jobs"):
         with EventRecorder() as event_recorder:
             JobRunner([job]).runAll()
     bmp_object_events = [
         event for event in event_recorder.events
         if (IObjectModifiedEvent.providedBy(event) and
             event.object == bmp)]
     self.assertEqual(
         1, len(bmp_object_events),
         "Expected one event, got: %r" % bmp_object_events)
     self.assertEqual(
         ["preview_diff"], bmp_object_events[0].edited_fields)
 def test_run_branches_empty(self):
     """If the branches are empty, we tell the user."""
     # If the job has been waiting for a significant period of time (15
     # minutes for now), we run the job anyway.  The checkReady method
     # then raises and this is caught as a user error by the job system,
     # and as such sends an email to the error recipients, which for this
     # job is the merge proposal registrant.
     eric = self.factory.makePerson(name='eric', email='*****@*****.**')
     bmp = self.factory.makeBranchMergeProposal(registrant=eric)
     job = UpdatePreviewDiffJob.create(bmp)
     pop_notifications()
     JobRunner([job]).runAll()
     [email] = pop_notifications()
     self.assertEqual('Eric <*****@*****.**>', email['to'])
     self.assertEqual(
         'Launchpad error while generating the diff for a merge proposal',
         email['subject'])
     self.assertEqual(
         'Launchpad encountered an error during the following operation: '
         'generating the diff for a merge proposal.  '
         'The source branch has no revisions.',
         email.get_payload(decode=True))
Пример #13
0
 def test_getOperationDescription(self):
     bmp = self.factory.makeBranchMergeProposal()
     job = UpdatePreviewDiffJob.create(bmp)
     self.assertEqual(
         'generating the diff for a merge proposal',
         job.getOperationDescription())
Пример #14
0
 def test_providesInterface(self):
     """MergeProposalNeedsReviewEmailJob provides expected interfaces."""
     bmp = self.factory.makeBranchMergeProposal()
     job = UpdatePreviewDiffJob.create(bmp)
     verifyObject(IUpdatePreviewDiffJob, job)
     verifyObject(IBranchMergeProposalJob, job)
Пример #15
0
 def test_10_minute_lease(self):
     bmp = self.createExampleBzrMerge()[0]
     job = UpdatePreviewDiffJob.create(bmp)
     job.acquireLease()
     expiry_delta = job.lease_expires - datetime.now(pytz.UTC)
     self.assertTrue(500 <= expiry_delta.seconds, expiry_delta)
Пример #16
0
 def test_run_git(self):
     bmp, _, _, patch = self.createExampleGitMerge()
     job = UpdatePreviewDiffJob.create(bmp)
     with dbuser("merge-proposal-jobs"):
         JobRunner([job]).runAll()
     self.assertEqual(patch, bmp.preview_diff.text)