Share Gaia assets and adapters, keep private profiles and development documents local, and update both public READMEs.
94 lines
3.4 KiB
Python
Executable file
94 lines
3.4 KiB
Python
Executable file
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
|
|
import json
|
|
import os
|
|
|
|
from marionette import (BaseMarionetteArguments,
|
|
MarionetteTextTestRunner,
|
|
MarionetteTestResult,
|
|
BaseMarionetteTestRunner)
|
|
from marionette.runtests import cli
|
|
import mozlog
|
|
|
|
from gaiatest import __name__
|
|
|
|
from gaiatest import (GaiaTestCase,
|
|
GaiaArguments,
|
|
GaiaTestRunnerMixin,
|
|
GaiaImageCompareArguments)
|
|
from version import __version__
|
|
|
|
|
|
class GaiaTestArguments(BaseMarionetteArguments):
|
|
|
|
def __init__(self, **kwargs):
|
|
BaseMarionetteArguments.__init__(self, **kwargs)
|
|
self.register_argument_container(GaiaArguments())
|
|
self.register_argument_container(GaiaImageCompareArguments())
|
|
|
|
|
|
class GaiaTestResult(MarionetteTestResult):
|
|
pass
|
|
|
|
|
|
class GaiaTextTestRunner(MarionetteTextTestRunner):
|
|
|
|
resultclass = GaiaTestResult
|
|
|
|
|
|
class GaiaTestRunner(BaseMarionetteTestRunner, GaiaTestRunnerMixin):
|
|
|
|
textrunnerclass = GaiaTextTestRunner
|
|
|
|
def __init__(self, **kwargs):
|
|
# if no server root is specified, use the packaged resources
|
|
if not kwargs.get('server_root'):
|
|
kwargs['server_root'] = os.path.abspath(os.path.join(
|
|
os.path.dirname(__file__), 'resources'))
|
|
|
|
def gather_debug(test, status):
|
|
rv = {}
|
|
marionette = test._marionette_weakref()
|
|
|
|
# In the event we're gathering debug without starting a session, skip marionette commands
|
|
if marionette.session is not None:
|
|
try:
|
|
marionette.switch_to_frame()
|
|
marionette.push_permission('settings-read', True)
|
|
marionette.push_permission('settings-api-read', True)
|
|
rv['settings'] = json.dumps(marionette.execute_async_script("""
|
|
var req = window.navigator.mozSettings.createLock().get('*');
|
|
req.onsuccess = function() {
|
|
marionetteScriptFinished(req.result);
|
|
}""", sandbox='system'), sort_keys=True, indent=4, separators=(',', ': '))
|
|
except:
|
|
logger = mozlog.structured.get_default_logger()
|
|
if not logger:
|
|
logger = mozlog.unstructured.getLogger('gaiatest')
|
|
logger.warning('Failed to gather test failure debug.', exc_info=True)
|
|
return rv
|
|
|
|
BaseMarionetteTestRunner.__init__(self, result_callbacks=[gather_debug], **kwargs)
|
|
GaiaTestRunnerMixin.__init__(self, **kwargs)
|
|
self.test_handlers = [GaiaTestCase]
|
|
|
|
def start_httpd(self, need_external_ip):
|
|
super(GaiaTestRunner, self).start_httpd(need_external_ip)
|
|
if self.httpd is not None:
|
|
self.httpd.urlhandlers.append({
|
|
'method': 'GET',
|
|
'path': '.*\.webapp',
|
|
'function': self.webapp_handler})
|
|
|
|
def webapp_handler(self, request):
|
|
with open(os.path.join(self.server_root, request.path[1:]), 'r') as f:
|
|
data = f.read()
|
|
return (200, {
|
|
'Content-type': 'application/x-web-app-manifest+json',
|
|
'Content-Length': len(data)}, data)
|
|
|
|
|
|
def main():
|
|
cli(runner_class=GaiaTestRunner, parser_class=GaiaTestArguments)
|