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_missing_args(self): orig_event = event_mon.get_default_event() self.assertIsNot(orig_event, None) opts = _parse_arguments([]) opts.event_logrequest_path = None common.process_argparse_options(opts) self.assertEqual(orig_event, event_mon.get_default_event())
def test_set_default_event(self): event_mon.setup_monitoring() orig_event = event_mon.get_default_event() # Set the new default event to something different from orig_event # to make sure it has changed. event = chrome_infra_log_pb2.ChromeInfraEvent() new_hostname = orig_event.event_source.host_name + '.foo' event.event_source.host_name = new_hostname event_mon.set_default_event(event) new_event = event_mon.get_default_event() self.assertEquals(new_event.event_source.host_name, new_hostname)
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_valid_file(self): orig_event = event_mon.get_default_event() self.assertIsNot(orig_event, None) opts = _parse_arguments([]) opts.event_logrequest_path = os.path.join(DATA_DIR, 'logrequest-build.bin') opts.service_event_type = None opts.build_event_type = None common.process_argparse_options(opts) 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) opts = _parse_arguments([]) opts.event_logrequest_path = os.path.join(DATA_DIR, 'logrequest-empty.bin') with self.assertRaises(ValueError): common.process_argparse_options(opts)
def test_logrequest_with_bad_content(self): orig_event = event_mon.get_default_event() self.assertIsNot(orig_event, None) opts = _parse_arguments([]) opts.event_logrequest_path = os.path.join(DATA_DIR, 'garbage') with self.assertRaises(google.protobuf.message.DecodeError): common.process_argparse_options(opts)
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_default_event(self): # The protobuf structure is actually an API not an implementation detail # so it's sane to test for changes. event_mon.setup_monitoring() event = event_mon.get_default_event() self.assertTrue(event.event_source.HasField('host_name')) self.assertFalse(event.event_source.HasField('service_name')) self.assertFalse(event.event_source.HasField('appengine_name'))
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_default_event_with_values(self): # The protobuf structure is actually an API not an implementation detail # so it's sane to test for changes. hostname = 'a' service_name = 'b' appengine_name = 'c' event_mon.setup_monitoring(hostname=hostname, service_name=service_name, appengine_name=appengine_name) event = event_mon.get_default_event() self.assertEquals(event.event_source.host_name, hostname) self.assertEquals(event.event_source.service_name, service_name) self.assertEquals(event.event_source.appengine_name, appengine_name)
def test_args_and_default_event(self): # pragma: no cover # The protobuf structure is actually an API not an implementation detail # so it's sane to test for changes. hostname = 'a' service_name = 'b' appengine_name = 'c' args = ['--event-mon-run-type', 'dry', '--event-mon-hostname', hostname, '--event-mon-service-name', service_name, '--event-mon-appengine-name', appengine_name] self._set_up_args(args=args) event = event_mon.get_default_event() self.assertEquals(event.event_source.host_name, hostname) self.assertEquals(event.event_source.service_name, service_name) self.assertEquals(event.event_source.appengine_name, appengine_name)
def test_default_event_with_values(self): # The protobuf structure is actually an API not an implementation detail # so it's sane to test for changes. hostname = 'a' service_name = 'b' appengine_name = 'c' event_mon.setup_monitoring( hostname=hostname, service_name=service_name, appengine_name=appengine_name ) event = event_mon.get_default_event() self.assertEquals(event.event_source.host_name, hostname) self.assertEquals(event.event_source.service_name, service_name) self.assertEquals(event.event_source.appengine_name, appengine_name)
def test_args_and_default_event(self): # pragma: no cover # The protobuf structure is actually an API not an implementation detail # so it's sane to test for changes. hostname = 'a' service_name = 'b' appengine_name = 'c' args = [ '--event-mon-run-type', 'dry', '--event-mon-hostname', hostname, '--event-mon-service-name', service_name, '--event-mon-appengine-name', appengine_name ] self._set_up_args(args=args) event = event_mon.get_default_event() self.assertEquals(event.event_source.host_name, hostname) self.assertEquals(event.event_source.service_name, service_name) self.assertEquals(event.event_source.appengine_name, appengine_name)
def process_argparse_options(args): """Sets the default event based on --event-logrequest-path. This function raises exceptions because if the base event is wrong, then it's not worth sending anything anyway. """ event_mon.process_argparse_options(args) _extra_argument_checking(args) if args.event_logrequest_path: try: with open(args.event_logrequest_path, 'rb') as f: request = LogRequestLite.FromString(f.read()) if len(request.log_event) == 1: default_event = ChromeInfraEvent.FromString( request.log_event[0].source_extension) # Assume that the content is sane because we don't want to duplicate # any business logic here. # TODO(pgervais): find a better solution. event_mon.set_default_event(default_event) else: raise ValueError( 'Expected only one log_event in the LogRequestLite proto ' 'pointed by --event-logrequest-path. Found %d in %s', len(request.log_event), args.event_logrequest_path) except Exception: LOGGER.exception('Failure when reading/parsing file %s', args.event_logrequest_path) raise default_event = event_mon.get_default_event() # When the default event is set using --event-logrequest-path, passing # --build-event-type or --service-event-type is optional. These options # still takes precedence but they must keep the event type the same. if (default_event.build_event.HasField('type') and default_event.service_event.HasField('type')): msg = ( 'Default event contains both service_event_type and ' 'build_event_type which is incorrect. Make sure you passed ' 'a correct proto to --event-logrequest-path. Otherwise it\'s an ' 'internal error. Aborting.') LOGGER.error(msg) raise ValueError(msg) if default_event.build_event.HasField('type'): if args.service_event_type: msg = ( 'The default event contains a type for build_event, but a ' 'service_event type was provided on the command-line. At most ' 'one of them can be specified. Aborting.') LOGGER.error(msg) raise ValueError(msg) if not args.build_event_type: args.build_event_type = event_mon.BuildEvent.BuildEventType.Name( default_event.build_event.type) if default_event.service_event.HasField('type'): if args.build_event_type: msg = ( 'The default event contains a type for service_event, but a ' 'build_event type was provided on the command-line. At most ' 'one of them can be specified. Aborting.') LOGGER.error(msg) raise ValueError(msg) if not args.service_event_type: args.service_event_type = event_mon.ServiceEvent.ServiceEventType.Name( default_event.service_event.type)
def _process_logrequest_path(args): """Sets the default event based on --event-logrequest-path. This function raises exceptions because if the base event is wrong, then it's not worth sending anything anyway. """ if args.event_logrequest_path: try: with open(args.event_logrequest_path, 'rb') as f: request = LogRequestLite.FromString(f.read()) if len(request.log_event) == 1: default_event = ChromeInfraEvent.FromString( request.log_event[0].source_extension) # Assume that the content is sane because we don't want to duplicate # any business logic here. # TODO(pgervais): find a better solution. event_mon.set_default_event(default_event) else: raise ValueError( 'Expected only one log_event in the LogRequestLite proto ' 'pointed by --event-logrequest-path. Found %d in %s', len(request.log_event), args.event_logrequest_path) except Exception: LOGGER.exception('Failure when reading/parsing file %s', args.event_logrequest_path) raise default_event = event_mon.get_default_event() # When the default event is set using --event-logrequest-path, passing # --build-event-type or --service-event-type is optional. These options # still takes precedence but they must keep the event type the same. if (default_event.build_event.HasField('type') and default_event.service_event.HasField('type')): msg = ('Default event contains both service_event_type and ' 'build_event_type which is incorrect. Make sure you passed ' 'a correct proto to --event-logrequest-path. Otherwise it\'s an ' 'internal error. Aborting.') LOGGER.error(msg) raise ValueError(msg) if default_event.build_event.HasField('type'): if args.service_event_type: msg = ('The default event contains a type for build_event, but a ' 'service_event type was provided on the command-line. At most ' 'one of them can be specified. Aborting.') LOGGER.error(msg) raise ValueError(msg) if not args.build_event_type: args.build_event_type = event_mon.BuildEvent.BuildEventType.Name( default_event.build_event.type) if default_event.service_event.HasField('type'): if args.build_event_type: msg = ('The default event contains a type for service_event, but a ' 'build_event type was provided on the command-line. At most ' 'one of them can be specified. Aborting.') LOGGER.error(msg) raise ValueError(msg) if not args.service_event_type: args.service_event_type = event_mon.ServiceEvent.ServiceEventType.Name( default_event.service_event.type)
def test_get_default_event(self): event_mon.setup_monitoring() orig_event = config._cache['default_event'] self.assertEqual(orig_event, event_mon.get_default_event()) self.assertIsNot(orig_event, event_mon.get_default_event())