Example #1
0
def main(args):
  parser = optparse.OptionParser(
      description=sys.modules[__name__].__doc__,
      version=__version__)
  parser.add_option('--file', help='Name of the request file')
  parser.add_option(
      '--swarming-server', help='Swarming server to send data back')
  parser.add_option(
      '--cost-usd-hour', type='float', help='Cost of this VM in $/h')
  parser.add_option('--start', type='float', help='Time this task was started')

  options, args = parser.parse_args(args)
  if not options.file:
    parser.error('You must provide the request file name.')
  if args:
    parser.error('Unknown args: %s' % args)

  on_error.report_on_exception_exit(options.swarming_server)

  logging.info('starting')
  remote = xsrf_client.XsrfRemote(options.swarming_server)

  now = monotonic_time()
  if options.start > now:
    options.start = now

  try:
    if not load_and_run(
        options.file, remote, options.cost_usd_hour, options.start):
      return TASK_FAILED
    return 0
  finally:
    logging.info('quitting')
Example #2
0
def main(args):
    parser = optparse.OptionParser(description=sys.modules[__name__].__doc__)
    parser.add_option('--in-file', help='Name of the request file')
    parser.add_option('--out-file',
                      help='Name of the JSON file to write a task summary to')
    parser.add_option('--swarming-server',
                      help='Swarming server to send data back')
    parser.add_option('--cost-usd-hour',
                      type='float',
                      help='Cost of this VM in $/h')
    parser.add_option('--start',
                      type='float',
                      help='Time this task was started')

    options, args = parser.parse_args(args)
    if not options.in_file or not options.out_file or args:
        parser.error('task_runner is meant to be used by swarming_bot.')

    on_error.report_on_exception_exit(options.swarming_server)

    logging.info('starting')
    remote = xsrf_client.XsrfRemote(options.swarming_server)

    now = monotonic_time()
    if options.start > now:
        options.start = now

    try:
        load_and_run(options.in_file, remote, options.cost_usd_hour,
                     options.start, options.out_file)
        return 0
    finally:
        logging.info('quitting')
Example #3
0
def main(args):
  parser = optparse.OptionParser(description=sys.modules[__name__].__doc__)
  parser.add_option('--in-file', help='Name of the request file')
  parser.add_option(
      '--out-file', help='Name of the JSON file to write a task summary to')
  parser.add_option(
      '--swarming-server', help='Swarming server to send data back')
  parser.add_option(
      '--cost-usd-hour', type='float', help='Cost of this VM in $/h')
  parser.add_option('--start', type='float', help='Time this task was started')

  options, args = parser.parse_args(args)
  if not options.in_file or not options.out_file or args:
    parser.error('task_runner is meant to be used by swarming_bot.')

  on_error.report_on_exception_exit(options.swarming_server)

  logging.info('starting')
  remote = xsrf_client.XsrfRemote(options.swarming_server)

  now = monotonic_time()
  if options.start > now:
    options.start = now

  try:
    load_and_run(
        options.in_file, remote, options.cost_usd_hour, options.start,
        options.out_file)
    return 0
  finally:
    logging.info('quitting')
Example #4
0
 def parse_args(self, *args, **kwargs):
   options, args = tools.OptionParserWithLogging.parse_args(
       self, *args, **kwargs)
   options.service = options.service.rstrip('/')
   if not options.service:
     self.error('--service is required.')
   on_error.report_on_exception_exit(options.service)
   return options, args
 def parse_args(self, *args, **kwargs):
   options, args = tools.OptionParserWithLogging.parse_args(
       self, *args, **kwargs)
   options.service = options.service.rstrip('/')
   if not options.service:
     self.error('--service is required.')
   on_error.report_on_exception_exit(options.service)
   return options, args
 def test_report(self):
   url = 'https://localhost/'
   on_error.report_on_exception_exit(url)
   self.assertEqual([on_error._check_for_exception_on_exit], self._atexit)
   self.assertEqual('https://localhost', on_error._SERVER.urlhost)
   self.assertEqual(self.HOSTNAME, on_error._HOSTNAME)
   with self.assertRaises(ValueError):
     on_error.report_on_exception_exit(url)
Example #7
0
 def test_report(self):
     url = 'https://localhost/'
     on_error.report_on_exception_exit(url)
     self.assertEqual([on_error._check_for_exception_on_exit], self._atexit)
     self.assertEqual('https://localhost', on_error._SERVER.urlhost)
     self.assertEqual(self.HOSTNAME, on_error._HOSTNAME)
     with self.assertRaises(ValueError):
         on_error.report_on_exception_exit(url)
Example #8
0
def get_remote():
  """Return a XsrfRemote instance to the preconfigured server."""
  global _ERROR_HANDLER_WAS_REGISTERED
  config = get_config()
  server = config['server']
  if not _ERROR_HANDLER_WAS_REGISTERED:
    on_error.report_on_exception_exit(server)
    _ERROR_HANDLER_WAS_REGISTERED = True
  return xsrf_client.XsrfRemote(server, '/swarming/api/v1/bot/handshake')
