diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-07-03 15:57:36 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-07-03 15:57:36 +0000 |
commit | 9086b037eb418807f99d5ce5825f285d6b427cc6 (patch) | |
tree | 77dc031614745bb406dbd90cea9a082a1b5cdd54 /llvm_tools/update_packages_and_run_tests_unittest.py | |
parent | 732a4eb324abf0d0f0c2bf539634a5e45ef5f56f (diff) | |
parent | 40214b48188358a80b7478bfff21d4814dd9177c (diff) | |
download | toolchain-utils-android14-mainline-adbd-release.tar.gz |
Snap for 10428683 from 40214b48188358a80b7478bfff21d4814dd9177c to mainline-adbd-releaseaml_adb_341520010aml_adb_341517070aml_adb_340912530aml_adb_340912350aml_adb_340912200aml_adb_340912000android14-mainline-adbd-release
Change-Id: I578fe57f97e55cbf6f5fc268be1f15035a00433b
Diffstat (limited to 'llvm_tools/update_packages_and_run_tests_unittest.py')
-rwxr-xr-x | llvm_tools/update_packages_and_run_tests_unittest.py | 933 |
1 files changed, 513 insertions, 420 deletions
diff --git a/llvm_tools/update_packages_and_run_tests_unittest.py b/llvm_tools/update_packages_and_run_tests_unittest.py index 11f2b7f8..fc65749f 100755 --- a/llvm_tools/update_packages_and_run_tests_unittest.py +++ b/llvm_tools/update_packages_and_run_tests_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. """Unittests for running tests after updating packages.""" -from __future__ import print_function import json import subprocess @@ -23,427 +22,521 @@ import update_packages_and_run_tests # Testing with tryjobs. class UpdatePackagesAndRunTryjobsTest(unittest.TestCase): - """Unittests when running tryjobs after updating packages.""" - - def testNoLastTestedFile(self): - self.assertEqual( - update_packages_and_run_tests.UnchangedSinceLastRun(None, {}), False) - - def testEmptyLastTestedFile(self): - with test_helpers.CreateTemporaryFile() as temp_file: - self.assertEqual( - update_packages_and_run_tests.UnchangedSinceLastRun(temp_file, {}), - False) - - def testLastTestedFileDoesNotExist(self): - # Simulate 'open()' on a lasted tested file that does not exist. - mock.mock_open(read_data='') - - self.assertEqual( - update_packages_and_run_tests.UnchangedSinceLastRun( - '/some/file/that/does/not/exist.txt', {}), False) - - def testMatchedLastTestedFile(self): - with test_helpers.CreateTemporaryFile() as last_tested_file: - arg_dict = { - 'svn_version': 1234, - 'ebuilds': [ - '/path/to/package1-r2.ebuild', - '/path/to/package2/package2-r3.ebuild' - ], - 'builders': [ - 'kevin-llvm-next-toolchain-tryjob', - 'eve-llvm-next-toolchain-tryjob' - ], - 'extra_cls': [10, 1], - 'tryjob_options': ['latest-toolchain', 'hwtest'] - } - - with open(last_tested_file, 'w') as f: - f.write(json.dumps(arg_dict, indent=2)) - - self.assertEqual( - update_packages_and_run_tests.UnchangedSinceLastRun( - last_tested_file, arg_dict), True) - - def testGetTryJobCommandWithNoExtraInformation(self): - change_list = 1234 - - builder = 'nocturne' - - expected_cmd = [ - 'cros', 'tryjob', '--yes', '--json', '-g', - '%d' % change_list, builder - ] - - self.assertEqual( - update_packages_and_run_tests.GetTryJobCommand(change_list, None, None, - builder), expected_cmd) - - def testGetTryJobCommandWithExtraInformation(self): - change_list = 4321 - extra_cls = [1000, 10] - options = ['option1', 'option2'] - builder = 'kevin' - - expected_cmd = [ - 'cros', - 'tryjob', - '--yes', - '--json', - '-g', - '%d' % change_list, - '-g', - '%d' % extra_cls[0], - '-g', - '%d' % extra_cls[1], - '--%s' % options[0], - '--%s' % options[1], - builder, - ] - - self.assertEqual( - update_packages_and_run_tests.GetTryJobCommand(change_list, extra_cls, - options, builder), - expected_cmd) - - @mock.patch.object( - update_packages_and_run_tests, - 'GetCurrentTimeInUTC', - return_value='2019-09-09') - @mock.patch.object(update_packages_and_run_tests, 'AddLinksToCL') - @mock.patch.object(subprocess, 'check_output') - def testSuccessfullySubmittedTryJob(self, mock_cmd, mock_add_links_to_cl, - mock_launch_time): - - expected_cmd = [ - 'cros', 'tryjob', '--yes', '--json', '-g', - '%d' % 900, '-g', - '%d' % 1200, '--some_option', 'builder1' - ] - - bb_id = '1234' - url = 'http://ci.chromium.org/b/%s' % bb_id - - mock_cmd.return_value = json.dumps([{'id': bb_id, 'url': url}]) - - chroot_path = '/some/path/to/chroot' - cl = 900 - extra_cls = [1200] - options = ['some_option'] - builders = ['builder1'] - - tests = update_packages_and_run_tests.RunTryJobs(cl, extra_cls, options, - builders, chroot_path) - - expected_tests = [{ - 'launch_time': mock_launch_time.return_value, - 'link': url, - 'buildbucket_id': int(bb_id), - 'extra_cls': extra_cls, - 'options': options, - 'builder': builders - }] - - self.assertEqual(tests, expected_tests) - - mock_cmd.assert_called_once_with( - expected_cmd, cwd=chroot_path, encoding='utf-8') - - mock_add_links_to_cl.assert_called_once() - - @mock.patch.object(update_packages_and_run_tests, 'AddLinksToCL') - @mock.patch.object(subprocess, 'check_output') - def testSuccessfullySubmittedRecipeBuilders(self, mock_cmd, - mock_add_links_to_cl): - - expected_cmd = [ - 'bb', 'add', '-json', '-cl', - 'crrev.com/c/%s' % 900, '-cl', - 'crrev.com/c/%s' % 1200, 'some_option', 'builder1' - ] - - bb_id = '1234' - create_time = '2020-04-18T00:03:53.978767Z' - - mock_cmd.return_value = json.dumps({'id': bb_id, 'createTime': create_time}) - - chroot_path = '/some/path/to/chroot' - cl = 900 - extra_cls = [1200] - options = ['some_option'] - builders = ['builder1'] - - tests = update_packages_and_run_tests.StartRecipeBuilders( - cl, extra_cls, options, builders, chroot_path) - - expected_tests = [{ - 'launch_time': create_time, - 'link': 'http://ci.chromium.org/b/%s' % bb_id, - 'buildbucket_id': bb_id, - 'extra_cls': extra_cls, - 'options': options, - 'builder': builders - }] - - self.assertEqual(tests, expected_tests) - - mock_cmd.assert_called_once_with( - expected_cmd, cwd=chroot_path, encoding='utf-8') - - mock_add_links_to_cl.assert_called_once() - - @mock.patch.object(subprocess, 'check_output', return_value=None) - def testSuccessfullyAddedTestLinkToCL(self, mock_exec_cmd): - chroot_path = '/abs/path/to/chroot' - - test_cl_number = 1000 - - tests = [{'link': 'https://some_tryjob_link.com'}] - - update_packages_and_run_tests.AddLinksToCL(tests, test_cl_number, - chroot_path) - - expected_gerrit_message = [ - '%s/chromite/bin/gerrit' % chroot_path, 'message', - str(test_cl_number), - 'Started the following tests:\n%s' % tests[0]['link'] - ] + """Unittests when running tryjobs after updating packages.""" + + def testNoLastTestedFile(self): + self.assertEqual( + update_packages_and_run_tests.UnchangedSinceLastRun(None, {}), False + ) + + def testEmptyLastTestedFile(self): + with test_helpers.CreateTemporaryFile() as temp_file: + self.assertEqual( + update_packages_and_run_tests.UnchangedSinceLastRun( + temp_file, {} + ), + False, + ) + + def testLastTestedFileDoesNotExist(self): + # Simulate 'open()' on a lasted tested file that does not exist. + mock.mock_open(read_data="") + + self.assertEqual( + update_packages_and_run_tests.UnchangedSinceLastRun( + "/some/file/that/does/not/exist.txt", {} + ), + False, + ) + + def testMatchedLastTestedFile(self): + with test_helpers.CreateTemporaryFile() as last_tested_file: + arg_dict = { + "svn_version": 1234, + "ebuilds": [ + "/path/to/package1-r2.ebuild", + "/path/to/package2/package2-r3.ebuild", + ], + "builders": [ + "kevin-llvm-next-toolchain-tryjob", + "eve-llvm-next-toolchain-tryjob", + ], + "extra_cls": [10, 1], + "tryjob_options": ["latest-toolchain", "hwtest"], + } + + with open(last_tested_file, "w") as f: + f.write(json.dumps(arg_dict, indent=2)) + + self.assertEqual( + update_packages_and_run_tests.UnchangedSinceLastRun( + last_tested_file, arg_dict + ), + True, + ) + + def testGetTryJobCommandWithNoExtraInformation(self): + change_list = 1234 + + builder = "nocturne" + + expected_cmd = [ + "cros", + "tryjob", + "--yes", + "--json", + "-g", + "%d" % change_list, + builder, + ] + + self.assertEqual( + update_packages_and_run_tests.GetTryJobCommand( + change_list, None, None, builder + ), + expected_cmd, + ) + + def testGetTryJobCommandWithExtraInformation(self): + change_list = 4321 + extra_cls = [1000, 10] + options = ["option1", "option2"] + builder = "kevin" + + expected_cmd = [ + "cros", + "tryjob", + "--yes", + "--json", + "-g", + "%d" % change_list, + "-g", + "%d" % extra_cls[0], + "-g", + "%d" % extra_cls[1], + "--%s" % options[0], + "--%s" % options[1], + builder, + ] + + self.assertEqual( + update_packages_and_run_tests.GetTryJobCommand( + change_list, extra_cls, options, builder + ), + expected_cmd, + ) + + @mock.patch.object( + update_packages_and_run_tests, + "GetCurrentTimeInUTC", + return_value="2019-09-09", + ) + @mock.patch.object(update_packages_and_run_tests, "AddLinksToCL") + @mock.patch.object(subprocess, "check_output") + def testSuccessfullySubmittedTryJob( + self, mock_cmd, mock_add_links_to_cl, mock_launch_time + ): + + expected_cmd = [ + "cros", + "tryjob", + "--yes", + "--json", + "-g", + "%d" % 900, + "-g", + "%d" % 1200, + "--some_option", + "builder1", + ] + + bb_id = "1234" + url = "http://ci.chromium.org/b/%s" % bb_id + + mock_cmd.return_value = json.dumps([{"id": bb_id, "url": url}]) + + chroot_path = "/some/path/to/chroot" + cl = 900 + extra_cls = [1200] + options = ["some_option"] + builders = ["builder1"] + + tests = update_packages_and_run_tests.RunTryJobs( + cl, extra_cls, options, builders, chroot_path + ) + + expected_tests = [ + { + "launch_time": mock_launch_time.return_value, + "link": url, + "buildbucket_id": int(bb_id), + "extra_cls": extra_cls, + "options": options, + "builder": builders, + } + ] + + self.assertEqual(tests, expected_tests) + + mock_cmd.assert_called_once_with( + expected_cmd, cwd=chroot_path, encoding="utf-8" + ) + + mock_add_links_to_cl.assert_called_once() + + @mock.patch.object(update_packages_and_run_tests, "AddLinksToCL") + @mock.patch.object(subprocess, "check_output") + def testSuccessfullySubmittedRecipeBuilders( + self, mock_cmd, mock_add_links_to_cl + ): + + expected_cmd = [ + "bb", + "add", + "-json", + "-cl", + "crrev.com/c/%s" % 900, + "-cl", + "crrev.com/c/%s" % 1200, + "some_option", + "builder1", + ] + + bb_id = "1234" + create_time = "2020-04-18T00:03:53.978767Z" + + mock_cmd.return_value = json.dumps( + {"id": bb_id, "createTime": create_time} + ) + + chroot_path = "/some/path/to/chroot" + cl = 900 + extra_cls = [1200] + options = ["some_option"] + builders = ["builder1"] + + tests = update_packages_and_run_tests.StartRecipeBuilders( + cl, extra_cls, options, builders, chroot_path + ) + + expected_tests = [ + { + "launch_time": create_time, + "link": "http://ci.chromium.org/b/%s" % bb_id, + "buildbucket_id": bb_id, + "extra_cls": extra_cls, + "options": options, + "builder": builders, + } + ] + + self.assertEqual(tests, expected_tests) + + mock_cmd.assert_called_once_with( + expected_cmd, cwd=chroot_path, encoding="utf-8" + ) + + mock_add_links_to_cl.assert_called_once() + + @mock.patch.object(subprocess, "check_output", return_value=None) + def testSuccessfullyAddedTestLinkToCL(self, mock_exec_cmd): + chroot_path = "/abs/path/to/chroot" + + test_cl_number = 1000 + + tests = [{"link": "https://some_tryjob_link.com"}] + + update_packages_and_run_tests.AddLinksToCL( + tests, test_cl_number, chroot_path + ) + + expected_gerrit_message = [ + "%s/chromite/bin/gerrit" % chroot_path, + "message", + str(test_cl_number), + "Started the following tests:\n%s" % tests[0]["link"], + ] + + mock_exec_cmd.assert_called_once_with(expected_gerrit_message) + + @mock.patch.object(update_packages_and_run_tests, "RunTryJobs") + @mock.patch.object(update_chromeos_llvm_hash, "UpdatePackages") + @mock.patch.object(update_packages_and_run_tests, "GetCommandLineArgs") + @mock.patch.object(get_llvm_hash, "GetLLVMHashAndVersionFromSVNOption") + @mock.patch.object(chroot, "VerifyOutsideChroot", return_value=True) + @mock.patch.object(chroot, "GetChrootEbuildPaths") + def testUpdatedLastTestedFileWithNewTestedRevision( + self, + mock_get_chroot_build_paths, + mock_outside_chroot, + mock_get_hash_and_version, + mock_get_commandline_args, + mock_update_packages, + mock_run_tryjobs, + ): + + # Create a temporary file to simulate the last tested file that contains a + # revision. + with test_helpers.CreateTemporaryFile() as last_tested_file: + builders = [ + "kevin-llvm-next-toolchain-tryjob", + "eve-llvm-next-toolchain-tryjob", + ] + extra_cls = [10, 1] + tryjob_options = ["latest-toolchain", "hwtest"] + ebuilds = [ + "/path/to/package1/package1-r2.ebuild", + "/path/to/package2/package2-r3.ebuild", + ] + + arg_dict = { + "svn_version": 100, + "ebuilds": ebuilds, + "builders": builders, + "extra_cls": extra_cls, + "tryjob_options": tryjob_options, + } + # Parepared last tested file + with open(last_tested_file, "w") as f: + json.dump(arg_dict, f, indent=2) + + # Call with a changed LLVM svn version + args_output = test_helpers.ArgsOutputTest() + args_output.is_llvm_next = True + args_output.extra_change_lists = extra_cls + args_output.last_tested = last_tested_file + args_output.reviewers = [] + + args_output.subparser_name = "tryjobs" + args_output.builders = builders + args_output.options = tryjob_options + + mock_get_commandline_args.return_value = args_output + + mock_get_chroot_build_paths.return_value = ebuilds + + mock_get_hash_and_version.return_value = ("a123testhash2", 200) + + mock_update_packages.return_value = git.CommitContents( + url="https://some_cl_url.com", cl_number=12345 + ) + + mock_run_tryjobs.return_value = [ + {"link": "https://some_tryjob_url.com", "buildbucket_id": 1234} + ] + + update_packages_and_run_tests.main() - mock_exec_cmd.assert_called_once_with(expected_gerrit_message) + # Verify that the lasted tested file has been updated to the new LLVM + # revision. + with open(last_tested_file) as f: + arg_dict = json.load(f) - @mock.patch.object(update_packages_and_run_tests, 'RunTryJobs') - @mock.patch.object(update_chromeos_llvm_hash, 'UpdatePackages') - @mock.patch.object(update_packages_and_run_tests, 'GetCommandLineArgs') - @mock.patch.object(get_llvm_hash, 'GetLLVMHashAndVersionFromSVNOption') - @mock.patch.object(chroot, 'VerifyOutsideChroot', return_value=True) - @mock.patch.object(chroot, 'GetChrootEbuildPaths') - def testUpdatedLastTestedFileWithNewTestedRevision( - self, mock_get_chroot_build_paths, mock_outside_chroot, - mock_get_hash_and_version, mock_get_commandline_args, - mock_update_packages, mock_run_tryjobs): + self.assertEqual(arg_dict["svn_version"], 200) + + mock_outside_chroot.assert_called_once() - # Create a temporary file to simulate the last tested file that contains a - # revision. - with test_helpers.CreateTemporaryFile() as last_tested_file: - builders = [ - 'kevin-llvm-next-toolchain-tryjob', 'eve-llvm-next-toolchain-tryjob' - ] - extra_cls = [10, 1] - tryjob_options = ['latest-toolchain', 'hwtest'] - ebuilds = [ - '/path/to/package1/package1-r2.ebuild', - '/path/to/package2/package2-r3.ebuild' - ] - - arg_dict = { - 'svn_version': 100, - 'ebuilds': ebuilds, - 'builders': builders, - 'extra_cls': extra_cls, - 'tryjob_options': tryjob_options - } - # Parepared last tested file - with open(last_tested_file, 'w') as f: - json.dump(arg_dict, f, indent=2) - - # Call with a changed LLVM svn version - args_output = test_helpers.ArgsOutputTest() - args_output.is_llvm_next = True - args_output.extra_change_lists = extra_cls - args_output.last_tested = last_tested_file - args_output.reviewers = [] - - args_output.subparser_name = 'tryjobs' - args_output.builders = builders - args_output.options = tryjob_options - - mock_get_commandline_args.return_value = args_output - - mock_get_chroot_build_paths.return_value = ebuilds - - mock_get_hash_and_version.return_value = ('a123testhash2', 200) - - mock_update_packages.return_value = git.CommitContents( - url='https://some_cl_url.com', cl_number=12345) - - mock_run_tryjobs.return_value = [{ - 'link': 'https://some_tryjob_url.com', - 'buildbucket_id': 1234 - }] - - update_packages_and_run_tests.main() - - # Verify that the lasted tested file has been updated to the new LLVM - # revision. - with open(last_tested_file) as f: - arg_dict = json.load(f) - - self.assertEqual(arg_dict['svn_version'], 200) - - mock_outside_chroot.assert_called_once() - - mock_get_commandline_args.assert_called_once() - - mock_get_hash_and_version.assert_called_once() - - mock_run_tryjobs.assert_called_once() - - mock_update_packages.assert_called_once() + mock_get_commandline_args.assert_called_once() + + mock_get_hash_and_version.assert_called_once() + + mock_run_tryjobs.assert_called_once() + + mock_update_packages.assert_called_once() class UpdatePackagesAndRunTestCQTest(unittest.TestCase): - """Unittests for CQ dry run after updating packages.""" - - def testGetCQDependString(self): - test_no_changelists = [] - test_single_changelist = [1234] - test_multiple_changelists = [1234, 5678] - - self.assertIsNone( - update_packages_and_run_tests.GetCQDependString(test_no_changelists)) - - self.assertEqual( - update_packages_and_run_tests.GetCQDependString(test_single_changelist), - '\nCq-Depend: chromium:1234') - - self.assertEqual( - update_packages_and_run_tests.GetCQDependString( - test_multiple_changelists), - '\nCq-Depend: chromium:1234, chromium:5678') - - def testGetCQIncludeTrybotsString(self): - test_no_trybot = None - test_valid_trybot = 'llvm-next' - test_invalid_trybot = 'invalid-name' - - self.assertIsNone( - update_packages_and_run_tests.GetCQIncludeTrybotsString(test_no_trybot)) - - self.assertEqual( - update_packages_and_run_tests.GetCQIncludeTrybotsString( - test_valid_trybot), - '\nCq-Include-Trybots:chromeos/cq:cq-llvm-next-orchestrator') - - with self.assertRaises(ValueError) as context: - update_packages_and_run_tests.GetCQIncludeTrybotsString( - test_invalid_trybot) - - self.assertIn('is not a valid llvm trybot', str(context.exception)) - - @mock.patch.object(subprocess, 'check_output', return_value=None) - def testStartCQDryRunNoDeps(self, mock_exec_cmd): - chroot_path = '/abs/path/to/chroot' - test_cl_number = 1000 - - # test with no deps cls. - extra_cls = [] - update_packages_and_run_tests.StartCQDryRun(test_cl_number, extra_cls, - chroot_path) - - expected_gerrit_message = [ - '%s/chromite/bin/gerrit' % chroot_path, 'label-cq', - str(test_cl_number), '1' - ] - - mock_exec_cmd.assert_called_once_with(expected_gerrit_message) - - # Mock ExecCommandAndCaptureOutput for the gerrit command execution. - @mock.patch.object(subprocess, 'check_output', return_value=None) - # test with a single deps cl. - def testStartCQDryRunSingleDep(self, mock_exec_cmd): - chroot_path = '/abs/path/to/chroot' - test_cl_number = 1000 - - extra_cls = [2000] - update_packages_and_run_tests.StartCQDryRun(test_cl_number, extra_cls, - chroot_path) - - expected_gerrit_cmd_1 = [ - '%s/chromite/bin/gerrit' % chroot_path, 'label-cq', - str(test_cl_number), '1' - ] - expected_gerrit_cmd_2 = [ - '%s/chromite/bin/gerrit' % chroot_path, 'label-cq', - str(2000), '1' - ] - - self.assertEqual(mock_exec_cmd.call_count, 2) - self.assertEqual(mock_exec_cmd.call_args_list[0], - mock.call(expected_gerrit_cmd_1)) - self.assertEqual(mock_exec_cmd.call_args_list[1], - mock.call(expected_gerrit_cmd_2)) - - # Mock ExecCommandAndCaptureOutput for the gerrit command execution. - @mock.patch.object(subprocess, 'check_output', return_value=None) - def testStartCQDryRunMultipleDep(self, mock_exec_cmd): - chroot_path = '/abs/path/to/chroot' - test_cl_number = 1000 - - # test with multiple deps cls. - extra_cls = [3000, 4000] - update_packages_and_run_tests.StartCQDryRun(test_cl_number, extra_cls, - chroot_path) - - expected_gerrit_cmd_1 = [ - '%s/chromite/bin/gerrit' % chroot_path, 'label-cq', - str(test_cl_number), '1' - ] - expected_gerrit_cmd_2 = [ - '%s/chromite/bin/gerrit' % chroot_path, 'label-cq', - str(3000), '1' - ] - expected_gerrit_cmd_3 = [ - '%s/chromite/bin/gerrit' % chroot_path, 'label-cq', - str(4000), '1' - ] - - self.assertEqual(mock_exec_cmd.call_count, 3) - self.assertEqual(mock_exec_cmd.call_args_list[0], - mock.call(expected_gerrit_cmd_1)) - self.assertEqual(mock_exec_cmd.call_args_list[1], - mock.call(expected_gerrit_cmd_2)) - self.assertEqual(mock_exec_cmd.call_args_list[2], - mock.call(expected_gerrit_cmd_3)) - - # Mock ExecCommandAndCaptureOutput for the gerrit command execution. - @mock.patch.object(subprocess, 'check_output', return_value=None) - # test with no reviewers. - def testAddReviewersNone(self, mock_exec_cmd): - chroot_path = '/abs/path/to/chroot' - reviewers = [] - test_cl_number = 1000 - - update_packages_and_run_tests.AddReviewers(test_cl_number, reviewers, - chroot_path) - self.assertTrue(mock_exec_cmd.not_called) - - # Mock ExecCommandAndCaptureOutput for the gerrit command execution. - @mock.patch.object(subprocess, 'check_output', return_value=None) - # test with multiple reviewers. - def testAddReviewersMultiple(self, mock_exec_cmd): - chroot_path = '/abs/path/to/chroot' - reviewers = ['none1@chromium.org', 'none2@chromium.org'] - test_cl_number = 1000 - - update_packages_and_run_tests.AddReviewers(test_cl_number, reviewers, - chroot_path) - - expected_gerrit_cmd_1 = [ - '%s/chromite/bin/gerrit' % chroot_path, 'reviewers', - str(test_cl_number), 'none1@chromium.org' - ] - expected_gerrit_cmd_2 = [ - '%s/chromite/bin/gerrit' % chroot_path, 'reviewers', - str(test_cl_number), 'none2@chromium.org' - ] - - self.assertEqual(mock_exec_cmd.call_count, 2) - self.assertEqual(mock_exec_cmd.call_args_list[0], - mock.call(expected_gerrit_cmd_1)) - self.assertEqual(mock_exec_cmd.call_args_list[1], - mock.call(expected_gerrit_cmd_2)) - - -if __name__ == '__main__': - unittest.main() + """Unittests for CQ dry run after updating packages.""" + + def testGetCQDependString(self): + test_no_changelists = [] + test_single_changelist = [1234] + test_multiple_changelists = [1234, 5678] + + self.assertIsNone( + update_packages_and_run_tests.GetCQDependString(test_no_changelists) + ) + + self.assertEqual( + update_packages_and_run_tests.GetCQDependString( + test_single_changelist + ), + "\nCq-Depend: chromium:1234", + ) + + self.assertEqual( + update_packages_and_run_tests.GetCQDependString( + test_multiple_changelists + ), + "\nCq-Depend: chromium:1234, chromium:5678", + ) + + def testGetCQIncludeTrybotsString(self): + test_no_trybot = None + test_valid_trybot = "llvm-next" + test_invalid_trybot = "invalid-name" + + self.assertIsNone( + update_packages_and_run_tests.GetCQIncludeTrybotsString( + test_no_trybot + ) + ) + + self.assertEqual( + update_packages_and_run_tests.GetCQIncludeTrybotsString( + test_valid_trybot + ), + "\nCq-Include-Trybots:chromeos/cq:cq-llvm-next-orchestrator", + ) + + with self.assertRaises(ValueError) as context: + update_packages_and_run_tests.GetCQIncludeTrybotsString( + test_invalid_trybot + ) + + self.assertIn("is not a valid llvm trybot", str(context.exception)) + + @mock.patch.object(subprocess, "check_output", return_value=None) + def testStartCQDryRunNoDeps(self, mock_exec_cmd): + chroot_path = "/abs/path/to/chroot" + test_cl_number = 1000 + + # test with no deps cls. + extra_cls = [] + update_packages_and_run_tests.StartCQDryRun( + test_cl_number, extra_cls, chroot_path + ) + + expected_gerrit_message = [ + "%s/chromite/bin/gerrit" % chroot_path, + "label-cq", + str(test_cl_number), + "1", + ] + + mock_exec_cmd.assert_called_once_with(expected_gerrit_message) + + # Mock ExecCommandAndCaptureOutput for the gerrit command execution. + @mock.patch.object(subprocess, "check_output", return_value=None) + # test with a single deps cl. + def testStartCQDryRunSingleDep(self, mock_exec_cmd): + chroot_path = "/abs/path/to/chroot" + test_cl_number = 1000 + + extra_cls = [2000] + update_packages_and_run_tests.StartCQDryRun( + test_cl_number, extra_cls, chroot_path + ) + + expected_gerrit_cmd_1 = [ + "%s/chromite/bin/gerrit" % chroot_path, + "label-cq", + str(test_cl_number), + "1", + ] + expected_gerrit_cmd_2 = [ + "%s/chromite/bin/gerrit" % chroot_path, + "label-cq", + str(2000), + "1", + ] + + self.assertEqual(mock_exec_cmd.call_count, 2) + self.assertEqual( + mock_exec_cmd.call_args_list[0], mock.call(expected_gerrit_cmd_1) + ) + self.assertEqual( + mock_exec_cmd.call_args_list[1], mock.call(expected_gerrit_cmd_2) + ) + + # Mock ExecCommandAndCaptureOutput for the gerrit command execution. + @mock.patch.object(subprocess, "check_output", return_value=None) + def testStartCQDryRunMultipleDep(self, mock_exec_cmd): + chroot_path = "/abs/path/to/chroot" + test_cl_number = 1000 + + # test with multiple deps cls. + extra_cls = [3000, 4000] + update_packages_and_run_tests.StartCQDryRun( + test_cl_number, extra_cls, chroot_path + ) + + expected_gerrit_cmd_1 = [ + "%s/chromite/bin/gerrit" % chroot_path, + "label-cq", + str(test_cl_number), + "1", + ] + expected_gerrit_cmd_2 = [ + "%s/chromite/bin/gerrit" % chroot_path, + "label-cq", + str(3000), + "1", + ] + expected_gerrit_cmd_3 = [ + "%s/chromite/bin/gerrit" % chroot_path, + "label-cq", + str(4000), + "1", + ] + + self.assertEqual(mock_exec_cmd.call_count, 3) + self.assertEqual( + mock_exec_cmd.call_args_list[0], mock.call(expected_gerrit_cmd_1) + ) + self.assertEqual( + mock_exec_cmd.call_args_list[1], mock.call(expected_gerrit_cmd_2) + ) + self.assertEqual( + mock_exec_cmd.call_args_list[2], mock.call(expected_gerrit_cmd_3) + ) + + # Mock ExecCommandAndCaptureOutput for the gerrit command execution. + @mock.patch.object(subprocess, "check_output", return_value=None) + # test with no reviewers. + def testAddReviewersNone(self, mock_exec_cmd): + chroot_path = "/abs/path/to/chroot" + reviewers = [] + test_cl_number = 1000 + + update_packages_and_run_tests.AddReviewers( + test_cl_number, reviewers, chroot_path + ) + self.assertTrue(mock_exec_cmd.not_called) + + # Mock ExecCommandAndCaptureOutput for the gerrit command execution. + @mock.patch.object(subprocess, "check_output", return_value=None) + # test with multiple reviewers. + def testAddReviewersMultiple(self, mock_exec_cmd): + chroot_path = "/abs/path/to/chroot" + reviewers = ["none1@chromium.org", "none2@chromium.org"] + test_cl_number = 1000 + + update_packages_and_run_tests.AddReviewers( + test_cl_number, reviewers, chroot_path + ) + + expected_gerrit_cmd_1 = [ + "%s/chromite/bin/gerrit" % chroot_path, + "reviewers", + str(test_cl_number), + "none1@chromium.org", + ] + expected_gerrit_cmd_2 = [ + "%s/chromite/bin/gerrit" % chroot_path, + "reviewers", + str(test_cl_number), + "none2@chromium.org", + ] + + self.assertEqual(mock_exec_cmd.call_count, 2) + self.assertEqual( + mock_exec_cmd.call_args_list[0], mock.call(expected_gerrit_cmd_1) + ) + self.assertEqual( + mock_exec_cmd.call_args_list[1], mock.call(expected_gerrit_cmd_2) + ) + + +if __name__ == "__main__": + unittest.main() |