Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import shutil | 5 import shutil |
| 6 import tempfile | 6 import tempfile |
| 7 import unittest | 7 import unittest |
| 8 import pdb | |
|
eseidel
2014/08/18 16:35:43
?
leviw_travelin_and_unemployed
2014/08/18 18:39:02
Whoops!
| |
| 8 | 9 |
| 9 from infra.tools.builder_alerts import buildbot | 10 from infra.tools.builder_alerts import buildbot |
| 10 | 11 |
| 11 | 12 |
| 12 class BuildCacheTest(unittest.TestCase): | 13 class BuildCacheTest(unittest.TestCase): |
| 13 def setUp(self): | 14 def setUp(self): |
| 14 self.cache_path = tempfile.mkdtemp() | 15 self.cache_path = tempfile.mkdtemp() |
| 15 | 16 |
| 16 def tearDown(self): | 17 def tearDown(self): |
| 17 shutil.rmtree(self.cache_path, ignore_errors=True) | 18 shutil.rmtree(self.cache_path, ignore_errors=True) |
| 18 | 19 |
| 19 def test_build_cache(self): | 20 def test_build_cache(self): |
| 20 cache = buildbot.BuildCache(self.cache_path) | 21 cache = buildbot.BuildCache(self.cache_path) |
| 21 | 22 |
| 22 test_key = 'foo/bar' | 23 test_key = 'foo/bar' |
| 23 self.assertFalse(cache.has(test_key)) | 24 self.assertFalse(cache.has(test_key)) |
| 24 | 25 |
| 25 test_data = ['test'] | 26 test_data = ['test'] |
| 26 cache.set(test_key, test_data) | 27 cache.set(test_key, test_data) |
| 27 # Set it a second time to hit the "already there" case. | 28 # Set it a second time to hit the "already there" case. |
| 28 cache.set(test_key, test_data) | 29 cache.set(test_key, test_data) |
| 29 | 30 |
| 30 self.assertTrue(cache.has(test_key)) | 31 self.assertTrue(cache.has(test_key)) |
| 31 self.assertEquals(cache.get(test_key), test_data) | 32 self.assertEquals(cache.get(test_key), test_data) |
| 32 | 33 |
| 33 self.assertIsNone(cache.get('does_not_exist')) | 34 self.assertIsNone(cache.get('does_not_exist')) |
| 34 self.assertIsNotNone(cache.key_age(test_key)) | 35 self.assertIsNotNone(cache.key_age(test_key)) |
| 35 | 36 |
| 37 def test_latest_builder_info_for_master(self): | |
| 38 k_example_master_json = { | |
| 39 "builders": { | |
| 40 "Win Builder": { | |
| 41 "basedir": "Win_Builder", | |
| 42 "cachedBuilds": [ | |
| 43 0, | |
| 44 1770, | |
| 45 1771 | |
| 46 ], | |
| 47 "category": "2windows", | |
| 48 "currentBuilds": [ | |
| 49 1772 | |
| 50 ], | |
| 51 "pendingBuilds": 7, | |
| 52 "slaves": [ | |
| 53 "build2-m1" | |
| 54 ], | |
| 55 "state": "building" | |
| 56 } | |
| 57 } | |
| 58 } | |
| 59 | |
| 60 def mock_fetch_build_json(cache, master_url, builder_name, build_number): | |
| 61 k_example_build_json = { | |
| 62 "blame": [ | |
| 63 "alexhenrie24@gmail.com@0039d316-1c4b-4281-b951-d872f2087c98", | |
| 64 "yoshiki@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98" | |
| 65 ], | |
| 66 "builderName": "Win Builder", | |
| 67 "currentStep": None, | |
| 68 "eta": None, | |
| 69 "number": 1771, | |
| 70 "properties": [ | |
| 71 [ | |
| 72 "build_archive_url", | |
| 73 "gs://chromium-win-archive/chromium.win/Win Builder/full-build-win32 _289623.zip", | |
| 74 "Annotation(package build)" | |
| 75 ], | |
| 76 [ | |
| 77 "buildbotURL", | |
| 78 "http://build.chromium.org/p/chromium.win/", | |
| 79 "master.cfg" | |
| 80 ], | |
| 81 [ | |
| 82 "buildername", | |
| 83 "Win Builder", | |
| 84 "Builder" | |
| 85 ], | |
| 86 [ | |
| 87 "buildnumber", | |
| 88 1771, | |
| 89 "Build" | |
| 90 ], | |
| 91 [ | |
| 92 "git_revision", | |
| 93 "7ddb6d39574175cdd237eca54537e84fb960d3b8", | |
| 94 "Change" | |
| 95 ], | |
| 96 [ | |
| 97 "got_nacl_revision", | |
| 98 13611, | |
| 99 "Annotation(bot_update)" | |
| 100 ], | |
| 101 [ | |
| 102 "got_nacl_revision_git", | |
| 103 "570e50beb76a2bdf6be4b345cbd47f225caf90af", | |
| 104 "Annotation(bot_update)" | |
| 105 ], | |
| 106 [ | |
| 107 "got_revision", | |
| 108 289623, | |
| 109 "Annotation(bot_update)" | |
| 110 ], | |
| 111 [ | |
| 112 "got_revision_git", | |
| 113 "7ddb6d39574175cdd237eca54537e84fb960d3b8", | |
| 114 "Annotation(bot_update)" | |
| 115 ], | |
| 116 [ | |
| 117 "got_swarming_client_revision", | |
| 118 "bbf1fcca7932d92cca9d7dab46ea271a7f6d61fb", | |
| 119 "Annotation(bot_update)" | |
| 120 ], | |
| 121 [ | |
| 122 "got_v8_revision", | |
| 123 23117, | |
| 124 "Annotation(bot_update)" | |
| 125 ], | |
| 126 [ | |
| 127 "got_v8_revision_git", | |
| 128 "f284b29e37d97d7ee9128055862179dcbda7e398", | |
| 129 "Annotation(bot_update)" | |
| 130 ], | |
| 131 [ | |
| 132 "got_webkit_revision", | |
| 133 180191, | |
| 134 "Annotation(bot_update)" | |
| 135 ], | |
| 136 [ | |
| 137 "got_webkit_revision_git", | |
| 138 "9df9a9e66fed3921ec1f620f92ea7333a9c18122", | |
| 139 "Annotation(bot_update)" | |
| 140 ], | |
| 141 [ | |
| 142 "got_webrtc_revision", | |
| 143 6886, | |
| 144 "Annotation(bot_update)" | |
| 145 ], | |
| 146 [ | |
| 147 "got_webrtc_revision_git", | |
| 148 "c2ef523233552340785557abce1129a0f61537eb", | |
| 149 "Annotation(bot_update)" | |
| 150 ], | |
| 151 [ | |
| 152 "mastername", | |
| 153 "chromium.win", | |
| 154 "master.cfg" | |
| 155 ] | |
| 156 ], | |
| 157 "steps": [ | |
| 158 { | |
| 159 "eta": None, | |
| 160 "expectations": [ | |
| 161 [ | |
| 162 "output", | |
| 163 863225, | |
| 164 748982.2582168579 | |
| 165 ] | |
| 166 ], | |
| 167 "hidden": False, | |
| 168 "isFinished": True, | |
| 169 "isStarted": True, | |
| 170 "logs": [ | |
| 171 [ | |
| 172 "preamble", | |
| 173 "http://build.chromium.org/p/chromium.win/builders/Win%20Builder /builds/1771/steps/steps/logs/preamble" | |
| 174 ], | |
| 175 [ | |
| 176 "stdio", | |
| 177 "http://build.chromium.org/p/chromium.win/builders/Win%20Builder /builds/1771/steps/steps/logs/stdio" | |
| 178 ] | |
| 179 ], | |
| 180 "name": "steps", | |
| 181 "results": [ | |
| 182 0, | |
| 183 [] | |
| 184 ], | |
| 185 "step_number": 0, | |
| 186 "text": [ | |
| 187 "running steps via annotated script" | |
| 188 ], | |
| 189 "times": [ | |
| 190 3.3, | |
| 191 4.4 | |
| 192 ], | |
| 193 "urls": {} | |
| 194 }, | |
| 195 { | |
| 196 "eta": None, | |
| 197 "expectations": [], | |
| 198 "hidden": False, | |
| 199 "isFinished": True, | |
| 200 "isStarted": True, | |
| 201 "logs": [ | |
| 202 [ | |
| 203 "stdio", | |
| 204 "http://build.chromium.org/p/chromium.win/builders/Win%20Builder /builds/1771/steps/setup_build/logs/stdio" | |
| 205 ], | |
| 206 [ | |
| 207 "run_recipe", | |
| 208 "http://build.chromium.org/p/chromium.win/builders/Win%20Builder /builds/1771/steps/setup_build/logs/run_recipe" | |
| 209 ] | |
| 210 ], | |
| 211 "name": "setup_build", | |
| 212 "results": [ | |
| 213 0, | |
| 214 [] | |
| 215 ], | |
| 216 "step_number": 3, | |
| 217 "text": [ | |
| 218 "setup_build", | |
| 219 "<br/>running recipe: \"chromium\"" | |
| 220 ], | |
| 221 "times": [ | |
| 222 5.5, | |
| 223 6.6 | |
| 224 ], | |
| 225 "urls": {} | |
| 226 } | |
| 227 ], | |
| 228 "text": [ | |
| 229 "build", | |
| 230 "successful" | |
| 231 ], | |
| 232 "times": [ | |
| 233 1.1, | |
| 234 2.2 | |
| 235 ], | |
| 236 } | |
| 237 return k_example_build_json | |
| 238 | |
| 239 cache = buildbot.BuildCache(self.cache_path) | |
| 240 old_fetch_build_json = buildbot.fetch_build_json | |
| 241 try: | |
| 242 buildbot.fetch_build_json = mock_fetch_build_json | |
| 243 | |
| 244 builder_info = buildbot.latest_builder_info_for_master(cache, | |
| 245 'http://build.chromium.org/p/chromium.webkit', k_example_master_json) | |
| 246 expected_builder_info = { | |
| 247 'chromium.webkit': { | |
| 248 'Win Builder': { | |
| 249 'state': 'building', | |
| 250 'lastUpdateTime': 2.2, | |
| 251 'revisions': { | |
| 252 'v8': 23117, | |
| 253 'chromium': 289623, | |
| 254 'nacl': 13611, | |
| 255 'blink': 180191 | |
| 256 } | |
| 257 } | |
| 258 } | |
| 259 } | |
| 260 self.assertEqual(builder_info, expected_builder_info) | |
| 261 finally: | |
| 262 buildbot.fetch_build_json = old_fetch_build_json | |
| 263 | |
| 264 def test_latest_update_time_for_builder(self): | |
| 265 k_example_last_build_times = { | |
| 266 "times": [ | |
| 267 10, | |
| 268 11 | |
| 269 ], | |
| 270 "steps": [ | |
| 271 { | |
| 272 "times": [ | |
| 273 20, | |
| 274 21 | |
| 275 ] | |
| 276 }, | |
| 277 { | |
| 278 "times": [ | |
| 279 22 | |
| 280 ] | |
| 281 } | |
| 282 ] | |
| 283 } | |
| 284 | |
| 285 # Test that we use end time when it's present, | |
| 286 time = buildbot.latest_update_time_for_builder(k_example_last_build_times) | |
| 287 self.assertEqual(time, 11) | |
| 288 | |
| 289 # And test that we iterate across step start times when it isn't. | |
| 290 k_example_last_build_times["times"][1] = None | |
| 291 time = buildbot.latest_update_time_for_builder(k_example_last_build_times) | |
| 292 self.assertEqual(time, 22) | |
| 293 | |
| 36 | 294 |
| 37 class BuildbotTest(unittest.TestCase): | 295 class BuildbotTest(unittest.TestCase): |
| 38 def test_master_name_from_url(self): | 296 def test_master_name_from_url(self): |
| 39 tests = [ | 297 tests = [ |
| 40 ('https://build.chromium.org/p/chromium.mac', 'chromium.mac'), | 298 ('https://build.chromium.org/p/chromium.mac', 'chromium.mac'), |
| 41 ('https://build.chromium.org/p/tryserver.blink', 'tryserver.blink') | 299 ('https://build.chromium.org/p/tryserver.blink', 'tryserver.blink') |
| 42 ] | 300 ] |
| 43 for master_url, master_name in tests: | 301 for master_url, master_name in tests: |
| 44 self.assertEquals(buildbot.master_name_from_url(master_url), master_name) | 302 self.assertEquals(buildbot.master_name_from_url(master_url), master_name) |
| 45 | 303 |
| 46 def test_build_url(self): | 304 def test_build_url(self): |
| 47 url = buildbot.build_url('https://foo.com/p/bar', 'baz', '12') | 305 url = buildbot.build_url('https://foo.com/p/bar', 'baz', '12') |
| 48 self.assertEquals(url, 'https://foo.com/p/bar/builders/baz/builds/12') | 306 self.assertEquals(url, 'https://foo.com/p/bar/builders/baz/builds/12') |
| 49 | 307 |
| 50 def test_cache_key_for_build(self): | 308 def test_cache_key_for_build(self): |
| 51 key = buildbot.cache_key_for_build('master', 'builder', 10) | 309 key = buildbot.cache_key_for_build('master', 'builder', 10) |
| 52 self.assertEquals(key, 'master/builder/10.json') | 310 self.assertEquals(key, 'master/builder/10.json') |
| 53 | 311 |
| 54 def test_is_in_progress(self): | 312 def test_is_in_progress(self): |
| 55 self.assertEqual(buildbot.is_in_progress({'results': None}), True) | 313 self.assertEqual(buildbot.is_in_progress({'results': None}), True) |
| 56 self.assertEqual(buildbot.is_in_progress({'results': 2}), False) | 314 self.assertEqual(buildbot.is_in_progress({'results': 2}), False) |
| OLD | NEW |