| import json |
| import os |
| import ssl |
| import subprocess |
| import urllib2 |
| |
| _CONFIG_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), |
| 'config.test.json') |
| |
| with open(_CONFIG_FILE, 'r') as config_handle: |
| config = json.loads(config_handle.read()) |
| host = config["host"] |
| port = config["ports"]["https"][0] |
| |
| class WPTServer(object): |
| base_url = 'https://%s:%s' % (host, port) |
| |
| def __init__(self, wpt_root): |
| self.wpt_root = wpt_root |
| |
| def start(self): |
| self.devnull = open(os.devnull, 'w') |
| self.proc = subprocess.Popen( |
| [os.path.join(self.wpt_root, 'wpt'), 'serve', '--config=' + _CONFIG_FILE], |
| stdout=self.devnull, |
| stderr=self.devnull, |
| cwd=self.wpt_root) |
| context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) |
| context.verify_mode = ssl.CERT_NONE |
| context.check_hostname = False |
| |
| while True: |
| if self.proc.poll() != None: |
| raise Exception('Could not start wptserve.') |
| |
| try: |
| urllib2.urlopen(self.base_url, timeout=1, context=context) |
| break |
| except urllib2.URLError as e: |
| pass |
| |
| def stop(self): |
| self.proc.kill() |
| self.proc.wait() |
| self.devnull.close() |
| |
| def url(self, abs_path): |
| return self.base_url + '/' + os.path.relpath(abs_path, self.wpt_root) |