Example #9
0
def get_remote():
  """Return a XsrfRemote instance to the preconfigured server."""
  global _ERROR_HANDLER_WAS_REGISTERED
  config = get_config()
  server = config['server']
  if not _ERROR_HANDLER_WAS_REGISTERED:
    on_error.report_on_exception_exit(server)
    _ERROR_HANDLER_WAS_REGISTERED = True
  return xsrf_client.XsrfRemote(server, '/swarming/api/v1/bot/handshake')
Example #10
0
 def parse_args(self, *args, **kwargs):
   options, args = logging_utils.OptionParserWithLogging.parse_args(
       self, *args, **kwargs)
   if not options.service:
     self.error('--service is required.')
   try:
     options.service = normalize_host_url(options.service)
   except ValueError as exc:
     self.error(str(exc))
   on_error.report_on_exception_exit(options.service)
   return options, args
Example #11
0
 def parse_args(self, *args, **kwargs):
   options, args = logging_utils.OptionParserWithLogging.parse_args(
       self, *args, **kwargs)
   if not options.service:
     self.error('--service is required.')
   try:
     options.service = normalize_host_url(options.service)
   except ValueError as exc:
     self.error(str(exc))
   on_error.report_on_exception_exit(options.service)
   return options, args
Example #12
0
def get_config():
  """Returns the data from config.json."""
  global _ERROR_HANDLER_WAS_REGISTERED

  with contextlib.closing(zipfile.ZipFile(THIS_FILE, 'r')) as f:
    config = json.load(f.open('config/config.json', 'r'))

  server = config.get('server', '')
  if not _ERROR_HANDLER_WAS_REGISTERED and server:
    on_error.report_on_exception_exit(server)
    _ERROR_HANDLER_WAS_REGISTERED = True
  return config
Example #13
0
def get_config():
    """Returns the data from config.json."""
    global _ERROR_HANDLER_WAS_REGISTERED

    with contextlib.closing(zipfile.ZipFile(THIS_FILE, 'r')) as f:
        config = json.load(f.open('config/config.json', 'r'))

    server = config.get('server', '')
    if not _ERROR_HANDLER_WAS_REGISTERED and server:
        on_error.report_on_exception_exit(server)
        _ERROR_HANDLER_WAS_REGISTERED = True
    return config
Example #14
0
  def _process_swarming(self, options):
    """Processes the --swarming option and aborts if not specified.

    Returns the identity as determined by the server.
    """
    if not options.swarming:
      self.error('--swarming is required.')
    try:
      options.swarming = net.fix_url(options.swarming)
    except ValueError as e:
      self.error('--swarming %s' % e)
    on_error.report_on_exception_exit(options.swarming)
    try:
      user = auth.ensure_logged_in(options.swarming)
    except ValueError as e:
      self.error(str(e))
    return user
Example #15
0
def main(args):
  subprocess42.inhibit_os_error_reporting()

  # Disable magical auto-detection of OAuth config. See main() in bot_main.py
  # for detailed explanation why.
  net.disable_oauth_config()

  parser = optparse.OptionParser(description=sys.modules[__name__].__doc__)
  parser.add_option('--in-file', help='Name of the request file')
  parser.add_option(
      '--out-file', help='Name of the JSON file to write a task summary to')
  parser.add_option(
      '--swarming-server', help='Swarming server to send data back')
  parser.add_option(
      '--is-grpc', action='store_true',
      help='If true, --swarming-server is a gRPC proxy')
  parser.add_option(
      '--cost-usd-hour', type='float', help='Cost of this VM in $/h')
  parser.add_option('--start', type='float', help='Time this task was started')
  parser.add_option(
      '--bot-file', help='Path to a file describing the state of the host.')
  parser.add_option(
      '--auth-params-file',
      help='Path to a file with bot authentication parameters')

  options, args = parser.parse_args(args)
  if not options.in_file or not options.out_file:
    parser.error('task_runner is meant to be used by swarming_bot.')

  on_error.report_on_exception_exit(options.swarming_server)

  logging.info('starting')
  now = monotonic_time()
  if options.start > now:
    options.start = now

  try:
    load_and_run(
        options.in_file, options.swarming_server, options.is_grpc,
        options.cost_usd_hour, options.start, options.out_file,
        args, options.bot_file, options.auth_params_file)
    return 0
  finally:
    logging.info('quitting')
Example #16
0
def main(args):
    subprocess42.inhibit_os_error_reporting()
    parser = optparse.OptionParser(description=sys.modules[__name__].__doc__)
    parser.add_option('--in-file', help='Name of the request file')
    parser.add_option('--out-file',
                      help='Name of the JSON file to write a task summary to')
    parser.add_option('--swarming-server',
                      help='Swarming server to send data back')
    parser.add_option('--cost-usd-hour',
                      type='float',
                      help='Cost of this VM in $/h')
    parser.add_option('--start',
                      type='float',
                      help='Time this task was started')
    parser.add_option('--min-free-space',
                      type='int',
                      help='Value to send down to run_isolated')
    parser.add_option('--bot-file',
                      help='Path to a file describing the state of the host.')
    parser.add_option('--auth-params-file',
                      help='Path to a file with bot authentication parameters')

    options, args = parser.parse_args(args)
    if not options.in_file or not options.out_file or args:
        parser.error('task_runner is meant to be used by swarming_bot.')

    on_error.report_on_exception_exit(options.swarming_server)

    logging.info('starting')
    now = monotonic_time()
    if options.start > now:
        options.start = now

    try:
        load_and_run(options.in_file, options.swarming_server,
                     options.cost_usd_hour, options.start, options.out_file,
                     options.min_free_space, options.bot_file,
                     options.auth_params_file)
        return 0
    finally:
        logging.info('quitting')
