dequeue abandoned changes
Whenever a change is abandoned, we should probably remove it from queues
and cancel all jobs.
Added a patchset to the getChangeRestoredEvent() event to match Gerrit.
Change-Id: I1e9c9985606c04def7cd37a1284b5addb7553354
diff --git a/tests/test_scheduler.py b/tests/test_scheduler.py
index 6e65774..a5e4d5c 100755
--- a/tests/test_scheduler.py
+++ b/tests/test_scheduler.py
@@ -39,6 +39,7 @@
class TestScheduler(ZuulTestCase):
+
def test_jobs_launched(self):
"Test that jobs are launched and a change is merged"
@@ -1431,6 +1432,36 @@
self.assertEqual(D.reported, 2)
self.assertEqual(len(self.history), 9) # 3 each for A, B, D.
+ def test_abandoned_change_dequeues(self):
+ "Test that an abandoned change is dequeued"
+
+ self.worker.hold_jobs_in_build = True
+
+ A = self.fake_gerrit.addFakeChange('org/project', 'master', 'A')
+ self.fake_gerrit.addEvent(A.getPatchsetCreatedEvent(1))
+ self.waitUntilSettled()
+ self.assertEqual(len(self.builds), 1, "One job being built (on hold)")
+ self.assertEqual(self.builds[0].name, 'project-merge')
+
+ self.fake_gerrit.addEvent(A.getChangeAbandonedEvent())
+ self.waitUntilSettled()
+
+ # For debugging purposes...
+ #for pipeline in self.sched.layout.pipelines.values():
+ # for queue in pipeline.queues:
+ # self.log.info("pipepline %s queue %s contents %s" % (
+ # pipeline.name, queue.name, queue.queue))
+
+ self.worker.release('.*-merge')
+ self.waitUntilSettled()
+
+ self.assertEqual(len(self.builds), 0, "No job running")
+ self.assertEmptyQueues()
+ self.assertEqual(len(self.history), 1, "Only one build in history")
+ self.assertEqual(self.history[0].result, 'ABORTED',
+ 'Build should have been aborted')
+ self.assertEqual(A.reported, 0, "Abandoned change should not report")
+
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'))