#!/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()