def test_existing_directory(self): event = LogRequestLite.LogEventLite() event.event_time_ms = router.time_ms() event.event_code = 1 event.event_flow_id = 2 with infra_libs.temporary_directory(prefix='event-mon-') as tempdir: filename = os.path.join(tempdir, 'output.db') r = router._LocalFileRouter(filename, dry_run=False) self.assertTrue(r.push_event(event)) # Check that the file is readable and contains the right data. with open(filename, 'rb') as f: req_read = LogRequestLite.FromString(f.read()) self.assertEqual(len(req_read.log_event), 1) event_read = req_read.log_event[0] self.assertEqual(event_read.event_time_ms, event.event_time_ms) self.assertEqual(event_read.event_code, event.event_code) self.assertEqual(event_read.event_flow_id, event.event_flow_id)
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)