summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2015-05-07 21:28:31 +0000
committerGerrit Code Review <review@openstack.org>2015-05-07 21:28:31 +0000
commit13bb14d4fd766b523d50a1ebbc92719fa797cbad (patch)
tree5a15cd10c6cca93ab8897dfaec153be2a74a1668
parent3dfcefb494c13da48548e6ec13bf400a5504145a (diff)
parent7b78b311b87bb134db0decf8c8608385ad3fdc15 (diff)
downloadzuul-13bb14d4fd766b523d50a1ebbc92719fa797cbad.tar.gz
Merge "Fix timer jobs getting aborted from abandoning a change"
-rw-r--r--tests/fixtures/layout-no-timer.yaml16
-rwxr-xr-xtests/test_scheduler.py35
-rw-r--r--zuul/model.py3
3 files changed, 52 insertions, 2 deletions
diff --git a/tests/fixtures/layout-no-timer.yaml b/tests/fixtures/layout-no-timer.yaml
index 9436821c7..ca40d13d0 100644
--- a/tests/fixtures/layout-no-timer.yaml
+++ b/tests/fixtures/layout-no-timer.yaml
@@ -1,14 +1,28 @@
pipelines:
+ - name: check
+ manager: IndependentPipelineManager
+ trigger:
+ gerrit:
+ - event: patchset-created
+ success:
+ gerrit:
+ verified: 1
+ failure:
+ gerrit:
+ verified: -1
+
- name: periodic
manager: IndependentPipelineManager
# Trigger is required, set it to one that is a noop
# during tests that check the timer trigger.
trigger:
gerrit:
- - event: patchset-created
+ - event: ref-updated
projects:
- name: org/project
+ check:
+ - project-test1
periodic:
- project-bitrot-stable-old
- project-bitrot-stable-older
diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py
index c872b23d9..c35fb58d3 100755
--- a/tests/test_scheduler.py
+++ b/tests/test_scheduler.py
@@ -1710,6 +1710,41 @@ class TestScheduler(ZuulTestCase):
self.assertEqual(A.reported, 0, "Abandoned change should not report")
self.assertEqual(B.reported, 1, "Change should report")
+ def test_abandoned_not_timer(self):
+ "Test that an abandoned change does not cancel timer jobs"
+
+ self.worker.hold_jobs_in_build = True
+
+ # Start timer trigger - also org/project
+ self.config.set('zuul', 'layout_config',
+ 'tests/fixtures/layout-idle.yaml')
+ self.sched.reconfigure(self.config)
+ self.registerJobs()
+ # The pipeline triggers every second, so we should have seen
+ # several by now.
+ time.sleep(5)
+ self.waitUntilSettled()
+ # Stop queuing timer triggered jobs so that the assertions
+ # below don't race against more jobs being queued.
+ self.config.set('zuul', 'layout_config',
+ 'tests/fixtures/layout-no-timer.yaml')
+ self.sched.reconfigure(self.config)
+ self.registerJobs()
+ self.assertEqual(len(self.builds), 2, "Two timer jobs")
+
+ A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
+ self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
+ self.waitUntilSettled()
+ self.assertEqual(len(self.builds), 3, "One change plus two timer jobs")
+
+ self.fake_gerrit.addEvent(A.getChangeAbandonedEvent())
+ self.waitUntilSettled()
+
+ self.assertEqual(len(self.builds), 2, "Two timer jobs remain")
+
+ self.worker.release()
+ self.waitUntilSettled()
+
def test_zuul_url_return(self):
"Test if ZUUL_URL is returning when zuul_url is set in zuul.conf"
self.assertTrue(self.sched.config.has_option('merger', 'zuul_url'))
diff --git a/zuul/model.py b/zuul/model.py
index 8dc28dfbe..4d402ff9c 100644
--- a/zuul/model.py
+++ b/zuul/model.py
@@ -965,7 +965,8 @@ class NullChange(Changeish):
return None
def equals(self, other):
- if (self.project == other.project):
+ if (self.project == other.project
+ and other._id() is None):
return True
return False