diff --git a/gcl.py b/gcl.py index bbcba87ec..d8c09afa9 100755 --- a/gcl.py +++ b/gcl.py @@ -715,8 +715,13 @@ def UploadCL(change_info, args): args.remove("--clobber") clobber = True - # TODO(pamg): Do something when tests are missing. The plan is to upload a - # message to Rietveld and have it shown in the UI attached to this patch. + # Disable try when the server is overridden. + server_1 = re.compile(r"^-s\b.*") + server_2 = re.compile(r"^--server\b.*") + for arg in args: + if server_1.match(arg) or server_2.match(arg): + no_try = True + break upload_arg = ["upload.py", "-y"] upload_arg.append("--server=" + GetCodeReviewSetting("CODE_REVIEW_SERVER")) diff --git a/tests/__init__.py b/tests/__init__.py index ea9de4b42..b956655dc 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -5,4 +5,34 @@ """Unit tests for depot_tools.""" -pass +mox = None + +def OnTestsLoad(): + import os + import sys + old_path = sys.path + global mox + try: + directory, _file = os.path.split(__file__) + sys.path.append(os.path.abspath(os.path.join(directory, 'pymox'))) + sys.path.append(os.path.abspath(os.path.join(directory, '..'))) + try: + import mox as Mox + mox = Mox + except ImportError: + print "Trying to automatically checkout pymox." + import subprocess + subprocess.call(['svn', 'co', 'http://pymox.googlecode.com/svn/trunk', + os.path.join(directory, 'pymox')], + shell=True) + try: + import mox as Mox + mox = Mox + except ImportError: + print >> sys.stderr, ("\nError, failed to load pymox\n") + raise + finally: + # Restore the path + sys.path = old_path + +OnTestsLoad() diff --git a/tests/gcl_unittest.py b/tests/gcl_unittest.py index 0d01695c8..3517b7ece 100755 --- a/tests/gcl_unittest.py +++ b/tests/gcl_unittest.py @@ -11,7 +11,9 @@ import sys import unittest # Local imports +import __init__ import gcl +mox = __init__.mox class GclTestsBase(unittest.TestCase): @@ -105,5 +107,160 @@ class ChangeInfoUnittest(GclTestsBase): self.assertEquals(o.FileList(), ['foo', 'bar']) +class UploadCLUnittest(GclTestsBase): + def setUp(self): + GclTestsBase.setUp(self) + self.mox = mox.Mox() + self._os_chdir = gcl.os.chdir + gcl.os.chdir = self.mox.CreateMockAnything() + self._os_close = gcl.os.close + gcl.os.close = self.mox.CreateMockAnything() + self._os_getcwd = gcl.os.getcwd + gcl.os.getcwd = self.mox.CreateMockAnything() + self._os_remove = gcl.os.remove + gcl.os.remove = self.mox.CreateMockAnything() + self._os_write = gcl.os.write + gcl.os.write = self.mox.CreateMockAnything() + self._tempfile = gcl.tempfile + gcl.tempfile = self.mox.CreateMockAnything() + self._upload_RealMain = gcl.upload.RealMain + gcl.upload.RealMain = self.mox.CreateMockAnything() + self._DoPresubmitChecks = gcl.DoPresubmitChecks + gcl.DoPresubmitChecks = self.mox.CreateMockAnything() + self._GenerateDiff = gcl.GenerateDiff + gcl.GenerateDiff = self.mox.CreateMockAnything() + self._GetCodeReviewSetting = gcl.GetCodeReviewSetting + gcl.GetCodeReviewSetting = self.mox.CreateMockAnything() + self._GetRepositoryRoot = gcl.GetRepositoryRoot + gcl.GetRepositoryRoot = self.mox.CreateMockAnything() + self._SendToRietveld = gcl.SendToRietveld + gcl.SendToRietveld = self.mox.CreateMockAnything() + self._TryChange = gcl.TryChange + gcl.TryChange = self.mox.CreateMockAnything() + + def tearDown(self): + GclTestsBase.tearDown(self) + gcl.os.chdir = self._os_chdir + gcl.os.close = self._os_close + gcl.os.getcwd = self._os_getcwd + gcl.os.remove = self._os_remove + gcl.os.write = self._os_write + gcl.tempfile = self._tempfile + gcl.upload.RealMain = self._upload_RealMain + gcl.DoPresubmitChecks = self._DoPresubmitChecks + gcl.GenerateDiff = self._GenerateDiff + gcl.GetCodeReviewSetting = self._GetCodeReviewSetting + gcl.GetRepositoryRoot = self._GetRepositoryRoot + gcl.SendToRietveld = self._SendToRietveld + gcl.TryChange = self._TryChange + + def testNew(self): + change_info = gcl.ChangeInfo('naame', 'iissue', 'deescription', + ['aa', 'bb']) + change_info.Save = self.mox.CreateMockAnything() + args = ['--foo=bar'] + change_info.Save() + gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) + gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') + gcl.os.getcwd().AndReturn('somewhere') + gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) + gcl.GenerateDiff(change_info.FileList()) + gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--foo=bar', + "--message=''", '--issue=iissue'], change_info.patch).AndReturn(("1", + "2")) + gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) + gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') + gcl.TryChange(change_info, + ['--issue', '1', '--patchset', '2'], + swallow_exception=True) + gcl.os.chdir('somewhere') + self.mox.ReplayAll() + gcl.UploadCL(change_info, args) + self.mox.VerifyAll() + + def testServerOverride(self): + change_info = gcl.ChangeInfo('naame', '', 'deescription', + ['aa', 'bb']) + change_info.Save = self.mox.CreateMockAnything() + args = ['--server=a'] + change_info.Save() + gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) + gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') + gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) + gcl.os.write(42, change_info.description) + gcl.os.close(42) + gcl.GetCodeReviewSetting('CC_LIST') + gcl.os.getcwd().AndReturn('somewhere') + gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) + gcl.GenerateDiff(change_info.FileList()) + gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', '--server=a', + "--description_file=descfile", + "--message=deescription"], change_info.patch).AndReturn(("1", "2")) + gcl.os.remove('descfile') + gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) + #gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') + #gcl.TryChange(change_info, + # ['--issue', '1', '--patchset', '2'], + # swallow_exception=True) + gcl.os.chdir('somewhere') + self.mox.ReplayAll() + gcl.UploadCL(change_info, args) + self.mox.VerifyAll() + + def testNoTry(self): + change_info = gcl.ChangeInfo('naame', '', 'deescription', + ['aa', 'bb']) + change_info.Save = self.mox.CreateMockAnything() + args = ['--no-try'] + change_info.Save() + gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) + gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') + gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) + gcl.os.write(42, change_info.description) + gcl.os.close(42) + gcl.GetCodeReviewSetting('CC_LIST') + gcl.os.getcwd().AndReturn('somewhere') + gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) + gcl.GenerateDiff(change_info.FileList()) + gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', + "--description_file=descfile", + "--message=deescription"], change_info.patch).AndReturn(("1", "2")) + gcl.os.remove('descfile') + gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) + gcl.os.chdir('somewhere') + self.mox.ReplayAll() + gcl.UploadCL(change_info, args) + self.mox.VerifyAll() + + def testNormal(self): + change_info = gcl.ChangeInfo('naame', '', 'deescription', + ['aa', 'bb']) + change_info.Save = self.mox.CreateMockAnything() + args = [] + change_info.Save() + gcl.DoPresubmitChecks(change_info, committing=False).AndReturn(True) + gcl.GetCodeReviewSetting('CODE_REVIEW_SERVER').AndReturn('my_server') + gcl.tempfile.mkstemp(text=True).AndReturn((42, 'descfile')) + gcl.os.write(42, change_info.description) + gcl.os.close(42) + gcl.GetCodeReviewSetting('CC_LIST') + gcl.os.getcwd().AndReturn('somewhere') + gcl.os.chdir(gcl.GetRepositoryRoot().AndReturn(None)) + gcl.GenerateDiff(change_info.FileList()) + gcl.upload.RealMain(['upload.py', '-y', '--server=my_server', + "--description_file=descfile", + "--message=deescription"], change_info.patch).AndReturn(("1", "2")) + gcl.os.remove('descfile') + gcl.SendToRietveld("/lint/issue%s_%s" % ('1', '2'), timeout=0.5) + gcl.GetCodeReviewSetting('TRY_ON_UPLOAD').AndReturn('True') + gcl.TryChange(change_info, + ['--issue', '1', '--patchset', '2'], + swallow_exception=True) + gcl.os.chdir('somewhere') + self.mox.ReplayAll() + gcl.UploadCL(change_info, args) + self.mox.VerifyAll() + + if __name__ == '__main__': unittest.main() diff --git a/tests/gclient_test.py b/tests/gclient_test.py index ea184b540..2941a6493 100644 --- a/tests/gclient_test.py +++ b/tests/gclient_test.py @@ -28,13 +28,9 @@ import subprocess import sys import unittest -directory, _file = os.path.split(__file__) -if directory: - directory += os.sep -sys.path.append(os.path.abspath(directory + '../pymox')) - +import __init__ import gclient -import mox +mox = __init__.mox ## Some utilities for generating arbitrary arguments.