From d5ef6e1b05abda1e7b2f5eaf5a4ecafee2f7afa7 Mon Sep 17 00:00:00 2001 From: Rob Sayre Date: Tue, 28 Jun 2011 15:20:31 -0700 Subject: [PATCH 1/5] Add support for Google Chrome. --- test/test.py | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/test/test.py b/test/test.py index 662f2d8e4..f64ffbe27 100644 --- a/test/test.py +++ b/test/test.py @@ -156,8 +156,7 @@ class PDFTestHandler(BaseHTTPRequestHandler): State.done = (0 == State.remaining) -# this just does Firefox for now -class BrowserCommand(): +class BaseBrowserCommand(object): def __init__(self, browserRecord): self.name = browserRecord["name"] self.path = browserRecord["path"] @@ -170,14 +169,9 @@ class BrowserCommand(): if not os.path.exists(self.path): throw("Path to browser '%s' does not exist." % self.path) - def _fixupMacPath(self): - self.path = os.path.join(self.path, "Contents", "MacOS", "firefox-bin") - def setup(self): self.tempDir = tempfile.mkdtemp() self.profileDir = os.path.join(self.tempDir, "profile") - shutil.copytree(os.path.join(DOC_ROOT, "test", "resources", "firefox"), - self.profileDir) def teardown(self): # If the browser is still running, wait up to ten seconds for it to quit @@ -194,6 +188,18 @@ class BrowserCommand(): if self.tempDir is not None and os.path.exists(self.tempDir): shutil.rmtree(self.tempDir) + def start(self, url): + raise Exception("Can't start BaseBrowserCommand") + +class FirefoxBrowserCommand(BaseBrowserCommand): + def _fixupMacPath(self): + self.path = os.path.join(self.path, "Contents", "MacOS", "firefox-bin") + + def setup(self): + super(FirefoxBrowserCommand, self).setup() + shutil.copytree(os.path.join(DOC_ROOT, "test", "resources", "firefox"), + self.profileDir) + def start(self, url): cmds = [self.path] if platform.system() == "Darwin": @@ -201,9 +207,29 @@ class BrowserCommand(): cmds.extend(["-no-remote", "-profile", self.profileDir, url]) self.process = subprocess.Popen(cmds) +class ChromeBrowserCommand(BaseBrowserCommand): + def _fixupMacPath(self): + self.path = os.path.join(self.path, "Contents", "MacOS", "Google Chrome") + + def start(self, url): + cmds = [self.path] + cmds.extend(["--user-data-dir=%s" % self.profileDir, + "--no-first-run", "--disable-sync", url]) + self.process = subprocess.Popen(cmds) + +def makeBrowserCommand(browser): + path = browser["path"].lower() + name = browser["name"].lower() + if name.find("firefox") > -1 or path.find("firefox") > -1: + return FirefoxBrowserCommand(browser) + elif name.find("chrom") > -1 or path.find("chrom") > -1: + return ChromeBrowserCommand(browser) + else: + raise Exception("Unrecognized browser: %s" % browser) + def makeBrowserCommands(browserManifestFile): with open(browserManifestFile) as bmf: - browsers = [BrowserCommand(browser) for browser in json.load(bmf)] + browsers = [makeBrowserCommand(browser) for browser in json.load(bmf)] return browsers def downloadLinkedPDFs(manifestList): From 6e82ccd073a97d1d583cabf830408cf30010a02e Mon Sep 17 00:00:00 2001 From: Rob Sayre Date: Tue, 28 Jun 2011 15:25:46 -0700 Subject: [PATCH 2/5] Add sample browser manifest for Linux. --- .../browser_manifests/browser_manifest.json.linux | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 test/resources/browser_manifests/browser_manifest.json.linux diff --git a/test/resources/browser_manifests/browser_manifest.json.linux b/test/resources/browser_manifests/browser_manifest.json.linux new file mode 100644 index 000000000..a576899b5 --- /dev/null +++ b/test/resources/browser_manifests/browser_manifest.json.linux @@ -0,0 +1,10 @@ +[ + { + "name":"firefox7", + "path":"/home/sayrer/firefoxen/nightly/firefox" + }, + { + "name":"chrome14", + "path":"/opt/google/chrome/chrome" + } +] From 061c998ca20fcc0a6a6ca86f920f7cc6d1746a8c Mon Sep 17 00:00:00 2001 From: Rob Sayre Date: Tue, 28 Jun 2011 16:29:11 -0700 Subject: [PATCH 3/5] Add Google Chrome to Mac example manifest. --- test/resources/browser_manifests/browser_manifest.json.mac | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/test/resources/browser_manifests/browser_manifest.json.mac b/test/resources/browser_manifests/browser_manifest.json.mac index 7c9dda943..5b93ff196 100644 --- a/test/resources/browser_manifests/browser_manifest.json.mac +++ b/test/resources/browser_manifests/browser_manifest.json.mac @@ -6,5 +6,9 @@ { "name":"firefox6", "path":"/Users/sayrer/firefoxen/Aurora.app" + }, + { + "name":"chrome14", + "path":"/Applications/Google Chrome.app" } ] From 42b7c7dfc643c2226411a5a33efc59853feaea7d Mon Sep 17 00:00:00 2001 From: Rob Sayre Date: Tue, 28 Jun 2011 16:29:52 -0700 Subject: [PATCH 4/5] Use AppleScript to close Chrome. --- test/test.py | 23 +++++++++++++++++++++-- test/test_slave.html | 17 +++++++++++++---- 2 files changed, 34 insertions(+), 6 deletions(-) diff --git a/test/test.py b/test/test.py index f64ffbe27..51c93be26 100644 --- a/test/test.py +++ b/test/test.py @@ -2,7 +2,7 @@ import json, platform, os, shutil, sys, subprocess, tempfile, threading, time, u from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer import SocketServer from optparse import OptionParser -from urlparse import urlparse +from urlparse import urlparse, parse_qs USAGE_EXAMPLE = "%prog" @@ -125,13 +125,18 @@ class PDFTestHandler(BaseHTTPRequestHandler): self.sendFile(path, ext) - def do_POST(self): + def do_POST(self): numBytes = int(self.headers['Content-Length']) self.send_response(200) self.send_header('Content-Type', 'text/plain') self.end_headers() + url = urlparse(self.path) + if url.path == "/tellMeToQuit": + tellAppToQuit(url.path, url.query) + return + result = json.loads(self.rfile.read(numBytes)) browser, id, failure, round, page, snapshot = result['browser'], result['id'], result['failure'], result['round'], result['page'], result['snapshot'] taskResults = State.taskResults[browser][id] @@ -156,6 +161,19 @@ class PDFTestHandler(BaseHTTPRequestHandler): State.done = (0 == State.remaining) +# Applescript hack to quit Chrome on Mac +def tellAppToQuit(path, query): + if platform.system() != "Darwin": + return + d = parse_qs(query) + path = d['path'][0] + cmd = """osascript<