commit 13db3d0e2b1898a788e3d52115b9da0d7952af27 Author: Sathyanarayanan Gunasekaran gsathya.ceg@gmail.com Date: Sun Feb 12 21:30:25 2012 +0530
Fix BridgeT(until we have torify working) --- refactor/tests/bridget.py | 69 +++++++++++++++++++++++++++++++++++++-------- 1 files changed, 57 insertions(+), 12 deletions(-)
diff --git a/refactor/tests/bridget.py b/refactor/tests/bridget.py index 10ba144..3e55eb0 100644 --- a/refactor/tests/bridget.py +++ b/refactor/tests/bridget.py @@ -15,22 +15,52 @@ import errno import time import random import re +import glob +import socks from shutil import rmtree from subprocess import Popen, PIPE from datetime import datetime
+import shutil import plugoo import gevent from gevent import socket import fcntl from plugoo import Plugoo, Asset, torify import urllib2 +import httplib
try: from TorCtl import TorCtl except: print "Error TorCtl not installed!"
+class SocksiPyConnection(httplib.HTTPConnection): + def __init__(self, proxytype, proxyaddr, proxyport = None, rdns = True, + username = None, password = None, *args, **kwargs): + self.proxyargs = (proxytype, proxyaddr, proxyport, rdns, username, password) + httplib.HTTPConnection.__init__(self, *args, **kwargs) + + def connect(self): + self.sock = socks.socksocket() + self.sock.setproxy(*self.proxyargs) + if isinstance(self.timeout, float): + self.sock.settimeout(self.timeout) + self.sock.connect((self.host, self.port)) + +class SocksiPyHandler(urllib2.HTTPHandler): + def __init__(self, *args, **kwargs): + self.args = args + self.kw = kwargs + urllib2.HTTPHandler.__init__(self) + + def http_open(self, req): + def build(host, port=None, strict=None, timeout=0): + conn = SocksiPyConnection(*self.args, host=host, port=port, + strict=strict, timeout=timeout, **self.kw) + return conn + return self.do_open(build, req) + class BridgeTAsset(Asset): def __init__(self, file=None): self = Asset.__init__(self, file) @@ -41,8 +71,10 @@ class BridgeT(Plugoo): timeout = 20 # These are the modules that should be torified modules = [urllib2] +
def writetorrc(self, bridge): + self.failures = [] # register Tor to an ephemeral port socksport = random.randint(49152, 65535) controlport = random.randint(49152, 65535) @@ -84,10 +116,11 @@ usemicrodescriptors 0
#Can't use @torify as it doesn't support concurrency right now def download_file(self, socksport): - socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", int(socksport)) - socks.wrapmodule(urllib2) time_start=time.time() - f = urllib2.urlopen('http://check.torproject.org') + + opener = urllib2.build_opener(SocksiPyHandler(socks.PROXY_TYPE_SOCKS5, + '127.0.0.1', int(socksport))) + f = opener.open('http://check.torproject.org') data= f.readlines() print data print len(data) @@ -120,15 +153,9 @@ usemicrodescriptors 0 print "%s bridge works" % bridge print "%s controlport" % controlport c = TorCtl.connect('127.0.0.1', controlport) - print c - #c.set_event_handler(LogHandler()) - #c.set_events(["DEBUG", "INFO", "NOTICE", "WARN", "ERR"]) bridgeinfo = self.parsebridgeinfo(c.get_info('dir/server/all')['dir/server/all']) - #circID = c.extend_circuit(0, ["bridge","serenity"]) bandwidth=self.download_file(socksport) print bandwidth - print c.get_info('stream-status') - #c.signal("HALT") c.close() p.stdout.close() os.unlink(os.path.join(os.getcwd(), torrc)) @@ -159,6 +186,7 @@ usemicrodescriptors 0 socket.wait_read(p.stdout.fileno(), timeout=ct) except: print "%s bridge does not work (%s s timeout)" % (bridge, timeout) + self.failures.append(bridge) p.stdout.close() os.unlink(os.path.join(os.getcwd(), torrc)) rmtree(tordir) @@ -178,21 +206,38 @@ usemicrodescriptors 0
return self.connect(bridge)
+ def clean(self): + for infile in glob.glob('tor_*'): + os.remove(infile) + + def print_failures(self): + if self.failures: + for item in self.failures: + print "Offline : %s" % item + else: + print "All online" + + # For logging TorCtl event msgs + #class LogHandler: + #def msg(self, severity, message): + # print "[%s] %s"%(severity, message) + def run(ooni): """ Run the test """ + config = ooni.config urls = []
bridges = BridgeTAsset(os.path.join(config.main.assetdir, \ - config.tests.tor_bridges)) + config.tests.tor_bridges))
assets = [bridges]
bridget = BridgeT(ooni) ooni.logger.info("Starting bridget test") bridget.run(assets) + bridget.print_failures() + bridget.clean() ooni.logger.info("Testing completed!") - -
tor-commits@lists.torproject.org