Add a test for dequeue-on-new-patchest

This setting (which is likely rarely used) instructs Zuul not to
dequeue an item merely because it has had a new patchset uploaded.

However, if another item depends on such a change, that other item
should still be dequeued because its dependencies are out of date.
Add a test for that so that future changes to the change cache don't
inadvertently alter this behavior.

Change-Id: Ib2e8504c37644e06d0ac0608fa7c56d092e2673d
This commit is contained in:
James E. Blair
2021-09-23 13:43:42 -07:00
parent efe6b7abc7
commit 025356aeda
2 changed files with 108 additions and 0 deletions

View File

@@ -0,0 +1,49 @@
- pipeline:
name: check
manager: independent
dequeue-on-new-patchset: false
trigger:
gerrit:
- event: patchset-created
require:
gerrit:
approval:
- Code-Review: 2
success:
gerrit:
Verified: 1
failure:
gerrit:
Verified: -1
- job:
name: base
parent: null
run: playbooks/base.yaml
- job:
name: project1-test
- job:
name: project2-test
- job:
name: project3-test
- project:
name: org/project1
check:
jobs:
- project1-test
- project:
name: org/project2
check:
jobs:
- project2-test
- project:
name: org/project3
check:
jobs:
- project3-test

View File

@@ -2690,6 +2690,65 @@ class TestScheduler(ZuulTestCase):
self.assertEqual(D.reported, 2)
self.assertEqual(len(self.history), 9) # 3 each for A, B, D.
@simple_layout('layouts/no-dequeue-on-new-patchset.yaml')
def test_no_dequeue_on_new_patchset(self):
"Test the dequeue-on-new-patchset false value"
A = self.fake_gerrit.addFakeChange('org/project1', 'master', 'A')
self.executor_server.hold_jobs_in_build = True
A.addApproval('Code-Review', 2)
self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
self.waitUntilSettled()
self.assertEqual(len(self.builds), 1)
A.addPatchset()
A.addApproval('Code-Review', 2)
self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(2))
self.waitUntilSettled()
self.assertEqual(len(self.builds), 2)
self.executor_server.hold_jobs_in_build = False
self.executor_server.release()
self.waitUntilSettled()
self.assertHistory([
dict(name='project1-test', result='SUCCESS', changes='1,1'),
dict(name='project1-test', result='SUCCESS', changes='1,2'),
], ordered=False)
@simple_layout('layouts/no-dequeue-on-new-patchset.yaml')
def test_no_dequeue_on_new_patchset_deps(self):
"Test dependencies are updated if dequeue-on-new-patchset is false"
A = self.fake_gerrit.addFakeChange('org/project1', 'master', 'A')
B = self.fake_gerrit.addFakeChange('org/project1', 'master', 'B')
B.data['commitMessage'] = '%s\n\nDepends-On: %s\n' % (
B.subject, A.data['url'])
B.addApproval('Code-Review', 2)
self.executor_server.hold_jobs_in_build = True
self.fake_gerrit.addEvent(B.getPatchsetCreatedEvent(1))
self.waitUntilSettled()
self.assertEqual(len(self.builds), 1)
A.addPatchset()
self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(2))
self.waitUntilSettled()
self.assertEqual(len(self.builds), 0)
self.executor_server.hold_jobs_in_build = False
self.executor_server.release()
self.waitUntilSettled()
# The item should be dequeued because of the dependency change
self.assertHistory([
dict(name='project1-test', result='ABORTED', changes='1,1 2,1'),
], ordered=False)
def test_new_patchset_check(self):
"Test a new patchset in check"