blob: 822e33f2c668a37623da3146c3ca27c9269ab593 [file] [log] [blame]
# Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
"""RemotePyAuto: Exposes the PyAuto interface over HTTP.
RemotePyAuto launches a local PyAuto instance and exposes the interface to
remote clients over HTTP using XMLRPC. Expects the PyAuto Autotest dependency
to be installed.
"""
import logging, os, sys
from SimpleXMLRPCServer import SimpleXMLRPCServer
import constants, cros_ui, cryptohome, login
# Import the pyauto module
# This can be done only after pyauto_dep dependency has been installed.
pyautolib_dir = os.path.join(
os.path.dirname(__file__), os.pardir, 'deps', 'pyauto_dep',
'test_src', 'chrome', 'test', 'pyautolib')
assert os.path.isdir(pyautolib_dir), '%s missing.' % pyautolib_dir
sys.path.append(pyautolib_dir)
import pyauto
class RemotePyAuto(pyauto.PyUITest):
"""Launches an XMLRPC server to handle remote PyAuto commands."""
def __init__(self, methodName='runTest'):
pyauto.PyUITest.__init__(self, methodName, clear_profile=False)
def ShouldAutoLogin(self):
"""Override default login behavior.
Remote tests do not have the opportunity to override this, so it's
better to not log in by default. Tests that want to log in can
simply call LoginToDefaultAccount().
"""
return False
def testXMLRPCserve(self):
"""Launches the XMLRPC server to provide PyAuto commands."""
rpc_port = 9988
server = SimpleXMLRPCServer(('localhost', rpc_port), allow_none=True)
server.register_introspection_functions()
server.register_instance(self)
logging.info('XMLRPC Server: Serving PyAuto on port %s' % rpc_port)
server.serve_forever()
def LoginToDefaultAccount(self):
"""Login to ChromeOS using $default testing account."""
creds = constants.CREDENTIALS['$default']
username = cryptohome.canonicalize(creds[0])
passwd = creds[1]
self.Login(username, passwd)
assert self.GetLoginInfo()['is_logged_in']
logging.info('Logged in as %s' % username)
def AppendTab(self, url):
"""Wrapper around AppendTab() that takes a url as a string.
This is necessary because RPCXML is unable pass the object
returned by pyauto.GURL().
"""
return pyauto.PyUITest.AppendTab(self, pyauto.GURL(url))
def cleanup(self):
"""Clean up after a PyAuto test.
Replacement for the cleanup normally called at the end of a PyAuto test.
Must be called manually at the end of the server side test.
"""
self.tearDown()
#reset UI
cros_ui.nuke()
if __name__ == '__main__':
pyauto.Main()