Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Unified Diff: tests/presubmit_unittest.py

Issue 178223016: Support multiple try masters when sending tries to rietveld. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: Fix JSON serialization. Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« rietveld.py ('K') | « rietveld.py ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tests/presubmit_unittest.py
diff --git a/tests/presubmit_unittest.py b/tests/presubmit_unittest.py
index 28bf5bcecf12870cdb97fb3333ecb6fe99f6512e..f1995dbfb0a8fd1851fd7ff9071434187a9bd682 100755
--- a/tests/presubmit_unittest.py
+++ b/tests/presubmit_unittest.py
@@ -7,7 +7,9 @@
# pylint: disable=E1101,E1103
+import copy
import functools
+import itertools
import logging
import os
import StringIO
@@ -60,6 +62,11 @@ def GetPreferredTrySlaves(project):
return %s
"""
+ presubmit_trymaster = """
+def GetPreferredTryMasters():
+ return %s
+"""
+
presubmit_diffs = """
--- file1 2011-02-09 10:38:16.517224845 -0800
+++ file2 2011-02-09 10:38:53.177226516 -0800
@@ -170,7 +177,8 @@ class PresubmitUnittest(PresubmitTestsBase):
'marshal', 'normpath', 'optparse', 'os', 'owners', 'pickle',
'presubmit_canned_checks', 'random', 're', 'rietveld', 'scm',
'subprocess', 'sys', 'tempfile', 'time', 'traceback', 'types', 'unittest',
- 'urllib2', 'warn', 'multiprocessing',
+ 'urllib2', 'warn', 'multiprocessing', 'DoGetTryMasters',
+ 'GetTryMastersExecuter',
]
# If this test fails, you should add the relevant test.
self.compareMembers(presubmit, members)
@@ -1027,6 +1035,115 @@ def CheckChangeOnCommit(input_api, output_api):
except presubmit.PresubmitFailure:
pass
+ def testGetTryMastersExecuter(self):
+ self.mox.ReplayAll()
+ change = presubmit.Change(
+ 'foo',
+ 'Blah Blah\n\nSTORY=http://tracker.com/42\nBUG=boo\n',
+ self.fake_root_dir,
+ None,
+ 0,
+ 0,
+ None)
+ executer = presubmit.GetTryMastersExecuter()
+ self.assertEqual({}, executer.ExecPresubmitScript('', '', '', change))
+ self.assertEqual({},
+ executer.ExecPresubmitScript('def foo():\n return\n', '', '', change))
+
+ # bad results
+ empty_master_result = "{'': {}}"
+ starts_with_space_result = "{' m': {}}"
+ empty_slave_result = "{'m': {'': set()}}"
+ not_dict_result1 = "['a']"
+ not_dict_result2 = "{'m': ''}"
+ not_set_result = "{'m': {'s': []}}"
+
+ for result in (
+ empty_master_result, starts_with_space_result, empty_slave_result,
+ not_dict_result1, not_dict_result2, not_set_result):
+ self.assertRaises(presubmit.PresubmitFailure,
+ executer.ExecPresubmitScript,
+ self.presubmit_trymaster % result, '', '', change)
+
+ # good results
+ expected_result = {'m1': {'s1': set(['t1', 't2'])}, 'm2': ['s1', 's2']}
+ empty_result1 = {}
+ empty_result2 = {'m': {}}
+ empty_result3 = {'m': []}
+ space_in_name_result = {'m r': {'s\tv': set(['t1'])}}
+ for result in (
+ expected_result, empty_result1, empty_result2, empty_result3,
+ space_in_name_result):
+ self.assertEqual(
+ result,
+ executer.ExecPresubmitScript(
+ self.presubmit_trymaster % result, '', '', change))
+
+ def testMergeMasters(self):
+ merge = presubmit._MergeMasters
+ self.assertEqual({}, merge({}, {}))
+ self.assertEqual({'m1': {}}, merge({}, {'m1': {}}))
+ self.assertEqual({'m1': {}}, merge({'m1': {}}, {}))
+ parts = [
+ {'try1.cr': ['win']},
+ {'try1.cr': {'linux1': set(['test1'])}, 'try2.cr': ['linux2']},
+ {'try1.cr': {'mac1': set([]), 'mac2': set(['test1', 'test2'])}},
+ ]
+ expected = {
+ 'try1.cr': {'win': set([]),
+ 'linux1': set(['test1']),
+ 'mac1': set([]),
+ 'mac2': set(['test1', 'test2'])},
+ 'try2.cr': {'linux2': set([])},
+ }
+ for permutation in itertools.permutations(parts):
+ self.assertEqual(expected,
+ reduce(merge, map(copy.deepcopy, permutation), {}))
+
+ def testDoGetTryMasters(self):
+ root_text = self.presubmit_trymaster % '{"try1.cr": ["win"]}'
+ linux_text = (self.presubmit_trymaster
+ % '{"try1.cr": {"linux1": set(["test1"])}, "try2.cr": ["linux2"]}')
+
+ join = presubmit.os.path.join
+ isfile = presubmit.os.path.isfile
+ FileRead = presubmit.gclient_utils.FileRead
+ filename = 'foo.cc'
+ filename_linux = join('linux_only', 'penguin.cc')
+ root_presubmit = join(self.fake_root_dir, 'PRESUBMIT.py')
+ linux_presubmit = join(self.fake_root_dir, 'linux_only', 'PRESUBMIT.py')
+ inherit_path = join(self.fake_root_dir, self._INHERIT_SETTINGS)
+
+ isfile(inherit_path).AndReturn(False)
+ isfile(root_presubmit).AndReturn(True)
+ FileRead(root_presubmit, 'rU').AndReturn(root_text)
+
+ isfile(inherit_path).AndReturn(False)
+ isfile(root_presubmit).AndReturn(True)
+ isfile(linux_presubmit).AndReturn(True)
+ FileRead(root_presubmit, 'rU').AndReturn(root_text)
+ FileRead(linux_presubmit, 'rU').AndReturn(linux_text)
+ self.mox.ReplayAll()
+
+ change = presubmit.Change(
+ 'mychange', '', self.fake_root_dir, [], 0, 0, None)
+
+ output = StringIO.StringIO()
+ self.assertEqual({'try1.cr': {'win': ['defaulttests']}},
+ presubmit.DoGetTryMasters(change, [filename],
+ self.fake_root_dir,
+ None, None, False, output))
+ output = StringIO.StringIO()
+ expected = {
+ 'try1.cr': {'win': ['defaulttests'], 'linux1': ['test1']},
+ 'try2.cr': {'linux2': ['defaulttests']},
+ }
+ self.assertEqual(expected,
+ presubmit.DoGetTryMasters(change,
+ [filename, filename_linux],
+ self.fake_root_dir, None, None,
+ False, output))
+
def testMainUnversioned(self):
# OptParser calls presubmit.os.path.exists and is a pain when mocked.
self.UnMock(presubmit.os.path, 'exists')
« rietveld.py ('K') | « rietveld.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698