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:
49
tests/fixtures/layouts/no-dequeue-on-new-patchset.yaml
vendored
Normal file
49
tests/fixtures/layouts/no-dequeue-on-new-patchset.yaml
vendored
Normal 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
|
||||
@@ -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"
|
||||
|
||||
|
||||
Reference in New Issue
Block a user