Example #17
0
def main(args):
    parser = optparse.OptionParser(description=sys.modules[__name__].__doc__,
                                   version=__version__)
    parser.add_option('--file', help='Name of the request file')
    parser.add_option('--swarming-server',
                      help='Swarming server to send data back')
    parser.add_option('--cost-usd-hour',
                      type='float',
                      help='Cost of this VM in $/h')
    parser.add_option('--start',
                      type='float',
                      help='Time this task was started')
    parser.add_option('--json-file',
                      help='Name of the JSON file to write a task summary to')

    options, args = parser.parse_args(args)
    if not options.file:
        parser.error('You must provide the request file name.')
    if args:
        parser.error('Unknown args: %s' % args)

    on_error.report_on_exception_exit(options.swarming_server)

    logging.info('starting')
    remote = xsrf_client.XsrfRemote(options.swarming_server)

    now = monotonic_time()
    if options.start > now:
        options.start = now

    try:
        if not load_and_run(options.file, remote, options.cost_usd_hour,
                            options.start, options.json_file):
            return TASK_FAILED
        return 0
    finally:
        logging.info('quitting')
def run_shell_out(url, mode):
  # Enable 'report_on_exception_exit' even though main file is *_test.py.
  on_error._is_in_test = lambda: False

  # Hack it out so registering works.
  on_error._ENABLED_DOMAINS = (socket.getfqdn(),)

  # Don't try to authenticate into localhost.
  on_error.net.OAuthAuthenticator = lambda *_: None

  if not on_error.report_on_exception_exit(url):
    print 'Failure to register the handler'
    return 1

  # Hack out certificate verification because we are using a self-signed
  # certificate here. In practice, the SSL certificate is signed to guard
  # against MITM attacks.
  on_error._SERVER.engine.session.verify = False

  if mode == 'crash':
    # Sadly, net is a bit overly verbose, which breaks
    # test_shell_out_crash_server_down.
    logging.error = lambda *_, **_kwargs: None
    logging.warning = lambda *_, **_kwargs: None
    raise ValueError('Oops')

  if mode == 'report':
    # Generate a manual report without an exception frame. Also set the version
    # value.
    setattr(sys.modules['__main__'], '__version__', '123')
    on_error.report('Oh dang')

  if mode == 'exception':
    # Report from inside an exception frame.
    try:
      raise TypeError('You are not my type')
    except TypeError:
      on_error.report('Really')

  if mode == 'exception_no_msg':
    # Report from inside an exception frame.
    try:
      raise TypeError('You are not my type #2')
    except TypeError:
      on_error.report(None)
  return 0
Example #19
0
def run_shell_out(url, mode):
  # Enable 'report_on_exception_exit' even though main file is *_test.py.
  on_error._is_in_test = lambda: False

  # Hack it out so registering works.
  on_error._ENABLED_DOMAINS = (socket.getfqdn(),)

  # Don't try to authenticate into localhost.
  on_error.net.OAuthAuthenticator = lambda *_: None

  if not on_error.report_on_exception_exit(url):
    print 'Failure to register the handler'
    return 1

  # Hack out certificate verification because we are using a self-signed
  # certificate here. In practice, the SSL certificate is signed to guard
  # against MITM attacks.
  on_error._SERVER.engine.session.verify = False

  if mode == 'crash':
    # Sadly, net is a bit overly verbose, which breaks
    # test_shell_out_crash_server_down.
    logging.error = lambda *_, **_kwargs: None
    logging.warning = lambda *_, **_kwargs: None
    raise ValueError('Oops')

  if mode == 'report':
    # Generate a manual report without an exception frame. Also set the version
    # value.
    setattr(sys.modules['__main__'], '__version__', '123')
    on_error.report('Oh dang')

  if mode == 'exception':
    # Report from inside an exception frame.
    try:
      raise TypeError('You are not my type')
    except TypeError:
      on_error.report('Really')

  if mode == 'exception_no_msg':
    # Report from inside an exception frame.
    try:
      raise TypeError('You are not my type #2')
    except TypeError:
      on_error.report(None)
  return 0
 def test_no_http(self):
   # http:// url are denied.
   url = 'http://localhost/'
   self.assertIs(False, on_error.report_on_exception_exit(url))
   self.assertEqual([], self._atexit)
Example #21
0
 def test_no_http(self):
     # http:// url are denied.
     url = 'http://localhost/'
     self.assertIs(False, on_error.report_on_exception_exit(url))
     self.assertEqual([], self._atexit)