OLD | NEW |
| (Empty) |
1 # -*- encoding:utf-8 -*- | |
2 # Copyright 2015 The Chromium Authors. All rights reserved. | |
3 # Use of this source code is governed by a BSD-style license that can be | |
4 # found in the LICENSE file. | |
5 | |
6 import unittest | |
7 | |
8 from infra_libs import event_mon | |
9 from infra_libs.event_mon import config, router | |
10 from infra_libs.event_mon import monitoring | |
11 from infra_libs.event_mon.protos.chrome_infra_log_pb2 import ( | |
12 ChromeInfraEvent, ServiceEvent, BuildEvent) | |
13 from infra_libs.event_mon.protos.log_request_lite_pb2 import LogRequestLite | |
14 from infra_libs.event_mon.protos.goma_stats_pb2 import GomaStats | |
15 | |
16 | |
17 class ConstantTest(unittest.TestCase): | |
18 def test_constants(self): | |
19 # Make sure constants have not been renamed since they're part of the API. | |
20 self.assertTrue(event_mon.EVENT_TYPES) | |
21 self.assertTrue(event_mon.TIMESTAMP_KINDS) | |
22 self.assertTrue(event_mon.BUILD_EVENT_TYPES) | |
23 self.assertTrue(event_mon.BUILD_RESULTS) | |
24 | |
25 | |
26 class GetServiceEventTest(unittest.TestCase): | |
27 | |
28 # We have to setup and tear down event_mon for each test to avoid | |
29 # interactions between tests because event_mon stores a global state. | |
30 def setUp(self): | |
31 event_mon.setup_monitoring(run_type='dry') | |
32 | |
33 def tearDown(self): | |
34 event_mon.close() | |
35 | |
36 def test_get_service_event_default(self): | |
37 self.assertIsInstance(config._router, router._Router) | |
38 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
39 | |
40 log_event = monitoring._get_service_event('START').log_event() | |
41 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
42 self.assertTrue(log_event.HasField('event_time_ms')) | |
43 self.assertTrue(log_event.HasField('source_extension')) | |
44 | |
45 # Check that source_extension deserializes to the correct thing. | |
46 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
47 self.assertTrue(event.HasField('service_event')) | |
48 self.assertTrue(event.service_event.HasField('type')) | |
49 self.assertEquals(event.service_event.type, ServiceEvent.START) | |
50 self.assertEquals(event.timestamp_kind, ChromeInfraEvent.BEGIN) | |
51 | |
52 def test_get_service_event_correct_versions(self): | |
53 self.assertIsInstance(config._router, router._Router) | |
54 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
55 | |
56 code_version = [ | |
57 {'source_url': 'https://fake.url/thing', | |
58 'revision': '708329c2aeece8aac33af6a5a772ffb14b55903f'}, | |
59 {'source_url': 'svn://fake_svn.url/other_thing', | |
60 'revision': '123456'}, | |
61 {'source_url': 'https://other_fake.url/yet_another_thing', | |
62 'version': 'v2.0'}, | |
63 {'source_url': 'https://other_fake2.url/yet_another_thing2', | |
64 'dirty': True}, | |
65 ] | |
66 | |
67 log_event = monitoring._get_service_event( | |
68 'START', code_version=code_version).log_event() | |
69 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
70 code_version_p = event.service_event.code_version | |
71 self.assertEquals(len(code_version_p), len(code_version)) | |
72 | |
73 self.assertEqual(code_version_p[0].source_url, | |
74 code_version[0]['source_url']) | |
75 self.assertEqual(code_version_p[0].git_hash, code_version[0]['revision']) | |
76 self.assertFalse(code_version_p[0].HasField('svn_revision')) | |
77 | |
78 self.assertEqual(code_version_p[1].source_url, | |
79 code_version[1]['source_url']) | |
80 self.assertEqual(code_version_p[1].svn_revision, | |
81 int(code_version[1]['revision'])) | |
82 self.assertFalse(code_version_p[1].HasField('git_hash')) | |
83 | |
84 self.assertEqual(code_version_p[2].source_url, | |
85 code_version[2]['source_url']) | |
86 self.assertFalse(code_version_p[2].HasField('svn_revision')) | |
87 self.assertEqual(code_version_p[2].version, | |
88 code_version[2]['version']) | |
89 | |
90 self.assertEqual(code_version_p[3].source_url, | |
91 code_version[3]['source_url']) | |
92 self.assertEqual(code_version_p[3].dirty, True) | |
93 | |
94 def test_get_service_event_stop(self): | |
95 self.assertIsInstance(config._router, router._Router) | |
96 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
97 | |
98 log_event = monitoring._get_service_event('STOP').log_event() | |
99 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
100 self.assertEqual(event.service_event.type, ServiceEvent.STOP) | |
101 self.assertEquals(event.timestamp_kind, ChromeInfraEvent.END) | |
102 | |
103 def test_get_service_event_update(self): | |
104 self.assertIsInstance(config._router, router._Router) | |
105 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
106 | |
107 log_event = monitoring._get_service_event('UPDATE').log_event() | |
108 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
109 self.assertEqual(event.service_event.type, ServiceEvent.UPDATE) | |
110 self.assertEquals(event.timestamp_kind, ChromeInfraEvent.POINT) | |
111 | |
112 def test_get_service_event_crash_simple(self): | |
113 self.assertIsInstance(config._router, router._Router) | |
114 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
115 | |
116 log_event = monitoring._get_service_event('CRASH').log_event() | |
117 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
118 self.assertEqual(event.service_event.type, ServiceEvent.CRASH) | |
119 self.assertEquals(event.timestamp_kind, ChromeInfraEvent.END) | |
120 | |
121 def test_get_service_event_crash_with_ascii_trace(self): | |
122 self.assertIsInstance(config._router, router._Router) | |
123 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
124 | |
125 stack_trace = 'A nice ascii string' | |
126 log_event = monitoring._get_service_event( | |
127 'CRASH', stack_trace=stack_trace).log_event() | |
128 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
129 self.assertEqual(event.service_event.type, ServiceEvent.CRASH) | |
130 self.assertEqual(event.service_event.stack_trace, stack_trace) | |
131 self.assertEquals(event.timestamp_kind, ChromeInfraEvent.END) | |
132 | |
133 def test_get_service_event_crash_with_unicode_trace(self): | |
134 self.assertIsInstance(config._router, router._Router) | |
135 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
136 | |
137 stack_trace = u"Soyez prêt à un étrange goût de Noël." | |
138 log_event = monitoring._get_service_event( | |
139 'CRASH', stack_trace=stack_trace).log_event() | |
140 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
141 self.assertEqual(event.service_event.type, ServiceEvent.CRASH) | |
142 self.assertEqual(event.service_event.stack_trace, stack_trace) | |
143 self.assertEquals(event.timestamp_kind, ChromeInfraEvent.END) | |
144 | |
145 def test_get_service_event_crash_with_big_trace(self): | |
146 self.assertIsInstance(config._router, router._Router) | |
147 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
148 | |
149 stack_trace = "this is way too long" * 55 | |
150 self.assertTrue(len(stack_trace) > monitoring.STACK_TRACE_MAX_SIZE) | |
151 log_event = monitoring._get_service_event( | |
152 'CRASH', stack_trace=stack_trace).log_event() | |
153 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
154 self.assertEqual(event.service_event.type, ServiceEvent.CRASH) | |
155 self.assertEqual(len(event.service_event.stack_trace), | |
156 monitoring.STACK_TRACE_MAX_SIZE) | |
157 self.assertEquals(event.timestamp_kind, ChromeInfraEvent.END) | |
158 | |
159 def test_get_service_event_crash_invalid_trace(self): | |
160 self.assertIsInstance(config._router, router._Router) | |
161 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
162 | |
163 # This is not a stacktrace | |
164 stack_trace = 123456 | |
165 # Should not crash | |
166 log_event = monitoring._get_service_event( | |
167 'CRASH', stack_trace=stack_trace).log_event() | |
168 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
169 | |
170 # Send only valid data this time | |
171 self.assertEqual(event.service_event.type, ServiceEvent.CRASH) | |
172 self.assertFalse(event.service_event.HasField('stack_trace')) | |
173 | |
174 def test_get_service_event_trace_without_crash(self): | |
175 self.assertIsInstance(config._router, router._Router) | |
176 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
177 | |
178 stack_trace = 'A nice ascii string' | |
179 log_event = monitoring._get_service_event( | |
180 'START', stack_trace=stack_trace).log_event() | |
181 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
182 | |
183 # Make sure we send even invalid data. | |
184 self.assertEqual(event.service_event.type, ServiceEvent.START) | |
185 self.assertEqual(event.service_event.stack_trace, stack_trace) | |
186 self.assertEquals(event.timestamp_kind, ChromeInfraEvent.BEGIN) | |
187 | |
188 def test_get_service_event_with_non_default_service_name(self): | |
189 self.assertIsInstance(config._router, router._Router) | |
190 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
191 | |
192 log_event = monitoring._get_service_event( | |
193 'START', service_name='my.nice.service.name').log_event() | |
194 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
195 self.assertTrue(log_event.HasField('event_time_ms')) | |
196 self.assertTrue(log_event.HasField('source_extension')) | |
197 | |
198 # Check that source_extension deserializes to the right thing. | |
199 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
200 self.assertTrue(event.HasField('service_event')) | |
201 self.assertTrue(event.service_event.HasField('type')) | |
202 self.assertEquals(event.service_event.type, ServiceEvent.START) | |
203 self.assertEquals(event.event_source.service_name, 'my.nice.service.name') | |
204 | |
205 def test_get_service_event_with_unicode_service_name(self): | |
206 self.assertIsInstance(config._router, router._Router) | |
207 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
208 service_name = u'à_la_française_hé_oui' | |
209 log_event = monitoring._get_service_event( | |
210 'START', service_name=service_name).log_event() | |
211 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
212 self.assertTrue(log_event.HasField('event_time_ms')) | |
213 self.assertTrue(log_event.HasField('source_extension')) | |
214 | |
215 # Check that source_extension deserializes to the right thing. | |
216 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
217 self.assertTrue(event.HasField('service_event')) | |
218 self.assertTrue(event.service_event.HasField('type')) | |
219 self.assertEquals(event.service_event.type, ServiceEvent.START) | |
220 self.assertEquals(event.event_source.service_name, service_name) | |
221 self.assertEquals(event.timestamp_kind, ChromeInfraEvent.BEGIN) | |
222 | |
223 class SendServiceEventTest(unittest.TestCase): | |
224 def setUp(self): | |
225 event_mon.setup_monitoring(run_type='dry') | |
226 | |
227 def tearDown(self): | |
228 event_mon.close() | |
229 | |
230 def test_send_service_event_bad_versions(self): | |
231 # Check that an invalid version does not cause any exception. | |
232 self.assertIsInstance(config._router, router._Router) | |
233 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
234 | |
235 code_version = [{}, {'revision': 'https://fake.url'}] | |
236 log_event = monitoring._get_service_event( | |
237 'START', code_version=code_version).log_event() | |
238 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
239 self.assertTrue(event.HasField('service_event')) | |
240 self.assertTrue(event.service_event.HasField('type')) | |
241 self.assertEqual(len(event.service_event.code_version), 0) | |
242 | |
243 def test_send_service_event_bad_type(self): | |
244 # Check that an invalid type for code_version does not raise | |
245 # any exception. | |
246 | |
247 code_versions = [None, 123, 'string', | |
248 [None], [123], ['string'], [['list']]] | |
249 for code_version in code_versions: | |
250 log_event = monitoring._get_service_event( | |
251 'START', code_version=code_version).log_event() | |
252 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
253 self.assertTrue(event.HasField('service_event')) | |
254 self.assertTrue(event.service_event.HasField('type')) | |
255 self.assertEqual(len(event.service_event.code_version), 0) | |
256 | |
257 def test_send_service_event_smoke(self): | |
258 self.assertIsInstance(config._router, router._Router) | |
259 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
260 | |
261 self.assertTrue(event_mon.send_service_event('START')) | |
262 self.assertTrue(event_mon.send_service_event('START', | |
263 timestamp_kind=None)) | |
264 self.assertTrue(event_mon.send_service_event('START', | |
265 timestamp_kind='BEGIN')) | |
266 self.assertTrue(event_mon.send_service_event('STOP', | |
267 timestamp_kind='END', | |
268 event_timestamp=1234)) | |
269 | |
270 def test_send_service_errors(self): | |
271 self.assertIsInstance(config._router, router._Router) | |
272 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
273 | |
274 self.assertFalse(event_mon.send_service_event('invalid')) | |
275 self.assertFalse(event_mon.send_service_event('START', | |
276 timestamp_kind='invalid')) | |
277 self.assertFalse(event_mon.send_service_event( | |
278 'START', event_timestamp='2015-01-25')) | |
279 | |
280 | |
281 class GetBuildEventTest(unittest.TestCase): | |
282 def setUp(self): | |
283 event_mon.setup_monitoring(run_type='dry') | |
284 | |
285 def tearDown(self): | |
286 event_mon.close() | |
287 | |
288 def test_get_build_event_default(self): | |
289 hostname = 'bot.host.name' | |
290 build_name = 'build_name' | |
291 log_event = monitoring.get_build_event( | |
292 'BUILD', hostname, build_name).log_event() | |
293 | |
294 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
295 self.assertTrue(log_event.HasField('event_time_ms')) | |
296 self.assertTrue(log_event.HasField('source_extension')) | |
297 | |
298 # Check that source_extension deserializes to the right thing. | |
299 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
300 self.assertTrue(event.HasField('build_event')) | |
301 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
302 self.assertEquals(event.build_event.host_name, hostname) | |
303 self.assertEquals(event.build_event.build_name, build_name) | |
304 | |
305 def test_get_build_event_with_patch_url(self): | |
306 patch_url = 'http://foo.bar/123#456' | |
307 log_event = monitoring.get_build_event( | |
308 'BUILD', 'bot.host.name', 'build_name', patch_url=patch_url).log_event() | |
309 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
310 | |
311 # Check that source_extension deserializes to the right thing. | |
312 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
313 self.assertTrue(event.HasField('build_event')) | |
314 self.assertEquals(event.build_event.patch_url, patch_url) | |
315 | |
316 def test_get_build_event_with_bbucket_id(self): | |
317 log_event = monitoring.get_build_event( | |
318 'BUILD', 'bot.host.name', 'build_name', bbucket_id=123).log_event() | |
319 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
320 | |
321 # Check that source_extension deserializes to the right thing. | |
322 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
323 self.assertTrue(event.HasField('build_event')) | |
324 self.assertEquals(event.build_event.bbucket_id, 123) | |
325 | |
326 # Try invalid value. This should not throw any exceptions. | |
327 log_event = monitoring.get_build_event( | |
328 'BUILD', 'bot.host.name', 'build_name', bbucket_id='foo').log_event() | |
329 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
330 | |
331 def test_get_build_event_with_category(self): | |
332 log_event = monitoring.get_build_event( | |
333 'BUILD', 'bot.host.name', 'build_name', | |
334 category='git_cl_try').log_event() | |
335 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
336 | |
337 # Check that source_extension deserializes to the right thing. | |
338 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
339 self.assertTrue(event.HasField('build_event')) | |
340 self.assertEquals( | |
341 event.build_event.category, BuildEvent.CATEGORY_GIT_CL_TRY) | |
342 | |
343 # Try unknown value. Should produce CATEGORY_UNKNOWN. | |
344 log_event = monitoring.get_build_event( | |
345 'BUILD', 'bot.host.name', 'build_name', category='foobar').log_event() | |
346 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
347 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
348 self.assertTrue(event.HasField('build_event')) | |
349 self.assertEquals( | |
350 event.build_event.category, BuildEvent.CATEGORY_UNKNOWN) | |
351 | |
352 # Try empty value. Should not set category. | |
353 log_event = monitoring.get_build_event( | |
354 'BUILD', 'bot.host.name', 'build_name', category='').log_event() | |
355 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
356 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
357 self.assertTrue(event.HasField('build_event')) | |
358 self.assertFalse(event.build_event.HasField('category')) | |
359 | |
360 def test_get_build_event_invalid_type(self): | |
361 # An invalid type is a critical error. | |
362 log_event = monitoring.get_build_event('INVALID_TYPE', | |
363 'bot.host.name', | |
364 'build_name').log_event() | |
365 self.assertIsNone(log_event) | |
366 | |
367 def test_get_build_event_invalid_build_name(self): | |
368 # an invalid builder name is not a critical error. | |
369 hostname = 'bot.host.name' | |
370 log_event = monitoring.get_build_event('BUILD', hostname, '').log_event() | |
371 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
372 | |
373 # Check that source_extension deserializes to the right thing. | |
374 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
375 self.assertTrue(event.HasField('build_event')) | |
376 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
377 self.assertEquals(event.build_event.host_name, hostname) | |
378 | |
379 self.assertFalse(event.build_event.HasField('build_name')) | |
380 | |
381 def test_get_build_event_invalid_hostname(self): | |
382 # an invalid hostname is not a critical error. | |
383 builder_name = 'builder_name' | |
384 log_event = monitoring.get_build_event( | |
385 'BUILD', None, builder_name).log_event() | |
386 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
387 | |
388 # Check that source_extension deserializes to the right thing. | |
389 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
390 self.assertTrue(event.HasField('build_event')) | |
391 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
392 self.assertEquals(event.build_event.build_name, builder_name) | |
393 | |
394 self.assertFalse(event.build_event.HasField('host_name')) | |
395 | |
396 def test_get_build_event_with_build_zero(self): | |
397 # testing 0 is important because bool(0) == False | |
398 hostname = 'bot.host.name' | |
399 build_name = 'build_name' | |
400 build_number = 0 | |
401 build_scheduling_time = 123456789 | |
402 log_event = monitoring.get_build_event( | |
403 'BUILD', | |
404 hostname, | |
405 build_name, | |
406 build_number=build_number, | |
407 build_scheduling_time=build_scheduling_time).log_event() | |
408 | |
409 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
410 | |
411 # Check that source_extension deserializes to the right thing. | |
412 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
413 self.assertTrue(event.HasField('build_event')) | |
414 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
415 self.assertEquals(event.build_event.host_name, hostname) | |
416 self.assertEquals(event.build_event.build_name, build_name) | |
417 self.assertEquals(event.build_event.build_number, build_number) | |
418 self.assertEquals(event.build_event.build_scheduling_time_ms, | |
419 build_scheduling_time) | |
420 | |
421 def test_get_build_event_with_build_non_zero(self): | |
422 hostname = 'bot.host.name' | |
423 build_name = 'build_name' | |
424 build_number = 314159265 # int32 | |
425 build_scheduling_time = 123456789 | |
426 log_event = monitoring.get_build_event( | |
427 'BUILD', | |
428 hostname, | |
429 build_name, | |
430 build_number=build_number, | |
431 build_scheduling_time=build_scheduling_time).log_event() | |
432 | |
433 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
434 | |
435 # Check that source_extension deserializes to the right thing. | |
436 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
437 self.assertTrue(event.HasField('build_event')) | |
438 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
439 self.assertEquals(event.build_event.host_name, hostname) | |
440 self.assertEquals(event.build_event.build_name, build_name) | |
441 self.assertEquals(event.build_event.build_number, build_number) | |
442 self.assertEquals(event.build_event.build_scheduling_time_ms, | |
443 build_scheduling_time) | |
444 | |
445 def test_get_build_event_invalid_scheduler(self): | |
446 # Providing a build number on a scheduler event is invalid. | |
447 hostname = 'bot.host.name' | |
448 build_name = 'build_name' | |
449 build_number = 314159265 # int32 | |
450 log_event = monitoring.get_build_event( | |
451 'SCHEDULER', | |
452 hostname, | |
453 build_name, | |
454 build_number=build_number).log_event() | |
455 | |
456 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
457 | |
458 # Check that source_extension deserializes to the right thing. | |
459 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
460 self.assertTrue(event.HasField('build_event')) | |
461 self.assertEquals(event.build_event.type, BuildEvent.SCHEDULER) | |
462 self.assertEquals(event.build_event.host_name, hostname) | |
463 self.assertEquals(event.build_event.build_name, build_name) | |
464 self.assertEquals(event.build_event.build_number, build_number) | |
465 | |
466 self.assertFalse(event.build_event.HasField('build_scheduling_time_ms')) | |
467 | |
468 def test_get_build_event_invalid_buildname(self): | |
469 hostname = 'bot.host.name' | |
470 build_name = 'build_name' | |
471 build_number = 314159265 # int32 | |
472 build_scheduling_time = 123456789 | |
473 log_event = monitoring.get_build_event( | |
474 'BUILD', | |
475 hostname, | |
476 build_name, | |
477 build_number=build_number, | |
478 build_scheduling_time=build_scheduling_time).log_event() | |
479 | |
480 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
481 | |
482 # Check that source_extension deserializes to the right thing. | |
483 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
484 self.assertTrue(event.HasField('build_event')) | |
485 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
486 self.assertEquals(event.build_event.host_name, hostname) | |
487 self.assertEquals(event.build_event.build_name, build_name) | |
488 self.assertEquals(event.build_event.build_number, build_number) | |
489 self.assertEquals(event.build_event.build_scheduling_time_ms, | |
490 build_scheduling_time) | |
491 | |
492 def test_get_build_event_missing_build_number(self): | |
493 hostname = 'bot.host.name' | |
494 build_name = 'build_name' | |
495 build_scheduling_time = 123456789 | |
496 log_event = monitoring.get_build_event( | |
497 'BUILD', | |
498 hostname, | |
499 build_name, | |
500 build_scheduling_time=build_scheduling_time).log_event() | |
501 | |
502 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
503 | |
504 # Check that source_extension deserializes to the right thing. | |
505 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
506 self.assertTrue(event.HasField('build_event')) | |
507 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
508 self.assertEquals(event.build_event.host_name, hostname) | |
509 self.assertEquals(event.build_event.build_name, build_name) | |
510 self.assertEquals(event.build_event.build_scheduling_time_ms, | |
511 build_scheduling_time) | |
512 | |
513 self.assertFalse(event.build_event.HasField('build_number')) | |
514 | |
515 def test_get_build_event_with_default_build_number(self): | |
516 event_mon.setup_monitoring() | |
517 orig_event = event_mon.get_default_event() | |
518 build_number = 123 | |
519 orig_event.build_event.build_number = build_number | |
520 event_mon.set_default_event(orig_event) | |
521 | |
522 hostname = 'bot.host.name' | |
523 build_name = 'build_name' | |
524 build_scheduling_time = 123456789 | |
525 log_event = monitoring.get_build_event( | |
526 'BUILD', | |
527 hostname, | |
528 build_name, | |
529 build_scheduling_time=build_scheduling_time).log_event() | |
530 | |
531 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
532 | |
533 # Check that source_extension deserializes to the right thing. | |
534 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
535 self.assertTrue(event.HasField('build_event')) | |
536 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
537 self.assertEquals(event.build_event.host_name, hostname) | |
538 self.assertEquals(event.build_event.build_name, build_name) | |
539 self.assertEquals(event.build_event.build_scheduling_time_ms, | |
540 build_scheduling_time) | |
541 | |
542 self.assertEquals(event.build_event.build_number, build_number) | |
543 | |
544 def test_get_build_event_build_number_overwrites_default(self): | |
545 event_mon.setup_monitoring() | |
546 orig_event = event_mon.get_default_event() | |
547 orig_event.build_event.build_number = 123 | |
548 event_mon.set_default_event(orig_event) | |
549 | |
550 hostname = 'bot.host.name' | |
551 build_name = 'build_name' | |
552 build_number = 0 # zero should override the default value | |
553 build_scheduling_time = 123456789 | |
554 log_event = monitoring.get_build_event( | |
555 'BUILD', | |
556 hostname, | |
557 build_name, | |
558 build_number=build_number, | |
559 build_scheduling_time=build_scheduling_time).log_event() | |
560 | |
561 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
562 | |
563 # Check that source_extension deserializes to the right thing. | |
564 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
565 self.assertTrue(event.HasField('build_event')) | |
566 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
567 self.assertEquals(event.build_event.host_name, hostname) | |
568 self.assertEquals(event.build_event.build_name, build_name) | |
569 self.assertEquals(event.build_event.build_number, build_number) | |
570 self.assertEquals(event.build_event.build_scheduling_time_ms, | |
571 build_scheduling_time) | |
572 | |
573 def test_get_build_event_with_step_info_wrong_type(self): | |
574 # BUILD event with step info is invalid. | |
575 hostname = 'bot.host.name' | |
576 build_name = 'build_name' | |
577 build_number = 314159265 | |
578 build_scheduling_time = 123456789 | |
579 step_name = 'step_name' | |
580 step_text = 'step_text' | |
581 step_number = 0 # valid step number | |
582 | |
583 log_event = monitoring.get_build_event( | |
584 'BUILD', | |
585 hostname, | |
586 build_name, | |
587 build_number=build_number, | |
588 build_scheduling_time=build_scheduling_time, | |
589 step_name=step_name, | |
590 step_text=step_text, | |
591 step_number=step_number).log_event() | |
592 | |
593 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
594 | |
595 # Check that source_extension deserializes to the right thing. | |
596 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
597 self.assertTrue(event.HasField('build_event')) | |
598 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
599 self.assertEquals(event.build_event.host_name, hostname) | |
600 self.assertEquals(event.build_event.build_name, build_name) | |
601 self.assertEquals(event.build_event.build_number, build_number) | |
602 self.assertEquals(event.build_event.build_scheduling_time_ms, | |
603 build_scheduling_time) | |
604 self.assertEquals(event.build_event.step_name, step_name) | |
605 self.assertEquals(event.build_event.step_text, step_text) | |
606 self.assertEquals(event.build_event.step_number, step_number) | |
607 | |
608 def test_get_build_event_with_step_info(self): | |
609 hostname = 'bot.host.name' | |
610 build_name = 'build_name' | |
611 build_number = 314159265 | |
612 build_scheduling_time = 123456789 | |
613 step_name = 'step_name' | |
614 step_number = 0 # valid step number | |
615 | |
616 log_event = monitoring.get_build_event( | |
617 'STEP', | |
618 hostname, | |
619 build_name, | |
620 build_number=build_number, | |
621 build_scheduling_time=build_scheduling_time, | |
622 step_name=step_name, | |
623 step_number=step_number).log_event() | |
624 | |
625 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
626 | |
627 # Check that source_extension deserializes to the right thing. | |
628 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
629 self.assertTrue(event.HasField('build_event')) | |
630 self.assertEquals(event.build_event.type, BuildEvent.STEP) | |
631 self.assertEquals(event.build_event.host_name, hostname) | |
632 self.assertEquals(event.build_event.build_name, build_name) | |
633 self.assertEquals(event.build_event.build_number, build_number) | |
634 self.assertEquals(event.build_event.build_scheduling_time_ms, | |
635 build_scheduling_time) | |
636 self.assertEquals(event.build_event.step_name, step_name) | |
637 self.assertEquals(event.build_event.step_number, step_number) | |
638 | |
639 def test_get_build_event_step_name_in_default(self): | |
640 hostname = 'bot.host.name' | |
641 build_name = 'build_name' | |
642 build_number = 314159265 | |
643 build_scheduling_time = 123456789 | |
644 step_number = 0 # valid step number | |
645 step_name = 'step_name' | |
646 | |
647 event_mon.setup_monitoring() | |
648 orig_event = event_mon.get_default_event() | |
649 orig_event.build_event.step_name = step_name | |
650 event_mon.set_default_event(orig_event) | |
651 | |
652 log_event = monitoring.get_build_event( | |
653 'STEP', | |
654 hostname, | |
655 build_name, | |
656 build_number=build_number, | |
657 build_scheduling_time=build_scheduling_time, | |
658 step_number=step_number).log_event() | |
659 | |
660 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
661 | |
662 # Check that source_extension deserializes to the right thing. | |
663 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
664 self.assertTrue(event.HasField('build_event')) | |
665 self.assertEquals(event.build_event.type, BuildEvent.STEP) | |
666 self.assertEquals(event.build_event.host_name, hostname) | |
667 self.assertEquals(event.build_event.build_name, build_name) | |
668 self.assertEquals(event.build_event.build_number, build_number) | |
669 self.assertEquals(event.build_event.build_scheduling_time_ms, | |
670 build_scheduling_time) | |
671 self.assertEquals(event.build_event.step_number, step_number) | |
672 | |
673 self.assertEquals(event.build_event.step_name, step_name) | |
674 | |
675 def test_get_build_event_missing_step_name(self): | |
676 hostname = 'bot.host.name' | |
677 build_name = 'build_name' | |
678 build_number = 314159265 | |
679 build_scheduling_time = 123456789 | |
680 step_number = 0 # valid step number | |
681 | |
682 log_event = monitoring.get_build_event( | |
683 'STEP', | |
684 hostname, | |
685 build_name, | |
686 build_number=build_number, | |
687 build_scheduling_time=build_scheduling_time, | |
688 step_number=step_number).log_event() | |
689 | |
690 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
691 | |
692 # Check that source_extension deserializes to the right thing. | |
693 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
694 self.assertTrue(event.HasField('build_event')) | |
695 self.assertEquals(event.build_event.type, BuildEvent.STEP) | |
696 self.assertEquals(event.build_event.host_name, hostname) | |
697 self.assertEquals(event.build_event.build_name, build_name) | |
698 self.assertEquals(event.build_event.build_number, build_number) | |
699 self.assertEquals(event.build_event.build_scheduling_time_ms, | |
700 build_scheduling_time) | |
701 self.assertEquals(event.build_event.step_number, step_number) | |
702 | |
703 self.assertFalse(event.build_event.HasField('step_name')) | |
704 | |
705 def test_get_build_event_missing_step_text(self): | |
706 hostname = 'bot.host.name' | |
707 build_name = 'build_name' | |
708 build_number = 314159265 | |
709 build_scheduling_time = 123456789 | |
710 step_number = 0 # valid step number | |
711 | |
712 log_event = monitoring.get_build_event( | |
713 'STEP', | |
714 hostname, | |
715 build_name, | |
716 build_number=build_number, | |
717 build_scheduling_time=build_scheduling_time, | |
718 step_number=step_number).log_event() | |
719 | |
720 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
721 | |
722 # Check that source_extension deserializes to the right thing. | |
723 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
724 self.assertTrue(event.HasField('build_event')) | |
725 self.assertFalse(event.build_event.HasField('step_text')) | |
726 | |
727 def test_get_build_event_missing_step_number(self): | |
728 hostname = 'bot.host.name' | |
729 build_name = 'build_name' | |
730 build_number = 314159265 | |
731 build_scheduling_time = 123456789 | |
732 step_name = 'step_name' | |
733 | |
734 log_event = monitoring.get_build_event( | |
735 'STEP', | |
736 hostname, | |
737 build_name, | |
738 build_number=build_number, | |
739 build_scheduling_time=build_scheduling_time, | |
740 step_name=step_name).log_event() | |
741 | |
742 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
743 | |
744 # Check that source_extension deserializes to the right thing. | |
745 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
746 self.assertTrue(event.HasField('build_event')) | |
747 self.assertEquals(event.build_event.type, BuildEvent.STEP) | |
748 self.assertEquals(event.build_event.host_name, hostname) | |
749 self.assertEquals(event.build_event.build_name, build_name) | |
750 self.assertEquals(event.build_event.build_number, build_number) | |
751 self.assertEquals(event.build_event.build_scheduling_time_ms, | |
752 build_scheduling_time) | |
753 self.assertEquals(event.build_event.step_name, step_name) | |
754 | |
755 self.assertFalse(event.build_event.HasField('step_number')) | |
756 | |
757 def test_get_build_event_step_info_missing_build_info(self): | |
758 hostname = 'bot.host.name' | |
759 build_name = 'build_name' | |
760 step_name = 'step_name' | |
761 step_number = 0 # valid step number | |
762 | |
763 log_event = monitoring.get_build_event( | |
764 'STEP', | |
765 hostname, | |
766 build_name, | |
767 step_name=step_name, | |
768 step_number=step_number).log_event() | |
769 | |
770 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
771 | |
772 # Check that source_extension deserializes to the right thing. | |
773 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
774 self.assertTrue(event.HasField('build_event')) | |
775 self.assertEquals(event.build_event.type, BuildEvent.STEP) | |
776 self.assertEquals(event.build_event.host_name, hostname) | |
777 self.assertEquals(event.build_event.build_name, build_name) | |
778 self.assertEquals(event.build_event.step_name, step_name) | |
779 self.assertEquals(event.build_event.step_number, step_number) | |
780 | |
781 self.assertFalse(event.build_event.HasField('build_number')) | |
782 self.assertFalse(event.build_event.HasField('build_scheduling_time_ms')) | |
783 | |
784 def test_get_build_event_with_invalid_result(self): | |
785 hostname = 'bot.host.name' | |
786 build_name = 'build_name' | |
787 build_number = 314159265 | |
788 build_scheduling_time = 123456789 | |
789 result = '---INVALID---' | |
790 | |
791 log_event = monitoring.get_build_event( | |
792 'BUILD', | |
793 hostname, | |
794 build_name, | |
795 build_number=build_number, | |
796 build_scheduling_time=build_scheduling_time, | |
797 result=result).log_event() | |
798 | |
799 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
800 | |
801 # Check that source_extension deserializes to the right thing. | |
802 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
803 self.assertTrue(event.HasField('build_event')) | |
804 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
805 self.assertEquals(event.build_event.host_name, hostname) | |
806 self.assertEquals(event.build_event.build_name, build_name) | |
807 self.assertEquals(event.build_event.build_number, build_number) | |
808 self.assertEquals(event.build_event.build_scheduling_time_ms, | |
809 build_scheduling_time) | |
810 | |
811 self.assertFalse(event.build_event.HasField('result')) | |
812 | |
813 def test_get_build_event_with_valid_result(self): | |
814 hostname = 'bot.host.name' | |
815 build_name = 'build_name' | |
816 build_number = 314159265 | |
817 build_scheduling_time = 123456789 | |
818 result = 'SUCCESS' | |
819 | |
820 log_event = monitoring.get_build_event( | |
821 'BUILD', | |
822 hostname, | |
823 build_name, | |
824 build_number=build_number, | |
825 build_scheduling_time=build_scheduling_time, | |
826 result=result).log_event() | |
827 | |
828 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
829 | |
830 # Check that source_extension deserializes to the right thing. | |
831 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
832 self.assertTrue(event.HasField('build_event')) | |
833 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
834 self.assertEquals(event.build_event.host_name, hostname) | |
835 self.assertEquals(event.build_event.build_name, build_name) | |
836 self.assertEquals(event.build_event.build_number, build_number) | |
837 self.assertEquals(event.build_event.build_scheduling_time_ms, | |
838 build_scheduling_time) | |
839 self.assertEquals(event.build_event.result, BuildEvent.SUCCESS) | |
840 | |
841 def test_get_build_event_test_result_mapping(self): | |
842 # Tests the hacky mapping between buildbot results and the proto values. | |
843 hostname = 'bot.host.name' | |
844 build_name = 'build_name' | |
845 build_number = 314159265 | |
846 build_scheduling_time = 123456789 | |
847 | |
848 # WARNINGS -> WARNING | |
849 log_event = monitoring.get_build_event( | |
850 'BUILD', | |
851 hostname, | |
852 build_name, | |
853 build_number=build_number, | |
854 build_scheduling_time=build_scheduling_time, | |
855 result='WARNINGS').log_event() # with an S | |
856 | |
857 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
858 | |
859 # Check that source_extension deserializes to the right thing. | |
860 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
861 self.assertTrue(event.HasField('build_event')) | |
862 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
863 self.assertEquals(event.build_event.host_name, hostname) | |
864 self.assertEquals(event.build_event.build_name, build_name) | |
865 self.assertEquals(event.build_event.build_number, build_number) | |
866 self.assertEquals(event.build_event.build_scheduling_time_ms, | |
867 build_scheduling_time) | |
868 self.assertEquals(event.build_event.result, BuildEvent.WARNING) # no S | |
869 | |
870 # EXCEPTION -> INFRA_FAILURE | |
871 log_event = monitoring.get_build_event( | |
872 'BUILD', | |
873 hostname, | |
874 build_name, | |
875 build_number=build_number, | |
876 build_scheduling_time=build_scheduling_time, | |
877 result='EXCEPTION').log_event() | |
878 | |
879 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
880 | |
881 # Check that source_extension deserializes to the right thing. | |
882 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
883 self.assertTrue(event.HasField('build_event')) | |
884 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
885 self.assertEquals(event.build_event.host_name, hostname) | |
886 self.assertEquals(event.build_event.build_name, build_name) | |
887 self.assertEquals(event.build_event.build_number, build_number) | |
888 self.assertEquals(event.build_event.build_scheduling_time_ms, | |
889 build_scheduling_time) | |
890 self.assertEquals(event.build_event.result, BuildEvent.INFRA_FAILURE) | |
891 | |
892 def test_get_build_event_valid_result_wrong_type(self): | |
893 # SCHEDULER can't have a result | |
894 hostname = 'bot.host.name' | |
895 build_name = 'build_name' | |
896 build_number = 314159265 | |
897 build_scheduling_time = 123456789 | |
898 result = 'SUCCESS' | |
899 | |
900 log_event = monitoring.get_build_event( | |
901 'SCHEDULER', | |
902 hostname, | |
903 build_name, | |
904 build_number=build_number, | |
905 build_scheduling_time=build_scheduling_time, | |
906 result=result).log_event() | |
907 | |
908 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
909 | |
910 # Check that source_extension deserializes to the right thing. | |
911 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
912 self.assertTrue(event.HasField('build_event')) | |
913 self.assertEquals(event.build_event.type, BuildEvent.SCHEDULER) | |
914 self.assertEquals(event.build_event.host_name, hostname) | |
915 self.assertEquals(event.build_event.build_name, build_name) | |
916 self.assertEquals(event.build_event.build_number, build_number) | |
917 self.assertEquals(event.build_event.build_scheduling_time_ms, | |
918 build_scheduling_time) | |
919 self.assertEquals(event.build_event.result, BuildEvent.SUCCESS) | |
920 | |
921 def test_get_build_event_with_non_default_service_name(self): | |
922 hostname = 'bot.host.name' | |
923 build_name = 'build_name' | |
924 service_name = 'my.other.nice.service' | |
925 log_event = monitoring.get_build_event( | |
926 'BUILD', hostname, build_name, service_name=service_name).log_event() | |
927 | |
928 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
929 self.assertTrue(log_event.HasField('event_time_ms')) | |
930 self.assertTrue(log_event.HasField('source_extension')) | |
931 | |
932 # Check that source_extension deserializes to the right thing. | |
933 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
934 self.assertTrue(event.HasField('build_event')) | |
935 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
936 self.assertEquals(event.build_event.host_name, hostname) | |
937 self.assertEquals(event.build_event.build_name, build_name) | |
938 self.assertEquals(event.event_source.service_name, service_name) | |
939 | |
940 def test_get_build_event_with_unicode_service_name(self): | |
941 hostname = 'bot.host.name' | |
942 build_name = 'build_name' | |
943 service_name = u'à_la_française' | |
944 log_event = monitoring.get_build_event( | |
945 'BUILD', hostname, build_name, service_name=service_name).log_event() | |
946 | |
947 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
948 self.assertTrue(log_event.HasField('event_time_ms')) | |
949 self.assertTrue(log_event.HasField('source_extension')) | |
950 | |
951 # Check that source_extension deserializes to the right thing. | |
952 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
953 self.assertTrue(event.HasField('build_event')) | |
954 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
955 self.assertEquals(event.build_event.host_name, hostname) | |
956 self.assertEquals(event.build_event.build_name, build_name) | |
957 self.assertEquals(event.event_source.service_name, service_name) | |
958 | |
959 def test_get_build_event_with_invalid_service_name(self): | |
960 hostname = 'bot.host.name' | |
961 build_name = 'build_name' | |
962 service_name = 1234 # invalid | |
963 log_event = monitoring.get_build_event( | |
964 'BUILD', hostname, build_name, service_name=service_name).log_event() | |
965 | |
966 self.assertIsNone(log_event) | |
967 | |
968 def test_get_build_event_with_extra_result_code_string(self): | |
969 hostname = 'bot.host.name' | |
970 build_name = 'build_name' | |
971 service_name = 'my nice service' | |
972 log_event = monitoring.get_build_event( | |
973 'BUILD', hostname, build_name, service_name=service_name, | |
974 extra_result_code='result').log_event() | |
975 | |
976 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
977 self.assertTrue(log_event.HasField('event_time_ms')) | |
978 self.assertTrue(log_event.HasField('source_extension')) | |
979 | |
980 # Check that source_extension deserializes to the right thing. | |
981 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
982 self.assertTrue(event.HasField('build_event')) | |
983 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
984 self.assertEquals(event.build_event.host_name, hostname) | |
985 self.assertEquals(event.build_event.build_name, build_name) | |
986 self.assertEquals(event.event_source.service_name, service_name) | |
987 self.assertEquals(event.build_event.extra_result_code, ['result']) | |
988 | |
989 def test_get_build_event_with_extra_result_code_list(self): | |
990 hostname = 'bot.host.name' | |
991 build_name = 'build_name' | |
992 service_name = 'my nice service' | |
993 extra_results = ['result1', 'result2'] | |
994 log_event = monitoring.get_build_event( | |
995 'BUILD', hostname, build_name, service_name=service_name, | |
996 extra_result_code=extra_results).log_event() | |
997 | |
998 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
999 self.assertTrue(log_event.HasField('event_time_ms')) | |
1000 self.assertTrue(log_event.HasField('source_extension')) | |
1001 | |
1002 # Check that source_extension deserializes to the right thing. | |
1003 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
1004 self.assertTrue(event.HasField('build_event')) | |
1005 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
1006 self.assertEquals(event.build_event.host_name, hostname) | |
1007 self.assertEquals(event.build_event.build_name, build_name) | |
1008 self.assertEquals(event.event_source.service_name, service_name) | |
1009 self.assertEquals(event.build_event.extra_result_code, extra_results) | |
1010 | |
1011 def test_get_build_event_with_extra_result_code_invalid_scalar(self): | |
1012 hostname = 'bot.host.name' | |
1013 build_name = 'build_name' | |
1014 service_name = 'my nice service' | |
1015 extra_results = 1234 | |
1016 log_event = monitoring.get_build_event( | |
1017 'BUILD', hostname, build_name, service_name=service_name, | |
1018 extra_result_code=extra_results).log_event() | |
1019 | |
1020 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
1021 self.assertTrue(log_event.HasField('event_time_ms')) | |
1022 self.assertTrue(log_event.HasField('source_extension')) | |
1023 | |
1024 # Check that source_extension deserializes to the right thing. | |
1025 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
1026 self.assertTrue(event.HasField('build_event')) | |
1027 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
1028 self.assertEquals(event.build_event.host_name, hostname) | |
1029 self.assertEquals(event.build_event.build_name, build_name) | |
1030 self.assertEquals(event.event_source.service_name, service_name) | |
1031 self.assertEquals(len(event.build_event.extra_result_code), 0) | |
1032 | |
1033 def test_get_build_event_with_extra_result_code_invalid_list(self): | |
1034 hostname = 'bot.host.name' | |
1035 build_name = 'build_name' | |
1036 service_name = 'my nice service' | |
1037 extra_results = [1234, 'result'] | |
1038 log_event = monitoring.get_build_event( | |
1039 'BUILD', hostname, build_name, service_name=service_name, | |
1040 extra_result_code=extra_results).log_event() | |
1041 | |
1042 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
1043 self.assertTrue(log_event.HasField('event_time_ms')) | |
1044 self.assertTrue(log_event.HasField('source_extension')) | |
1045 | |
1046 # Check that source_extension deserializes to the right thing. | |
1047 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
1048 self.assertTrue(event.HasField('build_event')) | |
1049 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
1050 self.assertEquals(event.build_event.host_name, hostname) | |
1051 self.assertEquals(event.build_event.build_name, build_name) | |
1052 self.assertEquals(event.event_source.service_name, service_name) | |
1053 self.assertEquals(event.build_event.extra_result_code, ['result']) | |
1054 | |
1055 def test_get_build_event_with_goma_stats(self): | |
1056 hostname = 'bot.host.name' | |
1057 build_name = 'build_name' | |
1058 service_name = 'my nice service' | |
1059 goma_stats = GomaStats() | |
1060 goma_stats.request_stats.total = 42 | |
1061 | |
1062 log_event = monitoring.get_build_event( | |
1063 'BUILD', hostname, build_name, service_name=service_name, | |
1064 goma_stats=goma_stats).log_event() | |
1065 | |
1066 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
1067 self.assertTrue(log_event.HasField('event_time_ms')) | |
1068 self.assertTrue(log_event.HasField('source_extension')) | |
1069 | |
1070 # Check that source_extension deserializes to the right thing. | |
1071 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
1072 self.assertTrue(event.HasField('build_event')) | |
1073 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
1074 self.assertEquals(event.build_event.host_name, hostname) | |
1075 self.assertEquals(event.build_event.build_name, build_name) | |
1076 self.assertEquals(event.event_source.service_name, service_name) | |
1077 self.assertEquals(event.build_event.goma_stats, goma_stats) | |
1078 | |
1079 def test_get_build_event_invalid_goma_stats(self): | |
1080 hostname = 'bot.host.name' | |
1081 build_name = 'build_name' | |
1082 service_name = 'my nice service' | |
1083 | |
1084 log_event = monitoring.get_build_event( | |
1085 'BUILD', hostname, build_name, service_name=service_name, | |
1086 goma_stats='what-is-a-string-doing-here?').log_event() | |
1087 | |
1088 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
1089 self.assertTrue(log_event.HasField('event_time_ms')) | |
1090 self.assertTrue(log_event.HasField('source_extension')) | |
1091 | |
1092 # Check that source_extension deserializes to the right thing. | |
1093 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
1094 self.assertTrue(event.HasField('build_event')) | |
1095 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
1096 self.assertEquals(event.build_event.host_name, hostname) | |
1097 self.assertEquals(event.build_event.build_name, build_name) | |
1098 self.assertEquals(event.event_source.service_name, service_name) | |
1099 self.assertFalse(event.build_event.HasField('goma_stats')) | |
1100 | |
1101 def test_get_build_event_with_goma_error_unknown(self): | |
1102 hostname = 'bot.host.name' | |
1103 build_name = 'build_name' | |
1104 service_name = 'my nice service' | |
1105 goma_error = 'GOMA_ERROR_UNKNOWN' | |
1106 | |
1107 log_event = monitoring.get_build_event( | |
1108 'BUILD', hostname, build_name, service_name=service_name, | |
1109 goma_error=goma_error).log_event() | |
1110 | |
1111 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
1112 self.assertTrue(log_event.HasField('event_time_ms')) | |
1113 self.assertTrue(log_event.HasField('source_extension')) | |
1114 | |
1115 # Check that source_extension deserializes to the right thing. | |
1116 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
1117 self.assertTrue(event.HasField('build_event')) | |
1118 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
1119 self.assertEquals(event.build_event.host_name, hostname) | |
1120 self.assertEquals(event.build_event.build_name, build_name) | |
1121 self.assertEquals(event.event_source.service_name, service_name) | |
1122 self.assertEquals(event.build_event.goma_error, | |
1123 BuildEvent.GOMA_ERROR_UNKNOWN) | |
1124 | |
1125 def test_get_build_event_with_goma_error_crash(self): | |
1126 hostname = 'bot.host.name' | |
1127 build_name = 'build_name' | |
1128 service_name = 'my nice service' | |
1129 goma_error = 'GOMA_ERROR_CRASHED' | |
1130 goma_crash_report_id = '0123456789abcdef' | |
1131 | |
1132 log_event = monitoring.get_build_event( | |
1133 'BUILD', hostname, build_name, service_name=service_name, | |
1134 goma_error=goma_error, goma_crash_report_id=goma_crash_report_id | |
1135 ).log_event() | |
1136 | |
1137 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
1138 self.assertTrue(log_event.HasField('event_time_ms')) | |
1139 self.assertTrue(log_event.HasField('source_extension')) | |
1140 | |
1141 # Check that source_extension deserializes to the right thing. | |
1142 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
1143 self.assertTrue(event.HasField('build_event')) | |
1144 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
1145 self.assertEquals(event.build_event.host_name, hostname) | |
1146 self.assertEquals(event.build_event.build_name, build_name) | |
1147 self.assertEquals(event.event_source.service_name, service_name) | |
1148 self.assertEquals(event.build_event.goma_error, | |
1149 BuildEvent.GOMA_ERROR_CRASHED) | |
1150 self.assertEquals(event.build_event.goma_crash_report_id, | |
1151 goma_crash_report_id) | |
1152 | |
1153 def test_get_build_event_with_goma_error_non_crash_with_crash_id(self): | |
1154 hostname = 'bot.host.name' | |
1155 build_name = 'build_name' | |
1156 service_name = 'my nice service' | |
1157 goma_error = 'GOMA_ERROR_UNKNOWN' | |
1158 goma_crash_report_id = '0123456789abcdef' | |
1159 | |
1160 log_event = monitoring.get_build_event( | |
1161 'BUILD', hostname, build_name, service_name=service_name, | |
1162 goma_error=goma_error, goma_crash_report_id=goma_crash_report_id | |
1163 ).log_event() | |
1164 | |
1165 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
1166 self.assertTrue(log_event.HasField('event_time_ms')) | |
1167 self.assertTrue(log_event.HasField('source_extension')) | |
1168 | |
1169 # Check that source_extension deserializes to the right thing. | |
1170 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
1171 self.assertTrue(event.HasField('build_event')) | |
1172 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
1173 self.assertEquals(event.build_event.host_name, hostname) | |
1174 self.assertEquals(event.build_event.build_name, build_name) | |
1175 self.assertEquals(event.event_source.service_name, service_name) | |
1176 self.assertEquals(event.build_event.goma_error, | |
1177 BuildEvent.GOMA_ERROR_UNKNOWN) | |
1178 self.assertEquals(event.build_event.goma_crash_report_id, | |
1179 goma_crash_report_id) | |
1180 | |
1181 def test_get_build_event_with_both_goma_error_and_stats(self): | |
1182 hostname = 'bot.host.name' | |
1183 build_name = 'build_name' | |
1184 service_name = 'my nice service' | |
1185 goma_error = 'GOMA_ERROR_UNKNOWN' | |
1186 goma_stats = GomaStats() | |
1187 goma_stats.request_stats.total = 42 | |
1188 | |
1189 log_event = monitoring.get_build_event( | |
1190 'BUILD', hostname, build_name, service_name=service_name, | |
1191 goma_stats=goma_stats, goma_error=goma_error, | |
1192 ).log_event() | |
1193 | |
1194 self.assertIsInstance(log_event, LogRequestLite.LogEventLite) | |
1195 self.assertTrue(log_event.HasField('event_time_ms')) | |
1196 self.assertTrue(log_event.HasField('source_extension')) | |
1197 | |
1198 # Check that source_extension deserializes to the right thing. | |
1199 event = ChromeInfraEvent.FromString(log_event.source_extension) | |
1200 self.assertTrue(event.HasField('build_event')) | |
1201 self.assertEquals(event.build_event.type, BuildEvent.BUILD) | |
1202 self.assertEquals(event.build_event.host_name, hostname) | |
1203 self.assertEquals(event.build_event.build_name, build_name) | |
1204 self.assertEquals(event.event_source.service_name, service_name) | |
1205 # warns but allow to have both. | |
1206 self.assertEquals(event.build_event.goma_error, | |
1207 BuildEvent.GOMA_ERROR_UNKNOWN) | |
1208 self.assertEquals(event.build_event.goma_stats, goma_stats) | |
1209 | |
1210 | |
1211 class SendBuildEventTest(unittest.TestCase): | |
1212 def setUp(self): | |
1213 event_mon.setup_monitoring(run_type='dry') | |
1214 | |
1215 def tearDown(self): | |
1216 event_mon.close() | |
1217 | |
1218 def test_send_build_event_smoke(self): | |
1219 self.assertIsInstance(config._router, router._Router) | |
1220 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
1221 | |
1222 self.assertTrue(event_mon.send_build_event('BUILD', | |
1223 'bot.host.name', | |
1224 'build.name')) | |
1225 self.assertTrue(event_mon.send_build_event( | |
1226 'BUILD', | |
1227 'bot.host.name', | |
1228 'build_name', | |
1229 build_number=1, | |
1230 build_scheduling_time=123456789, | |
1231 result='FAILURE', | |
1232 timestamp_kind='POINT', | |
1233 event_timestamp=None)) | |
1234 | |
1235 | |
1236 class SendEventsTest(unittest.TestCase): | |
1237 def setUp(self): | |
1238 event_mon.setup_monitoring(run_type='dry') | |
1239 | |
1240 def tearDown(self): | |
1241 event_mon.close() | |
1242 | |
1243 def test_send_events_smoke(self): | |
1244 self.assertIsInstance(config._router, router._Router) | |
1245 self.assertIsInstance(config._cache.get('default_event'), ChromeInfraEvent) | |
1246 | |
1247 events = [ | |
1248 event_mon.get_build_event( | |
1249 'BUILD', | |
1250 'bot.host.name', | |
1251 'build_name', | |
1252 build_number=1, | |
1253 build_scheduling_time=123456789, | |
1254 result='FAILURE', | |
1255 timestamp_kind='POINT', | |
1256 event_timestamp=None), | |
1257 event_mon.get_build_event( | |
1258 'BUILD', | |
1259 'bot2.host.name', | |
1260 'build_name2', | |
1261 build_number=1, | |
1262 build_scheduling_time=123456789, | |
1263 result='FAILURE', | |
1264 timestamp_kind='POINT', | |
1265 event_timestamp=None), | |
1266 ] | |
1267 self.assertTrue(monitoring.send_events(events)) | |
OLD | NEW |