| #!/usr/bin/env python2 |
| |
| # Copyright (c) 2013 The Chromium OS Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| import BaseHTTPServer |
| import urlparse |
| |
| class TestEndpointHandler(BaseHTTPServer.BaseHTTPRequestHandler): |
| """ |
| A web server that is used by cellular tests. It serves up the following |
| pages: |
| - http://<ip>/generate_204 |
| This URL is used by shill's portal detection. |
| |
| - http://<ip>/download?size=%d |
| Tests use this URL to download an arbitrary amount of data. |
| |
| """ |
| GENERATE_204_PATH = '/generate_204' |
| DOWNLOAD_URL_PATH = '/download' |
| SIZE_PARAM = 'size' |
| |
| def do_GET(self): |
| """Handles GET requests.""" |
| url = urlparse.urlparse(self.path) |
| print 'URL: %s' % url.path |
| if url.path == self.GENERATE_204_PATH: |
| self.send_response(204) |
| elif url.path == self.DOWNLOAD_URL_PATH: |
| parsed_query = urlparse.parse_qs(url.query) |
| if self.SIZE_PARAM not in parsed_query: |
| pass |
| self.send_response(200) |
| self.send_header('Content-type', 'application/octet-stream') |
| self.end_headers() |
| self.wfile.write('0' * int(parsed_query[self.SIZE_PARAM][0])) |
| else: |
| print 'Unsupported URL path: %s' % url.path |
| |
| |
| def main(): |
| """Main entry point when this script is run from the command line.""" |
| try: |
| server = BaseHTTPServer.HTTPServer(('', 80), TestEndpointHandler) |
| server.serve_forever() |
| except KeyboardInterrupt: |
| server.socket.close() |
| |
| |
| if __name__ == '__main__': |
| main() |