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

Side by Side Diff: infra_libs/event_mon/test/monitoring_test.py

Issue 2213143002: Add infra_libs as a bootstrap dependency. (Closed) Base URL: https://chromium.googlesource.com/infra/infra.git@master
Patch Set: Removed the ugly import hack Created 4 years, 4 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
OLDNEW
(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))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698