You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.7 KiB
54 lines
1.7 KiB
#!/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()
|