| Index: chrome/test/functional/prefetch.py
|
| ===================================================================
|
| --- chrome/test/functional/prefetch.py (revision 261231)
|
| +++ chrome/test/functional/prefetch.py (working copy)
|
| @@ -1,141 +0,0 @@
|
| -#!/usr/bin/env python
|
| -# Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -"""This functional test spawns a web server, and runs chrome to point
|
| -at that web server.
|
| -
|
| -The content served contains prefetch requests, and the tests assert that the
|
| -webserver logs reflect that.
|
| -
|
| -Run like any functional test:
|
| -$ python chrome/test/functional/prefetch.py
|
| -in a repo with a built pyautolib
|
| -
|
| -The import of multiprocessing implies python 2.6 is required
|
| -"""
|
| -
|
| -import os
|
| -import time
|
| -import multiprocessing
|
| -import Queue
|
| -import string
|
| -from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
|
| -
|
| -import pyauto_functional # Must be imported before pyauto
|
| -import pyauto
|
| -
|
| -# this class handles IPC retrieving server "logs" from our integral
|
| -# server. Each test should clear() the log, and then run asserts on
|
| -# the retrieval list.
|
| -
|
| -# at startup, the server puts an int in the queue which is its port,
|
| -# we store that for subsequent tests
|
| -
|
| -class ServerLog:
|
| - def clear(self):
|
| - self.log = {}
|
| -
|
| - def __init__(self,queue):
|
| - self.clear()
|
| - self.port = None
|
| - self.queue = queue
|
| -
|
| - def _readQueue(self):
|
| - try:
|
| - while True:
|
| - queueval = self.queue.get(False)
|
| - if isinstance(queueval,int):
|
| - self.port = queueval
|
| - else:
|
| - self.log[queueval] = True
|
| - except Queue.Empty:
|
| - return
|
| -
|
| - def getPort(self):
|
| - if not self.port:
|
| - self._readQueue()
|
| - return self.port
|
| -
|
| - def isRetrieved(self,path):
|
| - self._readQueue()
|
| - try:
|
| - return self.log[path]
|
| - except KeyError:
|
| - return None
|
| -
|
| -#
|
| -# The next few classes run a simple web server that returns log information
|
| -# via a multiprocessing.Queue.
|
| -#
|
| -class AbstractPrefetchServerHandler(BaseHTTPRequestHandler):
|
| - content = {
|
| - "prefetch-origin.html":
|
| - (200, """<html><head>
|
| -<link rel="prefetch" href="static-prefetch-target.html">
|
| -<script type="text/javascript">
|
| -function changeParagraph()
|
| -{
|
| - var newPara = document.createElement("p");
|
| - newPara.innerHTML =
|
| - "<link rel=\\"prefetch\\" href=\\"dynamic-prefetch-target.html\\">" +
|
| - "<p>This paragraph contains a dynamic link prefetch. " +
|
| - "The target of this prefetch is " +
|
| - "<a href=\\"dynamic-prefetch-target.html\\">this document.</a>";
|
| - var para = document.getElementById("p1");
|
| - document.body.insertBefore(newPara,para);
|
| -}
|
| -</script>
|
| -</head>
|
| -<body onload="changeParagraph()">
|
| -<p id="p1">This is a document that contains a link prefetch. The target of
|
| -that prefetch is <a href="static-prefetch-target.html">this document.</a>
|
| -</body>"""),
|
| - "static-prefetch-target.html":
|
| - (200, "<html><head></head><body>empty</body>"),
|
| - "dynamic-prefetch-target.html":
|
| - (200, "<html><head></head><body>empty</body>")}
|
| -
|
| - def do_GET(self):
|
| - self.queue.put(self.path[1:])
|
| - try:
|
| - response_code, response = self.content[self.path[1:]]
|
| - self.send_response(response_code)
|
| - self.end_headers()
|
| - self.wfile.write(response)
|
| - except KeyError:
|
| - self.send_response(404)
|
| - self.end_headers()
|
| -
|
| -def run_web_server(queue_arg):
|
| - class PrefetchServerHandler(AbstractPrefetchServerHandler):
|
| - queue = queue_arg
|
| - server = HTTPServer(('',0), PrefetchServerHandler)
|
| - queue.put(server.server_port)
|
| - server.serve_forever()
|
| -
|
| -#
|
| -# Here's the test itself
|
| -#
|
| -queue = multiprocessing.Queue()
|
| -server_log = ServerLog(queue)
|
| -
|
| -class PrefetchTest(pyauto.PyUITest):
|
| - """Testcase for Prefetching"""
|
| - def testBasic(self):
|
| - server_log.clear()
|
| - url = "http://localhost:%d/prefetch-origin.html" % server_log.getPort()
|
| - self.NavigateToURL(url)
|
| - self.assertEqual(True, server_log.isRetrieved("prefetch-origin.html"))
|
| - time.sleep(0.1) # required since prefetches occur after onload
|
| - self.assertEqual(True, server_log.isRetrieved(
|
| - "static-prefetch-target.html"))
|
| - self.assertEqual(True, server_log.isRetrieved(
|
| - "dynamic-prefetch-target.html"))
|
| -
|
| -if __name__ == '__main__':
|
| - web_server = multiprocessing.Process(target=run_web_server,args=(queue,))
|
| - web_server.daemon = True
|
| - web_server.start()
|
| - pyauto_functional.Main()
|
|
|