Skip to content

Commit

Permalink
Simplify Chrome Android setup
Browse files Browse the repository at this point in the history
Automatically start adb, connect to device, and set up port forwarding.
The list of ports to be forwarded is read from server config at run
time. When a test run is completed, port forwarding is torn down.

Also fix testrunner so that setup & cleanup balance out (called at enter
& exit of a Browser context, respectively). Previously, cleaup() didn't
do anything in all browsers, so the issue wasn't discovered. In this
commit, cleanup() is used for uninstalling port forwarding.

Document for Chrome Android is adjusted accordingly.
  • Loading branch information
Hexcles committed Feb 1, 2018
1 parent 357c23f commit b73f8e1
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 54 deletions.
24 changes: 6 additions & 18 deletions docs/_running-tests/chrome_android.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,10 @@
To run WPT on Chrome on an android device, some additional set up is required.
First until we find a better way, we need to root the android device and update
the /etc/hosts file to include

First of all, as usual Android development, we need to have `adb` and be able to
connect to the device.

Furthermore, until we find a better way, we need to root the android device and
update the /etc/hosts file to include

```
127.0.0.1 web-platform.test
Expand All @@ -12,22 +16,6 @@ the /etc/hosts file to include
0.0.0.0 nonexistent-origin.web-platform.test
```

Next, we need to start adb and reverse forward the web-platform.tests ports

```
adb start-server
```

Add any ports that you need based on your config. For example:
```
adb reverse tcp:8000 tcp:8000
adb reverse tcp:8001 tcp:8001
adb reverse tcp:8081 tcp:8081
adb reverse tcp:8444 tcp:8444
adb reverse tcp:9001 tcp:9001
adb reverse tcp:9444 tcp:9444
```

After this, we may run wpt with the `chrome_android` product

```
Expand Down
38 changes: 3 additions & 35 deletions tools/wpt/browser.py
Original file line number Diff line number Diff line change
Expand Up @@ -281,6 +281,7 @@ def prepare_environment(self):
logger.critical("dbus not running and can't be started")
sys.exit(1)


class ChromeAndroid(Browser):
"""Chrome-specific interface for android.
Expand All @@ -293,49 +294,16 @@ class ChromeAndroid(Browser):
def install(self, dest=None):
raise NotImplementedError

def platform_string(self):
raise NotImplementedError

def find_webdriver(self):
return find_executable("chromedriver")

def install_webdriver(self, dest=None):
"""Install latest Webdriver."""
if dest is None:
dest = os.pwd
latest = get("http://chromedriver.storage.googleapis.com/LATEST_RELEASE").text.strip()
url = "http://chromedriver.storage.googleapis.com/%s/chromedriver_%s.zip" % (latest,
self.platform_string())
unzip(get(url).raw, dest)

path = find_executable("chromedriver", dest)
st = os.stat(path)
os.chmod(path, st.st_mode | stat.S_IEXEC)
return path
chrome = Chrome()
return chrome.install_webdriver(dest)

def version(self, root):
raise NotImplementedError

def prepare_environment(self):
# https://bugs.chromium.org/p/chromium/issues/detail?id=713947
logger.debug("DBUS_SESSION_BUS_ADDRESS %s" % os.environ.get("DBUS_SESSION_BUS_ADDRESS"))
if "DBUS_SESSION_BUS_ADDRESS" not in os.environ:
if find_executable("dbus-launch"):
logger.debug("Attempting to start dbus")
dbus_conf = subprocess.check_output(["dbus-launch"])
logger.debug(dbus_conf)

# From dbus-launch(1):
#
# > When dbus-launch prints bus information to standard output,
# > by default it is in a simple key-value pairs format.
for line in dbus_conf.strip().split("\n"):
key, _, value = line.partition("=")
os.environ[key] = value
else:
logger.critical("dbus not running and can't be started")
sys.exit(1)


class Opera(Browser):
"""Opera-specific interface.
Expand Down
22 changes: 22 additions & 0 deletions tools/wptrunner/wptrunner/browsers/chrome_android.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,6 @@
import subprocess

from ..config import *
from .base import Browser, ExecutorBrowser, require_arg
from ..webdriver_server import ChromeDriverServer
from ..executors import executor_kwargs as base_executor_kwargs
Expand All @@ -17,6 +20,8 @@
"env_extras": "env_extras",
"env_options": "env_options"}

__wptserve_ports = []


def check_args(**kwargs):
require_arg(kwargs, "webdriver_binary")
Expand All @@ -32,6 +37,10 @@ def executor_kwargs(test_type, server_config, cache_manager, run_info_data,
**kwargs):
from selenium.webdriver import DesiredCapabilities

# Use extend() to modify the global list in place.
__wptserve_ports.extend(server_config['http'] + server_config['https'] +
server_config['ws'] + server_config['wss'])

executor_kwargs = base_executor_kwargs(test_type, server_config,
cache_manager, **kwargs)
executor_kwargs["close_after_done"] = True
Expand Down Expand Up @@ -76,6 +85,17 @@ def __init__(self, logger, binary, webdriver_binary="chromedriver",
binary=webdriver_binary,
args=webdriver_args)

def _adb_run(self, args):
self.logger.info('adb ' + ' '.join(args))
subprocess.check_call(['adb'] + args)

def setup(self):
self._adb_run(['wait-for-device'])
self._adb_run(['forward', '--remove-all'])
self._adb_run(['reverse', '--remove-all'])
for port in __wptserve_ports:
self._adb_run(['reverse', 'tcp:%d' % port, 'tcp:%d' % port])

def start(self, **kwargs):
self.server.start(block=False)

Expand All @@ -93,6 +113,8 @@ def is_alive(self):

def cleanup(self):
self.stop()
self._adb_run(['forward', '--remove-all'])
self._adb_run(['reverse', '--remove-all'])

def executor_browser(self):
return ExecutorBrowser, {"webdriver_url": self.server.url}
1 change: 0 additions & 1 deletion tools/wptrunner/wptrunner/testrunner.py
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,6 @@ def stop(self, force=False):
def cleanup(self):
if self.init_timer is not None:
self.init_timer.cancel()
self.browser.cleanup()

def check_for_crashes(self):
self.browser.check_for_crashes()
Expand Down

0 comments on commit b73f8e1

Please sign in to comment.