#!/usr/bin/python
# 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."""
import logging, os, sys, threading, urllib, unittest
from 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.urlopen(url).read()
except IOError, 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.urlencode({'test': 'passed'})
err = 1
# TODO(seano): This test doesn't seem to pass.
post_resp = ''
try:
post_resp = urllib.urlopen('http://localhost:8000/post_test',
params).read()
except IOError, 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()