summaryrefslogtreecommitdiff
path: root/python2/httplib2/test/functional
diff options
context:
space:
mode:
authorAugie Fackler <durin42@gmail.com>2010-07-22 00:31:16 -0500
committerAugie Fackler <durin42@gmail.com>2010-07-22 00:31:16 -0500
commit1b081141cd9f4b46d0be635b1da1f6288d15568e (patch)
tree57dbd82018389bf49d22118c383ab1a198bdc18c /python2/httplib2/test/functional
parent043634c0eb463c8ed29968d4bc1cd211aa0f6787 (diff)
downloadhttplib2-1b081141cd9f4b46d0be635b1da1f6288d15568e.tar.gz
tests: add simple functional test for proxies
Depends on tinyproxy - test will automatically skip if it is unavailable.
Diffstat (limited to 'python2/httplib2/test/functional')
-rw-r--r--python2/httplib2/test/functional/test_proxies.py89
1 files changed, 89 insertions, 0 deletions
diff --git a/python2/httplib2/test/functional/test_proxies.py b/python2/httplib2/test/functional/test_proxies.py
new file mode 100644
index 0000000..20d9c8d
--- /dev/null
+++ b/python2/httplib2/test/functional/test_proxies.py
@@ -0,0 +1,89 @@
+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:
+ # sign you've been doing VCS too long: you recognize errno 2 as ENOENT.
+ 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')