| OLD | NEW |
| (Empty) |
| 1 # Copyright 2015 The Chromium Authors. All rights reserved. | |
| 2 # Use of this source code is governed by a BSD-style license that can be | |
| 3 # found in the LICENSE file. | |
| 4 | |
| 5 import argparse | |
| 6 import os | |
| 7 import traceback | |
| 8 import unittest | |
| 9 | |
| 10 import mock | |
| 11 | |
| 12 import infra_libs | |
| 13 from infra_libs import event_mon | |
| 14 from infra_libs.event_mon import config, router | |
| 15 from infra_libs.event_mon.protos import chrome_infra_log_pb2 | |
| 16 | |
| 17 | |
| 18 class ConfigTest(unittest.TestCase): | |
| 19 def tearDown(self): | |
| 20 self._close() | |
| 21 | |
| 22 def _set_up_args(self, args=None): # pragma: no cover | |
| 23 parser = argparse.ArgumentParser() | |
| 24 event_mon.add_argparse_options(parser) | |
| 25 args = parser.parse_args((args or [])) | |
| 26 # Safety net. We really don't want to send something to a real endpoint. | |
| 27 self.assertTrue((args.event_mon_run_type not in ('test', 'prod')) | |
| 28 or args.dry_run) | |
| 29 event_mon.process_argparse_options(args) | |
| 30 r = config._router | |
| 31 self.assertIsInstance(r, router._Router) | |
| 32 # Check that process_argparse_options is idempotent | |
| 33 event_mon.process_argparse_options(args) | |
| 34 self.assertIs(config._router, r) | |
| 35 | |
| 36 def _close(self): | |
| 37 self.assertTrue(event_mon.close()) | |
| 38 self.assertFalse(config._cache) | |
| 39 # Test that calling it twice does not raise an exception. | |
| 40 self.assertTrue(event_mon.close()) | |
| 41 | |
| 42 def test_no_args_smoke(self): # pragma: no cover | |
| 43 self._set_up_args() | |
| 44 | |
| 45 def test_args_and_default_event(self): # pragma: no cover | |
| 46 # The protobuf structure is actually an API not an implementation detail | |
| 47 # so it's sane to test for changes. | |
| 48 hostname = 'a' | |
| 49 service_name = 'b' | |
| 50 appengine_name = 'c' | |
| 51 | |
| 52 args = ['--event-mon-run-type', 'dry', | |
| 53 '--event-mon-hostname', hostname, | |
| 54 '--event-mon-service-name', service_name, | |
| 55 '--event-mon-appengine-name', appengine_name] | |
| 56 self._set_up_args(args=args) | |
| 57 event = event_mon.get_default_event() | |
| 58 self.assertEquals(event.event_source.host_name, hostname) | |
| 59 self.assertEquals(event.event_source.service_name, service_name) | |
| 60 self.assertEquals(event.event_source.appengine_name, appengine_name) | |
| 61 | |
| 62 def test_run_type_file_good(self): | |
| 63 try: | |
| 64 with infra_libs.temporary_directory(prefix='config_test-') as tempdir: | |
| 65 filename = os.path.join(tempdir, 'output.db') | |
| 66 self._set_up_args(args=['--event-mon-run-type', 'file', | |
| 67 '--event-mon-output-file', filename]) | |
| 68 self.assertEqual(config._router.output_file, filename) | |
| 69 except Exception: # pragma: no cover | |
| 70 # help for debugging | |
| 71 traceback.print_exc() | |
| 72 raise | |
| 73 | |
| 74 # Direct setup_monitoring testing below this line. | |
| 75 def test_default_event(self): | |
| 76 # The protobuf structure is actually an API not an implementation detail | |
| 77 # so it's sane to test for changes. | |
| 78 event_mon.setup_monitoring() | |
| 79 event = event_mon.get_default_event() | |
| 80 self.assertTrue(event.event_source.HasField('host_name')) | |
| 81 self.assertFalse(event.event_source.HasField('service_name')) | |
| 82 self.assertFalse(event.event_source.HasField('appengine_name')) | |
| 83 | |
| 84 @mock.patch('os.environ') | |
| 85 def test_logging_on_appengine(self, environ): | |
| 86 environ.get.return_value = 'Google App Engine/1.2.3' | |
| 87 event_mon.setup_monitoring() | |
| 88 self.assertIsInstance(config._router, router._LoggingStreamRouter) | |
| 89 | |
| 90 environ.get.return_value = 'Development/1.2' | |
| 91 event_mon.setup_monitoring() | |
| 92 self.assertIsInstance(config._router, router._LoggingStreamRouter) | |
| 93 | |
| 94 def test_default_event_with_values(self): | |
| 95 # The protobuf structure is actually an API not an implementation detail | |
| 96 # so it's sane to test for changes. | |
| 97 hostname = 'a' | |
| 98 service_name = 'b' | |
| 99 appengine_name = 'c' | |
| 100 | |
| 101 event_mon.setup_monitoring( | |
| 102 hostname=hostname, | |
| 103 service_name=service_name, | |
| 104 appengine_name=appengine_name | |
| 105 ) | |
| 106 event = event_mon.get_default_event() | |
| 107 self.assertEquals(event.event_source.host_name, hostname) | |
| 108 self.assertEquals(event.event_source.service_name, service_name) | |
| 109 self.assertEquals(event.event_source.appengine_name, appengine_name) | |
| 110 | |
| 111 def test_set_default_event(self): | |
| 112 event_mon.setup_monitoring() | |
| 113 orig_event = event_mon.get_default_event() | |
| 114 | |
| 115 # Set the new default event to something different from orig_event | |
| 116 # to make sure it has changed. | |
| 117 event = chrome_infra_log_pb2.ChromeInfraEvent() | |
| 118 new_hostname = orig_event.event_source.host_name + '.foo' | |
| 119 event.event_source.host_name = new_hostname | |
| 120 event_mon.set_default_event(event) | |
| 121 | |
| 122 new_event = event_mon.get_default_event() | |
| 123 self.assertEquals(new_event.event_source.host_name, new_hostname) | |
| 124 | |
| 125 def test_set_default_event_bad_type(self): | |
| 126 event_mon.setup_monitoring() | |
| 127 | |
| 128 # bad type | |
| 129 with self.assertRaises(TypeError): | |
| 130 event_mon.set_default_event({'hostname': 'foo'}) | |
| 131 | |
| 132 def test_get_default_event(self): | |
| 133 event_mon.setup_monitoring() | |
| 134 orig_event = config._cache['default_event'] | |
| 135 self.assertEqual(orig_event, event_mon.get_default_event()) | |
| 136 self.assertIsNot(orig_event, event_mon.get_default_event()) | |
| 137 | |
| 138 def test_run_type_test(self): | |
| 139 event_mon.setup_monitoring(run_type='test', service_account_creds='creds') | |
| 140 self.assertEquals(config._cache['service_account_creds'], 'creds') | |
| 141 | |
| 142 def test_run_type_invalid(self): | |
| 143 event_mon.setup_monitoring(run_type='invalid.') | |
| 144 self.assertFalse(isinstance(config._router, router._HttpRouter)) | |
| OLD | NEW |