OLD | NEW |
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 Loading... |
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() |
OLD | NEW |