1ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch# Copyright 2013 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)# found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)"""TestEnvironment classes. 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)These classes abstract away the various setups needed to run the WebDriver java 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)tests in various environments. 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)""" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import os 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)import sys 13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 14ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdochimport chrome_paths 15eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochimport util 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch_THIS_DIR = os.path.abspath(os.path.dirname(__file__)) 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)if util.IsLinux(): 20ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch sys.path.insert(0, os.path.join(chrome_paths.GetSrc(), 'build', 'android')) 215f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) from pylib import android_commands 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) from pylib import forwarder 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) from pylib import valgrind_tools 245f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) from pylib.device import device_errors 255c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu from pylib.device import device_utils 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ANDROID_TEST_HTTP_PORT = 2311 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)ANDROID_TEST_HTTPS_PORT = 2411 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)_EXPECTATIONS = {} 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)execfile(os.path.join(_THIS_DIR, 'test_expectations'), _EXPECTATIONS) 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class BaseTestEnvironment(object): 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """Manages the environment java tests require to run.""" 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def __init__(self, chrome_version='HEAD'): 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """Initializes a desktop test environment. 39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Args: 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome_version: Optionally a chrome version to run the tests against. 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """ 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self._chrome_version = chrome_version 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def GetOS(self): 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """Name of the OS.""" 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) raise NotImplementedError 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def GlobalSetUp(self): 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """Sets up the global test environment state.""" 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pass 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def GlobalTearDown(self): 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """Tears down the global test environment state.""" 55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) pass 56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) def GetDisabledJavaTestMatchers(self): 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) """Get the list of disabled java test matchers. 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Returns: 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) List of disabled test matchers, which may contain '*' wildcards. 62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """ 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return _EXPECTATIONS['GetDisabledTestMatchers']( 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.GetOS(), self._chrome_version) 65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def GetPassedJavaTests(self): 67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """Get the list of passed java tests. 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Returns: 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) List of passed test names. 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """ 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) with open(os.path.join(_THIS_DIR, 'java_tests.txt'), 'r') as f: 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return _EXPECTATIONS['ApplyJavaTestFilter']( 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self.GetOS(), self._chrome_version, 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) [t.strip('\n') for t in f.readlines()]) 76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class DesktopTestEnvironment(BaseTestEnvironment): 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """Manages the environment java tests require to run on Desktop.""" 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 81eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch # override 82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def GetOS(self): 83c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) return util.GetPlatformName() 84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class AndroidTestEnvironment(DesktopTestEnvironment): 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) """Manages the environment java tests require to run on Android.""" 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 89a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) def __init__(self, package, chrome_version='HEAD'): 90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) super(AndroidTestEnvironment, self).__init__(chrome_version) 91a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) self._package = package 925c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self._device = None 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) self._forwarder = None 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 95eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch # override 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def GlobalSetUp(self): 97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) os.putenv('TEST_HTTP_PORT', str(ANDROID_TEST_HTTP_PORT)) 98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) os.putenv('TEST_HTTPS_PORT', str(ANDROID_TEST_HTTPS_PORT)) 995f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) devices = android_commands.GetAttachedDevices() 1005f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if not devices: 1015f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) raise device_errors.NoDevicesError() 1025f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) elif len(devices) > 1: 1035f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) logging.warning('Multiple devices attached. Using %s.' % devices[0]) 1045f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) self._device = device_utils.DeviceUtils(devices[0]) 105a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles) forwarder.Forwarder.Map( 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) [(ANDROID_TEST_HTTP_PORT, ANDROID_TEST_HTTP_PORT), 107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) (ANDROID_TEST_HTTPS_PORT, ANDROID_TEST_HTTPS_PORT)], 1085c02ac1a9c1b504631c0a3d2b6e737b5d738bae1Bo Liu self._device) 109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 110eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch # override 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def GlobalTearDown(self): 1125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) if self._device: 1135f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) forwarder.Forwarder.UnmapAllDevicePorts(self._device) 114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch # override 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) def GetOS(self): 117a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) return 'android:%s' % self._package 118