1
    2
    3
    4
    5
    6
    7
    8
    9
   10
   11
   12
   13
   14
   15
   16
   17
   18
   19
   20
   21
   22
   23
   24
   25
   26
   27
   28
   29
   30
   31
   32
   33
   34
   35
   36
   37
   38
   39
   40
   41
   42
   43
   44
   45
   46
   47
   48
   49
   50

build / android / pylib / base / environment_factory.py [blame]

# Copyright 2014 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import os

from pylib import constants
from pylib.local.device import local_device_environment
from pylib.local.device import skylab_environment

from pylib.local.machine import local_machine_environment

try:
  # local_emulator_environment depends on //tools.
  # If a client pulls in the //build subtree but not the //tools
  # one, fail at emulator environment creation time.
  from pylib.local.emulator import local_emulator_environment
except ImportError:
  local_emulator_environment = None


def CreateEnvironment(args, output_manager, error_func):

  if args.environment == 'local':
    if args.command not in constants.LOCAL_MACHINE_TESTS:
      if args.avd_config:
        if not local_emulator_environment:
          error_func('emulator environment requested but not available.')
          raise RuntimeError('error_func must call exit inside.')
        return local_emulator_environment.LocalEmulatorEnvironment(
            args, output_manager, error_func)

      if args.connect_over_ethernet:
        swarming_server = os.environ.get('SWARMING_SERVER', '')
        if skylab_environment.SWARMING_SERVER not in swarming_server:
          error_func(
              'connect-over-ethernet is only supported for tasks running on '
              f'{skylab_environment.SWARMING_SERVER}. '
              f'SWARMING_SERVER={swarming_server}')
          raise RuntimeError('error_func must call exit inside.')
        return skylab_environment.SkylabEnvironment(args, output_manager,
                                                    error_func)

      return local_device_environment.LocalDeviceEnvironment(
          args, output_manager, error_func)
    return local_machine_environment.LocalMachineEnvironment(
        args, output_manager, error_func)

  error_func('Unable to create %s environment.' % args.environment)
  raise RuntimeError('error_func must call exit inside.')