Index: third_party/httplib2/test/functional/test_proxies.py |
diff --git a/third_party/httplib2/test/functional/test_proxies.py b/third_party/httplib2/test/functional/test_proxies.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0b7880fe52db48637291ebd17e0e585c230f2153 |
--- /dev/null |
+++ b/third_party/httplib2/test/functional/test_proxies.py |
@@ -0,0 +1,88 @@ |
+import unittest |
+import errno |
+import os |
+import signal |
+import subprocess |
+import tempfile |
+ |
+import nose |
+ |
+import httplib2 |
+from httplib2 import socks |
+from httplib2.test import miniserver |
+ |
+tinyproxy_cfg = """ |
+User "%(user)s" |
+Port %(port)s |
+Listen 127.0.0.1 |
+PidFile "%(pidfile)s" |
+LogFile "%(logfile)s" |
+MaxClients 2 |
+StartServers 1 |
+LogLevel Info |
+""" |
+ |
+ |
+class FunctionalProxyHttpTest(unittest.TestCase): |
+ def setUp(self): |
+ if not socks: |
+ raise nose.SkipTest('socks module unavailable') |
+ if not subprocess: |
+ raise nose.SkipTest('subprocess module unavailable') |
+ |
+ # start a short-lived miniserver so we can get a likely port |
+ # for the proxy |
+ self.httpd, self.proxyport = miniserver.start_server( |
+ miniserver.ThisDirHandler) |
+ self.httpd.shutdown() |
+ self.httpd, self.port = miniserver.start_server( |
+ miniserver.ThisDirHandler) |
+ |
+ self.pidfile = tempfile.mktemp() |
+ self.logfile = tempfile.mktemp() |
+ fd, self.conffile = tempfile.mkstemp() |
+ f = os.fdopen(fd, 'w') |
+ our_cfg = tinyproxy_cfg % {'user': os.getlogin(), |
+ 'pidfile': self.pidfile, |
+ 'port': self.proxyport, |
+ 'logfile': self.logfile} |
+ f.write(our_cfg) |
+ f.close() |
+ try: |
+ # TODO use subprocess.check_call when 2.4 is dropped |
+ ret = subprocess.call(['tinyproxy', '-c', self.conffile]) |
+ self.assertEqual(0, ret) |
+ except OSError, e: |
+ if e.errno == errno.ENOENT: |
+ raise nose.SkipTest('tinyproxy not available') |
+ raise |
+ |
+ def tearDown(self): |
+ self.httpd.shutdown() |
+ try: |
+ pid = int(open(self.pidfile).read()) |
+ os.kill(pid, signal.SIGTERM) |
+ except OSError, e: |
+ if e.errno == errno.ESRCH: |
+ print '\n\n\nTinyProxy Failed to start, log follows:' |
+ print open(self.logfile).read() |
+ print 'end tinyproxy log\n\n\n' |
+ raise |
+ map(os.unlink, (self.pidfile, |
+ self.logfile, |
+ self.conffile)) |
+ |
+ def testSimpleProxy(self): |
+ proxy_info = httplib2.ProxyInfo(socks.PROXY_TYPE_HTTP, |
+ 'localhost', self.proxyport) |
+ client = httplib2.Http(proxy_info=proxy_info) |
+ src = 'miniserver.py' |
+ response, body = client.request('http://localhost:%d/%s' % |
+ (self.port, src)) |
+ self.assertEqual(response.status, 200) |
+ self.assertEqual(body, open(os.path.join(miniserver.HERE, src)).read()) |
+ lf = open(self.logfile).read() |
+ expect = ('Established connection to host "127.0.0.1" ' |
+ 'using file descriptor') |
+ self.assertTrue(expect in lf, |
+ 'tinyproxy did not proxy a request for miniserver') |