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

Side by Side Diff: Tools/TestResultServer/handlers/buildershandler_unittest.py

Issue 337433003: Switch buildershandler over to using the json mirror. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 6 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
OLDNEW
1 # Copyright (C) 2012 Google Inc. All rights reserved. 1 # Copyright (C) 2012 Google Inc. All rights reserved.
2 # 2 #
3 # Redistribution and use in source and binary forms, with or without 3 # Redistribution and use in source and binary forms, with or without
4 # modification, are permitted provided that the following conditions are 4 # modification, are permitted provided that the following conditions are
5 # met: 5 # met:
6 # 6 #
7 # * Redistributions of source code must retain the above copyright 7 # * Redistributions of source code must retain the above copyright
8 # notice, this list of conditions and the following disclaimer. 8 # notice, this list of conditions and the following disclaimer.
9 # * Redistributions in binary form must reproduce the above 9 # * Redistributions in binary form must reproduce the above
10 # copyright notice, this list of conditions and the following disclaimer 10 # copyright notice, this list of conditions and the following disclaimer
(...skipping 15 matching lines...) Expand all
26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 26 # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 28
29 import buildershandler 29 import buildershandler
30 import json 30 import json
31 import logging 31 import logging
32 import pprint 32 import pprint
33 import unittest 33 import unittest
34 34
35 class BuildersHandlerTest(unittest.TestCase): 35 class BuildersHandlerTest(unittest.TestCase):
36 def test_master_json_url(self):
37 self.assertEqual(buildershandler.master_json_url('http://base'), 'http:/ /base/json/builders')
38
39 def test_builder_json_url(self):
40 self.assertEqual(buildershandler.builder_json_url('http://base', 'dummyb uilder'), 'http://base/json/builders/dummybuilder')
41
42 def test_cached_build_json_url(self):
43 self.assertEqual(buildershandler.cached_build_json_url('http://base', 'd ummybuilder', 12345), 'http://base/json/builders/dummybuilder/builds/12345')
44 self.assertEqual(buildershandler.cached_build_json_url('http://base', 'd ummybuilder', '12345'), 'http://base/json/builders/dummybuilder/builds/12345')
45
46 def test_get_latest_build(self):
47 build_data = {'cachedBuilds': ['1', '2', '3'],
48 'currentBuilds': ['3'],
49 'basedir': 'fake'}
50 latest_build = buildershandler.get_latest_build(build_data)
51 self.assertEqual(latest_build, '2')
52
53 build_data = {'cachedBuilds': [],
54 'currentBuilds': ['1', '2', '3'],
55 'basedir': 'fake'}
56 latest_build = buildershandler.get_latest_build(build_data)
57 self.assertEqual(latest_build, '1')
58
59 build_data = {'cachedBuilds': ['1', '2', '3'],
60 'currentBuilds': ['1', '2', '3'],
61 'basedir': 'fake'}
62 latest_build = buildershandler.get_latest_build(build_data)
63 self.assertEqual(latest_build, '1')
64
65 build_data = {'cachedBuilds': [],
66 'currentBuilds': [],
67 'basedir': 'fake'}
68 latest_build = buildershandler.get_latest_build(build_data)
69 self.assertEqual(latest_build, None)
70
71 long_list = map(lambda x: str(x), xrange(1000, 1200))
72 current_build = long_list[-1]
73 build_data = {'cachedBuilds': long_list[:],
74 'currentBuilds': [current_build],
75 'basedir': 'fake'}
76 latest_build = buildershandler.get_latest_build(build_data)
77 self.assertEqual(latest_build, long_list[-2])
78
79 def test_fetch_buildbot_data(self): 36 def test_fetch_buildbot_data(self):
80 try: 37 try:
81 fetched_urls = [] 38 fetched_urls = []
82 39
83 def fake_fetch_json(url): 40 def fake_fetch_json(url):
84 fetched_urls.append(url) 41 fetched_urls.append(url)
85 if url == 'http://build.chromium.org/p/chromium.webkit/json/buil ders':
86 return {'WebKit Win': None, 'WebKit Linux': None, 'WebKit Ma c': None, 'WebKit Empty': None}
87 42
88 if url == 'http://build.chromium.org/p/chromium.webkit/json/buil ders/WebKit%20Linux': 43 if url == 'http://chrome-build-extract.appspot.com/get_master/ch romium.webkit':
89 return {'cachedBuilds': [1, 2], 'currentBuilds': []} 44 return {
90 if url == 'http://build.chromium.org/p/chromium.webkit/json/buil ders/WebKit%20Win': 45 'builders': {
91 return {'cachedBuilds': [1, 2], 'currentBuilds': []} 46 'WebKit Win': None, 'WebKit Linux': None, 'WebKit Ma c': None, 'WebKit Empty': None,
92 if url == 'http://build.chromium.org/p/chromium.webkit/json/buil ders/WebKit%20Mac': 47 }
93 return {'cachedBuilds': [1, 2], 'currentBuilds': []} 48 }
94 if url == 'http://build.chromium.org/p/chromium.webkit/json/buil ders/WebKit%20Empty':
95 return {'cachedBuilds': [], 'currentBuilds': []}
96 49
97 if url == 'http://build.chromium.org/p/chromium.webkit/json/buil ders/WebKit%20Linux/builds/2': 50 if url == 'http://chrome-build-extract.appspot.com/get_builds?bu ilder=WebKit%20Linux&master=chromium.webkit&num_builds=1':
98 return {'steps': [{'name': 'foo_tests_only'}, {'name': 'webk it_tests'}, {'name': 'browser_tests'}, {'name': 'mini_installer_test'}, {'name': 'archive_test_results'}, {'name': 'compile'}]} 51 return {
99 if url == 'http://build.chromium.org/p/chromium.webkit/json/buil ders/WebKit%20Win/builds/2': 52 'builds': [
100 return {'steps': [{'name': 'foo_tests_ignore'}, {'name': 'we bkit_tests'}, {'name': 'mini_installer_test'}, {'name': 'archive_test_results'}, {'name': 'compile'}]} 53 {'steps': [{'name': 'foo_tests_only'}, {'name': 'web kit_tests'}, {'name': 'browser_tests'}, {'name': 'mini_installer_test'}, {'name' : 'archive_test_results'}, {'name': 'compile'}]},
101 if url == 'http://build.chromium.org/p/chromium.webkit/json/buil ders/WebKit%20Mac/builds/2': 54 ],
102 return {'steps': [{'name': 'foo_tests_perf'}, {'name': 'brow ser_tests'}, {'name': 'mini_installer_test'}, {'name': 'archive_test_results'}, {'name': 'compile'}]} 55 }
56
57 if url == 'http://chrome-build-extract.appspot.com/get_builds?bu ilder=WebKit%20Win&master=chromium.webkit&num_builds=1':
58 return {
59 'builds': [
60 {'steps': [{'name': 'foo_tests_ignore'}, {'name': 'w ebkit_tests'}, {'name': 'mini_installer_test'}, {'name': 'archive_test_results'} , {'name': 'compile'}]},
61 ],
62 }
63
64 if url == 'http://chrome-build-extract.appspot.com/get_builds?bu ilder=WebKit%20Mac&master=chromium.webkit&num_builds=1':
65 return {
66 'builds': [
67 {'steps': [{'name': 'foo_tests_perf'}, {'name': 'bro wser_tests'}, {'name': 'mini_installer_test'}, {'name': 'archive_test_results'}, {'name': 'compile'}]},
68 ],
69 }
70
71 if url == 'http://chrome-build-extract.appspot.com/get_builds?bu ilder=WebKit%20Empty&master=chromium.webkit&num_builds=1':
72 return {'builds': []}
103 73
104 logging.error('Cannot fetch fake url: %s' % url) 74 logging.error('Cannot fetch fake url: %s' % url)
105 75
106 old_fetch_json = buildershandler.fetch_json 76 old_fetch_json = buildershandler.fetch_json
107 buildershandler.fetch_json = fake_fetch_json 77 buildershandler.fetch_json = fake_fetch_json
108 78
109 masters = [ 79 masters = [
110 {'name': 'ChromiumWebkit', 'url': 'http://build.chromium.org/p/c hromium.webkit'}, 80 {'name': 'ChromiumWebkit', 'url_name': 'chromium.webkit'},
111 ] 81 ]
112 82
113 buildbot_data = buildershandler.fetch_buildbot_data(masters, True) 83 buildbot_data = buildershandler.fetch_buildbot_data(masters)
114 84
115 expected_fetched_urls = [ 85 expected_fetched_urls = [
116 'http://build.chromium.org/p/chromium.webkit/json/builders', 86 'http://chrome-build-extract.appspot.com/get_master/chromium.web kit',
117 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKi t%20Linux', 87 'http://chrome-build-extract.appspot.com/get_builds?builder=WebK it%20Win&master=chromium.webkit&num_builds=1',
118 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKi t%20Linux/builds/2', 88 'http://chrome-build-extract.appspot.com/get_builds?builder=WebK it%20Mac&master=chromium.webkit&num_builds=1',
119 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKi t%20Mac', 89 'http://chrome-build-extract.appspot.com/get_builds?builder=WebK it%20Empty&master=chromium.webkit&num_builds=1',
120 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKi t%20Mac/builds/2', 90 'http://chrome-build-extract.appspot.com/get_builds?builder=WebK it%20Linux&master=chromium.webkit&num_builds=1',
121 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKi t%20Win',
122 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKi t%20Win/builds/2',
123 'http://build.chromium.org/p/chromium.webkit/json/builders/WebKi t%20Empty',
124 ] 91 ]
125 self.assertEqual(set(fetched_urls), set(expected_fetched_urls)) 92 self.assertEqual(set(fetched_urls), set(expected_fetched_urls))
126 93
127 expected_masters = { 94 expected_masters = {
128 'masters': [{ 95 'masters': [{
129 'url': 'http://build.chromium.org/p/chromium.webkit',
130 'tests': { 96 'tests': {
131 'browser_tests': {'builders': ['WebKit Linux', 'WebKit M ac']}, 97 'browser_tests': {'builders': ['WebKit Linux', 'WebKit M ac']},
132 'mini_installer_test': {'builders': ['WebKit Linux', 'We bKit Mac', 'WebKit Win']}, 98 'mini_installer_test': {'builders': ['WebKit Linux', 'We bKit Mac', 'WebKit Win']},
133 'layout-tests': {'builders': ['WebKit Linux', 'WebKit Wi n']}}, 99 'layout-tests': {'builders': ['WebKit Linux', 'WebKit Wi n']}},
134 'name': 'ChromiumWebkit'}], 100 'name': 'ChromiumWebkit',
101 'url_name': 'chromium.webkit',
102 }],
135 "no_upload_test_types": buildershandler.TEST_STEPS_THAT_DO_NOT_U PLOAD_YET, 103 "no_upload_test_types": buildershandler.TEST_STEPS_THAT_DO_NOT_U PLOAD_YET,
136 } 104 }
137 expected_json = buildershandler.dump_json(expected_masters) 105 expected_json = buildershandler.dump_json(expected_masters)
138 106
139 self.assertEqual(buildbot_data, expected_json) 107 self.assertEqual(buildbot_data, expected_json)
140 finally: 108 finally:
141 buildershandler.fetch_json = old_fetch_json 109 buildershandler.fetch_json = old_fetch_json
142 110
143 def test_fetch_buildbot_data_failure(self): 111 def test_fetch_buildbot_data_failure(self):
144 try: 112 try:
145 fetched_urls = [] 113 fetched_urls = []
146 114
147 def fake_fetch_json(url): 115 def fake_fetch_json(url):
148 fetched_urls.append(url) 116 fetched_urls.append(url)
149 if url == 'http://build.chromium.org/p/chromium.webkit/json/buil ders': 117
118 if url == 'http://chrome-build-extract.appspot.com/get_master/ch romium.webkit':
150 return None 119 return None
151 120
152 if url.endswith('chromium.gpu/json/builders'): 121 if url == 'http://chrome-build-extract.appspot.com/get_master/ch romium.gpu':
153 return {'Win GPU': None, 'Win Empty': None} 122 return {
154 if url.endswith('Win%20GPU'): 123 'builders': {
155 return {'cachedBuilds': [1, 2], 'currentBuilds': []} 124 'Win GPU': None, 'Win Empty': None,
156 if url.endswith('Win%20Empty'): 125 }
157 return {'cachedBuilds': [], 'currentBuilds': []} 126 }
158 if url.endswith('Win%20GPU/builds/2'):
159 return {'steps': [{'name': 'gpu_unittests'}, {'name': 'archi ve_test_results'}, {'name': 'compile'}]}
160 127
161 if url.endswith('chromium.fyi/json/builders'): 128 if url == 'http://chrome-build-extract.appspot.com/get_master/ch romium.fyi':
162 return {'Mac FYI': None} 129 return {
163 if url.endswith('Mac%20FYI'): 130 'builders': {
164 return {'cachedBuilds': [1, 2], 'currentBuilds': []} 131 'Mac FYI': None,
165 if url.endswith('Mac%20FYI/builds/2'): 132 }
166 return {'steps': [{'name': 'fyi_tests'}, {'name': 'archive_t est_results'}, {'name': 'compile'}]} 133 }
134
135 if (url == 'http://chrome-build-extract.appspot.com/get_builds?b uilder=Win%20Empty&master=chromium.gpu&num_builds=1'
136 or url == 'http://chrome-build-extract.appspot.com/get_build s?builder=Win%20GPU&master=chromium.gpu&num_builds=1'):
137 return {
138 'builds': [
139 {'steps': []},
140 ],
141 }
142
143 logging.error('Cannot fetch fake url: %s' % url)
167 144
168 old_fetch_json = buildershandler.fetch_json 145 old_fetch_json = buildershandler.fetch_json
169 buildershandler.fetch_json = fake_fetch_json 146 buildershandler.fetch_json = fake_fetch_json
170 147
171 masters = [ 148 masters = [
172 {'name': 'ChromiumGPU', 'url': 'http://build.chromium.org/p/chro mium.gpu'}, 149 {'name': 'ChromiumGPU', 'url_name': 'chromium.gpu'},
173 {'name': 'ChromiumWebkit', 'url': 'http://build.chromium.org/p/c hromium.webkit'}, 150 {'name': 'ChromiumWebkit', 'url_name': 'chromium.webkit'},
174 {'name': 'ChromiumFYI', 'url': 'http://build.chromium.org/p/chro mium.fyi'}, 151 {'name': 'ChromiumFYI', 'url_name': 'chromium.fyi'},
175 ] 152 ]
176 153
177 expected_fetched_urls = [ 154 expected_fetched_urls = [
178 'http://build.chromium.org/p/chromium.gpu/json/builders', 155 'http://chrome-build-extract.appspot.com/get_master/chromium.web kit',
179 'http://build.chromium.org/p/chromium.gpu/json/builders/Win%20Em pty', 156 'http://chrome-build-extract.appspot.com/get_master/chromium.gpu ',
180 'http://build.chromium.org/p/chromium.gpu/json/builders/Win%20GP U', 157 'http://chrome-build-extract.appspot.com/get_builds?builder=Win% 20GPU&master=chromium.gpu&num_builds=1',
181 'http://build.chromium.org/p/chromium.gpu/json/builders/Win%20GP U/builds/2', 158 'http://chrome-build-extract.appspot.com/get_builds?builder=Win% 20Empty&master=chromium.gpu&num_builds=1',
182 'http://build.chromium.org/p/chromium.webkit/json/builders',
183 'http://build.chromium.org/p/chromium.fyi/json/builders',
184 'http://build.chromium.org/p/chromium.fyi/json/builders/Mac%20FY I',
185 'http://build.chromium.org/p/chromium.fyi/json/builders/Mac%20FY I/builds/2',
186 ]
187 # Should not throw any exception.
188 buildbot_data = buildershandler.fetch_buildbot_data(masters, True)
189 self.assertEqual(set(expected_fetched_urls), set(fetched_urls))
190
191 fetched_urls_all = fetched_urls[:]
192 fetched_urls = []
193 expected_fetched_urls = [
194 'http://build.chromium.org/p/chromium.gpu/json/builders',
195 'http://build.chromium.org/p/chromium.gpu/json/builders/Win%20Em pty',
196 'http://build.chromium.org/p/chromium.gpu/json/builders/Win%20GP U',
197 'http://build.chromium.org/p/chromium.gpu/json/builders/Win%20GP U/builds/2',
198 'http://build.chromium.org/p/chromium.webkit/json/builders',
199 ] 159 ]
200 with self.assertRaises(buildershandler.FetchBuildersException): 160 with self.assertRaises(buildershandler.FetchBuildersException):
201 buildbot_data = buildershandler.fetch_buildbot_data(masters) 161 buildbot_data = buildershandler.fetch_buildbot_data(masters)
202 self.assertEqual(set(expected_fetched_urls), set(fetched_urls)) 162 self.assertEqual(set(expected_fetched_urls), set(fetched_urls))
203 self.assertNotEqual(set(fetched_urls), set(fetched_urls_all))
204 163
205 finally: 164 finally:
206 buildershandler.fetch_json = old_fetch_json 165 buildershandler.fetch_json = old_fetch_json
207 166
208 167
209 if __name__ == '__main__': 168 if __name__ == '__main__':
210 unittest.main() 169 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698