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.
107 lines
2.9 KiB
107 lines
2.9 KiB
#!/usr/bin/python2
|
|
|
|
# Copyright (c) 2012 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.
|
|
|
|
"""HTTPlistener unittest."""
|
|
|
|
from __future__ import absolute_import
|
|
from __future__ import division
|
|
from __future__ import print_function
|
|
|
|
import logging, os, sys, threading, unittest
|
|
from six.moves import urllib
|
|
|
|
from autotest_lib.client.cros.httpd import HTTPListener, SecureHTTPListener
|
|
|
|
GET_TEST_PATH = '/get_test'
|
|
|
|
def run_get_test(test_server, url):
|
|
err = 1
|
|
get_done = test_server.add_wait_url(GET_TEST_PATH)
|
|
get_resp = ''
|
|
try:
|
|
get_resp = urllib.request.urlopen(url).read()
|
|
except IOError as e:
|
|
pass
|
|
if not (get_done.is_set() and get_resp):
|
|
print('FAILED')
|
|
else:
|
|
print('PASSED')
|
|
err = 0
|
|
return err
|
|
|
|
|
|
def test():
|
|
test_server = HTTPListener(8000, docroot='/tmp')
|
|
post_done = test_server.add_wait_url("/post_test",
|
|
matchParams={'test': 'passed'})
|
|
def _Spam():
|
|
while not post_done.is_set():
|
|
print('TEST: server running')
|
|
post_done.wait()
|
|
return
|
|
test_server.run()
|
|
t = threading.Thread(target=_Spam).start()
|
|
params = urllib.parse.urlencode({'test': 'passed'})
|
|
err = 1
|
|
|
|
# TODO(seano): This test doesn't seem to pass.
|
|
post_resp = ''
|
|
try:
|
|
post_resp = urllib.request.urlopen('http://localhost:8000/post_test',
|
|
params).read()
|
|
except IOError as e:
|
|
pass
|
|
if not (post_done.is_set() and
|
|
test_server.get_form_entries()['test'] != 'passed'):
|
|
print('FAILED')
|
|
else:
|
|
print('PASSED')
|
|
err = 0
|
|
|
|
|
|
err = run_get_test(test_server, 'http://localhost:8000' + GET_TEST_PATH)
|
|
test_server.stop()
|
|
if err != 0:
|
|
return err
|
|
|
|
creds_path = (os.path.dirname(os.path.realpath( __file__)) +
|
|
'/httpd_unittest_server')
|
|
ssl_port=50000
|
|
test_server = SecureHTTPListener(port=ssl_port,
|
|
cert_path=(creds_path+'.pem'),
|
|
key_path=(creds_path+'.key'))
|
|
test_server.run()
|
|
err = run_get_test(test_server,
|
|
'https://localhost:%d%s' % (ssl_port, GET_TEST_PATH))
|
|
test_server.stop()
|
|
return err
|
|
|
|
|
|
def run_server():
|
|
"""Example method showing how to start a HTTPListener."""
|
|
test_server = HTTPListener(8000, docroot='/tmp')
|
|
latch = test_server.add_wait_url('/quitquitquit')
|
|
test_server.run()
|
|
logging.info('server started')
|
|
while not latch.is_set():
|
|
try:
|
|
latch.wait(1)
|
|
except KeyboardInterrupt:
|
|
sys.exit()
|
|
test_server.stop()
|
|
return
|
|
|
|
|
|
if __name__ == '__main__':
|
|
if len(sys.argv) > 1:
|
|
run_server()
|
|
else:
|
|
test()
|
|
|
|
|
|
if __name__ == '__main__':
|
|
unittest.main()
|