Index: commit-queue/tests/try_job_steps_tests.py |
=================================================================== |
--- commit-queue/tests/try_job_steps_tests.py (revision 249146) |
+++ commit-queue/tests/try_job_steps_tests.py (working copy) |
@@ -1,686 +0,0 @@ |
-#!/usr/bin/env python |
-# Copyright (c) 2013 The Chromium Authors. All rights reserved. |
-# Use of this source code is governed by a BSD-style license that can be |
-# found in the LICENSE file. |
- |
-"""Unit tests for verification/try_job_steps.py.""" |
- |
-import os |
-import sys |
-import unittest |
- |
-ROOT_DIR = os.path.dirname(os.path.abspath(__file__)) |
-sys.path.insert(0, os.path.join(ROOT_DIR, '..')) |
- |
-from verification import try_job_steps |
-from verification import try_job_on_rietveld |
- |
- |
-def CreateRietveldTryJob(builder, requested_steps, steps_passed, steps_failed): |
- return try_job_on_rietveld.RietveldTryJob( |
- init_time=1., |
- builder=builder, |
- build=1, |
- revision=1, |
- requested_steps=requested_steps, |
- started=1, |
- steps_passed=steps_passed, |
- steps_failed=steps_failed, |
- clobber=False, |
- completed=False, |
- tries=1, |
- parent_key=None) |
- |
- |
-class NeedToRunTest(unittest.TestCase): |
- def test_no_tries(self): |
- self.assertEqual( |
- set(['test1', 'test2']), |
- try_job_steps.need_to_trigger('bot', set(['test1', 'test2']), {})) |
- |
- def test_non_matching_try(self): |
- tries = [ |
- CreateRietveldTryJob( |
- builder='different', |
- requested_steps=[], |
- steps_passed=[], |
- steps_failed=[]), |
- ] |
- |
- self.assertEqual( |
- set(['test1', 'test2']), |
- try_job_steps.need_to_trigger('bot', set(['test1', 'test2']), tries)) |
- |
- def test_partial_match_need_trigger(self): |
- tries = [ |
- CreateRietveldTryJob( |
- builder='bot', |
- requested_steps=['test1'], |
- steps_passed=['test1'], |
- steps_failed=[]), |
- ] |
- |
- self.assertEqual( |
- set(['test2']), |
- try_job_steps.need_to_trigger('bot', set(['test1', 'test2']), tries)) |
- |
- def test_partial_match_no_trigger(self): |
- tries = [ |
- CreateRietveldTryJob( |
- builder='bot', |
- requested_steps=['test1', 'test2'], |
- steps_passed=['test1'], |
- steps_failed=[]), |
- ] |
- |
- self.assertEqual( |
- set(), |
- try_job_steps.need_to_trigger('bot', set(['test1', 'test2']), tries)) |
- |
- def test_full_match(self): |
- tries = [ |
- CreateRietveldTryJob( |
- builder='bot', |
- requested_steps=['test1', 'test2'], |
- steps_passed=['test1', 'test2'], |
- steps_failed=[]), |
- ] |
- |
- self.assertEqual( |
- set(), |
- try_job_steps.need_to_trigger('bot', set(['test1', 'test2']), tries)) |
- |
- |
-class WaitingForTest(unittest.TestCase): |
- def test_no_tries(self): |
- self.assertEqual( |
- set(['test1', 'test2']), |
- try_job_steps.waiting_for('bot', ['test1', 'test2'], {})) |
- |
- def test_failed_try(self): |
- tries = [ |
- CreateRietveldTryJob( |
- builder='bot', |
- requested_steps=['test1', 'test2'], |
- steps_passed=[], |
- steps_failed=['test1', 'test2']), |
- ] |
- |
- self.assertEqual( |
- set(['test1', 'test2']), |
- try_job_steps.waiting_for('bot', ['test1', 'test2'], tries)) |
- |
- def test_partial_successful_try(self): |
- tries = [ |
- CreateRietveldTryJob( |
- builder='bot', |
- requested_steps=['test1', 'test2'], |
- steps_passed=['test1'], |
- steps_failed=[]), |
- ] |
- |
- self.assertEqual( |
- set(['test2']), |
- try_job_steps.waiting_for('bot', ['test1', 'test2'], tries)) |
- |
- def test_successful_try(self): |
- tries = [ |
- CreateRietveldTryJob( |
- builder='bot', |
- requested_steps=['test1', 'test2'], |
- steps_passed=['test1', 'test2'], |
- steps_failed=[]), |
- ] |
- |
- self.assertEqual( |
- set(), |
- try_job_steps.waiting_for('bot', ['test1', 'test2'], tries)) |
- |
- |
-class TryJobTriggeredStepsTest(unittest.TestCase): |
- def test_waiting_for(self): |
- triggered_verifier = try_job_steps.TryJobTriggeredSteps( |
- builder_name='triggered_bot', |
- trigger_name='parent_bot', |
- steps={ |
- 'test1': 'trigger1', |
- 'test2': 'trigger1', |
- 'test3': 'trigger2', |
- }) |
- |
- self.assertEqual( |
- ('triggered_bot', set(['test1', 'test2', 'test3'])), |
- triggered_verifier.waiting_for({})) |
- |
- def test_need_to_trigger(self): |
- triggered_verifier = try_job_steps.TryJobTriggeredSteps( |
- builder_name='triggered_bot', |
- trigger_name='parent_bot', |
- steps={ |
- 'test1': 'trigger1', |
- 'test2': 'trigger1', |
- 'test3': 'trigger2', |
- }) |
- |
- self.assertEqual( |
- ('parent_bot', set(['trigger1', 'trigger2'])), |
- triggered_verifier.need_to_trigger({}, 1.)) |
- |
- # With a Try Job running that will run test3, we shouldn't care |
- # about trigger2. |
- try_jobs = { |
- 'key1': try_job_on_rietveld.RietveldTryJob( |
- init_time=1., |
- builder='parent_bot', |
- build=12, |
- revision=13, |
- requested_steps=['triggered1', 'triggered2'], |
- started=1, |
- steps_passed=['triggered1', 'triggered2'], |
- steps_failed=[], |
- clobber=False, |
- completed=True, |
- tries=1, |
- parent_key=None), |
- 'key2': try_job_on_rietveld.RietveldTryJob( |
- init_time=1., |
- builder='triggered_bot', |
- build=12, |
- revision=13, |
- requested_steps=['test1', 'test2', 'test3'], |
- started=1, |
- steps_passed=[], |
- steps_failed=['test1', 'test2'], |
- clobber=False, |
- completed=False, |
- tries=1, |
- parent_key='key1')} |
- self.assertEqual( |
- ('parent_bot', set(['trigger1'])), |
- triggered_verifier.need_to_trigger(try_jobs, 1.)) |
- |
- # A parent bot is running with steps that won't trigger the needed |
- # tests, so nothing changes. |
- try_jobs['key2'] = CreateRietveldTryJob( |
- builder='parent_bot', |
- requested_steps=['trigger2'], |
- steps_passed=[], |
- steps_failed=[]) |
- self.assertEqual( |
- ('parent_bot', set(['trigger1'])), |
- triggered_verifier.need_to_trigger(try_jobs, 1.)) |
- |
- # A parent bot is running steps that will triggered the required tests, |
- # so nothing needs to be triggered. |
- try_jobs['key3'] = CreateRietveldTryJob( |
- builder='parent_bot', |
- requested_steps=['trigger1'], |
- steps_passed=[], |
- steps_failed=[]) |
- self.assertEqual( |
- ('parent_bot', set([])), |
- triggered_verifier.need_to_trigger(try_jobs, 1.)) |
- |
- def test_triggered_bot_found(self): |
- """Test that we don't wait on an non-stewed parent if the child is found.""" |
- triggered_verifier = try_job_steps.TryJobTriggeredSteps( |
- builder_name='tester1', |
- trigger_name='builder1', |
- steps={'test3': 'trigger'}) |
- try_jobs = { |
- 'key1': try_job_on_rietveld.RietveldTryJob( |
- init_time=1., |
- builder='builder1', |
- build=12, |
- revision=13, |
- requested_steps=['trigger'], |
- started=1, |
- steps_passed=['trigger'], |
- steps_failed=[], |
- clobber=False, |
- completed=True, |
- tries=1, |
- parent_key=None), |
- 'key2': try_job_on_rietveld.RietveldTryJob( |
- init_time=1., |
- builder='tester1', |
- build=12, |
- revision=13, |
- requested_steps=['test3'], |
- started=1, |
- steps_passed=[], |
- steps_failed=['test3'], |
- clobber=False, |
- completed=True, |
- tries=1, |
- parent_key='key1')} |
- self.assertEqual( |
- ('builder1', set(['trigger'])), |
- triggered_verifier.need_to_trigger(try_jobs, 1.)) |
- self.assertEqual( |
- ('tester1', set(['test3'])), |
- triggered_verifier.waiting_for(try_jobs)) |
- |
- def test_triggered_wait_for_builder(self): |
- """Test that we wait for trigger if builder has recently completed.""" |
- triggered_verifier = try_job_steps.TryJobTriggeredSteps( |
- builder_name='tester1', |
- trigger_name='builder1', |
- steps={'test3': 'trigger'}) |
- try_jobs = { |
- 'key1': try_job_on_rietveld.RietveldTryJob( |
- init_time=1., |
- builder='builder1', |
- build=12, |
- revision=13, |
- requested_steps=['test10', 'trigger'], |
- started=1, |
- steps_passed=['test10', 'trigger'], |
- steps_failed=[], |
- clobber=False, |
- completed=True, |
- tries=1, |
- parent_key=None), |
- } |
- self.assertEqual( |
- ('builder1', set()), |
- triggered_verifier.need_to_trigger(try_jobs, 1.)) |
- self.assertEqual( |
- ('tester1', set(['test3'])), |
- triggered_verifier.waiting_for(try_jobs)) |
- |
- def test_not_all_triggered(self): |
- """Test that waiting for one triggered job doesn't prevent other triggers |
- from getting hit.""" |
- triggered_verifier = try_job_steps.TryJobTriggeredSteps( |
- builder_name='tester1', |
- trigger_name='builder1', |
- steps={ |
- 'test1': 'trigger1', |
- 'test2': 'trigger2'}) |
- |
- try_jobs = { |
- 'key1': try_job_on_rietveld.RietveldTryJob( |
- init_time=1., |
- builder='builder1', |
- build=12, |
- revision=13, |
- requested_steps=['trigger1'], |
- started=1, |
- steps_passed=['trigger1'], |
- steps_failed=[], |
- clobber=False, |
- completed=True, |
- tries=1, |
- parent_key=None), |
- } |
- |
- self.assertEqual( |
- ('builder1', set(['trigger2'])), |
- triggered_verifier.need_to_trigger(try_jobs, 1.)) |
- self.assertEqual( |
- ('tester1', set(['test1', 'test2'])), |
- triggered_verifier.waiting_for(try_jobs)) |
- |
- def test_triggered_builder_second_pending(self): |
- """Test failed trigger jobs do not send trigger if another is pending.""" |
- now = 1. |
- triggered_verifier = try_job_steps.TryJobTriggeredSteps( |
- builder_name='tester1', |
- trigger_name='builder1', |
- steps={'test3': 'trigger'}) |
- |
- try_jobs = { |
- 'key1': try_job_on_rietveld.RietveldTryJob( |
- init_time=now, |
- builder='builder1', |
- build=12, |
- revision=13, |
- requested_steps=['test10', 'trigger'], |
- started=int(now), |
- steps_passed=['test10', 'trigger'], |
- steps_failed=[], |
- clobber=False, |
- completed=True, |
- tries=1, |
- parent_key=None), |
- 'key2': try_job_on_rietveld.RietveldTryJob( |
- init_time=now, |
- builder='builder1', |
- build=13, |
- revision=13, |
- requested_steps=['test10', 'trigger'], |
- started=int(now), |
- steps_passed=['test10', 'trigger'], |
- steps_failed=[], |
- clobber=False, |
- completed=True, |
- tries=1, |
- parent_key=None), |
- 'key3': try_job_on_rietveld.RietveldTryJob( |
- init_time=now, |
- builder='tester1', |
- build=12, |
- revision=13, |
- requested_steps=['test3'], |
- started=int(now), |
- steps_passed=[], |
- steps_failed=['test3'], |
- clobber=False, |
- completed=True, |
- tries=1, |
- parent_key='key1'), |
- } |
- |
- self.assertEqual( |
- ('builder1', set()), |
- triggered_verifier.need_to_trigger(try_jobs, 1.)) |
- self.assertEqual( |
- ('tester1', set(['test3'])), |
- triggered_verifier.waiting_for(try_jobs)) |
- |
- def testGetTriggeredSteps(self): |
- triggered_verifier = try_job_steps.TryJobTriggeredSteps( |
- builder_name='tester1', |
- trigger_name='builder1', |
- steps={'test1': 'trigger', 'test2': 'trigger2'}) |
- |
- self.assertEqual( |
- ('tester1', []), |
- triggered_verifier.get_triggered_steps('builder_invalid', ['build'])) |
- |
- self.assertEqual( |
- ('tester1', []), |
- triggered_verifier.get_triggered_steps('builder1', ['wrong_step'])) |
- |
- self.assertEqual( |
- ('tester1', ['test1']), |
- triggered_verifier.get_triggered_steps('builder1', ['trigger'])) |
- |
- self.assertEqual( |
- ('tester1', ['test1', 'test2']), |
- triggered_verifier.get_triggered_steps('builder1', ['trigger', |
- 'trigger2'])) |
- |
- |
-class TryJobTriggeredOrNormalStepsTest(unittest.TestCase): |
- def test_need_to_trigger(self): |
- now = 1. |
- triggered_or_normal_verifier = try_job_steps.TryJobTriggeredOrNormalSteps( |
- builder_name='test_triggered', |
- trigger_name='builder1', |
- steps={ |
- 'test2': 'test2_trigger', |
- 'test3': 'test3_trigger', |
- 'test4': 'test4_trigger', |
- }, |
- trigger_bot_steps=[ |
- 'test1', |
- ], |
- use_triggered_bot=False, |
- ) |
- verifier_use_triggered = try_job_steps.TryJobTriggeredOrNormalSteps( |
- builder_name='test_triggered', |
- trigger_name='builder1', |
- steps={ |
- 'test2': 'test2_trigger', |
- 'test3': 'test3_trigger', |
- 'test4': 'test4_trigger', |
- }, |
- trigger_bot_steps=[ |
- 'test1', |
- ], |
- use_triggered_bot=True, |
- ) |
- |
- self.assertEqual( |
- ('builder1', set(['test1', 'test2', 'test3', 'test4'])), |
- triggered_or_normal_verifier.need_to_trigger({}, 1.)) |
- self.assertEqual( |
- ('builder1', set(['test1', 'test2_trigger', 'test3_trigger', |
- 'test4_trigger'])), |
- verifier_use_triggered.need_to_trigger({}, 1.)) |
- |
- try_jobs = { |
- 'key1': try_job_on_rietveld.RietveldTryJob( |
- init_time=now, |
- builder='builder1', |
- build=1, |
- revision=1, |
- requested_steps=['test1', 'test2', 'test3_trigger', |
- 'test4_trigger'], |
- started=int(now), |
- steps_passed=[], |
- steps_failed=[], |
- clobber=False, |
- completed=False, |
- tries=1, |
- parent_key=None)} |
- self.assertEqual( |
- ('builder1', set()), |
- triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.)) |
- self.assertEqual( |
- ('builder1', set()), |
- verifier_use_triggered.need_to_trigger(try_jobs, 1.)) |
- |
- try_jobs['key1'] = try_job_on_rietveld.RietveldTryJob( |
- init_time=now, |
- builder='builder1', |
- build=1, |
- revision=1, |
- requested_steps=['test1', 'test2', 'test3_trigger', 'test4_trigger'], |
- started=int(now), |
- steps_passed=['test1'], |
- steps_failed=['test2'], |
- clobber=False, |
- completed=True, |
- tries=1, |
- parent_key=None) |
- self.assertEqual( |
- ('builder1', set(['test2'])), |
- triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.)) |
- self.assertEqual( |
- ('builder1', set(['test2_trigger'])), |
- verifier_use_triggered.need_to_trigger(try_jobs, 1.)) |
- |
- try_jobs['key2'] = try_job_on_rietveld.RietveldTryJob( |
- init_time=now, |
- builder='test_triggered', |
- build=1, |
- revision=1, |
- requested_steps=['test3', 'test4'], |
- started=int(now), |
- steps_passed=['test3'], |
- steps_failed=['test4'], |
- clobber=False, |
- completed=True, |
- tries=1, |
- parent_key='key1') |
- self.assertEqual( |
- ('builder1', set(['test2', 'test4'])), |
- triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.)) |
- self.assertEqual( |
- ('builder1', set(['test2', 'test4'])), |
- verifier_use_triggered.need_to_trigger(try_jobs, 1.)) |
- |
- # Add a test bot that wasn't triggered by builder 1 to ensure we don't |
- # use its steps. |
- try_jobs['key4'] = try_job_on_rietveld.RietveldTryJob( |
- init_time=now, |
- builder='test_triggered', |
- build=2, |
- revision=1, |
- requested_steps=['test4'], |
- started=int(now), |
- steps_passed=['test4'], |
- steps_failed=[], |
- clobber=False, |
- completed=True, |
- tries=1, |
- parent_key='key3') |
- self.assertEqual( |
- ('builder1', set(['test2', 'test4'])), |
- triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.)) |
- self.assertEqual( |
- ('builder1', set(['test2', 'test4'])), |
- verifier_use_triggered.need_to_trigger(try_jobs, 1.)) |
- |
- # Now retry the failed jobs, ensuring that the verifiers accepts the |
- # non-trigger version of test2. |
- try_jobs['key5'] = try_job_on_rietveld.RietveldTryJob( |
- init_time=now, |
- builder='builder1', |
- build=2, |
- revision=1, |
- requested_steps=['test2', 'test4_trigger'], |
- started=int(now), |
- steps_passed=['test2'], |
- steps_failed=[], |
- clobber=False, |
- completed=True, |
- tries=2, |
- parent_key=None) |
- self.assertEqual( |
- ('builder1', set()), |
- triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.)) |
- self.assertEqual( |
- ('builder1', set()), |
- verifier_use_triggered.need_to_trigger(try_jobs, 1.)) |
- |
- try_jobs['key6'] = try_job_on_rietveld.RietveldTryJob( |
- init_time=now, |
- builder='test_triggered', |
- build=3, |
- revision=1, |
- requested_steps=['test4'], |
- started=int(now), |
- steps_passed=['test4'], |
- steps_failed=[], |
- clobber=False, |
- completed=True, |
- tries=2, |
- parent_key='key5') |
- self.assertEqual( |
- ('builder1', set()), |
- triggered_or_normal_verifier.need_to_trigger(try_jobs, 1.)) |
- self.assertEqual( |
- ('builder1', set()), |
- verifier_use_triggered.need_to_trigger(try_jobs, 1.)) |
- |
- |
- def test_waiting_for(self): |
- now = 1. |
- triggered_or_normal_verifier = try_job_steps.TryJobTriggeredOrNormalSteps( |
- builder_name='test_triggered', |
- trigger_name='builder1', |
- steps={ |
- 'test2': 'test2_trigger', |
- 'test3': 'test3_trigger', |
- 'test4': 'test4_trigger', |
- }, |
- trigger_bot_steps=[ |
- 'test1', |
- ], |
- use_triggered_bot=False, |
- ) |
- |
- self.assertEqual( |
- ('builder1', set(['test1', 'test2', 'test3', 'test4'])), |
- triggered_or_normal_verifier.waiting_for({})) |
- |
- try_jobs = { |
- 'key1': try_job_on_rietveld.RietveldTryJob( |
- init_time=now, |
- builder='builder1', |
- build=1, |
- revision=1, |
- requested_steps=['test1', 'test2', 'test3_trigger', |
- 'test4_trigger'], |
- started=int(now), |
- steps_passed=['test1'], |
- steps_failed=['test2'], |
- clobber=False, |
- completed=True, |
- tries=1, |
- parent_key=None)} |
- self.assertEqual( |
- ('builder1', set(['test2', 'test3', 'test4'])), |
- triggered_or_normal_verifier.waiting_for(try_jobs)) |
- |
- try_jobs['key2'] = try_job_on_rietveld.RietveldTryJob( |
- init_time=now, |
- builder='test_triggered', |
- build=1, |
- revision=1, |
- requested_steps=['test3', 'test4'], |
- started=int(now), |
- steps_passed=['test3'], |
- steps_failed=['test4'], |
- clobber=False, |
- completed=True, |
- tries=1, |
- parent_key='key1') |
- self.assertEqual( |
- ('builder1', set(['test2', 'test4'])), |
- triggered_or_normal_verifier.waiting_for(try_jobs)) |
- |
- # Add a trigger bot that wasn't triggered by builder 1 to ensure we don't |
- # use its steps. |
- try_jobs['key4'] = try_job_on_rietveld.RietveldTryJob( |
- init_time=now, |
- builder='test_triggered', |
- build=2, |
- revision=1, |
- requested_steps=['test4'], |
- started=int(now), |
- steps_passed=['test4'], |
- steps_failed=[], |
- clobber=False, |
- completed=True, |
- tries=1, |
- parent_key='key3') |
- self.assertEqual( |
- ('builder1', set(['test2', 'test4'])), |
- triggered_or_normal_verifier.waiting_for(try_jobs)) |
- |
- # Now retry the failed jobs, ensuring that the verifiers accepts the |
- # non-trigger version of test2. |
- try_jobs['key5'] = try_job_on_rietveld.RietveldTryJob( |
- init_time=now, |
- builder='builder1', |
- build=2, |
- revision=1, |
- requested_steps=['test2', 'test4_trigger'], |
- started=int(now), |
- steps_passed=['test2'], |
- steps_failed=[], |
- clobber=False, |
- completed=True, |
- tries=2, |
- parent_key=None) |
- self.assertEqual( |
- ('builder1', set(['test4'])), |
- triggered_or_normal_verifier.waiting_for(try_jobs)) |
- |
- try_jobs['key6'] = try_job_on_rietveld.RietveldTryJob( |
- init_time=now, |
- builder='test_triggered', |
- build=3, |
- revision=1, |
- requested_steps=['test4'], |
- started=int(now), |
- steps_passed=['test4'], |
- steps_failed=[], |
- clobber=False, |
- completed=True, |
- tries=2, |
- parent_key='key5') |
- self.assertEqual( |
- ('builder1', set()), |
- triggered_or_normal_verifier.waiting_for(try_jobs)) |
- |
- |
-if __name__ == '__main__': |
- if '-v' in sys.argv: |
- unittest.TestCase.maxDiff = None |
- unittest.main() |