autotest_quickmerge/cros_mark_as_stable: convert mox to mock

BUG=chromium:430770
TEST=`./cbuildbot/run_tests`

Change-Id: I38261e2bc63e2676bf200abc637ba63b5623165a
Reviewed-on: https://chromium-review.googlesource.com/233781
Reviewed-by: Mike Frysinger <vapier@chromium.org>
Commit-Queue: Mike Frysinger <vapier@chromium.org>
Tested-by: Mike Frysinger <vapier@chromium.org>
diff --git a/scripts/cros_mark_as_stable_unittest.py b/scripts/cros_mark_as_stable_unittest.py
index 6f3f556..5b1329e 100755
--- a/scripts/cros_mark_as_stable_unittest.py
+++ b/scripts/cros_mark_as_stable_unittest.py
@@ -26,66 +26,74 @@
 import mock
 
 
-# pylint: disable=W0212
+class RunGitMock(partial_mock.PartialCmdMock):
+  """Partial mock for git.RunMock."""
+  TARGET = 'chromite.lib.git'
+  ATTRS = ('RunGit',)
+  DEFAULT_ATTR = 'RunGit'
+
+  def RunGit(self, _git_repo, cmd, _retry=True, **kwargs):
+    return self._results['RunGit'].LookupResult(
+        (cmd,), hook_args=(cmd,), hook_kwargs=kwargs)
 
 
-class NonClassTests(cros_test_lib.MoxTestCase):
+class NonClassTests(cros_test_lib.MockTestCase):
   """Test the flow for pushing a change."""
+
   def setUp(self):
-    self.mox.StubOutWithMock(cros_build_lib, 'RunCommand')
     self._branch = 'test_branch'
     self._target_manifest_branch = 'cros/master'
 
   def _TestPushChange(self, bad_cls):
+    side_effect = Exception('unittest says this should not be called')
+
     git_log = 'Marking test_one as stable\nMarking test_two as stable\n'
     fake_description = 'Marking set of ebuilds as stable\n\n%s' % git_log
-    self.mox.StubOutWithMock(cros_mark_as_stable, '_DoWeHaveLocalCommits')
-    self.mox.StubOutWithMock(cros_mark_as_stable.GitBranch, 'CreateBranch')
-    self.mox.StubOutWithMock(cros_mark_as_stable.GitBranch, 'Exists')
-    self.mox.StubOutWithMock(git, 'PushWithRetry')
-    self.mox.StubOutWithMock(git, 'GetTrackingBranch')
-    self.mox.StubOutWithMock(git, 'SyncPushBranch')
-    self.mox.StubOutWithMock(git, 'CreatePushBranch')
-    self.mox.StubOutWithMock(git, 'RunGit')
+    self.PatchObject(cros_mark_as_stable, '_DoWeHaveLocalCommits',
+                     return_value=True)
+    self.PatchObject(cros_mark_as_stable.GitBranch, 'CreateBranch',
+                     side_effect=side_effect)
+    self.PatchObject(cros_mark_as_stable.GitBranch, 'Exists',
+                     side_effect=side_effect)
 
-    # Run the flow.
-    cros_mark_as_stable._DoWeHaveLocalCommits(
-        self._branch, self._target_manifest_branch, '.').AndReturn(True)
-    git.GetTrackingBranch('.', for_push=True).AndReturn(
-        ['gerrit', 'refs/remotes/gerrit/master'])
-    git.SyncPushBranch('.', 'gerrit', 'refs/remotes/gerrit/master')
-    cros_mark_as_stable._DoWeHaveLocalCommits(
-        self._branch, 'refs/remotes/gerrit/master', '.').AndReturn(True)
+    push_mock = self.PatchObject(git, 'PushWithRetry')
+    self.PatchObject(git, 'GetTrackingBranch',
+                     return_value=['gerrit', 'refs/remotes/gerrit/master'])
+    sync_mock = self.PatchObject(git, 'SyncPushBranch')
+    create_mock = self.PatchObject(git, 'CreatePushBranch')
+    git_mock = self.StartPatcher(RunGitMock())
 
-    # Look for bad CLs.
     cmd = ['log', '--format=short', '--perl-regexp', '--author',
            '^(?!chrome-bot)', 'refs/remotes/gerrit/master..%s' % self._branch]
 
     if bad_cls:
-      result = cros_build_lib.CommandResult(output='Found bad stuff')
-      git.RunGit('.', cmd).AndReturn(result)
+      push_mock.side_effect = side_effect
+      create_mock.side_effect = side_effect
+      git_mock.AddCmdResult(cmd, output='Found bad stuff')
     else:
-      result = cros_build_lib.CommandResult(output='\n')
-      git.RunGit('.', cmd).AndReturn(result)
-      result = cros_build_lib.CommandResult(output=git_log)
+      git_mock.AddCmdResult(cmd, output='\n')
       cmd = ['log', '--format=format:%s%n%n%b',
              'refs/remotes/gerrit/master..%s' % self._branch]
-      git.RunGit('.', cmd).AndReturn(result)
-      git.CreatePushBranch('merge_branch', '.')
-      git.RunGit('.', ['merge', '--squash', self._branch])
-      git.RunGit('.', ['commit', '-m', fake_description])
-      git.RunGit('.', ['config', 'push.default', 'tracking'])
-      git.PushWithRetry('merge_branch', '.', dryrun=False)
+      git_mock.AddCmdResult(cmd, output=git_log)
+      git_mock.AddCmdResult(['merge', '--squash', self._branch])
+      git_mock.AddCmdResult(['commit', '-m', fake_description])
+      git_mock.AddCmdResult(['config', 'push.default', 'tracking'])
 
-    self.mox.ReplayAll()
-    cros_mark_as_stable.PushChange(self._branch, self._target_manifest_branch,
-                                   False, '.')
-    self.mox.VerifyAll()
+    try:
+      cros_mark_as_stable.PushChange(self._branch, self._target_manifest_branch,
+                                     False, '.')
+    finally:
+      sync_mock.assert_called_with('.', 'gerrit', 'refs/remotes/gerrit/master')
+      if not bad_cls:
+        push_mock.assert_called_with('merge_branch', '.', dryrun=False)
+        create_mock.assert_called_with('merge_branch', '.')
 
   def testPushChange(self):
+    """Verify pushing changes works."""
     self._TestPushChange(bad_cls=False)
 
   def testPushChangeBadCls(self):
+    """Verify we do not push bad CLs."""
     self.assertRaises(AssertionError, self._TestPushChange, bad_cls=True)