Browse Source

depot_tools: Make gclient Python3 compatible.

Bug: 984182
Change-Id: Idc38678acbfca9cc6b89d77db28fdc24784f2b7d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/1753742
Commit-Queue: Edward Lemur <ehmaldonado@google.com>
Reviewed-by: Robbie Iannucci <iannucci@chromium.org>
Edward Lemur 6 years ago
parent
commit
26a8b9f356
6 changed files with 100 additions and 83 deletions
  1. 1 1
      gclient.py
  2. 1 1
      gclient_scm.py
  3. 3 0
      gclient_utils.py
  4. 5 5
      testing_support/fake_repos.py
  5. 43 33
      tests/gclient_smoketest.py
  6. 47 43
      tests/gclient_test.py

+ 1 - 1
gclient.py

@@ -1980,7 +1980,7 @@ class CipdDependency(Dependency):
       ])
       for p in sorted(
           self._cipd_root.packages(self._cipd_subdir),
-          cmp=lambda x, y: cmp(x.name, y.name)):
+          key=lambda x: x.name):
         s.extend([
             '      {',
             '        "package": "%s",' % escape_cipd_var(p.name),

+ 1 - 1
gclient_scm.py

@@ -318,7 +318,7 @@ class GitWrapper(SCMWrapper):
       files = self._Capture(
           ['-c', 'core.quotePath=false', 'ls-files']).splitlines()
       file_list.extend(
-          [os.path.join(self.checkout_path, f.decode()) for f in files])
+          [os.path.join(self.checkout_path, f) for f in files])
 
   def _DisableHooks(self):
     hook_dir = os.path.join(self.checkout_path, '.git', 'hooks')

+ 3 - 0
gclient_utils.py

@@ -165,6 +165,9 @@ class PrintableObject(object):
 
 
 def FileRead(filename, mode='rU'):
+  # On Python 3 newlines are converted to '\n' by default and 'U' is deprecated.
+  if mode == 'rU' and sys.version_info.major == 3:
+    mode = 'r'
   with open(filename, mode=mode) as f:
     # codecs.open() has different behavior than open() on python 2.6 so use
     # open() and decode manually.

+ 5 - 5
testing_support/fake_repos.py

@@ -46,7 +46,7 @@ def read_tree(tree_root):
     for f in [join(root, f) for f in files if not f.startswith('.')]:
       filepath = f[len(tree_root) + 1:].replace(os.sep, '/')
       assert len(filepath), f
-      tree[filepath] = open(join(root, f), 'rU').read()
+      tree[filepath] = gclient_utils.FileRead(join(root, f))
   return tree
 
 
@@ -931,7 +931,7 @@ class FakeReposTestBase(trial_dir.TestCase):
 
   def checkString(self, expected, result, msg=None):
     """Prints the diffs to ease debugging."""
-    self.assertEquals(expected.splitlines(), result.splitlines(), msg)
+    self.assertEqual(expected.splitlines(), result.splitlines(), msg)
     if expected != result:
       # Strip the begining
       while expected and result and expected[0] == result[0]:
@@ -940,13 +940,13 @@ class FakeReposTestBase(trial_dir.TestCase):
       # The exception trace makes it hard to read so dump it too.
       if '\n' in result:
         print(result)
-    self.assertEquals(expected, result, msg)
+    self.assertEqual(expected, result, msg)
 
   def check(self, expected, results):
     """Checks stdout, stderr, returncode."""
     self.checkString(expected[0], results[0])
     self.checkString(expected[1], results[1])
-    self.assertEquals(expected[2], results[2])
+    self.assertEqual(expected[2], results[2])
 
   def assertTree(self, tree, tree_root=None):
     """Diff the checkout tree with a dict."""
@@ -958,7 +958,7 @@ class FakeReposTestBase(trial_dir.TestCase):
       logging.error('Actual %s\n%s' % (tree_root, pprint.pformat(actual)))
       logging.error('Expected\n%s' % pprint.pformat(tree))
       logging.error('Diff\n%s' % pprint.pformat(diff))
-    self.assertEquals(diff, {})
+    self.assertEqual(diff, {})
 
   def mangle_git_tree(self, *args):
     """Creates a 'virtual directory snapshot' to compare with the actual result

+ 43 - 33
tests/gclient_smoketest.py

@@ -50,7 +50,8 @@ class GClientSmokeBase(fake_repos.FakeReposTestBase):
     cmd = cmd_base + cmd
     process = subprocess.Popen(cmd, cwd=cwd, env=self.env,
                                stdout=subprocess.PIPE, stderr=subprocess.PIPE,
-                               shell=sys.platform.startswith('win'))
+                               shell=sys.platform.startswith('win'),
+                               universal_newlines=True)
     (stdout, stderr) = process.communicate()
     logging.debug("XXX: %s\n%s\nXXX" % (' '.join(cmd), stdout))
     logging.debug("YYY: %s\n%s\nYYY" % (' '.join(cmd), stderr))
@@ -72,11 +73,11 @@ class GClientSmokeBase(fake_repos.FakeReposTestBase):
         else:
           remaining.append(line)
       else:
-        self.assertEquals([], remaining)
+        self.assertEqual([], remaining)
         task_id = int(m.group(1))
         tasks.setdefault(task_id, []).append(m.group(2))
     out = []
-    for key in sorted(tasks.iterkeys()):
+    for key in sorted(tasks.keys()):
       out.extend(tasks[key])
     out.extend(remaining)
     return '\n'.join(out)
@@ -88,7 +89,7 @@ class GClientSmokeBase(fake_repos.FakeReposTestBase):
     if untangle:
       stdout = self.untangle(stdout)
     self.checkString(expected_stderr, stderr)
-    self.assertEquals(0, returncode)
+    self.assertEqual(0, returncode)
     return self.checkBlock(stdout, items)
 
   def splitBlock(self, stdout):
@@ -138,7 +139,7 @@ class GClientSmokeBase(fake_repos.FakeReposTestBase):
 
   def checkBlock(self, stdout, items):
     results = self.splitBlock(stdout)
-    for i in xrange(min(len(results), len(items))):
+    for i in range(min(len(results), len(items))):
       if isinstance(items[i], (list, tuple)):
         verb = items[i][0]
         path = items[i][1]
@@ -154,7 +155,7 @@ class GClientSmokeBase(fake_repos.FakeReposTestBase):
             (i, results[i][0][2].lower(), path.lower()))
       else:
         self.checkString(results[i][0][2], path, (i, results[i][0][2], path))
-    self.assertEquals(len(results), len(items), (stdout, items, len(results)))
+    self.assertEqual(len(results), len(items), (stdout, items, len(results)))
     return results
 
 
@@ -178,7 +179,7 @@ class GClientSmoke(GClientSmokeBase):
   def testConfig(self):
     # Get any bootstrapping out of the way.
     results = self.gclient(['version'])
-    self.assertEquals(results[2], 0)
+    self.assertEqual(results[2], 0)
 
     p = join(self.root_dir, '.gclient')
     def test(cmd, expected):
@@ -186,7 +187,9 @@ class GClientSmoke(GClientSmokeBase):
         os.remove(p)
       results = self.gclient(cmd)
       self.check(('', '', 0), results)
-      self.checkString(expected, open(p, 'rU').read())
+      mode = 'r' if sys.version_info.major == 3 else 'rU'
+      with open(p, mode) as f:
+        self.checkString(expected, f.read())
 
     test(['config', self.git_base + 'src/'],
          ('solutions = [\n'
@@ -524,7 +527,7 @@ class GClientSmokeGIT(GClientSmokeBase):
     self.gclient(['config', self.git_base + 'repo_13', '--name', 'src'])
     _out, _err, rc = self.gclient(
         ['sync', '-v', '-v', '-v', '--revision', self.githash('repo_13', 2)])
-    self.assertEquals(0, rc)
+    self.assertEqual(0, rc)
 
   def testSyncFetchUpdate(self):
     if not self.enabled:
@@ -535,12 +538,12 @@ class GClientSmokeGIT(GClientSmokeBase):
     # non-standard refs.
     _out, _err, rc = self.gclient(
         ['sync', '-v', '-v', '-v', '--revision', self.githash('repo_13', 1)])
-    self.assertEquals(0, rc)
+    self.assertEqual(0, rc)
 
     # Make sure update that pulls a non-standard ref works.
     _out, _err, rc = self.gclient(
         ['sync', '-v', '-v', '-v', '--revision', self.githash('repo_13', 2)])
-    self.assertEquals(0, rc)
+    self.assertEqual(0, rc)
 
   def testSyncDirect(self):
     if not self.enabled:
@@ -548,7 +551,7 @@ class GClientSmokeGIT(GClientSmokeBase):
     self.gclient(['config', self.git_base + 'repo_12', '--name', 'src'])
     _out, _err, rc = self.gclient(
         ['sync', '-v', '-v', '-v', '--revision', 'refs/changes/1212'])
-    self.assertEquals(0, rc)
+    self.assertEqual(0, rc)
 
   def testSyncUnmanaged(self):
     if not self.enabled:
@@ -652,8 +655,8 @@ class GClientSmokeGIT(GClientSmokeBase):
     # runhooks runs all hooks even if not matching by design.
     out = self.parseGclient(['runhooks', '--deps', 'mac'],
                             ['running', 'running'])
-    self.assertEquals(1, len(out[0]))
-    self.assertEquals(1, len(out[1]))
+    self.assertEqual(1, len(out[0]))
+    self.assertEqual(1, len(out[1]))
     tree = self.mangle_git_tree(('repo_1@2', 'src'),
                                 ('repo_2@1', 'src/repo2'),
                                 ('repo_3@2', 'src/repo2/repo_renamed'))
@@ -681,9 +684,9 @@ class GClientSmokeGIT(GClientSmokeBase):
     out = self.parseGclient(['sync', '--deps', 'mac', '--jobs=1',
                              '--revision', 'src@' + self.githash('repo_5', 2)],
                             expectation)
-    self.assertEquals('Cloning into ', out[0][1][:13])
-    self.assertEquals(2, len(out[1]), out[1])
-    self.assertEquals('pre-deps hook', out[1][1])
+    self.assertEqual('Cloning into ', out[0][1][:13])
+    self.assertEqual(2, len(out[1]), out[1])
+    self.assertEqual('pre-deps hook', out[1][1])
     tree = self.mangle_git_tree(('repo_5@2', 'src'),
                                 ('repo_1@2', 'src/repo1'),
                                 ('repo_2@1', 'src/repo2')
@@ -731,14 +734,21 @@ class GClientSmokeGIT(GClientSmokeBase):
         ('running', self.root_dir),                 # pre-deps hook
         ('running', self.root_dir),                 # pre-deps hook (fails)
     ]
+    executable = sys.executable
+    # On Python 3 we always execute hooks with 'python', so we cannot use
+    # sys.executable.
+    if sys.version_info.major == 3:
+      executable = subprocess.check_output(
+          ['python', '-c', 'import sys; print(sys.executable)'])
+      executable = executable.decode('utf-8').strip()
     expected_stderr = ("Error: Command '%s -c import sys; "
                        "sys.exit(1)' returned non-zero exit status 1 in %s\n"
-                       % (sys.executable, self.root_dir))
+                       % (executable, self.root_dir))
     stdout, stderr, retcode = self.gclient(['sync', '--deps', 'mac', '--jobs=1',
                                             '--revision',
                                             'src@' + self.githash('repo_5', 3)])
-    self.assertEquals(stderr, expected_stderr)
-    self.assertEquals(2, retcode)
+    self.assertEqual(stderr, expected_stderr)
+    self.assertEqual(2, retcode)
     self.checkBlock(stdout, expectated_stdout)
 
   def testRevInfo(self):
@@ -1654,7 +1664,7 @@ class GClientSmokeGITMutates(GClientSmokeBase):
     out = self.parseGclient(['status', '--deps', 'mac', '--jobs', '1'], [])
     # TODO(maruel): http://crosbug.com/3584 It should output the unversioned
     # files.
-    self.assertEquals(0, len(out))
+    self.assertEqual(0, len(out))
 
     # Revert implies --force implies running hooks without looking at pattern
     # matching. For each expected path, 'git reset' and 'git clean' are run, so
@@ -1663,7 +1673,7 @@ class GClientSmokeGITMutates(GClientSmokeBase):
     # because it is clean and has no output for 'git clean'.
     out = self.parseGclient(['revert', '--deps', 'mac', '--jobs', '1'],
                             ['running', 'running'])
-    self.assertEquals(2, len(out))
+    self.assertEqual(2, len(out))
     tree = self.mangle_git_tree(('repo_1@3', 'src'),
                                 ('repo_2@1', 'src/repo2'),
                                 ('repo_3@2', 'src/repo2/repo_renamed'))
@@ -1682,7 +1692,7 @@ class GClientSmokeGITMutates(GClientSmokeBase):
     }])
     out = self.parseGclient(['revert', '--deps', 'mac', '--jobs', '1'],
                             ['running', 'running'])
-    self.assertEquals(2, len(out))
+    self.assertEqual(2, len(out))
     tree = self.mangle_git_tree(('repo_1@3', 'src'),
                                 ('repo_2@3', 'src/repo2'),
                                 ('repo_3@2', 'src/repo2/repo_renamed'))
@@ -1694,7 +1704,7 @@ class GClientSmokeGITMutates(GClientSmokeBase):
     out = results[0].splitlines(False)
     # TODO(maruel): http://crosbug.com/3584 It should output the unversioned
     # files.
-    self.assertEquals(0, len(out))
+    self.assertEqual(0, len(out))
 
   def testSyncNoHistory(self):
     if not self.enabled:
@@ -1730,8 +1740,8 @@ class GClientSmokeGITMutates(GClientSmokeBase):
 
     # Check that repo_2 is actually shallow and its log has only one entry.
     rev_lists = subprocess2.check_output(['git', 'rev-list', 'HEAD'],
-                                         cwd=repo2_root)
-    self.assertEquals(repo_2_hash_new, rev_lists.strip('\r\n'))
+                                         cwd=repo2_root).decode('utf-8')
+    self.assertEqual(repo_2_hash_new, rev_lists.strip('\r\n'))
 
     # Check that we have actually checked out the right commit.
     self.assertTrue(os.path.exists(join(repo2_root, 'last_file')))
@@ -1881,7 +1891,7 @@ class BlinkDEPSTransitionSmokeTest(GClientSmokeBase):
         '}]'])
 
     # Go back and forth two times.
-    for _ in xrange(2):
+    for _ in range(2):
       res = self.gclient(['sync', '--jobs', '1',
                           '--revision', 'src@%s' % self.pre_merge_sha])
       self.assertEqual(res[2], 0, 'DEPS change sync failed.')
@@ -1912,7 +1922,7 @@ class BlinkDEPSTransitionSmokeTest(GClientSmokeBase):
     self.assertEqual(res[2], 0, 'Initial gclient sync failed.')
 
     # Go back and forth two times.
-    for _ in xrange(2):
+    for _ in range(2):
       subprocess2.check_call(['git', 'checkout', '-q', self.pre_merge_sha],
                              cwd=self.checkout_path)
       res = self.gclient(['sync', '--jobs', '1'])
@@ -1968,7 +1978,7 @@ class GClientSmokeCipd(GClientSmokeBase):
   def testSyncCipd(self):
     self.gclient(['config', self.git_base + 'repo_14', '--name', 'src'])
     out, err, rc = self.gclient(['sync'])
-    self.assertEquals(0, rc, out + err)
+    self.assertEqual(0, rc, out + err)
 
     tree = self.mangle_git_tree(('repo_14@1', 'src'))
     tree.update({
@@ -2002,7 +2012,7 @@ class GClientSmokeCipd(GClientSmokeBase):
     # repo_13@1 has src/repo12 as a git dependency.
     out, err, rc = self.gclient(
         ['sync', '-v', '-v', '-v', '--revision', self.githash('repo_13', 1)])
-    self.assertEquals(0, rc, out + err)
+    self.assertEqual(0, rc, out + err)
 
     tree = self.mangle_git_tree(('repo_13@1', 'src'),
                                 ('repo_12@1', 'src/repo12'))
@@ -2012,7 +2022,7 @@ class GClientSmokeCipd(GClientSmokeBase):
     out, err, rc = self.gclient(
         ['sync', '-v', '-v', '-v', '--revision', self.githash('repo_13', 3),
          '--delete_unversioned_trees'])
-    self.assertEquals(0, rc, out + err)
+    self.assertEqual(0, rc, out + err)
 
     tree = self.mangle_git_tree(('repo_13@3', 'src'))
     tree.update({
@@ -2035,7 +2045,7 @@ class GClientSmokeCipd(GClientSmokeBase):
     out, err, rc = self.gclient(
         ['sync', '-v', '-v', '-v', '--revision', self.githash('repo_13', 3),
          '--delete_unversioned_trees'])
-    self.assertEquals(0, rc, out + err)
+    self.assertEqual(0, rc, out + err)
 
     tree = self.mangle_git_tree(('repo_13@3', 'src'))
     tree.update({
@@ -2054,7 +2064,7 @@ class GClientSmokeCipd(GClientSmokeBase):
     # repo_13@1 has src/repo12 as a git dependency.
     out, err, rc = self.gclient(
         ['sync', '-v', '-v', '-v', '--revision', self.githash('repo_13', 1)])
-    self.assertEquals(0, rc, out + err)
+    self.assertEqual(0, rc, out + err)
 
     tree = self.mangle_git_tree(('repo_13@1', 'src'),
                                 ('repo_12@1', 'src/repo12'))

+ 47 - 43
tests/gclient_test.py

@@ -8,7 +8,6 @@
 See gclient_smoketest.py for integration tests.
 """
 
-import Queue
 import copy
 import logging
 import ntpath
@@ -16,6 +15,11 @@ import os
 import sys
 import unittest
 
+if sys.version_info.major == 2:
+  import Queue
+else:
+  import queue as Queue
+
 sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
 
 import metrics
@@ -51,7 +55,7 @@ class SCMMock(object):
     self.url = parsed_url
 
   def RunCommand(self, command, options, args, file_list):
-    self.unit_test.assertEquals('None', command)
+    self.unit_test.assertEqual('None', command)
     self.unit_test.processed.put((self.name, self.url))
 
   # pylint: disable=no-self-use
@@ -77,7 +81,7 @@ class GclientTest(trial_dir.TestCase):
     sys.stdout = gclient.gclient_utils.MakeFileAnnotated(sys.stdout)
 
   def tearDown(self):
-    self.assertEquals([], self._get_processed())
+    self.assertEqual([], self._get_processed())
     gclient.gclient_scm.GitWrapper = self._old_createscm
     sys.stdout = self._old_sys_stdout
     os.chdir(self.previous_dir)
@@ -142,10 +146,10 @@ class GclientTest(trial_dir.TestCase):
       self.assertTrue(
           actual.index(('bar', 'svn://example.com/bar')) <
           actual.index(('bar/empty', 'svn://example.com/bar_empty')))
-      self.assertEquals(first_3, sorted(actual[0:3]))
+      self.assertEqual(first_3, sorted(actual[0:3]))
     else:
-      self.assertEquals(first_3, actual[0:3])
-    self.assertEquals(
+      self.assertEqual(first_3, actual[0:3])
+    self.assertEqual(
         [
           ('foo/dir1', 'svn://example.com/dir1'),
           ('foo/dir1/dir2', 'svn://example.com/dir1/dir2'),
@@ -155,10 +159,10 @@ class GclientTest(trial_dir.TestCase):
         ],
         actual[3:])
 
-    self.assertEquals(3, len(obj.dependencies))
-    self.assertEquals('foo', obj.dependencies[0].name)
-    self.assertEquals('bar', obj.dependencies[1].name)
-    self.assertEquals('bar/empty', obj.dependencies[2].name)
+    self.assertEqual(3, len(obj.dependencies))
+    self.assertEqual('foo', obj.dependencies[0].name)
+    self.assertEqual('bar', obj.dependencies[1].name)
+    self.assertEqual('bar/empty', obj.dependencies[2].name)
     self._check_requirements(
         obj.dependencies[0],
         {
@@ -189,8 +193,8 @@ class GclientTest(trial_dir.TestCase):
     for dependency in solution.dependencies:
       e = expected.pop(dependency.name)
       a = sorted(dependency.requirements)
-      self.assertEquals(e, a, (dependency.name, e, a))
-    self.assertEquals({}, expected)
+      self.assertEqual(e, a, (dependency.name, e, a))
+    self.assertEqual({}, expected)
 
   def _get_processed(self):
     """Retrieves the item in the order they were processed."""
@@ -235,7 +239,7 @@ class GclientTest(trial_dir.TestCase):
         relative=False,
         condition=None,
         print_outbuf=True)
-    self.assertEquals('proto://host/path@revision', d.url)
+    self.assertEqual('proto://host/path@revision', d.url)
 
   def testStr(self):
     parser = gclient.OptionParser()
@@ -296,7 +300,7 @@ class GclientTest(trial_dir.TestCase):
     # pylint: disable=protected-access
     obj.dependencies[0]._file_list.append('foo')
     str_obj = str(obj)
-    self.assertEquals(322, len(str_obj), '%d\n%s' % (len(str_obj), str_obj))
+    self.assertEqual(322, len(str_obj), '%d\n%s' % (len(str_obj), str_obj))
 
   def testHooks(self):
     hooks = [{'pattern':'.', 'action':['cmd1', 'arg1', 'arg2']}]
@@ -607,13 +611,13 @@ class GclientTest(trial_dir.TestCase):
     obj.RunOnDeps('None', args)
     self.assertEqual(['zippy'], sorted(obj.enforced_os))
     all_hooks = obj.GetHooks(options)
-    self.assertEquals(
+    self.assertEqual(
         [('.', 'svn://example.com/'),],
         sorted(self._get_processed()))
-    self.assertEquals([h.action for h in all_hooks],
+    self.assertEqual([h.action for h in all_hooks],
                       [('python', 'do_a'),
                        ('python', 'do_b')])
-    self.assertEquals([h.condition for h in all_hooks],
+    self.assertEqual([h.condition for h in all_hooks],
                       [None, 'checkout_blorp'])
 
   def testOverride(self):
@@ -700,7 +704,7 @@ class GclientTest(trial_dir.TestCase):
     with self.assertRaises(gclient_utils.Error):
       obj.RunOnDeps('None', [])
     self.assertEqual(['unix'], sorted(obj.enforced_os))
-    self.assertEquals(
+    self.assertEqual(
         [
           ('foo', 'svn://example.com/foo'),
           ],
@@ -755,7 +759,7 @@ class GclientTest(trial_dir.TestCase):
     options, _ = gclient.OptionParser().parse_args([])
     obj = gclient.GClient.LoadCurrentConfig(options)
     obj.RunOnDeps('None', [])
-    self.assertEquals(
+    self.assertEqual(
         [
           ('bar', 'svn://example.com/bar'),
           ('baz', 'svn://example.com/baz'),
@@ -795,7 +799,7 @@ class GclientTest(trial_dir.TestCase):
     options, _ = gclient.OptionParser().parse_args([])
     obj = gclient.GClient.LoadCurrentConfig(options)
     obj.RunOnDeps('None', [])
-    self.assertEquals(
+    self.assertEqual(
         [
           ('foo', 'svn://example.com/foo'),
           ('foo/bar', 'svn://example.com/bar'),
@@ -832,7 +836,7 @@ class GclientTest(trial_dir.TestCase):
     options, _ = gclient.OptionParser().parse_args([])
     obj = gclient.GClient.LoadCurrentConfig(options)
     obj.RunOnDeps('None', [])
-    self.assertEquals(
+    self.assertEqual(
         [
           ('foo', 'svn://example.com/foo'),
           ('foo/bar', 'svn://example.com/bar'),
@@ -871,7 +875,7 @@ class GclientTest(trial_dir.TestCase):
     options, _ = gclient.OptionParser().parse_args([])
     obj = gclient.GClient.LoadCurrentConfig(options)
     obj.RunOnDeps('None', [])
-    self.assertEquals(
+    self.assertEqual(
         [
           ('foo', 'svn://example.com/foo'),
           ('foo/third_party/bar', 'svn://example.com/bar'),
@@ -907,7 +911,7 @@ class GclientTest(trial_dir.TestCase):
     options, _ = gclient.OptionParser().parse_args([])
     obj = gclient.GClient.LoadCurrentConfig(options)
     obj.RunOnDeps('None', [])
-    self.assertEquals(
+    self.assertEqual(
         [
           ('foo', 'svn://example.com/foo'),
           ('bar', 'svn://example.com/bar'),
@@ -943,7 +947,7 @@ class GclientTest(trial_dir.TestCase):
     options, _ = gclient.OptionParser().parse_args([])
     obj = gclient.GClient.LoadCurrentConfig(options)
     obj.RunOnDeps('None', [])
-    self.assertEquals(
+    self.assertEqual(
         [
           ('foo', 'svn://example.com/foo'),
           ('bar', 'svn://example.com/bar'),
@@ -968,7 +972,7 @@ class GclientTest(trial_dir.TestCase):
     options, _ = gclient.OptionParser().parse_args([])
     obj = gclient.GClient.LoadCurrentConfig(options)
     obj.RunOnDeps('None', [])
-    self.assertEquals(
+    self.assertEqual(
         [
           ('foo', 'svn://example.com/foo'),
           ('bar', 'svn://example.com/bar'),
@@ -1004,16 +1008,16 @@ class GclientTest(trial_dir.TestCase):
     options.validate_syntax = True
     obj = gclient.GClient.LoadCurrentConfig(options)
 
-    self.assertEquals(1, len(obj.dependencies))
+    self.assertEqual(1, len(obj.dependencies))
     sol = obj.dependencies[0]
     sol._condition = 'some_condition'
 
     sol.ParseDepsFile()
-    self.assertEquals(1, len(sol.dependencies))
+    self.assertEqual(1, len(sol.dependencies))
     dep = sol.dependencies[0]
 
     self.assertIsInstance(dep, gclient.CipdDependency)
-    self.assertEquals(
+    self.assertEqual(
         'https://chrome-infra-packages.appspot.com/lemur@version:1234',
         dep.url)
 
@@ -1035,8 +1039,8 @@ class GclientTest(trial_dir.TestCase):
     obj = gclient.GClient.LoadCurrentConfig(options)
     obj.RunOnDeps('None', [])
     dep = obj.dependencies[0]
-    self.assertEquals([], dep.findDepsFromNotAllowedHosts())
-    self.assertEquals(frozenset(), dep.allowed_hosts)
+    self.assertEqual([], dep.findDepsFromNotAllowedHosts())
+    self.assertEqual(frozenset(), dep.allowed_hosts)
     self._get_processed()
 
   def testDepsFromNotAllowedHostsOK(self):
@@ -1058,8 +1062,8 @@ class GclientTest(trial_dir.TestCase):
     obj = gclient.GClient.LoadCurrentConfig(options)
     obj.RunOnDeps('None', [])
     dep = obj.dependencies[0]
-    self.assertEquals([], dep.findDepsFromNotAllowedHosts())
-    self.assertEquals(frozenset(['example.com']), dep.allowed_hosts)
+    self.assertEqual([], dep.findDepsFromNotAllowedHosts())
+    self.assertEqual(frozenset(['example.com']), dep.allowed_hosts)
     self._get_processed()
 
   def testDepsFromNotAllowedHostsBad(self):
@@ -1081,8 +1085,8 @@ class GclientTest(trial_dir.TestCase):
     obj = gclient.GClient.LoadCurrentConfig(options)
     obj.RunOnDeps('None', [])
     dep = obj.dependencies[0]
-    self.assertEquals(frozenset(['other.com']), dep.allowed_hosts)
-    self.assertEquals([dep.dependencies[0]], dep.findDepsFromNotAllowedHosts())
+    self.assertEqual(frozenset(['other.com']), dep.allowed_hosts)
+    self.assertEqual([dep.dependencies[0]], dep.findDepsFromNotAllowedHosts())
     self._get_processed()
 
   def testDepsParseFailureWithEmptyAllowedHosts(self):
@@ -1162,16 +1166,16 @@ class GclientTest(trial_dir.TestCase):
     options.validate_syntax = True
     obj = gclient.GClient.LoadCurrentConfig(options)
 
-    self.assertEquals(1, len(obj.dependencies))
+    self.assertEqual(1, len(obj.dependencies))
     sol = obj.dependencies[0]
     sol._condition = 'some_condition'
 
     sol.ParseDepsFile()
-    self.assertEquals(1, len(sol.dependencies))
+    self.assertEqual(1, len(sol.dependencies))
     dep = sol.dependencies[0]
 
     self.assertIsInstance(dep, gclient.CipdDependency)
-    self.assertEquals(
+    self.assertEqual(
         'https://chrome-infra-packages.appspot.com/lemur@version:1234',
         dep.url)
 
@@ -1204,16 +1208,16 @@ class GclientTest(trial_dir.TestCase):
     options.validate_syntax = True
     obj = gclient.GClient.LoadCurrentConfig(options)
 
-    self.assertEquals(1, len(obj.dependencies))
+    self.assertEqual(1, len(obj.dependencies))
     sol = obj.dependencies[0]
     sol._condition = 'some_condition'
 
     sol.ParseDepsFile()
-    self.assertEquals(1, len(sol.dependencies))
+    self.assertEqual(1, len(sol.dependencies))
     dep = sol.dependencies[0]
 
     self.assertIsInstance(dep, gclient.GitDependency)
-    self.assertEquals('https://example.com/bar', dep.url)
+    self.assertEqual('https://example.com/bar', dep.url)
 
   def testSameDirAllowMultipleCipdDeps(self):
     """Verifies gclient allow multiple cipd deps under same directory."""
@@ -1266,8 +1270,8 @@ class GclientTest(trial_dir.TestCase):
       [])
     dep0 = obj.dependencies[0].dependencies[0]
     dep1 = obj.dependencies[0].dependencies[1]
-    self.assertEquals('https://example.com/foo_package@foo_version', dep0.url)
-    self.assertEquals('https://example.com/bar_package@bar_version', dep1.url)
+    self.assertEqual('https://example.com/foo_package@foo_version', dep0.url)
+    self.assertEqual('https://example.com/bar_package@bar_version', dep1.url)
 
   def _testPosixpathImpl(self):
     parser = gclient.OptionParser()
@@ -1287,7 +1291,7 @@ class GclientTest(trial_dir.TestCase):
         should_process=True,
         relative=False,
         condition=None)
-    self.assertEquals(cipd_dep._cipd_subdir, 'src/foo/bar/baz')
+    self.assertEqual(cipd_dep._cipd_subdir, 'src/foo/bar/baz')
 
   def testPosixpathCipdSubdir(self):
     self._testPosixpathImpl()