Chromium Code Reviews| Index: infra/tools/send_monitoring_event/test/send_event_test.py |
| diff --git a/infra/tools/send_monitoring_event/test/send_event_test.py b/infra/tools/send_monitoring_event/test/send_event_test.py |
| index ee57ece1db1363fcd104c37a590a2659db422169..342ed5303dfc9eead73a6a589490419e9afce236 100755 |
| --- a/infra/tools/send_monitoring_event/test/send_event_test.py |
| +++ b/infra/tools/send_monitoring_event/test/send_event_test.py |
| @@ -6,10 +6,14 @@ import argparse |
| import os |
| import unittest |
| +import google.protobuf |
| + |
| import infra_libs |
| from infra_libs import event_mon |
| + |
| from infra.tools.send_monitoring_event import send_event |
| +from infra_libs.event_mon import BuildEvent, ChromeInfraEvent, LogRequestLite |
| DATA_DIR = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data') |
| @@ -88,11 +92,161 @@ class TestBuildEvent(SendingEventBaseTest): |
| '--build-event-type', 'SCHEDULER', |
| '--build-event-hostname', 'foo.bar.dns', |
| '--build-event-build-name', 'whatever']) |
| - self.assertEquals(args.event_mon_run_type, 'dry') |
| - send_event.send_build_event(args) |
| + self.assertTrue(send_event.send_build_event(args)) |
| + |
| + def test_send_build_event_smoke_missing_goma_file(self): |
| + args = send_event.get_arguments( |
| + ['--event-mon-service-name', 'thing', |
| + '--build-event-type', 'BUILD', |
| + '--build-event-hostname', 'foo.bar.dns', |
| + '--build-event-build-name', 'whatever', |
| + '--build-event-goma-stats-path', |
| + os.path.join(DATA_DIR, 'this-file-does-not-exist')]) |
| + with self.assertRaises(IOError): |
| + send_event.send_build_event(args) |
| -class TestEventsFromFile(SendingEventBaseTest): |
| +class TestInputModesFile(unittest.TestCase): |
| + # Test the various ways to pass information to send_monitoring_event |
| + # TODO(pgervais): test precedence order. |
| + def tearDown(self): |
| + event_mon.close() |
| + |
| + def test_send_build_event_with_goma_stats(self): |
| + # Write a file to avoid mocks |
| + with infra_libs.temporary_directory(prefix='send_event_test-') as tmpdir: |
| + outfile = os.path.join(tmpdir, 'out.bin') |
| + args = send_event.get_arguments( |
| + ['--event-mon-run-type', 'file', |
| + '--event-mon-output-file', outfile, |
| + '--event-mon-service-name', 'thing', |
| + '--build-event-type', 'BUILD', |
| + '--build-event-hostname', 'foo.bar.dns', |
| + '--build-event-build-name', 'whatever', |
| + '--build-event-goma-stats-path', |
| + os.path.join(DATA_DIR, 'goma_stats.bin')]) |
| + self.assertEquals(args.event_mon_run_type, 'file') |
| + event_mon.process_argparse_options(args) |
| + self.assertTrue(send_event.send_build_event(args)) |
| + |
| + # Now open the resulting file and check what was written |
| + with open(outfile, 'rb') as f: |
| + request = LogRequestLite.FromString(f.read()) |
| + |
| + self.assertEqual(len(request.log_event), 1) |
| + event = ChromeInfraEvent.FromString(request.log_event[0].source_extension) |
| + self.assertEqual(event.build_event.goma_stats.request_stats.total, 10) |
| + self.assertEqual(event.build_event.goma_stats.request_stats.success, 9) |
| + self.assertEqual(event.build_event.goma_stats.request_stats.failure, 1) |
| + self.assertEqual(event.build_event.host_name, 'foo.bar.dns') |
| + |
| + def test_send_build_event_with_invalid_goma_stats(self): |
| + # Write a file to avoid mocks |
| + with infra_libs.temporary_directory(prefix='send_event_test-') as tmpdir: |
| + outfile = os.path.join(tmpdir, 'out.bin') |
| + args = send_event.get_arguments( |
| + ['--event-mon-run-type', 'file', |
| + '--event-mon-output-file', outfile, |
| + '--event-mon-service-name', 'thing', |
| + '--build-event-type', 'BUILD', |
| + '--build-event-hostname', 'foo.bar.dns', |
| + '--build-event-build-name', 'whatever', |
| + '--build-event-goma-stats-path', |
| + os.path.join(DATA_DIR, 'garbage')]) |
| + self.assertEquals(args.event_mon_run_type, 'file') |
| + event_mon.process_argparse_options(args) |
| + with self.assertRaises(google.protobuf.message.DecodeError): |
| + send_event.send_build_event(args) |
| + |
| + # The default event used below (build-foo-builder.bin) has been generated by: |
| + # ./run.py infra.tools.send_monitoring_event \ |
| + # --event-mon-run-type=file \ |
| + # --event-mon-output-file=./build-foo-builder.bin \ |
| + # --build-event-hostname=myhostname \ |
| + # --event-mon-timestamp-kind=BEGIN \ |
| + # --event-mon-event-timestamp=123 \ |
| + # --build-event-type=BUILD \ |
| + # --build-event-build-name=foo" |
| + def test_logrequest_path_valid(self): |
| + with infra_libs.temporary_directory(prefix='send_event_test-') as tmpdir: |
| + outfile = os.path.join(tmpdir, 'out.bin') |
| + args = send_event.get_arguments( |
| + ['--event-mon-run-type', 'file', |
| + '--event-mon-output-file', outfile, |
| + '--event-mon-service-name', 'thing', |
| + '--event-logrequest-path', |
| + os.path.join(DATA_DIR, 'build-foo-builder.bin'), |
| + '--build-event-build-number', '3' |
| + ]) |
| + self.assertEquals(args.event_mon_run_type, 'file') |
| + event_mon.process_argparse_options(args) |
| + send_event._process_logrequest_path(args) |
| + self.assertTrue(send_event.send_build_event(args)) |
| + |
| + # Now open the resulting file and check what was written |
| + with open(outfile, 'rb') as f: |
| + request = LogRequestLite.FromString(f.read()) |
| + |
| + self.assertEqual(len(request.log_event), 1) |
| + event = ChromeInfraEvent.FromString(request.log_event[0].source_extension) |
| + self.assertEqual(event.build_event.host_name, 'myhostname') |
| + self.assertEqual(event.build_event.build_number, 3) |
| + self.assertEqual(event.timestamp_kind, ChromeInfraEvent.BEGIN) |
| + |
| + def test_logrequest_path_build_type_override(self): |
| + # logrequest contains build event, overrid the type with an arg. |
| + with infra_libs.temporary_directory(prefix='send_event_test-') as tmpdir: |
| + outfile = os.path.join(tmpdir, 'out.bin') |
| + args = send_event.get_arguments( |
| + ['--event-mon-run-type', 'file', |
| + '--event-mon-output-file', outfile, |
| + '--event-mon-service-name', 'thing', |
| + '--event-logrequest-path', |
| + os.path.join(DATA_DIR, 'build-foo-builder.bin'), |
| + '--build-event-build-number', '3', |
| + '--build-event-type', 'STEP', |
| + ]) |
| + self.assertEquals(args.event_mon_run_type, 'file') |
| + event_mon.process_argparse_options(args) |
| + send_event._process_logrequest_path(args) |
| + self.assertTrue(send_event.send_build_event(args)) |
| + |
| + # Now open the resulting file and check what was written |
| + with open(outfile, 'rb') as f: |
| + request = LogRequestLite.FromString(f.read()) |
| + |
| + self.assertEqual(len(request.log_event), 1) |
| + event = ChromeInfraEvent.FromString(request.log_event[0].source_extension) |
| + self.assertEqual(event.build_event.host_name, 'myhostname') |
| + self.assertEqual(event.build_event.type, BuildEvent.STEP) |
| + self.assertEqual(event.build_event.build_number, 3) |
| + self.assertEqual(event.timestamp_kind, ChromeInfraEvent.BEGIN) |
| + |
| + def test_logrequest_path_build_service_conflicts(self): |
| + # logrequest contains build event, provides service event as arg |
| + with infra_libs.temporary_directory(prefix='send_event_test-') as tmpdir: |
| + outfile = os.path.join(tmpdir, 'out.bin') |
| + args = send_event.get_arguments( |
| + ['--event-mon-run-type', 'file', |
| + '--event-mon-output-file', outfile, |
| + '--event-mon-service-name', 'thing', |
| + '--event-logrequest-path', |
| + os.path.join(DATA_DIR, 'build-foo-builder.bin'), |
| + '--build-event-build-number', '3', |
| + '--service-event-type', 'START', |
| + ]) |
| + self.assertEquals(args.event_mon_run_type, 'file') |
| + event_mon.process_argparse_options(args) |
| + with self.assertRaises(ValueError): |
| + send_event._process_logrequest_path(args) |
| + |
| +# TODO(pgervais): tests to add: |
|
Sergey Berezin
2015/10/29 23:32:54
Is this planned for this CL, or later?
pgervais
2015/11/02 19:38:58
This CL. I'll add them today.
|
| +# conflict with build type (requires another protos) |
| +# service type provided |
| +# service type not provided |
| +# both service type and build type provided (yet another one) |
| + |
| +class TestEventsFromTextFile(SendingEventBaseTest): |
| def test_send_events_from_file_smoke(self): |
| # Create a temporary file because we don't want to risk deleting a |
| # checked-in file. |
| @@ -206,3 +360,53 @@ class TestGetEventsFileList(unittest.TestCase): |
| self.assertTrue(len(file_list) == 3) |
| for fname in file_list: |
| self.assertTrue(any(fname.endswith(filename) for filename in filenames)) |
| + |
| + |
| +class TestProcessRequestPath(SendingEventBaseTest): |
| + def test_logrequest_missing_args(self): |
| + orig_event = event_mon.get_default_event() |
| + self.assertIsNot(orig_event, None) |
| + |
| + args = argparse.Namespace() |
| + args.event_logrequest_path = None |
| + send_event._process_logrequest_path(args) |
| + |
| + self.assertEqual(orig_event, event_mon.get_default_event()) |
| + |
| + def test_logrequest_with_valid_file(self): |
| + orig_event = event_mon.get_default_event() |
| + self.assertIsNot(orig_event, None) |
| + |
| + args = argparse.Namespace() |
| + args.event_logrequest_path = os.path.join(DATA_DIR, 'logrequest-build.bin') |
| + args.service_event_type = None |
| + args.build_event_type = None |
| + send_event._process_logrequest_path(args) |
| + |
| + new_event = event_mon.get_default_event() |
| + self.assertNotEqual(orig_event, new_event) |
| + self.assertEqual(new_event.build_event.type, BuildEvent.BUILD) |
| + |
| + def test_logrequest_with_no_log_event(self): |
| + orig_event = event_mon.get_default_event() |
| + self.assertIsNot(orig_event, None) |
| + |
| + args = argparse.Namespace() |
| + args.event_logrequest_path = os.path.join(DATA_DIR, 'logrequest-empty.bin') |
| + with self.assertRaises(ValueError): |
| + send_event._process_logrequest_path(args) |
| + |
| + def test_logrequest_with_bad_content(self): |
| + orig_event = event_mon.get_default_event() |
| + self.assertIsNot(orig_event, None) |
| + |
| + args = argparse.Namespace() |
| + args.event_logrequest_path = os.path.join(DATA_DIR, 'garbage') |
| + with self.assertRaises(google.protobuf.message.DecodeError): |
| + send_event._process_logrequest_path(args) |
| + |
| + def test_logrequest_with_missing_file(self): |
| + args = argparse.Namespace() |
| + args.event_logrequest_path = os.path.join(DATA_DIR, 'non-existent-file.bin') |
| + with self.assertRaises(IOError): |
| + send_event._process_logrequest_path(args) |