1#!/usr/bin/env python
2
3# Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
4# Use of this source code is governed by a BSD-style license that can be
5# found in the LICENSE file.
6
7import BaseHTTPServer
8import urlparse
9
10class TestEndpointHandler(BaseHTTPServer.BaseHTTPRequestHandler):
11    """
12    A web server that is used by cellular tests.  It serves up the following
13    pages:
14            - http://<ip>/generate_204
15              This URL is used by shill's portal detection.
16
17            - http://<ip>/download?size=%d
18              Tests use this URL to download an arbitrary amount of data.
19
20    """
21    GENERATE_204_PATH = '/generate_204'
22    DOWNLOAD_URL_PATH = '/download'
23    SIZE_PARAM = 'size'
24
25    def do_GET(self):
26        """Handles GET requests."""
27        url = urlparse.urlparse(self.path)
28        print 'URL: %s' % url.path
29        if url.path == self.GENERATE_204_PATH:
30            self.send_response(204)
31        elif url.path == self.DOWNLOAD_URL_PATH:
32            parsed_query = urlparse.parse_qs(url.query)
33            if self.SIZE_PARAM not in parsed_query:
34                pass
35            self.send_response(200)
36            self.send_header('Content-type', 'application/octet-stream')
37            self.end_headers()
38            self.wfile.write('0' * int(parsed_query[self.SIZE_PARAM][0]))
39        else:
40            print 'Unsupported URL path: %s' % url.path
41
42
43def main():
44    """Main entry point when this script is run from the command line."""
45    try:
46        server = BaseHTTPServer.HTTPServer(('', 80), TestEndpointHandler)
47        server.serve_forever()
48    except KeyboardInterrupt:
49        server.socket.close()
50
51
52if __name__ == '__main__':
53    main()
54