aboutsummaryrefslogtreecommitdiff
path: root/llvm_tools/modify_a_tryjob_unittest.py
diff options
context:
space:
mode:
Diffstat (limited to 'llvm_tools/modify_a_tryjob_unittest.py')
-rwxr-xr-xllvm_tools/modify_a_tryjob_unittest.py797
1 files changed, 424 insertions, 373 deletions
diff --git a/llvm_tools/modify_a_tryjob_unittest.py b/llvm_tools/modify_a_tryjob_unittest.py
index e3c62972..712e2614 100755
--- a/llvm_tools/modify_a_tryjob_unittest.py
+++ b/llvm_tools/modify_a_tryjob_unittest.py
@@ -1,12 +1,11 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
-# Copyright 2019 The Chromium OS Authors. All rights reserved.
+# Copyright 2019 The ChromiumOS Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""Tests for modifying a tryjob."""
-from __future__ import print_function
import json
import unittest
@@ -20,383 +19,435 @@ import update_tryjob_status
class ModifyATryjobTest(unittest.TestCase):
- """Unittests for modifying a tryjob."""
-
- def testNoTryjobsInStatusFile(self):
- bisect_test_contents = {'start': 369410, 'end': 369420, 'jobs': []}
-
- # Create a temporary .JSON file to simulate a .JSON file that has bisection
- # contents.
- with test_helpers.CreateTemporaryJsonFile() as temp_json_file:
- with open(temp_json_file, 'w') as f:
- test_helpers.WritePrettyJsonFile(bisect_test_contents, f)
-
- revision_to_modify = 369411
-
- args_output = test_helpers.ArgsOutputTest()
- args_output.builders = None
- args_output.options = None
-
- # Verify the exception is raised there are no tryjobs in the status file
- # and the mode is not to 'add' a tryjob.
- with self.assertRaises(SystemExit) as err:
- modify_a_tryjob.PerformTryjobModification(
- revision_to_modify, modify_a_tryjob.ModifyTryjob.REMOVE,
- temp_json_file, args_output.extra_change_lists, args_output.options,
- args_output.builders, args_output.chroot_path, args_output.verbose)
-
- self.assertEqual(str(err.exception), 'No tryjobs in %s' % temp_json_file)
-
- # Simulate the behavior of `FindTryjobIndex()` when the index of the tryjob
- # was not found.
- @mock.patch.object(update_tryjob_status, 'FindTryjobIndex', return_value=None)
- def testNoTryjobIndexFound(self, mock_find_tryjob_index):
- bisect_test_contents = {
- 'start': 369410,
- 'end': 369420,
- 'jobs': [{
- 'rev': 369411,
- 'status': 'pending',
- 'buildbucket_id': 1200
- }]
- }
-
- # Create a temporary .JSON file to simulate a .JSON file that has bisection
- # contents.
- with test_helpers.CreateTemporaryJsonFile() as temp_json_file:
- with open(temp_json_file, 'w') as f:
- test_helpers.WritePrettyJsonFile(bisect_test_contents, f)
-
- revision_to_modify = 369412
-
- args_output = test_helpers.ArgsOutputTest()
- args_output.builders = None
- args_output.options = None
-
- # Verify the exception is raised when the index of the tryjob was not
- # found in the status file and the mode is not to 'add' a tryjob.
- with self.assertRaises(ValueError) as err:
- modify_a_tryjob.PerformTryjobModification(
- revision_to_modify, modify_a_tryjob.ModifyTryjob.REMOVE,
- temp_json_file, args_output.extra_change_lists, args_output.options,
- args_output.builders, args_output.chroot_path, args_output.verbose)
-
- self.assertEqual(
- str(err.exception), 'Unable to find tryjob for %d in %s' %
- (revision_to_modify, temp_json_file))
-
- mock_find_tryjob_index.assert_called_once()
-
- # Simulate the behavior of `FindTryjobIndex()` when the index of the tryjob
- # was found.
- @mock.patch.object(update_tryjob_status, 'FindTryjobIndex', return_value=0)
- def testSuccessfullyRemovedTryjobInStatusFile(self, mock_find_tryjob_index):
- bisect_test_contents = {
- 'start': 369410,
- 'end': 369420,
- 'jobs': [{
- 'rev': 369414,
- 'status': 'pending',
- 'buildbucket_id': 1200
- }]
- }
-
- # Create a temporary .JSON file to simulate a .JSON file that has bisection
- # contents.
- with test_helpers.CreateTemporaryJsonFile() as temp_json_file:
- with open(temp_json_file, 'w') as f:
- test_helpers.WritePrettyJsonFile(bisect_test_contents, f)
-
- revision_to_modify = 369414
-
- args_output = test_helpers.ArgsOutputTest()
- args_output.builders = None
- args_output.options = None
-
- modify_a_tryjob.PerformTryjobModification(
- revision_to_modify, modify_a_tryjob.ModifyTryjob.REMOVE,
- temp_json_file, args_output.extra_change_lists, args_output.options,
- args_output.builders, args_output.chroot_path, args_output.verbose)
-
- # Verify that the tryjob was removed from the status file.
- with open(temp_json_file) as status_file:
- bisect_contents = json.load(status_file)
-
- expected_file_contents = {'start': 369410, 'end': 369420, 'jobs': []}
-
- self.assertDictEqual(bisect_contents, expected_file_contents)
-
- mock_find_tryjob_index.assert_called_once()
-
- # Simulate the behavior of `RunTryJobs()` when successfully submitted a
- # tryjob.
- @mock.patch.object(update_packages_and_run_tests, 'RunTryJobs')
- # Simulate the behavior of `FindTryjobIndex()` when the index of the tryjob
- # was found.
- @mock.patch.object(update_tryjob_status, 'FindTryjobIndex', return_value=0)
- def testSuccessfullyRelaunchedTryjob(self, mock_find_tryjob_index,
- mock_run_tryjob):
-
- bisect_test_contents = {
- 'start':
- 369410,
- 'end':
- 369420,
- 'jobs': [{
- 'rev': 369411,
- 'status': 'bad',
- 'link': 'https://some_tryjob_link.com',
- 'buildbucket_id': 1200,
- 'cl': 123,
- 'extra_cls': None,
- 'options': None,
- 'builder': ['some-builder-tryjob']
- }]
- }
-
- tryjob_result = [{
- 'link': 'https://some_new_tryjob_link.com',
- 'buildbucket_id': 20
- }]
-
- mock_run_tryjob.return_value = tryjob_result
-
- # Create a temporary .JSON file to simulate a .JSON file that has bisection
- # contents.
- with test_helpers.CreateTemporaryJsonFile() as temp_json_file:
- with open(temp_json_file, 'w') as f:
- test_helpers.WritePrettyJsonFile(bisect_test_contents, f)
-
- revision_to_modify = 369411
-
- args_output = test_helpers.ArgsOutputTest()
- args_output.builders = None
- args_output.options = None
-
- modify_a_tryjob.PerformTryjobModification(
- revision_to_modify, modify_a_tryjob.ModifyTryjob.RELAUNCH,
- temp_json_file, args_output.extra_change_lists, args_output.options,
- args_output.builders, args_output.chroot_path, args_output.verbose)
-
- # Verify that the tryjob's information was updated after submtting the
- # tryjob.
- with open(temp_json_file) as status_file:
- bisect_contents = json.load(status_file)
-
- expected_file_contents = {
- 'start':
- 369410,
- 'end':
- 369420,
- 'jobs': [{
- 'rev': 369411,
- 'status': 'pending',
- 'link': 'https://some_new_tryjob_link.com',
- 'buildbucket_id': 20,
- 'cl': 123,
- 'extra_cls': None,
- 'options': None,
- 'builder': ['some-builder-tryjob']
- }]
+ """Unittests for modifying a tryjob."""
+
+ def testNoTryjobsInStatusFile(self):
+ bisect_test_contents = {"start": 369410, "end": 369420, "jobs": []}
+
+ # Create a temporary .JSON file to simulate a .JSON file that has bisection
+ # contents.
+ with test_helpers.CreateTemporaryJsonFile() as temp_json_file:
+ with open(temp_json_file, "w") as f:
+ test_helpers.WritePrettyJsonFile(bisect_test_contents, f)
+
+ revision_to_modify = 369411
+
+ args_output = test_helpers.ArgsOutputTest()
+ args_output.builders = None
+ args_output.options = None
+
+ # Verify the exception is raised there are no tryjobs in the status file
+ # and the mode is not to 'add' a tryjob.
+ with self.assertRaises(SystemExit) as err:
+ modify_a_tryjob.PerformTryjobModification(
+ revision_to_modify,
+ modify_a_tryjob.ModifyTryjob.REMOVE,
+ temp_json_file,
+ args_output.extra_change_lists,
+ args_output.options,
+ args_output.builders,
+ args_output.chroot_path,
+ args_output.verbose,
+ )
+
+ self.assertEqual(
+ str(err.exception), "No tryjobs in %s" % temp_json_file
+ )
+
+ # Simulate the behavior of `FindTryjobIndex()` when the index of the tryjob
+ # was not found.
+ @mock.patch.object(
+ update_tryjob_status, "FindTryjobIndex", return_value=None
+ )
+ def testNoTryjobIndexFound(self, mock_find_tryjob_index):
+ bisect_test_contents = {
+ "start": 369410,
+ "end": 369420,
+ "jobs": [
+ {"rev": 369411, "status": "pending", "buildbucket_id": 1200}
+ ],
}
- self.assertDictEqual(bisect_contents, expected_file_contents)
-
- mock_find_tryjob_index.assert_called_once()
-
- mock_run_tryjob.assert_called_once()
-
- # Simulate the behavior of `FindTryjobIndex()` when the index of the tryjob
- # was found.
- @mock.patch.object(update_tryjob_status, 'FindTryjobIndex', return_value=0)
- def testAddingTryjobThatAlreadyExists(self, mock_find_tryjob_index):
- bisect_test_contents = {
- 'start': 369410,
- 'end': 369420,
- 'jobs': [{
- 'rev': 369411,
- 'status': 'bad',
- 'builder': ['some-builder']
- }]
- }
-
- # Create a temporary .JSON file to simulate a .JSON file that has bisection
- # contents.
- with test_helpers.CreateTemporaryJsonFile() as temp_json_file:
- with open(temp_json_file, 'w') as f:
- test_helpers.WritePrettyJsonFile(bisect_test_contents, f)
-
- revision_to_add = 369411
-
- # Index of the tryjob in 'jobs' list.
- tryjob_index = 0
-
- args_output = test_helpers.ArgsOutputTest()
- args_output.options = None
-
- # Verify the exception is raised when the tryjob that is going to added
- # already exists in the status file (found its index).
- with self.assertRaises(ValueError) as err:
- modify_a_tryjob.PerformTryjobModification(
- revision_to_add, modify_a_tryjob.ModifyTryjob.ADD, temp_json_file,
- args_output.extra_change_lists, args_output.options,
- args_output.builders, args_output.chroot_path, args_output.verbose)
-
- self.assertEqual(
- str(err.exception), 'Tryjob already exists (index is %d) in %s.' %
- (tryjob_index, temp_json_file))
-
- mock_find_tryjob_index.assert_called_once()
-
- # Simulate the behavior of `FindTryjobIndex()` when the tryjob was not found.
- @mock.patch.object(update_tryjob_status, 'FindTryjobIndex', return_value=None)
- def testSuccessfullyDidNotAddTryjobOutsideOfBisectionBounds(
- self, mock_find_tryjob_index):
-
- bisect_test_contents = {
- 'start': 369410,
- 'end': 369420,
- 'jobs': [{
- 'rev': 369411,
- 'status': 'bad'
- }]
- }
-
- # Create a temporary .JSON file to simulate a .JSON file that has bisection
- # contents.
- with test_helpers.CreateTemporaryJsonFile() as temp_json_file:
- with open(temp_json_file, 'w') as f:
- test_helpers.WritePrettyJsonFile(bisect_test_contents, f)
-
- # Add a revision that is outside of 'start' and 'end'.
- revision_to_add = 369450
-
- args_output = test_helpers.ArgsOutputTest()
- args_output.options = None
-
- # Verify the exception is raised when adding a tryjob that does not exist
- # and is not within 'start' and 'end'.
- with self.assertRaises(ValueError) as err:
- modify_a_tryjob.PerformTryjobModification(
- revision_to_add, modify_a_tryjob.ModifyTryjob.ADD, temp_json_file,
- args_output.extra_change_lists, args_output.options,
- args_output.builders, args_output.chroot_path, args_output.verbose)
-
- self.assertEqual(
- str(err.exception), 'Failed to add tryjob to %s' % temp_json_file)
-
- mock_find_tryjob_index.assert_called_once()
-
- # Simulate the behavior of `AddTryjob()` when successfully submitted the
- # tryjob and constructed the tryjob information (a dictionary).
- @mock.patch.object(modify_a_tryjob, 'AddTryjob')
- # Simulate the behavior of `GetLLVMHashAndVersionFromSVNOption()` when
- # successfully retrieved the git hash of the revision to launch a tryjob for.
- @mock.patch.object(
- get_llvm_hash,
- 'GetLLVMHashAndVersionFromSVNOption',
- return_value=('a123testhash1', 369418))
- # Simulate the behavior of `FindTryjobIndex()` when the tryjob was not found.
- @mock.patch.object(update_tryjob_status, 'FindTryjobIndex', return_value=None)
- def testSuccessfullyAddedTryjob(self, mock_find_tryjob_index,
- mock_get_llvm_hash, mock_add_tryjob):
-
- bisect_test_contents = {
- 'start': 369410,
- 'end': 369420,
- 'jobs': [{
- 'rev': 369411,
- 'status': 'bad'
- }]
- }
-
- # Create a temporary .JSON file to simulate a .JSON file that has bisection
- # contents.
- with test_helpers.CreateTemporaryJsonFile() as temp_json_file:
- with open(temp_json_file, 'w') as f:
- test_helpers.WritePrettyJsonFile(bisect_test_contents, f)
-
- # Add a revision that is outside of 'start' and 'end'.
- revision_to_add = 369418
-
- args_output = test_helpers.ArgsOutputTest()
- args_output.options = None
-
- new_tryjob_info = {
- 'rev': revision_to_add,
- 'status': 'pending',
- 'options': args_output.options,
- 'extra_cls': args_output.extra_change_lists,
- 'builder': args_output.builders
- }
-
- mock_add_tryjob.return_value = new_tryjob_info
-
- modify_a_tryjob.PerformTryjobModification(
- revision_to_add, modify_a_tryjob.ModifyTryjob.ADD, temp_json_file,
- args_output.extra_change_lists, args_output.options,
- args_output.builders, args_output.chroot_path, args_output.verbose)
-
- # Verify that the tryjob was added to the status file.
- with open(temp_json_file) as status_file:
- bisect_contents = json.load(status_file)
-
- expected_file_contents = {
- 'start': 369410,
- 'end': 369420,
- 'jobs': [{
- 'rev': 369411,
- 'status': 'bad'
- }, new_tryjob_info]
+ # Create a temporary .JSON file to simulate a .JSON file that has bisection
+ # contents.
+ with test_helpers.CreateTemporaryJsonFile() as temp_json_file:
+ with open(temp_json_file, "w") as f:
+ test_helpers.WritePrettyJsonFile(bisect_test_contents, f)
+
+ revision_to_modify = 369412
+
+ args_output = test_helpers.ArgsOutputTest()
+ args_output.builders = None
+ args_output.options = None
+
+ # Verify the exception is raised when the index of the tryjob was not
+ # found in the status file and the mode is not to 'add' a tryjob.
+ with self.assertRaises(ValueError) as err:
+ modify_a_tryjob.PerformTryjobModification(
+ revision_to_modify,
+ modify_a_tryjob.ModifyTryjob.REMOVE,
+ temp_json_file,
+ args_output.extra_change_lists,
+ args_output.options,
+ args_output.builders,
+ args_output.chroot_path,
+ args_output.verbose,
+ )
+
+ self.assertEqual(
+ str(err.exception),
+ "Unable to find tryjob for %d in %s"
+ % (revision_to_modify, temp_json_file),
+ )
+
+ mock_find_tryjob_index.assert_called_once()
+
+ # Simulate the behavior of `FindTryjobIndex()` when the index of the tryjob
+ # was found.
+ @mock.patch.object(update_tryjob_status, "FindTryjobIndex", return_value=0)
+ def testSuccessfullyRemovedTryjobInStatusFile(self, mock_find_tryjob_index):
+ bisect_test_contents = {
+ "start": 369410,
+ "end": 369420,
+ "jobs": [
+ {"rev": 369414, "status": "pending", "buildbucket_id": 1200}
+ ],
}
- self.assertDictEqual(bisect_contents, expected_file_contents)
-
- mock_find_tryjob_index.assert_called_once()
-
- mock_get_llvm_hash.assert_called_once_with(revision_to_add)
-
- mock_add_tryjob.assert_called_once()
-
- # Simulate the behavior of `FindTryjobIndex()` when the tryjob was found.
- @mock.patch.object(update_tryjob_status, 'FindTryjobIndex', return_value=0)
- def testModifyATryjobOptionDoesNotExist(self, mock_find_tryjob_index):
- bisect_test_contents = {
- 'start': 369410,
- 'end': 369420,
- 'jobs': [{
- 'rev': 369414,
- 'status': 'bad'
- }]
- }
-
- # Create a temporary .JSON file to simulate a .JSON file that has bisection
- # contents.
- with test_helpers.CreateTemporaryJsonFile() as temp_json_file:
- with open(temp_json_file, 'w') as f:
- test_helpers.WritePrettyJsonFile(bisect_test_contents, f)
-
- # Add a revision that is outside of 'start' and 'end'.
- revision_to_modify = 369414
-
- args_output = test_helpers.ArgsOutputTest()
- args_output.builders = None
- args_output.options = None
+ # Create a temporary .JSON file to simulate a .JSON file that has bisection
+ # contents.
+ with test_helpers.CreateTemporaryJsonFile() as temp_json_file:
+ with open(temp_json_file, "w") as f:
+ test_helpers.WritePrettyJsonFile(bisect_test_contents, f)
+
+ revision_to_modify = 369414
+
+ args_output = test_helpers.ArgsOutputTest()
+ args_output.builders = None
+ args_output.options = None
+
+ modify_a_tryjob.PerformTryjobModification(
+ revision_to_modify,
+ modify_a_tryjob.ModifyTryjob.REMOVE,
+ temp_json_file,
+ args_output.extra_change_lists,
+ args_output.options,
+ args_output.builders,
+ args_output.chroot_path,
+ args_output.verbose,
+ )
+
+ # Verify that the tryjob was removed from the status file.
+ with open(temp_json_file) as status_file:
+ bisect_contents = json.load(status_file)
+
+ expected_file_contents = {
+ "start": 369410,
+ "end": 369420,
+ "jobs": [],
+ }
+
+ self.assertDictEqual(bisect_contents, expected_file_contents)
+
+ mock_find_tryjob_index.assert_called_once()
+
+ # Simulate the behavior of `RunTryJobs()` when successfully submitted a
+ # tryjob.
+ @mock.patch.object(update_packages_and_run_tests, "RunTryJobs")
+ # Simulate the behavior of `FindTryjobIndex()` when the index of the tryjob
+ # was found.
+ @mock.patch.object(update_tryjob_status, "FindTryjobIndex", return_value=0)
+ def testSuccessfullyRelaunchedTryjob(
+ self, mock_find_tryjob_index, mock_run_tryjob
+ ):
+
+ bisect_test_contents = {
+ "start": 369410,
+ "end": 369420,
+ "jobs": [
+ {
+ "rev": 369411,
+ "status": "bad",
+ "link": "https://some_tryjob_link.com",
+ "buildbucket_id": 1200,
+ "cl": 123,
+ "extra_cls": None,
+ "options": None,
+ "builder": ["some-builder-tryjob"],
+ }
+ ],
+ }
- # Verify the exception is raised when the modify a tryjob option does not
- # exist.
- with self.assertRaises(ValueError) as err:
- modify_a_tryjob.PerformTryjobModification(
- revision_to_modify, 'remove_link', temp_json_file,
- args_output.extra_change_lists, args_output.options,
- args_output.builders, args_output.chroot_path, args_output.verbose)
+ tryjob_result = [
+ {"link": "https://some_new_tryjob_link.com", "buildbucket_id": 20}
+ ]
+
+ mock_run_tryjob.return_value = tryjob_result
+
+ # Create a temporary .JSON file to simulate a .JSON file that has bisection
+ # contents.
+ with test_helpers.CreateTemporaryJsonFile() as temp_json_file:
+ with open(temp_json_file, "w") as f:
+ test_helpers.WritePrettyJsonFile(bisect_test_contents, f)
+
+ revision_to_modify = 369411
+
+ args_output = test_helpers.ArgsOutputTest()
+ args_output.builders = None
+ args_output.options = None
+
+ modify_a_tryjob.PerformTryjobModification(
+ revision_to_modify,
+ modify_a_tryjob.ModifyTryjob.RELAUNCH,
+ temp_json_file,
+ args_output.extra_change_lists,
+ args_output.options,
+ args_output.builders,
+ args_output.chroot_path,
+ args_output.verbose,
+ )
+
+ # Verify that the tryjob's information was updated after submtting the
+ # tryjob.
+ with open(temp_json_file) as status_file:
+ bisect_contents = json.load(status_file)
+
+ expected_file_contents = {
+ "start": 369410,
+ "end": 369420,
+ "jobs": [
+ {
+ "rev": 369411,
+ "status": "pending",
+ "link": "https://some_new_tryjob_link.com",
+ "buildbucket_id": 20,
+ "cl": 123,
+ "extra_cls": None,
+ "options": None,
+ "builder": ["some-builder-tryjob"],
+ }
+ ],
+ }
+
+ self.assertDictEqual(bisect_contents, expected_file_contents)
+
+ mock_find_tryjob_index.assert_called_once()
+
+ mock_run_tryjob.assert_called_once()
+
+ # Simulate the behavior of `FindTryjobIndex()` when the index of the tryjob
+ # was found.
+ @mock.patch.object(update_tryjob_status, "FindTryjobIndex", return_value=0)
+ def testAddingTryjobThatAlreadyExists(self, mock_find_tryjob_index):
+ bisect_test_contents = {
+ "start": 369410,
+ "end": 369420,
+ "jobs": [
+ {"rev": 369411, "status": "bad", "builder": ["some-builder"]}
+ ],
+ }
- self.assertEqual(
- str(err.exception),
- 'Invalid "modify_tryjob" option provided: remove_link')
+ # Create a temporary .JSON file to simulate a .JSON file that has bisection
+ # contents.
+ with test_helpers.CreateTemporaryJsonFile() as temp_json_file:
+ with open(temp_json_file, "w") as f:
+ test_helpers.WritePrettyJsonFile(bisect_test_contents, f)
+
+ revision_to_add = 369411
+
+ # Index of the tryjob in 'jobs' list.
+ tryjob_index = 0
+
+ args_output = test_helpers.ArgsOutputTest()
+ args_output.options = None
+
+ # Verify the exception is raised when the tryjob that is going to added
+ # already exists in the status file (found its index).
+ with self.assertRaises(ValueError) as err:
+ modify_a_tryjob.PerformTryjobModification(
+ revision_to_add,
+ modify_a_tryjob.ModifyTryjob.ADD,
+ temp_json_file,
+ args_output.extra_change_lists,
+ args_output.options,
+ args_output.builders,
+ args_output.chroot_path,
+ args_output.verbose,
+ )
+
+ self.assertEqual(
+ str(err.exception),
+ "Tryjob already exists (index is %d) in %s."
+ % (tryjob_index, temp_json_file),
+ )
+
+ mock_find_tryjob_index.assert_called_once()
+
+ # Simulate the behavior of `FindTryjobIndex()` when the tryjob was not found.
+ @mock.patch.object(
+ update_tryjob_status, "FindTryjobIndex", return_value=None
+ )
+ def testSuccessfullyDidNotAddTryjobOutsideOfBisectionBounds(
+ self, mock_find_tryjob_index
+ ):
+
+ bisect_test_contents = {
+ "start": 369410,
+ "end": 369420,
+ "jobs": [{"rev": 369411, "status": "bad"}],
+ }
- mock_find_tryjob_index.assert_called_once()
+ # Create a temporary .JSON file to simulate a .JSON file that has bisection
+ # contents.
+ with test_helpers.CreateTemporaryJsonFile() as temp_json_file:
+ with open(temp_json_file, "w") as f:
+ test_helpers.WritePrettyJsonFile(bisect_test_contents, f)
+
+ # Add a revision that is outside of 'start' and 'end'.
+ revision_to_add = 369450
+
+ args_output = test_helpers.ArgsOutputTest()
+ args_output.options = None
+
+ # Verify the exception is raised when adding a tryjob that does not exist
+ # and is not within 'start' and 'end'.
+ with self.assertRaises(ValueError) as err:
+ modify_a_tryjob.PerformTryjobModification(
+ revision_to_add,
+ modify_a_tryjob.ModifyTryjob.ADD,
+ temp_json_file,
+ args_output.extra_change_lists,
+ args_output.options,
+ args_output.builders,
+ args_output.chroot_path,
+ args_output.verbose,
+ )
+
+ self.assertEqual(
+ str(err.exception),
+ "Failed to add tryjob to %s" % temp_json_file,
+ )
+
+ mock_find_tryjob_index.assert_called_once()
+
+ # Simulate the behavior of `AddTryjob()` when successfully submitted the
+ # tryjob and constructed the tryjob information (a dictionary).
+ @mock.patch.object(modify_a_tryjob, "AddTryjob")
+ # Simulate the behavior of `GetLLVMHashAndVersionFromSVNOption()` when
+ # successfully retrieved the git hash of the revision to launch a tryjob for.
+ @mock.patch.object(
+ get_llvm_hash,
+ "GetLLVMHashAndVersionFromSVNOption",
+ return_value=("a123testhash1", 369418),
+ )
+ # Simulate the behavior of `FindTryjobIndex()` when the tryjob was not found.
+ @mock.patch.object(
+ update_tryjob_status, "FindTryjobIndex", return_value=None
+ )
+ def testSuccessfullyAddedTryjob(
+ self, mock_find_tryjob_index, mock_get_llvm_hash, mock_add_tryjob
+ ):
+
+ bisect_test_contents = {
+ "start": 369410,
+ "end": 369420,
+ "jobs": [{"rev": 369411, "status": "bad"}],
+ }
+ # Create a temporary .JSON file to simulate a .JSON file that has bisection
+ # contents.
+ with test_helpers.CreateTemporaryJsonFile() as temp_json_file:
+ with open(temp_json_file, "w") as f:
+ test_helpers.WritePrettyJsonFile(bisect_test_contents, f)
+
+ # Add a revision that is outside of 'start' and 'end'.
+ revision_to_add = 369418
+
+ args_output = test_helpers.ArgsOutputTest()
+ args_output.options = None
+
+ new_tryjob_info = {
+ "rev": revision_to_add,
+ "status": "pending",
+ "options": args_output.options,
+ "extra_cls": args_output.extra_change_lists,
+ "builder": args_output.builders,
+ }
+
+ mock_add_tryjob.return_value = new_tryjob_info
+
+ modify_a_tryjob.PerformTryjobModification(
+ revision_to_add,
+ modify_a_tryjob.ModifyTryjob.ADD,
+ temp_json_file,
+ args_output.extra_change_lists,
+ args_output.options,
+ args_output.builders,
+ args_output.chroot_path,
+ args_output.verbose,
+ )
+
+ # Verify that the tryjob was added to the status file.
+ with open(temp_json_file) as status_file:
+ bisect_contents = json.load(status_file)
+
+ expected_file_contents = {
+ "start": 369410,
+ "end": 369420,
+ "jobs": [{"rev": 369411, "status": "bad"}, new_tryjob_info],
+ }
+
+ self.assertDictEqual(bisect_contents, expected_file_contents)
+
+ mock_find_tryjob_index.assert_called_once()
+
+ mock_get_llvm_hash.assert_called_once_with(revision_to_add)
+
+ mock_add_tryjob.assert_called_once()
+
+ # Simulate the behavior of `FindTryjobIndex()` when the tryjob was found.
+ @mock.patch.object(update_tryjob_status, "FindTryjobIndex", return_value=0)
+ def testModifyATryjobOptionDoesNotExist(self, mock_find_tryjob_index):
+ bisect_test_contents = {
+ "start": 369410,
+ "end": 369420,
+ "jobs": [{"rev": 369414, "status": "bad"}],
+ }
-if __name__ == '__main__':
- unittest.main()
+ # Create a temporary .JSON file to simulate a .JSON file that has bisection
+ # contents.
+ with test_helpers.CreateTemporaryJsonFile() as temp_json_file:
+ with open(temp_json_file, "w") as f:
+ test_helpers.WritePrettyJsonFile(bisect_test_contents, f)
+
+ # Add a revision that is outside of 'start' and 'end'.
+ revision_to_modify = 369414
+
+ args_output = test_helpers.ArgsOutputTest()
+ args_output.builders = None
+ args_output.options = None
+
+ # Verify the exception is raised when the modify a tryjob option does not
+ # exist.
+ with self.assertRaises(ValueError) as err:
+ modify_a_tryjob.PerformTryjobModification(
+ revision_to_modify,
+ "remove_link",
+ temp_json_file,
+ args_output.extra_change_lists,
+ args_output.options,
+ args_output.builders,
+ args_output.chroot_path,
+ args_output.verbose,
+ )
+
+ self.assertEqual(
+ str(err.exception),
+ 'Invalid "modify_tryjob" option provided: remove_link',
+ )
+
+ mock_find_tryjob_index.assert_called_once()
+
+
+if __name__ == "__main__":
+ unittest.main()