|
@@ -0,0 +1,96 @@
|
|
|
+#!/usr/bin/env vpython3
|
|
|
+# Copyright 2020 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 git_migrate_default_branch.py."""
|
|
|
+
|
|
|
+import collections
|
|
|
+import os
|
|
|
+import sys
|
|
|
+import unittest
|
|
|
+
|
|
|
+if sys.version_info.major == 2:
|
|
|
+ import mock
|
|
|
+else:
|
|
|
+ from unittest import mock
|
|
|
+
|
|
|
+sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
|
|
|
+
|
|
|
+import git_migrate_default_branch
|
|
|
+
|
|
|
+
|
|
|
+class CMDFormatTestCase(unittest.TestCase):
|
|
|
+ def setUp(self):
|
|
|
+ self.addCleanup(mock.patch.stopall)
|
|
|
+
|
|
|
+ def test_no_remote(self):
|
|
|
+ def RunMock(*args):
|
|
|
+ if args[0] == 'remote':
|
|
|
+ return ''
|
|
|
+ self.fail('did not expect such run git command: %s' % args[0])
|
|
|
+
|
|
|
+ mock.patch('git_migrate_default_branch.git_common.run', RunMock).start()
|
|
|
+ with self.assertRaisesRegexp(RuntimeError, 'Could not find any remote'):
|
|
|
+ git_migrate_default_branch.main()
|
|
|
+
|
|
|
+ def test_migration_not_ready(self):
|
|
|
+ def RunMock(*args):
|
|
|
+ if args[0] == 'remote':
|
|
|
+ return 'origin\ngerrit'
|
|
|
+ raise Exception('Did not expect such run git command: %s' % args[0])
|
|
|
+
|
|
|
+ mock.patch('git_migrate_default_branch.git_common.run', RunMock).start()
|
|
|
+ mock.patch('git_migrate_default_branch.git_common.repo_root',
|
|
|
+ return_value='.').start()
|
|
|
+ mock.patch('git_migrate_default_branch.scm.GIT.GetConfig',
|
|
|
+ return_value='https://chromium.googlesource.com').start()
|
|
|
+ mock.patch('git_migrate_default_branch.gerrit_util.GetProjectHead',
|
|
|
+ return_value=None).start()
|
|
|
+ with self.assertRaisesRegexp(RuntimeError, 'not migrated yet'):
|
|
|
+ git_migrate_default_branch.main()
|
|
|
+
|
|
|
+ def test_migration_no_master(self):
|
|
|
+ def RunMock(*args):
|
|
|
+ if args[0] == 'remote':
|
|
|
+ return 'origin\ngerrit'
|
|
|
+ elif args[0] == 'fetch':
|
|
|
+ return
|
|
|
+ elif args[0] == 'branch':
|
|
|
+ return
|
|
|
+ raise Exception('Did not expect such run git command: %s' % args[0])
|
|
|
+
|
|
|
+ mock_runs = mock.patch('git_migrate_default_branch.git_common.run',
|
|
|
+ side_effect=RunMock).start()
|
|
|
+ mock.patch('git_migrate_default_branch.git_common.repo_root',
|
|
|
+ return_value='.').start()
|
|
|
+ mock.patch('git_migrate_default_branch.scm.GIT.GetConfig',
|
|
|
+ return_value='https://chromium.googlesource.com').start()
|
|
|
+ mock.patch('git_migrate_default_branch.gerrit_util.GetProjectHead',
|
|
|
+ return_value='refs/heads/main').start()
|
|
|
+
|
|
|
+ BranchesInfo = collections.namedtuple('BranchesInfo',
|
|
|
+ 'hash upstream commits behind')
|
|
|
+ branches = {
|
|
|
+ '': None, # always returned
|
|
|
+ 'master': BranchesInfo('0000', 'origin/master', '0', '0'),
|
|
|
+ 'feature': BranchesInfo('0000', 'master', '0', '0'),
|
|
|
+ 'another_feature': BranchesInfo('0000', 'feature', '0', '0'),
|
|
|
+ 'remote_feature': BranchesInfo('0000', 'origin/master', '0', '0'),
|
|
|
+ }
|
|
|
+ mock.patch('git_migrate_default_branch.git_common.get_branches_info',
|
|
|
+ return_value=branches).start()
|
|
|
+ mock_merge_base = mock.patch(
|
|
|
+ 'git_migrate_default_branch.git_common.remove_merge_base',
|
|
|
+ return_value=branches).start()
|
|
|
+
|
|
|
+ git_migrate_default_branch.main()
|
|
|
+ mock_merge_base.assert_any_call('feature')
|
|
|
+ mock_merge_base.assert_any_call('remote_feature')
|
|
|
+ mock_runs.assert_any_call('branch', '-m', 'master', 'main')
|
|
|
+ mock_runs.assert_any_call('branch', '--set-upstream-to', 'main', 'feature')
|
|
|
+ mock_runs.assert_any_call('branch', '--set-upstream-to', 'origin/main',
|
|
|
+ 'remote_feature')
|
|
|
+
|
|
|
+
|
|
|
+if __name__ == '__main__':
|
|
|
+ unittest.main()
|