Merge pull request #2625 from brendandahl/threaded-server
Switch to threaded python server for tests.
This commit is contained in:
commit
c9218e5aad
125
test/test.py
125
test/test.py
@ -15,9 +15,10 @@
|
|||||||
import json, platform, os, shutil, sys, subprocess, tempfile, threading
|
import json, platform, os, shutil, sys, subprocess, tempfile, threading
|
||||||
import time, urllib, urllib2, hashlib, re, base64, uuid, socket, errno
|
import time, urllib, urllib2, hashlib, re, base64, uuid, socket, errno
|
||||||
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
|
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
|
||||||
import SocketServer
|
from SocketServer import ThreadingMixIn
|
||||||
from optparse import OptionParser
|
from optparse import OptionParser
|
||||||
from urlparse import urlparse, parse_qs
|
from urlparse import urlparse, parse_qs
|
||||||
|
from threading import Lock
|
||||||
|
|
||||||
USAGE_EXAMPLE = "%prog"
|
USAGE_EXAMPLE = "%prog"
|
||||||
|
|
||||||
@ -35,6 +36,8 @@ BROWSER_TIMEOUT = 60
|
|||||||
|
|
||||||
SERVER_HOST = "localhost"
|
SERVER_HOST = "localhost"
|
||||||
|
|
||||||
|
lock = Lock()
|
||||||
|
|
||||||
class TestOptions(OptionParser):
|
class TestOptions(OptionParser):
|
||||||
def __init__(self, **kwargs):
|
def __init__(self, **kwargs):
|
||||||
OptionParser.__init__(self, **kwargs)
|
OptionParser.__init__(self, **kwargs)
|
||||||
@ -134,8 +137,8 @@ class Result:
|
|||||||
self.failure = failure
|
self.failure = failure
|
||||||
self.page = page
|
self.page = page
|
||||||
|
|
||||||
class TestServer(SocketServer.TCPServer):
|
class TestServer(ThreadingMixIn, HTTPServer):
|
||||||
allow_reuse_address = True
|
pass
|
||||||
|
|
||||||
class TestHandlerBase(BaseHTTPRequestHandler):
|
class TestHandlerBase(BaseHTTPRequestHandler):
|
||||||
# Disable annoying noise by default
|
# Disable annoying noise by default
|
||||||
@ -243,40 +246,41 @@ class UnitTestHandler(TestHandlerBase):
|
|||||||
return
|
return
|
||||||
|
|
||||||
def do_POST(self):
|
def do_POST(self):
|
||||||
url = urlparse(self.path)
|
with lock:
|
||||||
numBytes = int(self.headers['Content-Length'])
|
url = urlparse(self.path)
|
||||||
content = self.rfile.read(numBytes)
|
numBytes = int(self.headers['Content-Length'])
|
||||||
|
content = self.rfile.read(numBytes)
|
||||||
|
|
||||||
# Process special utility requests
|
# Process special utility requests
|
||||||
if url.path == '/ttx':
|
if url.path == '/ttx':
|
||||||
self.translateFont(content)
|
self.translateFont(content)
|
||||||
return
|
return
|
||||||
|
|
||||||
self.send_response(200)
|
self.send_response(200)
|
||||||
self.send_header('Content-Type', 'text/plain')
|
self.send_header('Content-Type', 'text/plain')
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
|
|
||||||
result = json.loads(content)
|
result = json.loads(content)
|
||||||
browser = result['browser']
|
browser = result['browser']
|
||||||
UnitTestState.lastPost[browser] = int(time.time())
|
UnitTestState.lastPost[browser] = int(time.time())
|
||||||
if url.path == "/tellMeToQuit":
|
if url.path == "/tellMeToQuit":
|
||||||
tellAppToQuit(url.path, url.query)
|
tellAppToQuit(url.path, url.query)
|
||||||
UnitTestState.browsersRunning -= 1
|
UnitTestState.browsersRunning -= 1
|
||||||
UnitTestState.lastPost[browser] = None
|
UnitTestState.lastPost[browser] = None
|
||||||
return
|
return
|
||||||
elif url.path == '/info':
|
elif url.path == '/info':
|
||||||
print result['message']
|
print result['message']
|
||||||
elif url.path == '/submit_task_results':
|
elif url.path == '/submit_task_results':
|
||||||
status, description = result['status'], result['description']
|
status, description = result['status'], result['description']
|
||||||
UnitTestState.numRun += 1
|
UnitTestState.numRun += 1
|
||||||
if status == 'TEST-UNEXPECTED-FAIL':
|
if status == 'TEST-UNEXPECTED-FAIL':
|
||||||
UnitTestState.numErrors += 1
|
UnitTestState.numErrors += 1
|
||||||
message = status + ' | ' + description + ' | in ' + browser
|
message = status + ' | ' + description + ' | in ' + browser
|
||||||
if 'error' in result:
|
if 'error' in result:
|
||||||
message += ' | ' + result['error']
|
message += ' | ' + result['error']
|
||||||
print message
|
print message
|
||||||
else:
|
else:
|
||||||
print 'Error: uknown action' + url.path
|
print 'Error: uknown action' + url.path
|
||||||
|
|
||||||
class PDFTestHandler(TestHandlerBase):
|
class PDFTestHandler(TestHandlerBase):
|
||||||
|
|
||||||
@ -310,36 +314,37 @@ class PDFTestHandler(TestHandlerBase):
|
|||||||
|
|
||||||
|
|
||||||
def do_POST(self):
|
def do_POST(self):
|
||||||
numBytes = int(self.headers['Content-Length'])
|
with lock:
|
||||||
|
numBytes = int(self.headers['Content-Length'])
|
||||||
|
|
||||||
self.send_response(200)
|
self.send_response(200)
|
||||||
self.send_header('Content-Type', 'text/plain')
|
self.send_header('Content-Type', 'text/plain')
|
||||||
self.end_headers()
|
self.end_headers()
|
||||||
|
|
||||||
url = urlparse(self.path)
|
url = urlparse(self.path)
|
||||||
if url.path == "/tellMeToQuit":
|
if url.path == "/tellMeToQuit":
|
||||||
tellAppToQuit(url.path, url.query)
|
tellAppToQuit(url.path, url.query)
|
||||||
return
|
return
|
||||||
|
|
||||||
result = json.loads(self.rfile.read(numBytes))
|
result = json.loads(self.rfile.read(numBytes))
|
||||||
browser = result['browser']
|
browser = result['browser']
|
||||||
State.lastPost[browser] = int(time.time())
|
State.lastPost[browser] = int(time.time())
|
||||||
if url.path == "/info":
|
if url.path == "/info":
|
||||||
print result['message']
|
print result['message']
|
||||||
return
|
return
|
||||||
|
|
||||||
id, failure, round, page, snapshot = result['id'], result['failure'], result['round'], result['page'], result['snapshot']
|
id, failure, round, page, snapshot = result['id'], result['failure'], result['round'], result['page'], result['snapshot']
|
||||||
taskResults = State.taskResults[browser][id]
|
taskResults = State.taskResults[browser][id]
|
||||||
taskResults[round].append(Result(snapshot, failure, page))
|
taskResults[round].append(Result(snapshot, failure, page))
|
||||||
if State.saveStats:
|
if State.saveStats:
|
||||||
stat = {
|
stat = {
|
||||||
'browser': browser,
|
'browser': browser,
|
||||||
'pdf': id,
|
'pdf': id,
|
||||||
'page': page,
|
'page': page,
|
||||||
'round': round,
|
'round': round,
|
||||||
'stats': result['stats']
|
'stats': result['stats']
|
||||||
}
|
}
|
||||||
State.stats.append(stat)
|
State.stats.append(stat)
|
||||||
|
|
||||||
def isTaskDone():
|
def isTaskDone():
|
||||||
numPages = result["numPages"]
|
numPages = result["numPages"]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user