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

Side by Side 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, 9 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 unified diff | Download patch | Annotate | Revision Log
« rietveld.py ('K') | « rietveld.py ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be 3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file. 4 # found in the LICENSE file.
5 5
6 """Unit tests for presubmit_support.py and presubmit_canned_checks.py.""" 6 """Unit tests for presubmit_support.py and presubmit_canned_checks.py."""
7 7
8 # pylint: disable=E1101,E1103 8 # pylint: disable=E1101,E1103
9 9
10 import copy
10 import functools 11 import functools
12 import itertools
11 import logging 13 import logging
12 import os 14 import os
13 import StringIO 15 import StringIO
14 import sys 16 import sys
15 import time 17 import time
16 import unittest 18 import unittest
17 19
18 _ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 20 _ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
19 sys.path.insert(0, _ROOT) 21 sys.path.insert(0, _ROOT)
20 22
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 """ 55 """
54 56
55 presubmit_tryslave_project = """ 57 presubmit_tryslave_project = """
56 def GetPreferredTrySlaves(project): 58 def GetPreferredTrySlaves(project):
57 if project == %s: 59 if project == %s:
58 return %s 60 return %s
59 else: 61 else:
60 return %s 62 return %s
61 """ 63 """
62 64
65 presubmit_trymaster = """
66 def GetPreferredTryMasters():
67 return %s
68 """
69
63 presubmit_diffs = """ 70 presubmit_diffs = """
64 --- file1 2011-02-09 10:38:16.517224845 -0800 71 --- file1 2011-02-09 10:38:16.517224845 -0800
65 +++ file2 2011-02-09 10:38:53.177226516 -0800 72 +++ file2 2011-02-09 10:38:53.177226516 -0800
66 @@ -1,6 +1,5 @@ 73 @@ -1,6 +1,5 @@
67 this is line number 0 74 this is line number 0
68 this is line number 1 75 this is line number 1
69 -this is line number 2 to be deleted 76 -this is line number 2 to be deleted
70 this is line number 3 77 this is line number 3
71 this is line number 4 78 this is line number 4
72 this is line number 5 79 this is line number 5
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
163 'GetTrySlavesExecuter', 'GitAffectedFile', 'CallCommand', 'CommandData', 170 'GetTrySlavesExecuter', 'GitAffectedFile', 'CallCommand', 'CommandData',
164 'GitChange', 'InputApi', 'ListRelevantPresubmitFiles', 'Main', 171 'GitChange', 'InputApi', 'ListRelevantPresubmitFiles', 'Main',
165 'NonexistantCannedCheckFilter', 'OutputApi', 'ParseFiles', 172 'NonexistantCannedCheckFilter', 'OutputApi', 'ParseFiles',
166 'PresubmitFailure', 'PresubmitExecuter', 'PresubmitOutput', 'ScanSubDirs', 173 'PresubmitFailure', 'PresubmitExecuter', 'PresubmitOutput', 'ScanSubDirs',
167 'SvnAffectedFile', 'SvnChange', 'cPickle', 'cpplint', 'cStringIO', 174 'SvnAffectedFile', 'SvnChange', 'cPickle', 'cpplint', 'cStringIO',
168 'contextlib', 'canned_check_filter', 'fix_encoding', 'fnmatch', 175 'contextlib', 'canned_check_filter', 'fix_encoding', 'fnmatch',
169 'gclient_utils', 'glob', 'inspect', 'json', 'load_files', 'logging', 176 'gclient_utils', 'glob', 'inspect', 'json', 'load_files', 'logging',
170 'marshal', 'normpath', 'optparse', 'os', 'owners', 'pickle', 177 'marshal', 'normpath', 'optparse', 'os', 'owners', 'pickle',
171 'presubmit_canned_checks', 'random', 're', 'rietveld', 'scm', 178 'presubmit_canned_checks', 'random', 're', 'rietveld', 'scm',
172 'subprocess', 'sys', 'tempfile', 'time', 'traceback', 'types', 'unittest', 179 'subprocess', 'sys', 'tempfile', 'time', 'traceback', 'types', 'unittest',
173 'urllib2', 'warn', 'multiprocessing', 180 'urllib2', 'warn', 'multiprocessing', 'DoGetTryMasters',
181 'GetTryMastersExecuter',
174 ] 182 ]
175 # If this test fails, you should add the relevant test. 183 # If this test fails, you should add the relevant test.
176 self.compareMembers(presubmit, members) 184 self.compareMembers(presubmit, members)
177 185
178 def testCannedCheckFilter(self): 186 def testCannedCheckFilter(self):
179 canned = presubmit.presubmit_canned_checks 187 canned = presubmit.presubmit_canned_checks
180 orig = canned.CheckOwners 188 orig = canned.CheckOwners
181 with presubmit.canned_check_filter(['CheckOwners']): 189 with presubmit.canned_check_filter(['CheckOwners']):
182 self.assertNotEqual(canned.CheckOwners, orig) 190 self.assertNotEqual(canned.CheckOwners, orig)
183 self.assertEqual(canned.CheckOwners(None, None), []) 191 self.assertEqual(canned.CheckOwners(None, None), [])
(...skipping 836 matching lines...) Expand 10 before | Expand all | Expand 10 after
1020 script_text = ( 1028 script_text = (
1021 'def GetPreferredTrySlaves():\n' 1029 'def GetPreferredTrySlaves():\n'
1022 ' return ["foo,bar"]\n') 1030 ' return ["foo,bar"]\n')
1023 try: 1031 try:
1024 presubmit.GetTrySlavesExecuter.ExecPresubmitScript( 1032 presubmit.GetTrySlavesExecuter.ExecPresubmitScript(
1025 script_text, 'path', 'project', None) 1033 script_text, 'path', 'project', None)
1026 self.fail() 1034 self.fail()
1027 except presubmit.PresubmitFailure: 1035 except presubmit.PresubmitFailure:
1028 pass 1036 pass
1029 1037
1038 def testGetTryMastersExecuter(self):
1039 self.mox.ReplayAll()
1040 change = presubmit.Change(
1041 'foo',
1042 'Blah Blah\n\nSTORY=http://tracker.com/42\nBUG=boo\n',
1043 self.fake_root_dir,
1044 None,
1045 0,
1046 0,
1047 None)
1048 executer = presubmit.GetTryMastersExecuter()
1049 self.assertEqual({}, executer.ExecPresubmitScript('', '', '', change))
1050 self.assertEqual({},
1051 executer.ExecPresubmitScript('def foo():\n return\n', '', '', change))
1052
1053 # bad results
1054 empty_master_result = "{'': {}}"
1055 starts_with_space_result = "{' m': {}}"
1056 empty_slave_result = "{'m': {'': set()}}"
1057 not_dict_result1 = "['a']"
1058 not_dict_result2 = "{'m': ''}"
1059 not_set_result = "{'m': {'s': []}}"
1060
1061 for result in (
1062 empty_master_result, starts_with_space_result, empty_slave_result,
1063 not_dict_result1, not_dict_result2, not_set_result):
1064 self.assertRaises(presubmit.PresubmitFailure,
1065 executer.ExecPresubmitScript,
1066 self.presubmit_trymaster % result, '', '', change)
1067
1068 # good results
1069 expected_result = {'m1': {'s1': set(['t1', 't2'])}, 'm2': ['s1', 's2']}
1070 empty_result1 = {}
1071 empty_result2 = {'m': {}}
1072 empty_result3 = {'m': []}
1073 space_in_name_result = {'m r': {'s\tv': set(['t1'])}}
1074 for result in (
1075 expected_result, empty_result1, empty_result2, empty_result3,
1076 space_in_name_result):
1077 self.assertEqual(
1078 result,
1079 executer.ExecPresubmitScript(
1080 self.presubmit_trymaster % result, '', '', change))
1081
1082 def testMergeMasters(self):
1083 merge = presubmit._MergeMasters
1084 self.assertEqual({}, merge({}, {}))
1085 self.assertEqual({'m1': {}}, merge({}, {'m1': {}}))
1086 self.assertEqual({'m1': {}}, merge({'m1': {}}, {}))
1087 parts = [
1088 {'try1.cr': ['win']},
1089 {'try1.cr': {'linux1': set(['test1'])}, 'try2.cr': ['linux2']},
1090 {'try1.cr': {'mac1': set([]), 'mac2': set(['test1', 'test2'])}},
1091 ]
1092 expected = {
1093 'try1.cr': {'win': set([]),
1094 'linux1': set(['test1']),
1095 'mac1': set([]),
1096 'mac2': set(['test1', 'test2'])},
1097 'try2.cr': {'linux2': set([])},
1098 }
1099 for permutation in itertools.permutations(parts):
1100 self.assertEqual(expected,
1101 reduce(merge, map(copy.deepcopy, permutation), {}))
1102
1103 def testDoGetTryMasters(self):
1104 root_text = self.presubmit_trymaster % '{"try1.cr": ["win"]}'
1105 linux_text = (self.presubmit_trymaster
1106 % '{"try1.cr": {"linux1": set(["test1"])}, "try2.cr": ["linux2"]}')
1107
1108 join = presubmit.os.path.join
1109 isfile = presubmit.os.path.isfile
1110 FileRead = presubmit.gclient_utils.FileRead
1111 filename = 'foo.cc'
1112 filename_linux = join('linux_only', 'penguin.cc')
1113 root_presubmit = join(self.fake_root_dir, 'PRESUBMIT.py')
1114 linux_presubmit = join(self.fake_root_dir, 'linux_only', 'PRESUBMIT.py')
1115 inherit_path = join(self.fake_root_dir, self._INHERIT_SETTINGS)
1116
1117 isfile(inherit_path).AndReturn(False)
1118 isfile(root_presubmit).AndReturn(True)
1119 FileRead(root_presubmit, 'rU').AndReturn(root_text)
1120
1121 isfile(inherit_path).AndReturn(False)
1122 isfile(root_presubmit).AndReturn(True)
1123 isfile(linux_presubmit).AndReturn(True)
1124 FileRead(root_presubmit, 'rU').AndReturn(root_text)
1125 FileRead(linux_presubmit, 'rU').AndReturn(linux_text)
1126 self.mox.ReplayAll()
1127
1128 change = presubmit.Change(
1129 'mychange', '', self.fake_root_dir, [], 0, 0, None)
1130
1131 output = StringIO.StringIO()
1132 self.assertEqual({'try1.cr': {'win': ['defaulttests']}},
1133 presubmit.DoGetTryMasters(change, [filename],
1134 self.fake_root_dir,
1135 None, None, False, output))
1136 output = StringIO.StringIO()
1137 expected = {
1138 'try1.cr': {'win': ['defaulttests'], 'linux1': ['test1']},
1139 'try2.cr': {'linux2': ['defaulttests']},
1140 }
1141 self.assertEqual(expected,
1142 presubmit.DoGetTryMasters(change,
1143 [filename, filename_linux],
1144 self.fake_root_dir, None, None,
1145 False, output))
1146
1030 def testMainUnversioned(self): 1147 def testMainUnversioned(self):
1031 # OptParser calls presubmit.os.path.exists and is a pain when mocked. 1148 # OptParser calls presubmit.os.path.exists and is a pain when mocked.
1032 self.UnMock(presubmit.os.path, 'exists') 1149 self.UnMock(presubmit.os.path, 'exists')
1033 self.mox.StubOutWithMock(presubmit, 'DoPresubmitChecks') 1150 self.mox.StubOutWithMock(presubmit, 'DoPresubmitChecks')
1034 self.mox.StubOutWithMock(presubmit, 'ParseFiles') 1151 self.mox.StubOutWithMock(presubmit, 'ParseFiles')
1035 presubmit.scm.determine_scm(self.fake_root_dir).AndReturn(None) 1152 presubmit.scm.determine_scm(self.fake_root_dir).AndReturn(None)
1036 presubmit.ParseFiles(['random_file.txt'], None 1153 presubmit.ParseFiles(['random_file.txt'], None
1037 ).AndReturn([('M', 'random_file.txt')]) 1154 ).AndReturn([('M', 'random_file.txt')])
1038 output = self.mox.CreateMock(presubmit.PresubmitOutput) 1155 output = self.mox.CreateMock(presubmit.PresubmitOutput)
1039 output.should_continue().AndReturn(False) 1156 output.should_continue().AndReturn(False)
(...skipping 1703 matching lines...) Expand 10 before | Expand all | Expand 10 after
2743 owners_check=False) 2860 owners_check=False)
2744 self.assertEqual(1, len(results)) 2861 self.assertEqual(1, len(results))
2745 self.assertEqual( 2862 self.assertEqual(
2746 'Found line ending with white spaces in:', results[0]._message) 2863 'Found line ending with white spaces in:', results[0]._message)
2747 self.checkstdout('') 2864 self.checkstdout('')
2748 2865
2749 2866
2750 if __name__ == '__main__': 2867 if __name__ == '__main__':
2751 import unittest 2868 import unittest
2752 unittest.main() 2869 unittest.main()
OLDNEW
« rietveld.py ('K') | « rietveld.py ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698