diff options
Diffstat (limited to 'llvm_tools/git_unittest.py')
-rwxr-xr-x | llvm_tools/git_unittest.py | 261 |
1 files changed, 139 insertions, 122 deletions
diff --git a/llvm_tools/git_unittest.py b/llvm_tools/git_unittest.py index 47927716..ce21e6c9 100755 --- a/llvm_tools/git_unittest.py +++ b/llvm_tools/git_unittest.py @@ -1,12 +1,11 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -# Copyright 2020 The Chromium OS Authors. All rights reserved. +# Copyright 2020 The ChromiumOS Authors # Use of this source code is governed by a BSD-style license that can be # found in the LICENSE file. """Unit tests for git helper functions.""" -from __future__ import print_function import os import subprocess @@ -16,130 +15,148 @@ import unittest.mock as mock import git + # These are unittests; protected access is OK to a point. # pylint: disable=protected-access class HelperFunctionsTest(unittest.TestCase): - """Test class for updating LLVM hashes of packages.""" - - @mock.patch.object(os.path, 'isdir', return_value=False) - def testFailedToCreateBranchForInvalidDirectoryPath(self, mock_isdir): - path_to_repo = '/invalid/path/to/repo' - branch = 'branch-name' - - # Verify the exception is raised when provided an invalid directory path. - with self.assertRaises(ValueError) as err: - git.CreateBranch(path_to_repo, branch) - - self.assertEqual( - str(err.exception), - 'Invalid directory path provided: %s' % path_to_repo) - - mock_isdir.assert_called_once() - - @mock.patch.object(os.path, 'isdir', return_value=True) - @mock.patch.object(subprocess, 'check_output', return_value=None) - def testSuccessfullyCreatedBranch(self, mock_command_output, mock_isdir): - path_to_repo = '/path/to/repo' - branch = 'branch-name' - - git.CreateBranch(path_to_repo, branch) - - mock_isdir.assert_called_once_with(path_to_repo) - - self.assertEqual(mock_command_output.call_count, 2) - - @mock.patch.object(os.path, 'isdir', return_value=False) - def testFailedToDeleteBranchForInvalidDirectoryPath(self, mock_isdir): - path_to_repo = '/invalid/path/to/repo' - branch = 'branch-name' - - # Verify the exception is raised on an invalid repo path. - with self.assertRaises(ValueError) as err: - git.DeleteBranch(path_to_repo, branch) - - self.assertEqual( - str(err.exception), - 'Invalid directory path provided: %s' % path_to_repo) - - mock_isdir.assert_called_once() - - @mock.patch.object(os.path, 'isdir', return_value=True) - @mock.patch.object(subprocess, 'check_output', return_value=None) - def testSuccessfullyDeletedBranch(self, mock_command_output, mock_isdir): - path_to_repo = '/valid/path/to/repo' - branch = 'branch-name' - - git.DeleteBranch(path_to_repo, branch) - - mock_isdir.assert_called_once_with(path_to_repo) - - self.assertEqual(mock_command_output.call_count, 3) - - @mock.patch.object(os.path, 'isdir', return_value=False) - def testFailedToUploadChangesForInvalidDirectoryPath(self, mock_isdir): - path_to_repo = '/some/path/to/repo' - branch = 'update-LLVM_NEXT_HASH-a123testhash3' - commit_messages = ['Test message'] - - # Verify exception is raised when on an invalid repo path. - with self.assertRaises(ValueError) as err: - git.UploadChanges(path_to_repo, branch, commit_messages) - - self.assertEqual( - str(err.exception), 'Invalid path provided: %s' % path_to_repo) - - mock_isdir.assert_called_once() - - @mock.patch.object(os.path, 'isdir', return_value=True) - @mock.patch.object(subprocess, 'check_output') - @mock.patch.object(tempfile, 'NamedTemporaryFile') - def testSuccessfullyUploadedChangesForReview(self, mock_tempfile, - mock_commands, mock_isdir): - - path_to_repo = '/some/path/to/repo' - branch = 'branch-name' - commit_messages = ['Test message'] - mock_tempfile.return_value.__enter__.return_value.name = 'tmp' - - # A test CL generated by `repo upload`. - mock_commands.side_effect = [ - None, - ('remote: https://chromium-review.googlesource.' - 'com/c/chromiumos/overlays/chromiumos-overlay/' - '+/193147 Fix stdout') - ] - change_list = git.UploadChanges(path_to_repo, branch, commit_messages) - - self.assertEqual(change_list.cl_number, 193147) - - mock_isdir.assert_called_once_with(path_to_repo) - - expected_command = [ - 'git', 'commit', '-F', - mock_tempfile.return_value.__enter__.return_value.name - ] - self.assertEqual(mock_commands.call_args_list[0], - mock.call(expected_command, cwd=path_to_repo)) - - expected_cmd = [ - 'repo', 'upload', '--yes', '--ne', '--no-verify', - '--br=%s' % branch - ] - self.assertEqual( - mock_commands.call_args_list[1], - mock.call( - expected_cmd, - stderr=subprocess.STDOUT, - cwd=path_to_repo, - encoding='utf-8')) - - self.assertEqual( - change_list.url, - 'https://chromium-review.googlesource.com/c/chromiumos/overlays/' - 'chromiumos-overlay/+/193147') + """Test class for updating LLVM hashes of packages.""" + @mock.patch.object(os.path, "isdir", return_value=False) + def testFailedToCreateBranchForInvalidDirectoryPath(self, mock_isdir): + path_to_repo = "/invalid/path/to/repo" + branch = "branch-name" -if __name__ == '__main__': - unittest.main() + # Verify the exception is raised when provided an invalid directory path. + with self.assertRaises(ValueError) as err: + git.CreateBranch(path_to_repo, branch) + + self.assertEqual( + str(err.exception), + "Invalid directory path provided: %s" % path_to_repo, + ) + + mock_isdir.assert_called_once() + + @mock.patch.object(os.path, "isdir", return_value=True) + @mock.patch.object(subprocess, "check_output", return_value=None) + def testSuccessfullyCreatedBranch(self, mock_command_output, mock_isdir): + path_to_repo = "/path/to/repo" + branch = "branch-name" + + git.CreateBranch(path_to_repo, branch) + + mock_isdir.assert_called_once_with(path_to_repo) + + self.assertEqual(mock_command_output.call_count, 2) + + @mock.patch.object(os.path, "isdir", return_value=False) + def testFailedToDeleteBranchForInvalidDirectoryPath(self, mock_isdir): + path_to_repo = "/invalid/path/to/repo" + branch = "branch-name" + + # Verify the exception is raised on an invalid repo path. + with self.assertRaises(ValueError) as err: + git.DeleteBranch(path_to_repo, branch) + + self.assertEqual( + str(err.exception), + "Invalid directory path provided: %s" % path_to_repo, + ) + + mock_isdir.assert_called_once() + + @mock.patch.object(os.path, "isdir", return_value=True) + @mock.patch.object(subprocess, "check_output", return_value=None) + def testSuccessfullyDeletedBranch(self, mock_command_output, mock_isdir): + path_to_repo = "/valid/path/to/repo" + branch = "branch-name" + + git.DeleteBranch(path_to_repo, branch) + + mock_isdir.assert_called_once_with(path_to_repo) + + self.assertEqual(mock_command_output.call_count, 3) + + @mock.patch.object(os.path, "isdir", return_value=False) + def testFailedToUploadChangesForInvalidDirectoryPath(self, mock_isdir): + path_to_repo = "/some/path/to/repo" + branch = "update-LLVM_NEXT_HASH-a123testhash3" + commit_messages = ["Test message"] + + # Verify exception is raised when on an invalid repo path. + with self.assertRaises(ValueError) as err: + git.UploadChanges(path_to_repo, branch, commit_messages) + + self.assertEqual( + str(err.exception), "Invalid path provided: %s" % path_to_repo + ) + + mock_isdir.assert_called_once() + + @mock.patch.object(os.path, "isdir", return_value=True) + @mock.patch.object(subprocess, "check_output") + @mock.patch.object(tempfile, "NamedTemporaryFile") + def testSuccessfullyUploadedChangesForReview( + self, mock_tempfile, mock_commands, mock_isdir + ): + + path_to_repo = "/some/path/to/repo" + branch = "branch-name" + commit_messages = ["Test message"] + mock_tempfile.return_value.__enter__.return_value.name = "tmp" + + # A test CL generated by `repo upload`. + mock_commands.side_effect = [ + None, + ( + "remote: https://chromium-review.googlesource." + "com/c/chromiumos/overlays/chromiumos-overlay/" + "+/193147 Fix stdout" + ), + ] + change_list = git.UploadChanges(path_to_repo, branch, commit_messages) + + self.assertEqual(change_list.cl_number, 193147) + + mock_isdir.assert_called_once_with(path_to_repo) + + expected_command = [ + "git", + "commit", + "-F", + mock_tempfile.return_value.__enter__.return_value.name, + ] + self.assertEqual( + mock_commands.call_args_list[0], + mock.call(expected_command, cwd=path_to_repo), + ) + + expected_cmd = [ + "repo", + "upload", + "--yes", + "--ne", + "--no-verify", + "--br=%s" % branch, + ] + self.assertEqual( + mock_commands.call_args_list[1], + mock.call( + expected_cmd, + stderr=subprocess.STDOUT, + cwd=path_to_repo, + encoding="utf-8", + ), + ) + + self.assertEqual( + change_list.url, + "https://chromium-review.googlesource.com/c/chromiumos/overlays/" + "chromiumos-overlay/+/193147", + ) + + +if __name__ == "__main__": + unittest.main() |